الـ feature engineering
الـ model مش أحسن من المعلومات اللي بتدّيهاله. والـ feature engineering (هندسة الميزات) بتحوّل البيانات الخام — الـ timestamps، والـ strings بتاعة الفئات، والنص — لتمثيلات بتخلّي الـ patterns صريحة وينفع تتعلّم.
التمثيل الصح
الـ timestamp "08:32 الاتنين" يقدر يتنبأ بأجرة التاكسي — بس لو استخرجت ساعة الذروة، ويوم الأسبوع، وساعة اليوم.
غيّر المقياس، حوّل، قسّم
- الـ standardization (المعيارة) — متوسط صفر، تباين واحد. الأحسن للـ models اللي قايمة على الـ gradient
- الـ normalization (Min-Max) — مقياس [0,1]. حساس للـ outliers
- الـ log transform — بيعالج التوزيعات المنحرفة يمين (الدخل، الزيارات)
- الـ binning — تحويل مستمر عشان يمسك علاقات مش رتيبة
- الـ models اللي قايمة على الـ trees مش محتاجة scaling
الـ standardization قصاد الـ normalization
طريقتين، لحالتين استخدام:
encoding الفئات
- One-Hot — عمود ثنائي لكل فئة. كويس للـ cardinality الواطية (<20)
- الـ label encoding — رقم صحيح لكل فئة. استخدمه لما يبقى فيه ترتيب أو مع الـ trees
- الـ target encoding — بدّل بمتوسط الـ target. قوي للـ cardinality العالية — بس خلّي بالك من الـ data leakage
- الـ frequency encoding — بدّل بالتكرار. من غير خطر leakage
الـ data leakage في الـ target encoding
الـ target encoding بيستخدم معلومات الـ labels — كل صف "عارف" الـ target بتاعه. ولو اتطبّق بسذاجة قبل التقسيم، بيحصل data leakage (تسرب البيانات): درجات تدريب منفوخة بتنهار على البيانات الحقيقية.
TF-IDF والـ embeddings
TF-IDF بيدّي كل كلمة weight على حسب تكرارها في المستند × ندرتها في كل المستندات. الكلمات المنتشرة بتاخد درجات واطية؛ والكلمات النادرة المفيدة درجات عالية.
الـ word embeddings (Word2Vec, GloVe) بتحط الكلمات اللي معناها شبه بعض قريبة في فضاء الـ vectors. king − man + woman ≈ queen، يعني: «ملك» ناقص «راجل» زائد «ست» تقريبًا «ملكة».
الـ timestamps محتاجة تتفك
- استخرج — الساعة، يوم الأسبوع، الشهر، السنة، أسبوع السنة
- الـ cyclical encoding — sin/cos عشان نص الليل ≈ الساعة 11 بالليل بالأرقام
- الـ lag features — القيمة عند t−1 وt−7 وt−30 (الـ autocorrelation)
- الإحصاءات المتحركة — متوسط 7 أيام، انحراف معياري 30 يوم
- الوقت من ساعة الأحداث — أيام من آخر شرا، ساعات من تسجيل الدخول
اللفّ حوالين الدايرة
الساعة 23 والساعة 0 بينهم ساعة واحدة — بس بالأرقام بعيدين. اعمل encoding بـ sin وcos عشان الـ feature تلفّ حوالين دايرة دورتها P:
featureين، إشارة واحدة
credit score قدره 700 معناه حاجات مختلفة لدخل 10,000 قصاد 200,000 دولار. والـ interaction (الدرجة × الدخل) بيمسك اللي مفيش feature فيهم تقدر عليه لوحدها.
النقص إشارة في حد ذاته
البيانات الناقصة نادرًا ما بتبقى عشوائية. مريض من غير نتيجة تحليل ممكن تعني إن التحليل ماتطلبش — ودي في حد ذاتها معلومة.
الخلاصة الأساسية
- الـ feature engineering كتير بتأثّر أكتر من اختيار الـ model
- اعمل scaling للـ numerical features في الـ models اللي قايمة على الـ gradient؛ الـ trees مش محتاجة ده
- اعمل log transform للتوزيعات المنحرفة يمين (الدخل، الزيارات، التكرارات)
- استخدم الـ target encoding للفئات اللي الـ cardinality بتاعتها عالية — جوه folds الـ cross-validation بس
- اعمل encoding دوري للوقت بـ sin/cos؛ وابني lag features ومتحركة للتنبؤ
- اعمل دايمًا الـ missingness indicator قبل الـ imputation