ML Model Monitoring مُشرح ببساطة (مع مخططات وكود حقيقي)

مراقبة نموذج التعلم الآلي: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 24 درسًا.

ML Model Monitoring مُشرح ببساطة (مع مخططات وكود حقيقي)

دليل مباشر إلى الهدف: ML Model Monitoring مفكك مع مخططات وأمثلة ملموسة وأوامر مجربة. كل شيء من دورة منظمة من 7 فصول — إليك أفضلها.

tl;dr
  • مقدمة مراقبة تعلم الآلة
  • انحراف البيانات
  • انحراف النموذج والأداء
  • أدوات السوق
  • المراقبة في الإنتاج
~$ cat ./parcours.md # ML Model Monitoring — 6 فصول
01
مقدمة مراقبة ML
→ متلازمة النموذج الذي يتعفن→ الركائز الثلاث لمراقبة ML+ 1 دروس أخرى
02
انحراف البيانات
→ المفاهيم وأسباب انحراف البيانات→ الاختبارات الإحصائية : KS, Chi², PSI, Wasserstein+ 1 دروس أخرى
03
انحراف النموذج والأداء
→ انحراف المفهوم مقابل انحراف الأداء→ المقاييس حسب نوع مشكلة ML+ 1 دروس أخرى
04
أدوات السوق
→ جولة في أدوات مراقبة ML→ المكدس مفتوح المصدر الكامل : Evidently + Prometheus + Grafana+ 1 دروس أخرى
05
المراقبة في الإنتاج
→ SLO, SLA وميزانيات الخطأ لـ ML→ التدريب المستمر (CT) باستخدام Airflow+ 2 دروس أخرى
06
المشروع النهائي
→ المشروع النهائي : دفتر الشروط والهندسة المعمارية→ تنفيذ FraudGuard خطوة بخطوة+ 1 دروس أخرى
🏁
المشروع النهائي
→ ستخرج بمشروع ملموس وقابل للعرض

تكوين التنبيهات في Prometheus وSlack وPagerDuty

NOTEالهدف — تحويل مقاييس مراقبة تعلم الآلة إلى تنبيهات قابلة للتنفيذ: كتابة قواعد Prometheus حول الانحراف والتدهور، توجيه الإشعارات عبر Alertmanager إلى Slack وPagerDuty، وتجنب إرهاق التنبيهات.

الأهداف التعليمية

TIPعند نهاية هذه الوحدة
  • كتابة قواعد تنبيه Prometheus (alerting_rules.yml) على مؤشرات أداء تعلم الآلة
  • تكوين Alertmanager للتوجيه إلى Slack وPagerDuty
  • التمييز بين تنبيه warning وتنبيه critical حسب الشدة
  • تطبيق التجميع (group_by) والتثبيط
  • تقليل إرهاق التنبيهات باستخدام for والعتبات والصمت

من المقياس إلى التنبيه: السلسلة الكاملة

مقياس معروض على /metrics لا يفيد إذا لم ينظر إليه أحد في الثالثة صباحًا. سلسلة التنبيه تربط قيمة رقمية بإجراء بشري. تتكون من أربع حلقات.

1. تصدير المقياس

خدمة تعلم الآلة تنشر Gauge وCounter: درجة الانحراف، زمن الاستجابة p95، معدل الخطأ، الدقة المتحركة.

2. تقييم القاعدة

Prometheus يقيم تعبيرات PromQL دوريًا. عندما يبقى التعبير صحيحًا لمدة for، ينتقل التنبيه من pending إلى firing.

3. توجيه التنبيه

Alertmanager يستقبل التنبيهات firing، يجمعها، يزيل التكرارات ويختار المستقبل حسب التصنيفات.

4. إشعار الإنسان

المستقبل يرسل رسالة Slack (warning) أو يشغل PagerDuty مع مناوبة (critical).

NOTEالقاعدة الذهبية: التنبيه الذي ينطلق يجب أن يطلب دائمًا إجراءً. إذا لم يفعل أحد شيئًا عندما يرن، احذفه أو حوّله إلى لوحة داشبورد بسيطة.

كتابة قواعد تنبيه تعلم الآلة في Prometheus

القواعد تعيش في ملف YAML يحمّله Prometheus عبر rule_files. لنموذج في الإنتاج، نراقب ثلاث عائلات: انحراف البيانات، تدهور الأداء، وصحة البنية التحتية (الزمن، الأخطاء).

الرافعةالتأثير
for: 15mيزيل الذروات العابرة، ينبه فقط على الانحرافات المستمرة
التثبيطإذا كانت الـAPI معطلة، لا ننبه أيضًا على الانحراف (سبب جذري واحد)
الصمتأثناء إعادة التدريب المخطط، نوقف تنبيهات الانحراف مؤقتًا
العتبات المعايرةعتبات مستمدة من التاريخ، لا قيم عشوائية منسوخة من درس

الركائز الثلاث لمراقبة تعلم الآلة

الفصل 00 • الدرس 02 • المدة: 45 دقيقة

NOTE🎯 الأهداف
  • تحديد الفئات الثلاث للمقاييس المطلوب مراقبتها
  • فهم المقاييس التي تقيس حسب نوع النموذج
  • وضع خارطة طريق تدريجية للأجهزة
  • معرفة أفضل ممارسات تسجيل تعلم الآلة

1. نظرة عامة: الركائز الثلاث

output
┌─────────────────────────────────────────────────────────────┐
│                  MONITORING ML EN PRODUCTION                  │
└─────────────────────────────────────────────────────────────┘

   ┌────────────────┐  ┌────────────────┐  ┌────────────────┐
   │  PILIER 1       │  │  PILIER 2       │  │  PILIER 3       │
   │  Système        │  │  Données        │  │  Modèle         │
   │  (infra)        │  │  (data + drift) │  │  (performance)  │
   └────────────────┘  └────────────────┘  └────────────────┘
   - Latence            - Distribution X    - Accuracy
   - QPS                - Valeurs manqu.    - F1, AUC
   - CPU/Mémoire        - Outliers          - Calibration
   - Erreurs 5xx        - Drift KS/PSI      - Business KPI

2. الركيزة 1 — مراقبة النظام (البنية التحتية)

هي المراقبة الكلاسيكية للتطبيقات، مطابقة لأي واجهة REST API.

المقياسالأدواتالعتبة النموذجية
زمن الاستجابة p50/p95/p99Prometheus, Datadog, CloudWatchp99 < 500 ms
QPS (Queries Per Second)Prometheus, ALB metricsمتابعة الاتجاه
معدل أخطاء HTTP (5xx)Prometheus, CloudWatch< 0.1 %
CPU / الذاكرةcAdvisor, Datadog< 80 %
استخدام GPU (إن وجد)NVIDIA DCGM, Prometheus< 90 %
Disk I/Onode_exporter
إشباع الصف (Kafka, SQS)Kafka exporter< 10k messages
TIP

خصوصية تعلم الآلة: قد ينفجر زمن الاستجابة على نماذج التعلم العميق بسبب مشاركة GPU السيئة. قم دائمًا بقياس p99، وليس المتوسط فقط.

3. الركيزة 2 — مراقبة البيانات (المدخلات)

3.1 المقاييس حسب الخاصية

نوع الخاصيةالمقاييس
رقميةالحد الأدنى، الحد الأقصى، المتوسط، الانحراف المعياري، الوسيط، الكميات، القيم المفقودة
فئويةتوزيع الفئات، فئات جديدة، NULL
نصمتوسط الطول، المفردات، اللغات المكتشفة
صورةالحجم، النسبة، مخططات RGB
طابع زمنينطاقات التواريخ، التكرار حسب ساعة اليوم

3.2 كشف الانحراف

الاختبار الإحصائينوع الخاصيةمتى يُستخدم
Kolmogorov-Smirnov (KS)رقميةاختبار مستمر مقابل التوزيع المرجعي
Chi-squared (χ²)فئويةمقارنة الترددات
Population Stability Index (PSI)رقمية مُقسَّمةمعيار المالية والبنوك
Wasserstein distanceرقميةأكثر حساسية من KS للتوزيعات الكبيرة
Jensen-Shannon divergenceفئويةمقارنة احتمالية

التفاصيل والكود في الفصل 01 الدرس 02.

3.3 جودة البيانات

4. الركيزة 3 — مراقبة النموذج

4.1 مقاييس التنبؤ (بدون تسميات)

المقياسالوصف
توزيع التنبؤاتنسبة كل فئة في التصنيف
متوسط درجة الثقةمؤشر شك النموذج
إنتروبيا المخرجاتكلما ارتفعت، زاد عدم يقين النموذج
معدل OOD (Out-of-Distribution)نسبة المدخلات خارج توزيع التدريب
معدل الاحتياطي / المجهولنسبة التنبؤات التي لا يعرفها النموذج

4.2 الأداء (مع التسميات)

المشكلةالمقاييس الرئيسية
تصنيف ثنائيAccuracy, Precision, Recall, F1, AUC-ROC, AUC-PR
تصنيف متعدد الفئاتAccuracy, F1-macro, F1-weighted, confusion matrix
انحدارRMSE, MAE, MAPE, R²
ترتيب / توصيةNDCG, MAP, Recall@k, Precision@k
كشف الشذوذPrecision/Recall على الفئة النادرة
توليد (LLM)BLEU, ROUGE, perplexity, تقييم بشري

4.3 المعايرة

النموذج المعاير هو النموذج الذي تتوافق فيه الاحتمالات المتوقعة مع التكرارات الحقيقية. مثال: من 100 تنبؤ بثقة 80٪، يجب أن يكون حوالي 80 صحيحًا.

output
from sklearn.calibration import calibration_curve
import matplotlib.pyplot as plt

prob_pred = model.predict_proba(X_test)[:, 1]
prob_true, prob_pred = calibration_curve(y_test, prob_pred, n_bins=10)

plt.plot([0, 1], [0, 1], 'k--')
plt.plot(prob_pred, prob_true, 'o-')
plt.xlabel('Probabilité prédite')
plt.ylabel('Probabilité observée')
plt.title('Calibration plot')

5. مشكلة "التغذية الراجعة المتأخرة"

غالبًا ما نعرف الحقيقة (التسمية) بعد أيام/أسابيع/شهور من التنبؤ.

حالة الاستخدامتأخير التغذية الراجعة
كشف السبامدقائق قليلة (إبلاغ المستخدم)
التوصيةساعات (نقرة) أو أيام (شراء)
كشف الاحتيال البنكيأيام إلى أسابيع (chargeback)
درجة الائتمان1-3 سنوات (التخلف عن السداد)
التنبؤ بالانسحاب30 إلى 90 يومًا
التشخيص الطبيأسابيع إلى سنوات

مفاهيم وأسباب انحراف البيانات

الفصل 01 • الدرس 01 • المدة: 45 دقيقة

NOTE🎯 الأهداف
  • تعريف انحراف البيانات بدقة (وما ليس كذلك)
  • التمييز بين covariate shift وlabel shift وconcept drift
  • التعرف على الأسباب الشائعة: الموسمية، الأحداث، الأخطاء في المنبع
  • وضع استراتيجية مرجعية (reference dataset)

1. التعريف الرسمي

يحدث انحراف البيانات عندما يختلف التوزيع الإحصائي للبيانات في الإنتاج عن ذلك المستخدم في تدريب النموذج.

output
P_train(X) ≠ P_prod(X)

ou plus généralement :

P_train(X, Y) ≠ P_prod(X, Y)

رياضيًا، نتحدث عن covariate shift عندما يتغير توزيع الخصائص X فقط، بينما تبقى العلاقة P(Y|X) متطابقة.

2. أنواع الـshift الثلاثة

النوعالتعريفمثال
Covariate shiftP(X) يتغير، P(Y|X) ثابتنموذج صحي مدرب على البالغين، في الإنتاج لدينا كبار السن. لكن علاقة الأعراض → المرض تبقى نفسها.
Label shiftP(Y) يتغير، P(X|Y) ثابتكشف السبام: 5٪ سبام في التدريب، 50٪ في الإنتاج (حملة تصيد ضخمة). ملف تعريف السبام مشابه لكن تكراره ينفجر.
Concept driftP(Y|X) يتغيرالتعرف على الاحتيال: المحتالون يتكيفون، لذا نفس الملف = سلوك مختلف. القاعدة تتغير.

3. المخطط البصري

output
Distribution training            Distribution production
       
       *  *                              
      ***                                       *
     *****                                     ***
    *******                                   *****
   *********              vs                  ********
  ***********                                **********
 *************                              *************
───────────────────                ──────────────────────────
        Pas de drift                    DRIFT DÉTECTÉ
                                  (la distribution s'est décalée)

4. الأسباب الرئيسية لانحراف البيانات

4.1 الموسمية

المجالمثال موسمي
التجارة الإلكترونيةالجمعة السوداء (الحجم ×10)، فترة عيد الميلاد
الطقسخصائص درجة الحرارة مختلفة جدًا شتاءً/صيفًا
المرورعطلة نهاية الأسبوع مقابل أيام العمل، ساعات الذروة
السياحةالصيف في نصف الكرة الجنوبي مقابل الشمالي
الطاقةالاستهلاك شتاءً مقابل صيفًا (تكييف/تدفئة)

4.2 الأحداث الخارجية

4.3 تطور الأعمال

4.4 الأخطاء والتغييرات التقنية (غالبًا ما تُنسى)

WARNING⚠️ الأسباب الأكثر خبثًا
  • خط أنابيب ETL في المنبع يغير الترميز (UTF-8 مقابل Latin-1)
  • تحديث واجهة API المصدر يعيد حقولًا إضافية/أقل
  • إصلاح خطأ يغير القيم في المنبع (مثل: تغيير التقريب)
  • تغيير إصدار مكتبة (numpy 1.x مقابل 2.x مختلف)
  • ترحيل قاعدة بيانات يغير الأنواع
  • حقل جديد اختياري: NULL في الإنتاج، لم يكن NULL أبدًا في التدريب

5. مثال عملي في Python — محاكاة انحراف

output
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

np.random.seed(42)
n_train = 5000

train_age = np.random.normal(35, 10, n_train)
train_age = np.clip(train_age, 18, 80)

train_income = train_age * 1000 + np.random.normal(0, 5000, n_train)

prod_age = np.random.normal(50, 12, n_train)
prod_age = np.clip(prod_age, 18, 80)

prod_income = prod_age * 1000 + np.random.normal(0, 5000, n_train)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

axes[0].hist(train_age, bins=30, alpha=0.5, label='Train', color='blue')
axes[0].hist(prod_age, bins=30, alpha=0.5, label='Production', color='red')
axes[0].axvline(train_age.mean(), color='blue', linestyle='--', label=f'Train moy={train_age.mean():.1f}')
axes[0].axvline(prod_age.mean(), color='red', linestyle='--', label=f'Prod moy={prod_age.mean():.1f}')
axes[0].set_title('Distribution de "age" — covariate shift visible')
axes[0].set_xlabel('Age')
axes[0].legend()

axes[1].hist(train_income, bins=30, alpha=0.5, label='Train', color='blue')
axes[1].hist(prod_income, bins=30, alpha=0.5, label='Production', color='red')
axes[1].set_title('Distribution de "income"')
axes[1].set_xlabel('Income')
axes[1].legend()

plt.tight_layout()
plt.savefig('drift_visualization.png')
plt.show()

6. مفهوم "reference dataset"

لكشف الانحراف، يجب المقارنة بـشيء معروف. هذا هو reference dataset.

الخيارالمزاياالعيوب
مجموعة بيانات التدريبعينة مما رآه النموذجقد تكون قديمة (سنة فأكثر)
مجموعة بيانات التحققمستقلة عن التدريبصغيرة، أحيانًا متحيزة
نافذة إنتاج متحركة (الأسبوع الماضي)دائمًا حديثةالانحراف التدريجي غير مكتشف
الشهر السابقتوازن جيدالموسمية مهملة
الشهر السابق N-12 (نفس الشهر)الموسمية محسوبةالتغييرات طويلة الأمد مفقودة
TIP

التوصية: الاحتفاظ بمرجعين — (1) مجموعة بيانات التحقق الأولية للانحراف "الهيكلي" (2) نافذة متحركة لـ30 يومًا للانحراف "السلوكي".

7. دقة الكشف

الدقةمتى تُستخدم
حسب الخاصيةتحديد المتغير الذي ينحرف بدقة
متعددة المتغيرات (مجموعة البيانات كاملة)كشف انحرافات دقيقة (الارتباطات)
حسب القطاع (الفوج، الجغرافيا)كشف انحرافات محلية
حسب نافذة زمنيةالاتجاه الزمني (يوم، أسبوع، شهر)

8. تكرار التحليل

va-plus-loin

يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة ML Model Monitoring (7 فصول، 24 درسًا، تمارين مصححة ومشروع نهائي) تأخذك إلى النهاية.

./acceder-au-cours-complet cours gratuit : Maîtriser Claude Code

الأسئلة الشائعة

كم من الوقت لتعلم ML Model Monitoring؟
مع تقدم منظم (7 فصول، 24 درسًا قصيرًا وعمليًا)، يمكن الوصول إلى مستوى تشغيلي في أسابيع قليلة بمعدل 30 إلى 60 دقيقة يوميًا. المهم هو تطبيق كل مفهوم فورًا.
هل هناك متطلبات مسبقة؟
تكفي أساسيات الحوسبة. إذا كنت تعرف استخدام الطرفية وقراءة كود بسيط، فأنت جاهز.
من أين نبدأ عمليًا؟
أعد إنتاج أوامر هذا المقال، ثم تابع دورة ML Model Monitoring الكاملة: تتسلسل الـ24 درسًا بالترتيب، مع تمارين ومشروع نهائي.

📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجانًا — كود حقيقي، بدون كلام فارغ.