ML Learning Hub
غير مُشرفمتوسط

اكتشاف الشذوذ والقيم المتطرفة

إيجاد نقطة البيانات الواحدة في الألف التي لا تنتمي

أساليب إحصائية (Z-Score وIQR) وخوارزمية (Isolation Forest وLOF وOne-Class SVM) للعثور على الملاحظات الشاذة النادرة في اكتشاف الاحتيال ومراقبة الأنظمة.

35 min
8 مخططات
7 المفاهيم المغطاة

المتطلبات الأساسية

Probability & Statistics
Model Evaluation

المفاهيم المغطاة

Z-ScoreIQRIsolation ForestLOFOne-Class SVMContaminationAUC-PR

الصيغ الرئيسية

Z-Score

انحرافات معيارية عن المتوسط — |z| > 3 يُعدّ شذوذاً بالاتفاق

سياج IQR

مصطلحات توكي — النقاط خارج هذا النطاق شذوذات (IQR = Q3-Q1)

درجة العزل

Isolation Forest: الشذوذات لها أطوال مسار متوسطة أقصر h(x)

درجة LOF

عامل الشذوذ المحلي: نسبة الكثافة المحلية إلى كثافات الجيران

محاكاة تفاعلية

Loading visualization…
🎯

لماذا تهم اكتشاف الشذوذات

motivation

تكلف الاحتيال ببطاقات الائتمان 32 مليار دولار سنوياً. تتسبب هجمات اختراق الشبكة في أضرار بالتريليونات. تكلف أعطال المعدات الصناعية 50 مليار دولار سنوياً. اكتشاف الشذوذات هو خط الدفاع الأول الحاسم في كل هذه الأنظمة. التحدي الأساسي: نادراً ما تمتلك أمثلة مصنّفة للشذوذات (نادرة بطبيعتها)، لذا معظم الاكتشاف غير خاضع للإشراف — تتعلم فقط ما يعنيه 'الطبيعي' ثم تُعلِّم الانحرافات.

في التشخيص الطبي، السلبي الكاذب (إغفال السرطان) كارثي؛ في اكتشاف الاحتيال، الإيجابيات الكاذبة (حجب عملاء حقيقيين) تدمر الإيرادات. اختيار العتبة الصحيحة قرار تجاري.

💡

المنظور الإحصائي

intuition

أبسط حدس: البيانات الطبيعية تتمركز في مناطق عالية الكثافة. الشذوذات تعيش في مناطق منخفضة الكثافة. يُعلِّم Z-Score النقاط أبعد من k انحرافات معيارية من المتوسط — لكنه يفترض توزيعات غاوسية. مصطلحات IQR غير معلمية: تُعلِّم النقاط خارج 1.5×IQR من الأرباع، مما يجعلها متينة للبيانات غير الغاوسية. كلاهما أحادي المتغير — يفحص كل ميزة مستقلةً ويُفوِّت الشذوذات متعددة المتغيرات.

⚖️

الأساليب الإحصائية مقابل الخوارزمية

comparison

Z-Score وIQR سريعان وقابلان للتفسير لكنهما يفترضان استقلالية الميزات وتوزيعها الغاوسي. تبني Isolation Forest أشجاراً عشوائية وتقيس سرعة عزل كل نقطة — تنعزل الشذوذات بسرعة لأنها في مناطق متفرقة. يقارن LOF الكثافة المحلية لكل نقطة بكثافة جيرانها. يجد One-Class SVM الكرة الدنيا المحيطة بالنقاط الطبيعية. يُدرِّب الاكتشاف بالترميز التلقائي شبكةً عصبية على إعادة بناء البيانات الطبيعية — خطأ إعادة بناء عالٍ يُشير إلى شذوذ.

تتوسع Isolation Forest لملايين النقاط وتتعامل جيداً مع البيانات عالية الأبعاد. LOF أفضل للبيانات المجمّعة ذات الكثافات المتغيرة. تتميز شبكات الترميز التلقائي في اكتشاف الشذوذات في الصور والسلاسل الزمنية.

⚙️

خوارزمية غابة العزل

algorithm
1

بناء مجموعة من أشجار العزل (أشجار ثنائية عشوائية)

2

لكل شجرة: اختيار ميزة عشوائية ثم قيمة تقسيم عشوائية

3

التكرار حتى عزل كل نقطة (منفردة في ورقة)

4

درجة الشذوذ = متوسط طول المسار عبر جميع الأشجار

5

مسار قصير → نقطة تنعزل بسرعة → شذوذ

6

النقاط الطبيعية تحتاج تقسيمات أكثر → متوسط مسار أطول

</>

اكتشاف الشذوذات مع scikit-learn

code
python39 lines
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}")
⚠️

مزالق اكتشاف الشذوذات

pitfall

يتحكم معامل contamination في Isolation Forest وLOF مباشرةً في عتبة القرار. إذا عيّنت contamination=0.05 لكن معدل شذوذاتك الفعلي 0.1%، ستُصنِّف خطأً نقاطاً طبيعية كثيرة كشذوذات. دائماً احسِم مع معرفة المجال. الخطأ الثاني: الأبعاد العالية تكسر Z-Score والأساليب القائمة على المسافة. طبّق ACP أولاً عند الميزات > 20. الثالث: انجراف المفهوم — يتغير 'الطبيعي' مع الزمن. أعِد التدريب أو استخدم الاكتشاف الآني للبيانات المتدفقة.

لا تقيّم اكتشاف الشذوذات بالدقة أبداً — عدم توازن الفئات يجعلها بلا معنى. استخدم Precision@k أو AUC-PR (المساحة تحت منحنى الدقة-الاستدعاء) أو F1 عند العتبة المختارة.

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.