الدليل الشامل لهندسة البيانات

 


أهلاً بك. هذا موضوع حيوي جداً، ففي عالم تعلم الآلة (Machine Learning)، جودة البيانات تتفوق دائماً على تعقيد الخوارزمية. كما يُقال في المجال: "Data is the fuel, but Feature Engineering is the engine."

إليك الجزء الأول من رحلتنا في تفصيل هندسة المميزات:


ما هي هندسة المميزات (Feature Engineering)؟

باختصار، هي عملية تحويل البيانات الخام (Raw Data) إلى مميزات (Features) تعبر عن المشكلة بشكل أفضل للخوارزمية، مما يؤدي إلى تحسين دقة النموذج وقوته. هي "الفن" الذي يمزج بين المعرفة بمجال البيانات (Domain Knowledge) والمهارات الرياضية والبرمجية.

مراحل هندسة المميزات

تمر العملية عادةً بخمس محطات رئيسية:

  1. استخراج المميزات (Feature Extraction): استخراج بيانات جديدة من بيانات خام معقدة (مثل استخراج "الساعة" أو "اليوم" من طابع زمني كامل).

  2. تحويل المميزات (Feature Transformation): تغيير شكل البيانات لتناسب الخوارزمية، مثل (Scaling) أو تحويل التوزيعات غير المنتظمة إلى توزيع طبيعي (Normal Distribution).

  3. اختيار المميزات (Feature Selection): تحديد المتغيرات الأكثر تأثيراً وحذف المتغيرات "المزعجة" التي تسبب تشتت للنموذج (Noise).

  4. إنشاء المميزات (Feature Creation): دمج متغيرين أو أكثر لإنشاء متغير جديد له دلالة أقوى (مثل قسمة المساحة على عدد الغرف للحصول على "متوسط مساحة الغرفة").

  5. تكويد المميزات (Feature Encoding): تحويل البيانات النصية أو الفئوية (Categorical) إلى أرقام تفهمها الآلة.


أسئلة جوهرية قبل البدء (The Golden Checklist)

قبل أن تلمس الكود، اسأل نفسك هذه الأسئلة لضمان عدم إضاعة الوقت:

  • ما هو الهدف النهائي للأعمال؟ (هل أحتاج لنموذج دقيق جداً أم نموذج سريع التفسير؟).

  • هل لدي "معرفة بالمجال" (Domain Knowledge) كافية؟ (هل أفهم معنى كل عمود في البيانات؟).

  • ما هو شكل توزيع البيانات؟ (هل هناك قيم شاذة "Outliers" ستخرب عملية الـ Scaling؟).

  • هل هناك تسريب للبيانات (Data Leakage)؟ (هل استخدمت معلومة من "المستقبل" للتنبؤ بالحاضر؟).

  • ما هي تكلفة الحوسبة؟ (هل الميزة الجديدة معقدة لدرجة أنها ستبطئ النظام في بيئة الإنتاج؟).


الفرق بين هندسة المميزات، تنظيف البيانات، ومعالجة البيانات

كثيرون يخلطون بينهم، إليك الجدول التوضيحي للفصل بينهم:

الوجه المقارنمعالجة البيانات (Data Preprocessing)تنظيف البيانات (Data Cleaning)هندسة المميزات (Feature Engineering)
الهدف الأساسيتجهيز البيانات لتكون قابلة للقراءة برمجياً.إزالة الأخطاء والشوائب من البيانات.تعظيم القيمة المعلوماتية وتسهيل عمل الخوارزمية.
الأمثلةتوحيد التنسيقات (Formats)، التعامل مع الـ CSV.التعامل مع القيم المفقودة (Nulls)، حذف السجلات المكررة.إنشاء "تفاعل" بين المتغيرات، التكويد (Encoding).
التوقيتالمرحلة الأولى (البدائية).المرحلة الثانية (الوقائية).المرحلة الثالثة (الإبداعية).

أهم 10 مقارنات في هندسة المميزات

لكي تختار الأداة المناسبة، يجب أن تعرف الفرق بين التقنيات المتشابهة:

  1. Normalization vs. Standardization: (تغيير المدى من 0 لـ 1) مقابل (التحويل لمتوسط 0 وانحراف معياري 1).

  2. One-Hot Encoding vs. Label Encoding: (للفئات غير المرتبة) مقابل (للفئات التي لها ترتيب منطقي).

  3. Filter vs. Wrapper Methods: (اختيار المميزات بناءً على إحصاءات) مقابل (اختيارها بناءً على أداء النموذج).

  4. PCA vs. Feature Selection: (ضغط البيانات لتمثيل جديد) مقابل (حذف الأعمدة غير المهمة مع الإبقاء على شكلها الأصلي).

  5. Imputation (Mean) vs. Imputation (Median): (للبينات المتماثلة) مقابل (للبيانات التي تحتوي على قيم شاذة).

  6. Binning vs. Continuous: (تحويل الرقم لفئات) مقابل (ترك الرقم كما هو).

  7. Over-sampling vs. Under-sampling: (زيادة الأقلية) مقابل (تقليل الأغلبية) في البيانات غير المتوازنة.

  8. Log Transform vs. Box-Cox: (لتحسين التوزيع الملتوي بسيطاً) مقابل (لتحسين التوزيع بشكل أكثر تعقيداً).

  9. Time-lag vs. Rolling Windows: (استخدام قيمة سابقة) مقابل (استخدام متوسط فترة سابقة) في السلاسل الزمنية.

  10. Hard Thresholding vs. Soft Thresholding: طرق مختلفة للتعامل مع الضجيج في البيانات.


هل ترغب في أن ننتقل الآن إلى "السيناريوهات الـ 20 المحتملة وحلولها العبقرية" أم نركز على "أخطاء المبتدئين والمحترفين" أولاً؟

سأدمج لك الآن أهم 20 خطأ (للمبتدئين والمحترفين) مع 20 سيناريو وحلولهم العبقرية في وجبة دسمة وتفصيلية، لضمان تغطية الجانبين العملي والنظري.


أولاً: أهم 20 خطأ يقع فيها المبتدؤون والمحترفون

الخطأالفئةلماذا هو خطير؟
1. Data Leakageالجميعاستخدام معلومة من المستقبل (مثل سعر الإغلاق للتنبؤ بسعر الفتح) تجعل النموذج يبدو مثالياً في الاختبار ويفشل في الواقع.
2. Scaling بعد التقسيممبتدئحساب الـ (Mean) على كامل البيانات قبل تقسيمها لـ Train/Test يؤدي لتسرب معلومات من الـ Test للـ Train.
3. إهمال Domain Knowledgeمحترفالاعتماد فقط على الإحصاء وتجاهل منطق البيزنس (مثل تجاهل مواسم الأعياد في بيانات المبيعات).
4. استخدام One-Hot للفئات الكثيرةمبتدئيؤدي لـ "انفجار الأبعاد" (Curse of Dimensionality) وبطء شديد في النموذج.
5. تجاهل القيم الشاذة (Outliers)مبتدئالقيم الشاذة قد تسحب الـ Standard Scaler وتدمر دقة النماذج الخطية.
6. الإفراط في هندسة المميزاتمحترفبناء آلاف المميزات المعقدة (Over-engineering) مما يؤدي لـ Overfitting يصعب تفسيره.
7. عدم التعامل مع البيانات المفقودةمبتدئحذف السطور التي تحتوي على قيم مفقودة ببساطة قد يحذف معلومات جوهرية أو يسبب Bias.
8. افتراض الخطية دائماًمبتدئاستخدام مميزات خام دون تحويل (Log/Square) بينما العلاقة مع المستهدف غير خطية.
9. نسيان "الوقت" في السلاسل الزمنيةمحترفخلط البيانات عشوائياً (Random Shuffling) في بيانات تعتمد على الزمن يكسر منطق التنبؤ.
10. استخدام Label Encoding للبيانات الاسميةمبتدئيعطي انطباعاً للنموذج أن "أحمر > أخضر" (ترتيب رقمي) بينما هي مجرد ألوان.
11. تجاهل التفاعل بين المميزاتمحترفعدم تجربة (Feature Interaction) مثل "الطول × العرض" قد يضيع معلومة "المساحة".
12. الاعتماد الكلي على PCAمحترفالـ PCA يحسن الأداء لكنه "صندوق أسود" يفقدك القدرة على شرح النموذج للعملاء.
13. عدم تحديث هندسة المميزاتمحترفالبيانات تتغير مع الوقت (Data Drift)، وما كان ميزة قوية العام الماضي قد يصبح عبئاً اليوم.
14. استخدام مميزات ذات 상관ة (Correlation) عاليةمبتدئوجود عمودين يقدمان نفس المعلومة يسبب تشتت للنماذج الخطية (Multicollinearity).
15. إهمال توزيع Target Variableمبتدئالتركيز على المميزات ونسيان أن المستهدف قد يحتاج لـ Log Transform ليصبح Normal.
16. التكويد اليدوي المملمبتدئعدم استخدام Pipeline يجعل الكود غير قابل لإعادة الاستخدام في الإنتاج (Production).
17. تجاهل الـ Unitsمبتدئخلط الكيلومتر بالميل في عمود واحد يدمر دقة التوقعات.
18. ملاحقة الـ Noiseمحترفإنشاء مميزات بناءً على تقلبات عشوائية في البيانات لا تتكرر مستقبلاً.
19. عدم اختبار أهمية المميزاتمحترفالاحتفاظ بـ 200 ميزة بينما 10 فقط هي من تقوم بكل العمل الشاق.
20. ضعف التوثيقمحترفنسيان كيفية اشتقاق الميزة المعقدة بعد شهر من العمل، مما يصعب صيانة الكود.

ثانياً: 20 سيناريو واقعي وحلولهم "العبقرية"

إليك حالات عملية قد تواجهك، وكيف تفكر فيها كخبير:

  1. بيانات عناوين سكنية نصية: بدلاً من الـ Label Encoding، استخدم (Geocoding) لتحويلها لخطوط طول وعرض، ثم احسب "المسافة عن مركز المدينة".

  2. سلسلة زمنية لمبيعات مطعم: لا تكتفِ بالتاريخ، أنشئ ميزة (Is_Weekend) وميزة (Days_Since_Last_Holiday).

  3. بيانات بنكية بها "دخل العميل" مفقود: بدلاً من المتوسط، استخدم (Iterative Imputer) للتنبؤ بالدخل بناءً على "الوظيفة" و"التعليم".

  4. بيانات تجارة إلكترونية بها آلاف المنتجات: استخدم (Target Encoding) بدلاً من One-Hot لتقليل الأبعاد مع الحفاظ على العلاقة بالسعر.

  5. تنبؤ بأسعار العقارات (مساحة البيت): طبق (Log Transform) لأن المساحات الكبيرة جداً نادرة وتسبب انحرافاً في التوزيع.

  6. بيانات مستخدمي تطبيق (عمر الحساب): بدلاً من "تاريخ الانضمام"، احسب "عدد الأيام منذ أول تسجيل دخول" (Age of Account).

  7. صور طبية (الأشعة): استخدم (Histogram Equalization) لتوضيح التباين في الأنسجة قبل إدخالها للنموذج.

  8. بيانات مستشعر حرارة يرسل قراءة كل ثانية: استخدم (Rolling Window Mean) لتقليل الضجيج (Noise) وأخذ متوسط آخر 10 ثوانٍ.

  9. بيانات نصية (تقييمات عملاء): استخدم (TF-IDF) مع (N-grams) لالتقاط معاني مثل "ليس سيئاً" بدلاً من كلمة "سيئ" وحدها.

  10. تصنيف بريد إلكتروني (سبام): أنشئ ميزة تحسب "نسبة الحروف الكبيرة" (Capital Letters Ratio).

  11. بيانات طبية (ضغط الدم): بدلاً من الرقم الخام، حوله لـ (Categorical) (طبيعي، مرتفع، خطير) بناءً على المعايير الطبية.

  12. تنبؤ بترك الموظفين للعمل (Churn): احسب (Salary to Market Ratio) أي مقارنة راتبه بمتوسط الرواتب لنفس وظيفته.

  13. بيانات توصيل طلبات: احسب "ساعة الذروة" (Traffic Index) بناءً على وقت الطلب الفعلي.

  14. ميزات ذات قيم صفرية كثيرة: استخدم (Binary Indicator) (هل القيمة صفر أم لا؟) بجانب القيمة الأصلية.

  15. بيانات طقس: استخدم (Cyclical Encoding) للشهور (Sin/Cos) ليفهم النموذج أن شهر 12 قريب من شهر 1.

  16. بيانات شراء (سلة التسوق): احسب "تنوع الأصناف" (Number of Unique Categories) بدلاً من مجرد عدد القطع.

  17. تنبؤ بأعطال الماكينات: احسب (Time Since Last Maintenance) بدلاً من عمر الماكينة الإجمالي.

  18. بيانات تأمين سيارات: ادمج "عمر السائق" مع "قوة محرك السيارة" لخلق ميزة (Risk Factor).

  19. نص طويل جداً (تغريدات): استخدم (Sentiment Score) كميزة رقمية بدلاً من التعامل مع النص الخام.

  20. بيانات بها "أسماء مدن" عالمية: استخدم (Frequency Encoding) حيث يتم استبدال اسم المدينة بعدد تكرارها في البيانات.


الكود البرمجي (مثال بسيط لتطبيق Scaling و Encoding):

Python
import pandas as pd
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

# Data sample
data = {
    'age': [25, 32, 47, 51],
    'city': ['Cairo', 'Dubai', 'Riyadh', 'Cairo'],
    'salary': [50000, 80000, 120000, 60000]
}
df = pd.DataFrame(data)

# Define transformers for different column types
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), ['age', 'salary']), # English comment: scaling numerical features
        ('cat', OneHotEncoder(), ['city'])           # English comment: encoding categorical features
    ])

# Apply transformations
transformed_data = preprocessor.fit_transform(df)

هل تود أن ننتقل الآن إلى الجزء الخاص بـ "أدوات هندسة المميزات التلقائية (Automated FE)" أم نطبق هذه المفاهيم على مشروع عملي محدد؟

إليك ملخص شامل ومكثف لـ 50 تقنية من تقنيات هندسة المميزات (Feature Engineering)، تشمل التقنيات الأساسية، المتطورة، والهجينة (Hybrid) التي تُستخدم في مسابقات مثل Kaggle لتحقيق أعلى النتائج.

الجدول مقسم لتوضيح دور كل تقنية، تخصصها، متى تكون "الخيار العبقري"، ومتى يجب تجنبها:

جدول الـ 50 تقنية الذهبية في هندسة المميزات

مالتقنيةالتخصصالوظيفة / الدورمتى تُستخدم (الاستخدام الأمثل)متى لا تُستخدم (التحذير)
1StandardizationScalingتحويل البيانات لمتوسط 0 وانحراف 1.مع SVM، وLinear Regression.إذا كانت البيانات بها Outliers كثيرة.
2Min-Max ScalingScalingضغط البيانات في مدى [0, 1].مع الشبكات العصبية (CNN/RNN).إذا كنت تتوقع قيم مستقبلية خارج المدى.
3Log TransformTransformationتقليل أثر القيم الكبيرة جداً.عندما يكون التوزيع "ملتوي" (Skewed).إذا كانت البيانات تحتوي على أرقام سالبة.
4Box-CoxTransformationتحويل التوزيع ليصبح "طبيعياً" (Normal).لتحسين أداء النماذج الخطية بدقة عالية.تتطلب بيانات موجبة فقط وصارمة رياضياً.
5One-Hot EncodingEncodingتحويل الفئات لأعمدة (0 و 1).للفئات القليلة (مثل: ذكر، أنثى).للفئات الكثيرة جداً (High Cardinality).
6Target EncodingEncodingاستبدال الفئة بمتوسط الـ Target لها.في المسابقات للفئات الكثيرة جداً.تسبب Data Leakage إذا لم تُنفذ بحذر.
7Frequency EncodingEncodingاستبدال الفئة بعدد تكرارها.لربط الأهمية بمدى شيوع الفئة.إذا كان التكرار لا علاقة له بالهدف.
8Binary EncodingEncodingتحويل الفئات لأرقام ثنائية.حل وسط بين One-Hot و Label Encoding.أقل دقة من One-Hot في الفئات الصغيرة.
9Mean ImputationImputationتعويض المفقود بالمتوسط.بيانات عددية متماثلة (Symmetric).مع وجود Outliers (استخدم Median بدلاً منه).
10KNN ImputationImputationتعويض المفقود بناءً على الجيران.عندما تكون العلاقة بين الأعمدة قوية.بطيئة جداً في مجموعات البيانات الضخمة.
11MICE ImputationImputationالتنبؤ بالقيمة المفقودة عبر نموذج.أدق طريقة للتعامل مع المفقودات المعقدة.مكلفة جداً حسابياً (Computational Cost).
12PCADim. Reductionضغط الميزات في مكونات أساسية.لتقليل الأبعاد ومنع Overfitting.عندما يكون "تفسير النموذج" مطلوباً (Black Box).
13t-SNEVisualizationتمثيل البيانات المعقدة في بعدين.لرؤية تكتلات البيانات (Clustering).لا تُستخدم كمدخلات للتدريب (فقط للرؤية).
14Polynomial FeaturesCreationخلق تفاعلات (A*B, A²).لالتقاط العلاقات غير الخطية.تزيد عدد الميزات بشكل "انفجاري" مرعب.
15Binning (Discretization)Transformationتحويل الأرقام لفئات (عمر -> فئات).لتقليل أثر الضوضاء في البيانات الرقمية.تفقدك التفاصيل الدقيقة للرقم الأصلي.
16Sin/Cos EncodingCyclicalتحويل الوقت (ساعات/شهور) لدائرة.للبيانات الدورية (الساعة 23 قريبة من 0).للبيانات التي ليس لها طابع دوري.
17Lag FeaturesTime Seriesاستخدام قيم من الماضي (t-1).جوهر التنبؤ في السلاسل الزمنية.إذا كانت البيانات غير مرتبطة زمنياً.
18Rolling MeanTime Seriesمتوسط متحرك لفترة زمنية.لتنعيم البيانات واكتشاف "الاتجاه" (Trend).قد تضيع "القفزات اللحظية" المهمة.
19TF-IDFNLPوزن الكلمات حسب أهميتها.لتصنيف النصوص البسيطة والمتوسطة.لا تفهم "سياق" الكلام (Context).
20Word EmbeddingsNLPتحويل الكلمات لمتجهات (Vectors).لفهم المعاني العميقة (مثل Word2Vec).تحتاج كميات ضخمة من البيانات للتدريب.
21Interaction FeaturesCreationضرب أو قسمة ميزتين (مثل السعر/المساحة).عبقرية لاستخراج منطق العمل (Domain Logic).إذا تمت بشكل عشوائي دون منطق.
22Feature HashingEncodingتحويل النصوص لأرقام عبر Hash.للبيانات الضخمة جداً (Big Data).من المستحيل استرجاع الكلمة الأصلية.
23Weight of EvidenceEncodingقياس قوة فصل الفئة للهدف.شائعة جداً في "Credit Scoring".تعتمد بشكل كامل على الـ Target.
24Isolation ForestOutliersاكتشاف القيم الشاذة عشوائياً.لتنظيف البيانات من "الأخطاء" الغريبة.قد تحذف بيانات "نادرة" ولكنها صحيحة.
25RFESelectionحذف الميزات الأضعف تدريجياً.للحصول على أصغر مجموعة ميزات فعالة.تأخذ وقتاً طويلاً في التنفيذ.
26Permutation ImportanceSelectionتبديل قيم الميزة لقياس أثرها.لمعرفة الميزة "الحقيقية" المؤثرة.قد تتأثر بوجود ميزات مرتبطة ببعضها.
27UMAPDim. Reductionبديل أسرع لـ t-SNE.لضغط الأبعاد مع الحفاظ على الهيكل.لا تزال تقنية "تجريبية" في بعض الأوساط.
28Clustering FeaturesHybridاستخدام رقم "المجموعة" كميزة.لإعطاء النموذج انطباعاً عن "أنواع" البيانات.إذا كانت المجموعات غير مستقرة.
29Quantile TransformTransformationتوزيع البيانات بناءً على الرتب.لجعل البيانات تتبع توزيعاً معيناً غصباً.تشوه العلاقات الخطية بين الميزات.
30Power TransformTransformationمثل Box-Cox ولكن للسالب أيضاً.لتحسين التباين (Variance) في البيانات.معقدة في التفسير الرياضي.
31Deltas (Differences)Creationالفرق بين قيمتين متتاليتين.لاكتشاف معدل التغير (Acceleration).تزيد الحساسية للضوضاء (Noise).
32Aggregated FeaturesCreation(Mean, Sum, Max) حسب فئة معينة.أساسية في مسابقات Kaggle.تزيد من حجم البيانات (Memory).
33Leave-One-Out (LOO)Encodingنوع متطور من Target Encoding.لتقليل الـ Overfitting في التكويد.صعبة في البرمجة اليدوية.
34OHE with Top CategoriesEncodingOHE لأكثر 10 فئات تكراراً فقط.للتعامل مع الفئات الكثيرة بذكاء.تضيع معلومات الفئات النادرة.
35CatBoost EncodingEncodingتكويد يعتمد على ترتيب البيانات.أفضل تكويد للنماذج الشجرية (Trees).مخصص لمكتبة CatBoost غالباً.
36James-Stein EncoderEncodingتكويد إحصائي لتقليل التباين.عندما تكون بعض الفئات لها عينات قليلة.أقل شهرة وصعبة الشرح.
37Cross-Validation ImputeHybridتعويض المفقود داخل كل Fold.لمنع التسريب (Leakage) نهائياً.تزيد وقت التدريب 5 أضعاف.
38SVDDim. Reductionتحليل القيم المفردة.لضغط مصفوفات النصوص الضعيفة (Sparse).تشبه PCA في عيب "الصندوق الأسود".
39Information GainSelectionاختيار الميزة بناءً على نقص العشوائية.سريعة جداً للميزات الكثيرة.لا تلتقط التفاعلات بين الميزات.
40Correlation ThresholdSelectionحذف الميزات المتشابهة جداً (>0.9).لتقليل التكرار (Redundancy).قد تحذف ميزة مهمة عن طريق الخطأ.
41Z-Score ClippingOutliersقص القيم التي تتعدى 3 انحرافات.للتعامل مع القيم المتطرفة بهدوء.قد تضيع معلومات عن حالات حرجة.
42Entity EmbeddingsHybridاستخدام شبكة عصبية لتكويد الفئات.تقنية فائزة في مسابقات الجداول.معقدة جداً وتحتاج GPU.
43Expanding WindowTime Seriesمتوسط يتسع مع الوقت.لمحاكاة تراكم المعرفة عبر الزمن.قد تعطي وزناً كبيراً للماضي البعيد.
44Binary Flag for NullsImputationعمود جديد (1 لو القيمة كانت مفقودة).لأن "فقدان البيانات" بحد ذاته معلومة!تضاعف عدد الأعمدة.
45Image AugmentationVisionخلق صور جديدة (دوران، قص).لزيادة دقة نماذج الصور.إذا كانت التغييرات لا تحدث في الواقع.
46Spectral FeaturesSignalتحويل الإشارات لترددات (FFT).لبيانات الصوت والمستشعرات.تحتاج خلفية رياضية قوية جداً.
47Geographic HashingGeoتحويل الإحداثيات لمناطق (Grids).لتجميع المواقع الجغرافية القريبة.قد تفصل بين نقطتين متجاورتين جداً.
48AutoencodersHybridاستخدام Deep Learning لضغط الميزات.لاستخراج ميزات غير خطية معقدة جداً.صعبة الضبط (Tuning).
49BorutaSelectionمقارنة الميزات بنسخ عشوائية منها.أقوى أداة لاختيار الميزات الحقيقية.بطيئة جداً (تستهلك CPU).
50DenoisingCleaningإضافة نويز ثم حذفه لتقوية النموذج.لجعل النموذج "صلباً" (Robust).قد تجعل النموذج يفشل في التعلم أصلاً.

ملاحظة المحترفين (The Pro Tip):

في المسابقات، الحل "العبقري" لا يكون باستخدام تقنية واحدة، بل بعمل Pipeline هجين. مثلاً: استخدام Target Encoding مع Cross-validation لمنع التسريب، ثم إضافة Aggregated Features (مثل متوسط الشراء لكل مستخدم)، ثم استخدام Boruta لاختيار أفضل 20 ميزة فقط.

بهذا الجدول، لديك الآن خريطة طريق كاملة لأي مسابقة أو مشروع بيانات. هل تحتاج لشرح تفصيلي لكيفية كتابة الكود لأي واحدة من هذه التقنيات الـ 50؟

بما أننا سننتقل من "هندسة المميزات" إلى "هندسة البيانات" (Data Engineering) بشكل أعمق، فنحن الآن نتحدث عن "السباكة" (Plumbing) التي تسبق كل شيء. بدون هندسة بيانات قوية، لن يجد عالم البيانات شيئاً ليعمل عليه.

هندسة البيانات هي عملية تصميم وبناء أنظمة لتجميع، وتخزين، وتحليل البيانات على نطاق واسع (Scale).


المكونات العميقة لهندسة البيانات (The Architecture)

1. تدفق البيانات (Data Ingestion)

هي مرحلة جلب البيانات من مصادرها (قواعد بيانات، مستشعرات، APIs). تنقسم إلى:

  • Batch Processing: نقل البيانات في دفعات (مثلاً كل 24 ساعة).

  • Real-time Streaming: نقل البيانات لحظة وقوعها (مثل معاملات الفيزا أو تحركات البورصة) باستخدام أدوات مثل Apache Kafka.

2. تخزين البيانات (Data Storage)

لم يعد الأمر مجرد جداول Excel؛ المهندس المحترف يختار الوعاء المناسب:

  • Data Warehouse: للبيانات المنظمة (Structured) التي تُستخدم في التقارير (مثل BigQuery).

  • Data Lake: للبيانات الخام (Raw) مهما كان نوعها (صور، نصوص، فيديوهات) مثل (AWS S3).

  • Data Lakehouse: تقنية هجينة تجمع بين مرونة الـ Lake ونظام الـ Warehouse (مثل Databricks).

3. خطوط المعالجة (Data Pipelines / ETL)

هنا يحدث السحر؛ حيث يتم تحويل البيانات عبر ثلاث مراحل:

  • Extract (استخراج): جلب البيانات.

  • Transform (تحويل): تنظيفها وتغيير هيكلها.

  • Load (تحميل): وضعها في المستودع النهائي.

  • ملاحظة: التوجه الحديث هو ELT (التحميل ثم التحويل) للاستفادة من قوة الحوسبة في السحابة.


الأسئلة المحورية (The Strategic Questions)

قبل بناء أي نظام بيانات، يطرح مهندس البيانات الخبير هذه الأسئلة لضمان استدامة النظام:

أولاً: أسئلة حول طبيعة البيانات (The "What")

  1. ما هو حجم البيانات (Volume)؟ هل نتحدث عن جيجابايت أم بيتابايت؟ (يحدد نوع السيرفرات).

  2. ما هي سرعة التدفق (Velocity)؟ هل نحتاج لنتائج في أجزاء من الثانية أم يمكننا الانتظار للصباح؟

  3. ما مدى تنوع البيانات (Variety)؟ هل هي جداول SQL أم ملفات JSON غير منظمة؟

ثانياً: أسئلة حول جودة وموثوقية النظام (The "How")

  1. كيف سنتعامل مع البيانات المتأخرة (Late Data)؟ إذا وصل سجل مبيعات اليوم ولكن بتاريخ الأمس، كيف سيعدل النظام نفسه؟

  2. ما هي استراتيجية "إعادة التشغيل" (Idempotency)؟ إذا فشل خط الأنابيب في المنتصف، هل يمكنني إعادة تشغيله دون تكرار البيانات؟

  3. كيف سنضمن خصوصية البيانات (Data Lineage)؟ من أين أتت هذه المعلومة؟ ومن له حق الوصول إليها؟ (GDPR compliance).

ثالثاً: أسئلة حول التكلفة والمستقبل (The "Why")

  1. ما هي تكلفة الاستعلام (Query Cost)؟ بعض الأنظمة السحابية تحاسبك على كمية البيانات التي تقرأها؛ فهل الكود فعال؟

  2. هل النظام قابل للتوسع (Scalability)؟ إذا زاد عدد المستخدمين 10 أضعاف غداً، هل سينهار النظام؟


الفرق الجوهري في الأدوار (مقارنة سريعة)

وجه المقارنةمهندس البيانات (Data Engineer)عالم البيانات (Data Scientist)
التركيزبناء وتطوير البنية التحتية.استخراج الأنماط والتنبؤ.
الأدواتSpark, Airflow, Kubernetes, SQL.Python, R, Scikit-learn, PyTorch.
المخرج النهائيخط بيانات مستقر ونظيف (Pipeline).نموذج ذكاء اصطناعي (Model).

تقنيات "متقدمة" يجب معرفتها

  • Data Orchestration: استخدام أدوات مثل Apache Airflow لتنظيم المواعيد بين المهام.

  • Data Quality as Code: كتابة اختبارات آلية (مثل مكتبة Great Expectations) للتأكد من أن البيانات لا تحتوي على أخطاء قبل وصولها للمحللين.

  • Data Mesh: تحويل هندسة البيانات من "فريق مركزي واحد" إلى "فرق موزعة" حسب التخصص (المبيعات لها مهندسها، والمخازن لها مهندسها).


الكود البرمجي (مثال بسيط لخط معالجة بيانات باستخدام Python):

Python
import pandas as pd
from sqlalchemy import create_engine

# English comment: Function to extract data from a CSV
def extract_data(file_path):
    return pd.read_csv(file_path)

# English comment: Function to transform data (Cleaning and Aggregation)
def transform_data(df):
    df.dropna(inplace=True) # English comment: Remove missing rows
    df['total_value'] = df['quantity'] * df['price']
    return df

# English comment: Function to load data into a database
def load_data(df, db_uri):
    engine = create_engine(db_uri)
    df.to_sql('sales_fact_table', engine, if_exists='replace')

# English comment: Executing the simple ETL process
# raw_df = extract_data('daily_sales.csv')
# clean_df = transform_data(raw_df)
# load_data(clean_df, 'postgresql://user:pass@localhost:5432/my_db')

هل تود أن نتعمق في "أدوات السحابة" (AWS vs Azure vs GCP) في هندسة البيانات، أم نركز على "نمذجة البيانات" (Data Modeling) مثل Star Schema و Snowflake؟

بما أنك مهتم بالاحترافية في هندسة البيانات، فسننتقل الآن إلى "العمود الفقري" لأي مخزن بيانات ناجح، وهو نمذجة البيانات (Data Modeling)، ثم نقارن بين العمالقة الثلاثة في السحاب (Cloud Providers) لنعرف أين تضع بياناتك.


أولاً: نمذجة البيانات (Data Modeling)

النمذجة هي عملية تصميم هيكل الجداول لضمان السرعة، الدقة، وتوفير التكلفة. في عالم مستودعات البيانات (Data Warehousing)، لدينا مدرستان أساسيتان:

1. مخطط النجمة (Star Schema)

هو التصميم الأكثر شهرة وبساطة. يتكون من:

  • جدول الحقائق (Fact Table): يوضع في المنتصف، ويحتوي على الأرقام القابلة للقياس (مثل: كمية المبيعات، السعر، التاريخ كـ ID).

  • جداول الأبعاد (Dimension Tables): تحيط بالمركز، وتحتوي على التفاصيل الوصفية (مثل: بيانات العميل، تفاصيل المنتج، فرع المتجر).

2. مخطط ندفة الثلج (Snowflake Schema)

هو تطوير للـ Star Schema ولكن بشكل أكثر تنظيماً (Normalized). هنا يتم تقسيم جداول الأبعاد إلى جداول أصغر لتقليل التكرار.

  • متى يُستخدم؟ عندما يكون توفير مساحة التخزين أولوية قصوى.

  • عيبه: الاستعلامات (Queries) تصبح أبطأ بسبب كثرة الـ Joins.


ثانياً: صراع العمالقة (Cloud Data Engineering Stack)

عندما تبني مشروعاً في 2026، الخيار الأذكى هو استخدام أدوات السحاب الجاهزة. إليك مقارنة بين أفضل 10 أدوات موزعة على الثلاثة الكبار:

المهمةAWS (الأكثر انتشاراً)Google Cloud (GCP) (الأذكى في التحليل)Microsoft Azure (الأفضل للشركات الكبرى)
تخزين الخام (Data Lake)S3Google Cloud StorageAzure Data Lake Storage (ADLS)
مستودع البيانات (Warehouse)RedshiftBigQuery (الأقوى إحصائياً)Azure Synapse
معالجة البيانات الضخمةEMR (Spark/Hadoop)DataprocAzure HDInsight
سير العمل (Orchestration)MWAA (Managed Airflow)Cloud ComposerAzure Data Factory
التحليل اللحظي (Streaming)KinesisPub/SubEvent Hubs

ثالثاً: الأسئلة المحورية في نمذجة البيانات

عند تصميم الجداول، يجب أن تجيب على هذه الأسئلة بدقة:

  1. ما هو مستوى التفاصيل (Grain)؟ هل كل سطر في الجدول يمثل "عملية بيع واحدة" أم "إجمالي مبيعات اليوم"؟ تحديد الـ Grain هو أهم خطوة.

  2. كيف سنتعامل مع الأبعاد المتغيرة ببطء (SCD)؟ إذا قام عميل بتغيير عنوان سكنه، هل نمسح القديم؟ أم نحفظ التاريخين؟ (هذا يسمى Slowly Changing Dimensions).

  3. هل نحتاج لـ Partitioning؟ تقسيم الجداول الضخمة بناءً على "التاريخ" مثلاً يجعل البحث عن مبيعات شهر واحد أسرع بـ 100 مرة.

  4. ما هي استراتيجية الفهرسة (Indexing)؟ كيف نضمن أن الاستعلام (Query) ينتهي في ثوانٍ وليس دقائق؟


رابعاً: مثال عملي (SQL لمخطط النجمة)

إليك كيف يبدو الكود البرمجي لإنشاء جدول حقائق بسيط يربط بين الأبعاد:

SQL
/* English comment: Creating a Fact Table for Sales */
CREATE TABLE Fact_Sales (
    sale_id INT PRIMARY KEY,
    product_key INT,    -- English comment: Foreign key to Dim_Product
    customer_key INT,   -- English comment: Foreign key to Dim_Customer
    time_key INT,       -- English comment: Foreign key to Dim_Time
    quantity_sold INT,
    total_amount DECIMAL(10, 2),
    
    /* English comment: Linking to dimensions */
    FOREIGN KEY (product_key) REFERENCES Dim_Product(product_key),
    FOREIGN KEY (customer_key) REFERENCES Dim_Customer(customer_key)
);

الخاتمة: الطريق للاحتراف

هندسة البيانات ليست مجرد "نقل بيانات"، بل هي ضمان أن البيانات متاحة (Available)، موثوقة (Reliable)، وقابلة للتوسع (Scalable).

هل تود أن نطبق الآن "مشروعاً كاملاً" (End-to-End) يجمع بين هندسة البيانات وهندسة المميزات، لنرى كيف يخدم المهندسُ العالمَ في النهاية؟

Comments