مثلاً: العمر = السنة الحالية - سنة الميلاد. أو BMI = الوزن / مربع الطول.
مهم جداً في Forecasting والأنظمة المالية.
هاض الإشي بساعد الموديلات البسيطة (زي الخطي) إنها تفهم علاقات معقدة وغير خطية.
* ملاحظة: الموديلات الشجرية (Random Forest) ما بفرق معها السكيلنج.
بنشوف الارتباط (Correlation) بين المتغيرات والهدف. سريعة ومفيدة بالبداية.
بنجرب الموديل على مجموعات مختلفة من المتغيرات وبنشوف مين أحسن (زي RFE). دقيقة بس بدها وقت.
الموديل نفسه وهو بيتدرب بقرر مين المهم (زي Lasso أو Tree Importance).
عشان هيك الـ Feature Engineering هو المنقذ من هاي اللعنة.
الداتا ساينست "البروفيسور" هو اللي بقعد مع أهل الخبرة بالمجال عشان يفهم شو لازم يستخرج.
| الموديل | مدى الحاجة للـ FE |
|---|---|
| Linear & Logistic Regression | عالية جداً (بدو كل إشي جاهز) |
| KNN & SVM | عالية (بهمهم السكيلنج والتحويل) |
| Random Forest & Trees | متوسطة (بفهموا لحالهم بس بساعدهم) |
| Deep Learning / NN | أقل (هم أصلاً بستخرجوا ميزات) |
الحل؟ دائماً اعمل Split للداتا وبعدين اعمل FE على الـ Train فقط!
افهم الداتا والبزنس صح قبل ما تلمس الكود. قعدة مع أهل الخبرة بتوفر عليك تعب أيام.
نظف الداتا، عالج القيم المفقودة، وظبط الـ Outliers. هاي مرحلة "تجهيز الأرضية".
افصل داتا الاختبار (Test) وحطها في "خزنة". هاي أهم خطوة عشان تمنع الغش (Leakage).
هون الشغل الثقيل (Encoding, Scaling). لازم تتعلم هاض الإشي بس من داتا التدريب وتطبقه عمياني عالباقي.
مش كل إشي طلعته مفيد. نقي أحسن الميزات اللي بتعطي "أثر" حقيقي للموديل وشيل الـ Noise.
هسا الموديل ببلش يتعلم من الأنماط اللي جهزناها بكل الخطوات اللي قبل.
امتحن الموديل امتحان تجريبي متكرر عشان تتأكد إنه "فهمان" مش بس "باصم" داتا التدريب.
آخر خطوة: بنطلع الداتا اللي بالخزنة (Test) وبنشوف الموديل كيف بشتغل على داتا حقيقية عمره ما شافها.
# إعداد خطة المعالجة للمتغيرات الرقمية
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
])
# إعداد خطة المعالجة للمتغيرات الكلامية
categorical_transformer = Pipeline(steps=[
('onehot', OneHotEncoder(handle_unknown='ignore'))
])
# دمج العمليات في محول واحد
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)
])
# بناء الموديل النهائي
model = Pipeline(steps=[
('preprocessor', preprocessor),
('regressor', LinearRegression())
])
هيك بتضمن إن كل الـ FE والـ Scaling بصير "صح" ومعموله Clean code.