اكتشاف الشذوذ والقيم المتطرفة
“إيجاد نقطة البيانات الواحدة في الألف التي لا تنتمي”
أساليب إحصائية (Z-Score وIQR) وخوارزمية (Isolation Forest وLOF وOne-Class SVM) للعثور على الملاحظات الشاذة النادرة في اكتشاف الاحتيال ومراقبة الأنظمة.
المتطلبات الأساسية
المفاهيم المغطاة
∑الصيغ الرئيسية
Z-Score
انحرافات معيارية عن المتوسط — |z| > 3 يُعدّ شذوذاً بالاتفاق
سياج IQR
مصطلحات توكي — النقاط خارج هذا النطاق شذوذات (IQR = Q3-Q1)
درجة العزل
Isolation Forest: الشذوذات لها أطوال مسار متوسطة أقصر h(x)
درجة LOF
عامل الشذوذ المحلي: نسبة الكثافة المحلية إلى كثافات الجيران
▶محاكاة تفاعلية
لماذا تهم اكتشاف الشذوذات
تكلف الاحتيال ببطاقات الائتمان 32 مليار دولار سنوياً. تتسبب هجمات اختراق الشبكة في أضرار بالتريليونات. تكلف أعطال المعدات الصناعية 50 مليار دولار سنوياً. اكتشاف الشذوذات هو خط الدفاع الأول الحاسم في كل هذه الأنظمة. التحدي الأساسي: نادراً ما تمتلك أمثلة مصنّفة للشذوذات (نادرة بطبيعتها)، لذا معظم الاكتشاف غير خاضع للإشراف — تتعلم فقط ما يعنيه 'الطبيعي' ثم تُعلِّم الانحرافات.
في التشخيص الطبي، السلبي الكاذب (إغفال السرطان) كارثي؛ في اكتشاف الاحتيال، الإيجابيات الكاذبة (حجب عملاء حقيقيين) تدمر الإيرادات. اختيار العتبة الصحيحة قرار تجاري.
المنظور الإحصائي
أبسط حدس: البيانات الطبيعية تتمركز في مناطق عالية الكثافة. الشذوذات تعيش في مناطق منخفضة الكثافة. يُعلِّم Z-Score النقاط أبعد من k انحرافات معيارية من المتوسط — لكنه يفترض توزيعات غاوسية. مصطلحات IQR غير معلمية: تُعلِّم النقاط خارج 1.5×IQR من الأرباع، مما يجعلها متينة للبيانات غير الغاوسية. كلاهما أحادي المتغير — يفحص كل ميزة مستقلةً ويُفوِّت الشذوذات متعددة المتغيرات.
الأساليب الإحصائية مقابل الخوارزمية
Z-Score وIQR سريعان وقابلان للتفسير لكنهما يفترضان استقلالية الميزات وتوزيعها الغاوسي. تبني Isolation Forest أشجاراً عشوائية وتقيس سرعة عزل كل نقطة — تنعزل الشذوذات بسرعة لأنها في مناطق متفرقة. يقارن LOF الكثافة المحلية لكل نقطة بكثافة جيرانها. يجد One-Class SVM الكرة الدنيا المحيطة بالنقاط الطبيعية. يُدرِّب الاكتشاف بالترميز التلقائي شبكةً عصبية على إعادة بناء البيانات الطبيعية — خطأ إعادة بناء عالٍ يُشير إلى شذوذ.
تتوسع Isolation Forest لملايين النقاط وتتعامل جيداً مع البيانات عالية الأبعاد. LOF أفضل للبيانات المجمّعة ذات الكثافات المتغيرة. تتميز شبكات الترميز التلقائي في اكتشاف الشذوذات في الصور والسلاسل الزمنية.
خوارزمية غابة العزل
بناء مجموعة من أشجار العزل (أشجار ثنائية عشوائية)
لكل شجرة: اختيار ميزة عشوائية ثم قيمة تقسيم عشوائية
التكرار حتى عزل كل نقطة (منفردة في ورقة)
درجة الشذوذ = متوسط طول المسار عبر جميع الأشجار
مسار قصير → نقطة تنعزل بسرعة → شذوذ
النقاط الطبيعية تحتاج تقسيمات أكثر → متوسط مسار أطول
اكتشاف الشذوذات مع scikit-learn
from sklearn.ensemble import IsolationForest from sklearn.neighbors import LocalOutlierFactor from sklearn.svm import OneClassSVM from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification import numpy as np class="tok-comment"># ── Sample data (class="tok-num">5% anomalies) ───────────────────────────────────────── X_normal, _ = make_classification(n_samples=class="tok-num">475, n_features=class="tok-num">10, random_state=class="tok-num">42) X_anom = np.random.randn(class="tok-num">25, class="tok-num">10) * class="tok-num">4 class="tok-comment"># class="tok-num">25 clear outliers X = np.vstack([X_normal, X_anom]) y_true = np.array([class="tok-num">0]*class="tok-num">475 + [class="tok-num">1]*class="tok-num">25) class="tok-comment"># class="tok-num">0=normal, class="tok-num">1=anomaly X_scaled = StandardScaler().fit_transform(X) class="tok-comment"># ── Isolation Forest ─────────────────────────────────────────────── iso = IsolationForest( n_estimators=class="tok-num">200, contamination=class="tok-num">0.05, class="tok-comment"># expected fraction of outliers random_state=class="tok-num">42 ) labels_iso = iso.fit_predict(X_scaled) class="tok-comment"># class="tok-num">1=inlier, -class="tok-num">1=outlier scores_iso = iso.score_samples(X_scaled) class="tok-comment"># lower = more anomalous class="tok-comment"># ── Local Outlier Factor ──────────────────────────────────────────── lof = LocalOutlierFactor(n_neighbors=class="tok-num">20, contamination=class="tok-num">0.05) labels_lof = lof.fit_predict(X_scaled) class="tok-comment"># ── Z-Score (univariate, per-feature) ────────────────────────────── from scipy import stats z_scores = np.abs(stats.zscore(X)) outlier_mask = (z_scores > class="tok-num">3).any(axis=class="tok-num">1) class="tok-comment"># ── Evaluate with known labels ───────────────────────────────────── from sklearn.metrics import roc_auc_score, average_precision_score class="tok-comment"># Convert: class="tok-num">1=inlier → class="tok-num">0=normal, -class="tok-num">1=outlier → class="tok-num">1=anomaly y_pred = (labels_iso == -class="tok-num">1).astype(int) print(fclass="tok-str">"AUC-ROC: {roc_auc_score(y_true, -scores_iso):.3f}") print(fclass="tok-str">"AP: {average_precision_score(y_true, -scores_iso):.3f}")
مزالق اكتشاف الشذوذات
يتحكم معامل contamination في Isolation Forest وLOF مباشرةً في عتبة القرار. إذا عيّنت contamination=0.05 لكن معدل شذوذاتك الفعلي 0.1%، ستُصنِّف خطأً نقاطاً طبيعية كثيرة كشذوذات. دائماً احسِم مع معرفة المجال. الخطأ الثاني: الأبعاد العالية تكسر Z-Score والأساليب القائمة على المسافة. طبّق ACP أولاً عند الميزات > 20. الثالث: انجراف المفهوم — يتغير 'الطبيعي' مع الزمن. أعِد التدريب أو استخدم الاكتشاف الآني للبيانات المتدفقة.
لا تقيّم اكتشاف الشذوذات بالدقة أبداً — عدم توازن الفئات يجعلها بلا معنى. استخدم Precision@k أو AUC-PR (المساحة تحت منحنى الدقة-الاستدعاء) أو F1 عند العتبة المختارة.
?اختبار المعرفة
يتم حفظ التقدم في متصفحك — لا حاجة لحساب.