العودة للوحة التحكم
QudahWay / DS / FE

QudahWay DS

Feature Engineering | هندسة الميزات واستخراجها

What is Feature Engineering? Slide 02
Slide 2
شو يعني هندسة متغيرات؟ 🤔
بكل بساطة، هي عملية تصميم وتحويل واستخراج المتغيرات اللي بتساعد الموديل إنه يتعلم الأنماط بشكل أفضل.
التعريف البسيط: هي العملية الممنهجة لتصميم وتحويل واختيار المتغيرات (Inputs) عشان نحسن أداء الموديل وقدرته على التعميم.
التعريف الأكاديمي: تحويل البيانات الخام لتمثيلات بتسهل فهمها وبتحسن الاستقرار والدقة للموديل.
Why Feature Engineering Matters Slide 03
Slide 3
ليش الـ FE هو "الملك"؟ 👑
الموديلات الذكية ما بتفهم "سياق" الكلام أو الصور، هي بس بتفهم أرقام وتمثيلات رياضية.
قاعدة ذهبية: أداء الموديل بعتمد 100% على جودة المتغيرات اللي بتعطيه إياها. "داتا تعبانة = موديل تعبان" حتى لو كان أقوى خوارزمية بالعالم.
بقلل الـ Noise وبقوي الإشارة الحقيقية بالداتا.
بزيد من سهولة الفصل بين الفئات (Separability).
بسرّع عملية تدريب الموديل وبخليه يفهم أسرع.
FE vs Data Preprocessing Slide 04
Slide 4
الفرق بين التحضير والهندسة 🛠️
كثير ناس بخربطوا بينهم، بس الفرق جوهري:
Data Preprocessing: هدفه "تنظيف" الداتا وتصليح الأغلاط (زي التعامل مع القيم المفقودة). هاض إشي إلزامي وما بضبط بدونه.
Feature Engineering: هدفه "تحسين" تمثيل الداتا واستخراج أنماط جديدة. هاض إشي استراتيجي وبدك فيه "فن" وشطارة.
Types of Feature Engineering Slide 05
Slide 5
أنواع هندسة المتغيرات 📂
الموضوع مش بس استخراج متغيرات، هو بحر كبير بضم:
Creation: صنع متغيرات جديدة.
Transformation: تحويل الأرقام (Log, Sqrt).
Encoding: تحويل الكلام لأرقام.
Selection: اختيار أهم المتغيرات.
Feature Creation Slide 06
Slide 6
صناعة المتغيرات: الإبداع من الموجود 💡
هون بنطلع متغيرات جديدة من القديمة عشان نكشف علاقات خفية.

مثلاً: العمر = السنة الحالية - سنة الميلاد. أو BMI = الوزن / مربع الطول.

# Feature creation
df["age"] = df["current_year"] - df["birth_year"]
df["total_price"] = df["quantity"] * df["unit_price"]
Feature Transformation Slide 07
Slide 7
تحويل البيانات: تعديل المنحنيات 📏
كثير موديلات بتفترض إن الداتا "طبيعية" (Normal Distribution). إذا الداتا مشحوطة لجهة، بنحولها:
  • Log Transformation: للداتا اللي فيها شحطة قوية لليمين (زي الرواتب).
  • Square Root: للداتا المتوسطة الشحطة.
# Log transform
df["salary_log"] = np.log(df["salary"])
Transformation Details Slide 08
Slide 8
متى نستخدم كل تحويل؟ 🔍
كل تحويل له "مهمة" خاصة فيه حسب طبيعة الداتا:
Log: بقلل الـ Right Skew القوي (مفيد للأسعار).
Box-Cox: للمساعدة في جعل الداتا Normalize.
Polynomial: بضيف "لفّات" للداتا عشان الموديل الخطي يشوف العلاقات غير الخطية.
Feature Extraction Slide 09
Slide 9
استخراج المتغيرات: ضغط المعلومات 📦
لما يكون عندك داتا كثيرة ومعقدة، بنحاول نضغطها في "أبعاد" أقل بس بتعطينا كل المعنى المهم.
PCA: أشهر طريقة لتقليل الأبعاد مع الحفاظ على التباين.
Embeddings: تحويل النصوص لمتجهات رقمية "ذكية" (BERT, WordVec).
Time-Based Feature Engineering Slide 10
Slide 10
الزمن سرّ الداتا ⏳
داتا الوقت والمكان هي من أقوى أنواع الداتا إذا عرفت "تهندسها" صح.
استخرج العبر: اليوم، الشهر، الربع، يوم الأسبوع، وهل هو عطلة ولا لأ؟
Lag Features: بنشوف مبيعات اليوم مقارنة بمبيعات "مبارح" (X t-1) أو الأسبوع الماضي.

مهم جداً في Forecasting والأنظمة المالية.

Feature Interaction & Non-Linearity Slide 11
Slide 11
التفاعل بين المتغيرات: لمّا 1+1 يساوي 3! 🤝
أحياناً المتغير لحاله ما بفيد كثير، بس لما "تخبطه" بمتغير ثاني بتطلع المعلومة الصح.
مثال: الدخل لحاله ما بحكيلك عن الرفاهية، والتعليم لحاله مش كافي. بس الدخل × سنوات التعليم ممكن يعطيك مؤشر أقوى بكثير.

هاض الإشي بساعد الموديلات البسيطة (زي الخطي) إنها تفهم علاقات معقدة وغير خطية.

# Creating interaction feature
df["income_edu"] = df["income"] * df["education_years"]
Feature Encoding Slide 12
Slide 12
التشفير الذكي: ما وراء الـ One-Hot 🔢
لما يكون عندك متغيرات كلامية (Categorical) فيها خيارات كثيرة، الـ One-Hot Encoding ممكن ينفخ الداتا عالفاضي.
Target Encoding: بتبدل الكلمة بمتوسط الـ Target لهي الفئة. (قوي جداً بس بدو حذر من الـ Leakage).
Frequency Encoding: بتبدل الكلمة بعدد مرات تكرارها.
Binary Encoding: حل وسط وممتاز لما يكون عندك آلاف الأصناف.
Feature Scaling in FE Context Slide 13
Slide 13
الميزان: ليش لازم توحد المقاييس؟ ⚖️
تخيل موديل عنده "الطول بالسنتيمتر" و "الراتب بالدينار". الراتب أرقامه بالآلاف والطول بالعشرات.. الموديل رح يفكّر الراتب أهم لأنه "أكبر".
Gradient-based models: (زي الـ NN والـ Logistic) بحتاجوا سكيلنج عشان يوصلوا للحل بسرعة.
Distance-based: (زي KNN و SVM) بضيعوا بدونه تماماً.

* ملاحظة: الموديلات الشجرية (Random Forest) ما بفرق معها السكيلنج.

Feature Selection Slide 14
Slide 14
عملية الاختيار: مش كل اللي بتعرفه "لازم" تحكيه 🎯
مش كثرة المتغيرات هي اللي بتعمل موديل قوي، أحياناً "الزائد أخو الناقص".
1

Filter Methods

بنشوف الارتباط (Correlation) بين المتغيرات والهدف. سريعة ومفيدة بالبداية.

2

Wrapper Methods

بنجرب الموديل على مجموعات مختلفة من المتغيرات وبنشوف مين أحسن (زي RFE). دقيقة بس بدها وقت.

3

Embedded Methods

الموديل نفسه وهو بيتدرب بقرر مين المهم (زي Lasso أو Tree Importance).

Curse of Dimensionality Slide 15
Slide 15
لعنة الأبعاد: لمّا الداتا تضيع في الفضاء! 🌌
كل ما زدت عدد المتغيرات، الداتا بتصير "بعيدة" عن بعضها بالفراغ، وبصير الموديل صعب يلاقي أنماط حقيقية:
بزيد الـ Overfitting (الموديل ببلش يبصم بصم).
وقت التدريب بطول كثير.
المسافات بين النقاط بتصير مش مفهومة للموديل.

عشان هيك الـ Feature Engineering هو المنقذ من هاي اللعنة.

Domain-Driven Feature Engineering Slide 16
Slide 16
خبرة المجال: السر اللي ما بعرفه الكود 🧠
هندسة المتغيرات مش بس رياضيات، هي "فهم" للبزنس اللي بتشتغل فيه.
في المالية: بنطلع المتوسطات المتحركة (Moving Averages).
في الصحة: بنطلع مؤشرات حيوية ونسب طبية معروفة (Ratios).
في الـ NLP: بنشوف مشاعر الكلام (Sentiment Polarity).

الداتا ساينست "البروفيسور" هو اللي بقعد مع أهل الخبرة بالمجال عشان يفهم شو لازم يستخرج.

Feature Engineering & Model Type Slide 17
Slide 17
كل موديل إله "مزاج" خاص 🎭
حاجة الموديل لهندسة المتغيرات بتختلف حسب تعقيده ووظيفته:
الموديل مدى الحاجة للـ FE
Linear & Logistic Regression عالية جداً (بدو كل إشي جاهز)
KNN & SVM عالية (بهمهم السكيلنج والتحويل)
Random Forest & Trees متوسطة (بفهموا لحالهم بس بساعدهم)
Deep Learning / NN أقل (هم أصلاً بستخرجوا ميزات)
Feature Leakage Slide 18
Slide 18
تسريب المتغيرات: لمّا الموديل "يغش"! 🚫
أكبر غلطة ممكن تعملها! الـ Leakage هو إنك تعطي الموديل معلومة ما رح تكون موجودة وقت الاستخدام الحقيقي.
مثال: بدك تتوقع مبيعات بكرة، وتقوم تعطي الموديل معلومة "عدد الزباين ببكرة"! هيك الموديل رح يعطيك دقة 100% وهو "غاش".

الحل؟ دائماً اعمل Split للداتا وبعدين اعمل FE على الـ Train فقط!

Feature Engineering Workflow Slide 19
Slide 19
خارطة الطريق لهندسة الميزات (الـ Workflow الصح) 🗺️
عشان شغلك يكون "تكتيك" وما تضيع، هاي هي الخطوات الـ 8 اللي بالصورة بالتفصيل:
1

Data Understanding

افهم الداتا والبزنس صح قبل ما تلمس الكود. قعدة مع أهل الخبرة بتوفر عليك تعب أيام.

2

Data Preprocessing

نظف الداتا، عالج القيم المفقودة، وظبط الـ Outliers. هاي مرحلة "تجهيز الأرضية".

3

Train-Test Split

افصل داتا الاختبار (Test) وحطها في "خزنة". هاي أهم خطوة عشان تمنع الغش (Leakage).

4

Feature Engineering (train only)

هون الشغل الثقيل (Encoding, Scaling). لازم تتعلم هاض الإشي بس من داتا التدريب وتطبقه عمياني عالباقي.

5

Feature Selection

مش كل إشي طلعته مفيد. نقي أحسن الميزات اللي بتعطي "أثر" حقيقي للموديل وشيل الـ Noise.

6

Model Training

هسا الموديل ببلش يتعلم من الأنماط اللي جهزناها بكل الخطوات اللي قبل.

7

Cross-Validation

امتحن الموديل امتحان تجريبي متكرر عشان تتأكد إنه "فهمان" مش بس "باصم" داتا التدريب.

8

Final Evaluation

آخر خطوة: بنطلع الداتا اللي بالخزنة (Test) وبنشوف الموديل كيف بشتغل على داتا حقيقية عمره ما شافها.

Evaluation of Engineered Features Slide 20
Slide 20
التقييم: كيف بنعرف إنه تعبنا جاب نتيجة؟ 📈
مش كل ميزة عملتها هي ميزة "كويسة". لازم نتأكد:
Cross-validation: بنشوف هل الدقة زادت فعلياً؟
Feature Importance: بنشوف شو وزن هاي الميزة عند الموديل.
SHAP Values: لتعمق أكثر في فهم تأثير كل متغير.
Common Mistakes Slide 21
Slide 21
أغلاط بنقع فيها كلنا! ⚠️
عشان تكون "محترف"، انتبه من هاي الفخاخ:
Over-engineering: تعمل مية ميزة ومعادلة معقدة عالفاضي وتخلي الموديل يضيع.
Multicollinearity: تخلي متغيرين بحكوا نفس الإشي بالضبط موجودين (زي الطول بالمتر والسم).
Ignoring Impact: تضيف ميزات بدون ما تقيس هل فعلاً حسنت الموديل ولا بس زادت حجم الداتا.
Coding the Pipeline Slide 22
Slide 22
التطبيق العملي: الـ Pipeline هو الحل! 💻
عشان شغلك يكون منظم وما تقع بغلط الـ Leakage، أحسن طريقة هي الـ Pipeline في Scikit-Learn.
# إعداد خطة المعالجة للمتغيرات الرقمية
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.

Key Takeaways Slide 23
Slide 23
الخلاصة: شو تعلمنا؟ 🎓
هندسة المتغيرات هي قلب الداتا ساينس:
  • هي عملية تكرارية (Iterative).
  • تعتمد 100% على فهمك للمجال (Domain-driven).
  • الموديلات العظيمة بتنبني على ميزات عظيمة، مش بس خوارزميات معقدة.