ML Model Monitoring مُشرح ببساطة (مع مخططات وكود حقيقي)
مراقبة نموذج التعلم الآلي: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة تتكون من 24 درسًا.
دليل مباشر إلى الهدف: ML Model Monitoring مفكك مع مخططات وأمثلة ملموسة وأوامر مجربة. كل شيء من دورة منظمة من 7 فصول — إليك أفضلها.
- مقدمة مراقبة تعلم الآلة
- انحراف البيانات
- انحراف النموذج والأداء
- أدوات السوق
- المراقبة في الإنتاج
تكوين التنبيهات في Prometheus وSlack وPagerDuty
الأهداف التعليمية
- كتابة قواعد تنبيه 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).
كتابة قواعد تنبيه تعلم الآلة في Prometheus
القواعد تعيش في ملف YAML يحمّله Prometheus عبر rule_files. لنموذج في الإنتاج، نراقب ثلاث عائلات: انحراف البيانات، تدهور الأداء، وصحة البنية التحتية (الزمن، الأخطاء).
| الرافعة | التأثير |
|---|---|
for: 15m | يزيل الذروات العابرة، ينبه فقط على الانحرافات المستمرة |
| التثبيط | إذا كانت الـAPI معطلة، لا ننبه أيضًا على الانحراف (سبب جذري واحد) |
| الصمت | أثناء إعادة التدريب المخطط، نوقف تنبيهات الانحراف مؤقتًا |
| العتبات المعايرة | عتبات مستمدة من التاريخ، لا قيم عشوائية منسوخة من درس |
الركائز الثلاث لمراقبة تعلم الآلة
الفصل 00 • الدرس 02 • المدة: 45 دقيقة
- تحديد الفئات الثلاث للمقاييس المطلوب مراقبتها
- فهم المقاييس التي تقيس حسب نوع النموذج
- وضع خارطة طريق تدريجية للأجهزة
- معرفة أفضل ممارسات تسجيل تعلم الآلة
1. نظرة عامة: الركائز الثلاث
┌─────────────────────────────────────────────────────────────┐ │ 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/p99 | Prometheus, Datadog, CloudWatch | p99 < 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/O | node_exporter | — |
| إشباع الصف (Kafka, SQS) | Kafka exporter | < 10k messages |
خصوصية تعلم الآلة: قد ينفجر زمن الاستجابة على نماذج التعلم العميق بسبب مشاركة 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 صحيحًا.
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 دقيقة
- تعريف انحراف البيانات بدقة (وما ليس كذلك)
- التمييز بين covariate shift وlabel shift وconcept drift
- التعرف على الأسباب الشائعة: الموسمية، الأحداث، الأخطاء في المنبع
- وضع استراتيجية مرجعية (reference dataset)
1. التعريف الرسمي
يحدث انحراف البيانات عندما يختلف التوزيع الإحصائي للبيانات في الإنتاج عن ذلك المستخدم في تدريب النموذج.
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 shift | P(X) يتغير، P(Y|X) ثابت | نموذج صحي مدرب على البالغين، في الإنتاج لدينا كبار السن. لكن علاقة الأعراض → المرض تبقى نفسها. |
| Label shift | P(Y) يتغير، P(X|Y) ثابت | كشف السبام: 5٪ سبام في التدريب، 50٪ في الإنتاج (حملة تصيد ضخمة). ملف تعريف السبام مشابه لكن تكراره ينفجر. |
| Concept drift | P(Y|X) يتغير | التعرف على الاحتيال: المحتالون يتكيفون، لذا نفس الملف = سلوك مختلف. القاعدة تتغير. |
3. المخطط البصري
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 الأخطاء والتغييرات التقنية (غالبًا ما تُنسى)
- خط أنابيب ETL في المنبع يغير الترميز (UTF-8 مقابل Latin-1)
- تحديث واجهة API المصدر يعيد حقولًا إضافية/أقل
- إصلاح خطأ يغير القيم في المنبع (مثل: تغيير التقريب)
- تغيير إصدار مكتبة (numpy 1.x مقابل 2.x مختلف)
- ترحيل قاعدة بيانات يغير الأنواع
- حقل جديد اختياري: NULL في الإنتاج، لم يكن NULL أبدًا في التدريب
5. مثال عملي في Python — محاكاة انحراف
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 (نفس الشهر) | الموسمية محسوبة | التغييرات طويلة الأمد مفقودة |
التوصية: الاحتفاظ بمرجعين — (1) مجموعة بيانات التحقق الأولية للانحراف "الهيكلي" (2) نافذة متحركة لـ30 يومًا للانحراف "السلوكي".
7. دقة الكشف
| الدقة | متى تُستخدم |
|---|---|
| حسب الخاصية | تحديد المتغير الذي ينحرف بدقة |
| متعددة المتغيرات (مجموعة البيانات كاملة) | كشف انحرافات دقيقة (الارتباطات) |
| حسب القطاع (الفوج، الجغرافيا) | كشف انحرافات محلية |
| حسب نافذة زمنية | الاتجاه الزمني (يوم، أسبوع، شهر) |
8. تكرار التحليل
يغطي هذا المقال المقتطفات الأكثر فائدة — الدورة الكاملة ML Model Monitoring (7 فصول، 24 درسًا، تمارين مصححة ومشروع نهائي) تأخذك إلى النهاية.
./acceder-au-cours-complet cours gratuit : Maîtriser Claude Codeالأسئلة الشائعة
كم من الوقت لتعلم ML Model Monitoring؟
هل هناك متطلبات مسبقة؟
من أين نبدأ عمليًا؟
📬 هل تريد تلقي هذا النوع من الأدلة كل أسبوع؟ اشترك مجانًا — كود حقيقي، بدون كلام فارغ.