أذكرها وكأنها البارحة. كانت الساعة قد تجاوزت الثانية صباحاً، وأنا وفريق العمل في الشركة الناشئة التي كنت أعمل بها نحدق في الشاشات بعيون ذابلة وقلوب مثقلة. رائحة القهوة الباردة تملأ الغرفة، ومؤشرات الخسائر تتراقص أمامنا كشبح يسخر من محاولاتنا اليائسة. كنا نواجه نوعاً جديداً من الاحتيال، “احتيال صامت”.
لم تكن هناك معاملات ضخمة تصرخ “أنا عملية احتيال!”. بل كانت آلاف العمليات الصغيرة، مبالغ لا تثير الشكوك، موزعة على آلاف الحسابات، تتم في أوقات غير متوقعة. كانت مثل نزيف داخلي صامت يستنزف مواردنا ببطء ولكن بثبات. كلما وضعنا قاعدة جديدة في نظامنا التقليدي (if-then-else)، كان المحتالون يجدون ثغرة جديدة. كانوا دائماً يسبقوننا بخطوة، وكنا نشعر بأننا “ملحوقين” في سباق خاسر.
في تلك الليلة، وبينما كنت أقلّب في الأكواد والبيانات، لمعت في ذهني فكرة. قلت للفريق بصوت مرهق: “يا جماعة، إحنا بنلاحق أثرهم، لازم نسبقهم ونعرف حركتهم الجاي. لازم نعلّم النظام يميز إيش هو الطبيعي، وأي إشي غير هيك يكون هو المشبوه”. كانت تلك هي اللحظة التي قررنا فيها أن نغوص في عالم نماذج كشف الحالات الشاذة (Anomaly Detection). لم نكن نعلم حينها أن هذا القرار سينقذنا من جحيم الخسائر الصامتة.
ما هو كشف الحالات الشاذة (Anomaly Detection) وليش هو “المنقذ”؟
بكل بساطة، كشف الحالات الشاذة هو تقنية في تعلم الآلة هدفها تحديد الأنماط أو الأحداث أو الملاحظات التي لا تتوافق مع السلوك المتوقع أو “الطبيعي”. زي ما بنحكي بالعامية، هو “اللي بيلقط الإشي النشاز” في مجموعة بيانات ضخمة.
النظام التقليدي لكشف الاحتيال يعتمد على قواعد محددة مسبقاً. مثلاً:
إذا كانت المعاملة أكبر من 1000 دولار وتمت من بلد لم يزره العميل من قبل، فقم بحظرها.
هذا النهج جيد، لكن مشكلته أنه جامد. ماذا لو كانت عملية الاحتيال بـ 999 دولاراً؟ أو ماذا لو كانت عبارة عن 100 عملية بقيمة 10 دولارات لكل منها في دقيقة واحدة؟ القواعد التقليدية ستفشل هنا. المحتالون أذكى من أن يقعوا في فخاخ معروفة.
هنا يأتي دور نماذج كشف الشذوذ. بدلاً من البحث عن أنماط احتيال “معروفة”، هي تتعلم كيف يبدو السلوك “الطبيعي” للمستخدم. أي شيء يخرج عن هذا الإطار الطبيعي، حتى لو لم نره من قبل، يتم اعتباره حالة شاذة ومحتملة للاحتيال. هذا يعني أننا انتقلنا من رد الفعل إلى الفعل الاستباقي.
أنواع الحالات الشاذة: مش كل “الغريب” زي بعضه!
لفهم قوة هذه النماذج، علينا أن نعرف أن “الشذوذ” له أنواع مختلفة، وكل نوع يتطلب طريقة مختلفة للتعامل معه.
1. الحالات الشاذة النقطية (Point Anomalies)
هذا هو النوع الأبسط. هو عبارة عن نقطة بيانات واحدة تختلف بشكل كبير عن بقية البيانات. مثلاً، عميل متوسط إنفاقه اليومي 50 دولاراً، وفجأة يقوم بعملية شراء بقيمة 7000 دولار. هذه النقطة بحد ذاتها تصرخ بأن هناك شيئاً غريباً.
2. الحالات الشاذة السياقية (Contextual Anomalies)
هنا تصبح الأمور أكثر إثارة. القيمة بحد ذاتها قد تكون طبيعية، لكنها شاذة في سياقها. تخيل شخصاً يشتري معطفاً شتوياً ثقيلاً في عز الصيف في مدينة خليجية حارة! المعاملة نفسها (شراء معطف) طبيعية، لكن السياق (الزمان والمكان) يجعلها شاذة.
في عالم الـ Fintech، قد يكون هذا عميلاً يقوم بسلسلة من عمليات السحب النقدي الساعة 3 فجراً، مع العلم أن سجلّه يوضح أنه لا يستخدم بطاقته أبداً بعد منتصف الليل. المبلغ قد يكون صغيراً، لكن التوقيت هو ما يجعله شاذاً.
3. الحالات الشاذة الجماعية (Collective Anomalies)
هذا هو النوع الذي كان يسبب لنا الصداع في قصتي. هنا، كل نقطة بيانات على حدة تبدو طبيعية تماماً، لكن تجمعها معاً يشكل نمطاً شاذاً. عمليات الاحتيال الصامتة التي واجهناها كانت من هذا النوع: سلسلة من المعاملات الصغيرة جداً (مثلاً 1 دولار) تتم بسرعة كبيرة من بطاقة واحدة إلى عدة تجار مختلفين عبر الإنترنت. كل معاملة وحدها لا تثير أي شكوك، لكن تسلسلها وتكرارها هو الحالة الشاذة.
كيف “بفكر” نموذج كشف الحالات الشاذة؟ (الخوارزميات والتقنيات)
هناك العديد من الخوارزميات، ولكن دعوني أشارككم بعضاً من أكثرها فعالية وعملية في مجالنا:
خوارزمية غابة العزل (Isolation Forest)
هذه الخوارزمية هي المفضلة لدي شخصياً للبدء، وهي فعالة بشكل مدهش. فكرتها الأساسية عبقرية وبسيطة: الحالات الشاذة أسهل في عزلها عن بقية النقاط.
تخيل أن لديك مجموعة من البيوت المتلاصقة في حي مزدحم (البيانات الطبيعية)، وبيت واحد منعزل على قمة جبل (حالة شاذة). لو طلبت منك أن ترسم خطوطاً عشوائية لتقسيم المنطقة حتى تعزل بيتاً واحداً فقط، ستجد أنك تحتاج لعدد قليل جداً من الخطوط لعزل البيت المنفرد على الجبل، بينما ستحتاج لعدد كبير جداً من الخطوط لعزل بيت واحد في الحي المزدحم.
خوارزمية Isolation Forest تفعل ذلك بالضبط. هي تبني “أشجار قرار” عشوائية، والبيانات التي يتم عزلها في عدد قليل من الخطوات (أو التقسيمات) تعتبر حالات شاذة.
مثال بالكود (Python)
لنجرب مثالاً عملياً بسيطاً باستخدام مكتبة scikit-learn الشهيرة. تخيل أن لدينا بيانات معاملات مالية (المبلغ، والوقت من اليوم).
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
# لنصنع بعض البيانات للتجربة
# 200 معاملة طبيعية (مبالغ صغيرة في أوقات متفرقة)
X_train = np.random.rand(200, 2) * [100, 24] # [amount, hour_of_day]
# لنضف بعض الحالات الشاذة
anomalies = np.array([
[500, 2], # مبلغ كبير جداً في وقت مبكر
[10, 3], # مبلغ صغير لكن في وقت غير معتاد (3 الفجر)
[12, 3.1], # حالة شاذة جماعية (قريبة من السابقة)
[8, 3.2],
[600, 22] # مبلغ كبير في وقت متأخر
])
# دمج البيانات الطبيعية والشاذة
X_full = np.concatenate([X_train, anomalies])
# تهيئة وتدريب نموذج غابة العزل
# contamination تعني النسبة المتوقعة من الحالات الشاذة في البيانات
clf = IsolationForest(n_estimators=100, contamination=0.05, random_state=42)
clf.fit(X_full)
# التنبؤ بالحالات الشاذة
# سيعطينا 1 للبيانات الطبيعية و -1 للشاذة
y_pred = clf.predict(X_full)
# عرض النتائج
plt.figure(figsize=(10, 6))
plt.scatter(X_full[:, 0], X_full[:, 1], c=y_pred, cmap='coolwarm')
plt.title("كشف الحالات الشاذة باستخدام Isolation Forest")
plt.xlabel("مبلغ المعاملة")
plt.ylabel("ساعة التنفيذ (0-24)")
plt.show()
في الرسم البياني الناتج، ستلاحظ أن النموذج نجح في تحديد النقاط الحمراء (التي تمثل -1) كحالات شاذة، بينما بقيت النقاط الزرقاء (1) كبيانات طبيعية.
خوارزميات التجميع (Clustering-Based) مثل DBSCAN
فكرة أخرى جميلة. هذه الخوارزميات تعمل على تجميع النقاط المتقاربة معاً في “عناقيد” (clusters). الفكرة هي أن البيانات الطبيعية ستشكل عناقيد كثيفة، بينما الحالات الشاذة ستكون نقاطاً وحيدة لا تنتمي لأي عنقود. خوارزمية مثل DBSCAN (Density-Based Spatial Clustering of Applications with Noise) ممتازة لهذا الغرض لأنها لا تتطلب تحديد عدد العناقيد مسبقاً، وتتعامل مع النقاط التي لا تنتمي لأي مجموعة على أنها “ضوضاء” (noise) أو حالات شاذة.
نصائح من “الختيار” (أبو عمر) لتطبيق ناجح
بناء النموذج هو الجزء السهل نسبياً. التحدي الحقيقي يكمن في تطبيقه بشكل صحيح في بيئة الإنتاج. من خبرتي، هذه بعض النصائح العملية:
- البيانات هي النفط والذهب: هذه المقولة ليست مجرد كليشيه. جودة بياناتك هي كل شيء. قبل أن تكتب سطراً واحداً من كود تعلم الآلة، تأكد من أن بياناتك نظيفة، وذات صلة، وتمثل السلوك الذي تريد نمذجته. “Garbage in, garbage out” كما يقولون.
- لا تثق بالنموذج ثقة عمياء: النموذج ليس ساحراً. هو أداة إحصائية قوية. في البداية، استخدم النموذج كـ “نظام إنذار مبكر”. عندما يكتشف حالة شاذة، لا تحظر المعاملة مباشرة. اعرضها على محلل بشري ليؤكدها أو ينفيها. هذا النهج (Human-in-the-loop) لا يمنع فقط النتائج الإيجابية الخاطئة (false positives) المزعجة للعملاء، بل يوفر أيضاً بيانات مصنفة يمكنك استخدامها لإعادة تدريب النموذج وتحسينه.
- النموذج ليس شيئاً ثابتاً: المحتالون يطورون أساليبهم باستمرار. النموذج الذي كان فعالاً اليوم قد يصبح قديماً بعد ستة أشهر. يجب أن تكون لديك آلية لمراقبة أداء النموذج باستمرار (Model Monitoring) وإعادة تدريبه على بيانات جديدة بشكل دوري. “المحتالين ما بناموا، وإحنا كمان لازم نضل صاحيين”.
- ابدأ بسيطاً ثم تعقّد: لا تقفز مباشرة إلى نماذج الشبكات العصبية العميقة المعقدة. ابدأ بنموذج بسيط ومفهوم مثل Isolation Forest. أثبت قيمته، وافهم نقاط قوته وضعفه، ثم قم بالبناء عليه وتجربة نماذج أكثر تعقيداً إذا لزم الأمر.
الخلاصة: من مطاردة الظلال إلى استشراف المستقبل
التحول من الأنظمة المعتمدة على القواعد إلى نماذج كشف الحالات الشاذة لم يكن مجرد تحديث تقني، بل كان تغييراً جذرياً في طريقة تفكيرنا. لقد انتقلنا من مطاردة أشباح عمليات الاحتيال المعروفة، إلى بناء نظام مناعة رقمي يمكنه التعرف على “الأجسام الغريبة” والتهديدات الجديدة وغير المتوقعة والتصدي لها.
نصيحتي الأخيرة لك، سواء كنت مبرمجاً مبتدئاً أو مدير منتج في شركة تكنولوجيا مالية: لا تخف من تبني هذه التقنيات. ابدأ صغيراً، تعلم، جرّب، وافشل، ثم تعلم من فشلك. إن الذكاء الاصطناعي ليس بديلاً للعقل البشري، بل هو أقوى أداة نمتلكها اليوم لتعزيز قدراتنا وحماية أنظمتنا في هذا العالم الرقمي المتسارع. المستقبل ليس لمن يتفاعل مع التغيير، بل لمن يصنعه. 🚀