يا جماعة الخير، السلام عليكم ورحمة الله وبركاته. معكم أخوكم أبو عمر.
بتذكر قبل كم سنة، كنا في الشركة شغالين على منصة دفع إلكتروني جديدة. الأمور كانت ماشية زي الحلاوة، المستخدمون في ازدياد، والعمليات المالية بالآلاف كل يوم. لكن كان في إشي غريب… شعور مزعج زي اللي حاسس إنه في حدا بيمشي وراه في عتمة. التقارير المالية الشهرية كانت تظهر فجوة صغيرة، تسريب بسيط لكنه مستمر في الإيرادات. أرقام مش كبيرة لدرجة تسبب ذعر، لكنها كافية لتخليك ما تنام الليل.
اجتمعت مع الفريق، وصرنا نقلّب في السجلات (logs) ونحلل البيانات يدويًا. نظام كشف الاحتيال اللي كان عنا وقتها كان مبني على قواعد ثابتة (Rule-based)، يعني “إذا كان المبلغ أكبر من X والعملية من بلد Y، أوقفها”. فحصنا كل القواعد، وكلها كانت سليمة. المحتالون ما كانوا يكسروا القواعد، كانوا ببساطة “يلعبوا حواليها”. عمليات صغيرة جدًا، من حسابات مختلفة، في أوقات تبدو عادية. كانت زي الأشباح في النظام، بتسرق شوي شوي بدون ما حدا يحس عليها. وقتها واحد من الشباب حكى جملة علقت في بالي: “يا أبو عمر، هدول مش حرامية كبار، هدول جيش نمل بياكل فينا حبة حبة”.-p>
هنا أدركت أن حربنا ليست ضد عمليات احتيال واضحة، بل ضد “شذوذ” خفي. ومن هنا بدأت رحلتنا مع عالم “كشف الشذوذ” باستخدام تعلم الآلة، الرحلة التي أنقذت المشروع من خسائر كانت ستصبح كارثية.
لماذا خذلتنا الطرق التقليدية؟ شبح القواعد الثابتة
قبل أن نغوص في الحل، من المهم أن نفهم أصل المشكلة. أنظمة كشف الاحتيال التقليدية تعتمد بشكل أساسي على مجموعة من القواعد التي يكتبها المبرمجون والمحللون الماليون. تبدو هكذا:
IF transaction_amount > 1000 USD
AND user_country != ip_country
THEN FLAG_AS_FRAUD
هذا النهج، رغم بساطته، يعاني من مشاكل قاتلة في عالم اليوم.
الجمود في مواجهة عدو مرن
المحتالون أذكياء ويتطورون بسرعة. إذا وضعت قاعدة تمنع العمليات فوق 1000 دولار، سيبدأون بتنفيذ عمليات بقيمة 999 دولارًا. إذا حظرت دولة معينة، سيستخدمون شبكات خاصة افتراضية (VPNs) لتغيير مواقعهم. القواعد الثابتة دائمًا متأخرة بخطوة عن المحتالين، مما يجعلنا في حالة رد فعل دائم بدلًا من الفعل الاستباقي.
القتلة الصامتون: هجمات “القليل والبطيء” (Low-and-Slow)
هذا هو بالضبط ما كنا نواجهه. لم تكن هناك عملية واحدة ضخمة تطلق أجراس الإنذار. بدلًا من ذلك، كانت هناك آلاف العمليات الصغيرة جدًا (أحيانًا سنتات فقط) موزعة على مدار اليوم من مئات الحسابات التي تبدو طبيعية. كل عملية بمفردها تبدو بريئة تمامًا وتمر عبر كل فلاتر القواعد التقليدية. لكن مجموع هذه العمليات كان يشكل نزيفًا ماليًا حقيقيًا. هذا النوع من الهجمات يكاد يكون من المستحil اكتشافه بالأنظمة المعتمدة على القواعد فقط.
كاشف الأشباح: كيف يعمل “التعلم الآلي لكشف الشذوذ”؟
هنا يأتي دور تعلم الآلة، وتحديدًا “كشف الشذوذ” (Anomaly Detection). الفكرة عبقرية في بساطتها: بدلًا من أن نُعرّف للمُحرك ما هو “الاحتيال”، نجعله يتعلم ما هو “الطبيعي”، وهو بدوره سيكتشف أي شيء يخرج عن هذا النمط الطبيعي.
تخيل أنك تعمل في متجر وتعرف كل زبائنك المعتادين وسلوكهم الشرائي. فجأة، يدخل شخص في منتصف الليل يرتدي معطفًا شتويًا في عز الصيف ويطلب شراء 500 علبة من نفس المنتج. حتى لو كانت عملية الشراء قانونية، سلوكه “شاذ” ويستدعي الانتباه. هذا بالضبط ما تفعله خوارزميات كشف الشذوذ، لكن مع ملايين البيانات في الثانية.
أنواع الشذوذ في عالم التكنولوجيا المالية
- الشذوذ النقطي (Point Anomalies): عملية واحدة غريبة بشكل واضح. مثلاً، مستخدم لم ينفق أكثر من 50 دولارًا في حياته يقوم فجأة بعملية شراء بقيمة 5000 دولار من بلد لم يزره من قبل. هذه سهلة نسبيًا.
- الشذوذ السياقي (Contextual Anomalies): عملية قد تكون طبيعية في سياق، لكنها شاذة في سياق آخر. مثلاً، شراء بقيمة 200 دولار من متجر ألعاب هو أمر طبيعي، لكن ليس في الساعة 3 فجرًا من حساب مستخدم لم يسجل أي نشاط بعد الساعة 10 مساءً.
- الشذوذ الجماعي (Collective Anomalies): هذا هو “جيش النمل” الذي تحدثنا عنه. مجموعة من العمليات التي تبدو كل واحدة منها طبيعية، لكنها مجتمعة تشكل نمطًا شاذًا. هذا هو أخطر الأنواع وأصعبها اكتشافًا بالطرق التقليدية.
كيف بنينا نظامنا؟ رحلة عملية من الصفر
الحديث النظري جميل، لكن “الشغل المرتب” يظهر في التنفيذ. سأشارككم خطواتنا العملية لبناء هذا النظام.
الخطوة الأولى: فهم البيانات هو الأساس
قبل كتابة أي سطر كود، قضينا أسابيع في جمع وفهم البيانات. هذه أهم نصيحة أقدمها لك: بياناتك هي كنزك أو مقبرتك. “Garbage in, garbage out” (المدخلات السيئة تعطي مخرجات سيئة) هي الحقيقة المطلقة في هذا المجال. ركزنا على جمع الخصائص (Features) التالية لكل عملية:
- مبلغ العملية (Transaction Amount)
- وقت العملية (Timestamp)
- معرّف المستخدم (User ID)
- عنوان IP
- نوع الجهاز المستخدم (Device Fingerprint)
- تاريخ عمليات المستخدم (User History)
- عدد العمليات في آخر ساعة/يوم للمستخدم
- متوسط قيمة عمليات المستخدم
قمنا بتنظيف البيانات ومعالجة القيم المفقودة، وهي خطوة لا يمكن الاستهانة بها أبدًا.
الخطوة الثانية: اختيار الخوارزمية المناسبة (مش كل خوارزمية بتزبط)
هناك العديد من الخوارزميات لكشف الشذوذ، ولكل منها نقاط قوة وضعف. بما أننا لم يكن لدينا بيانات “احتيال” مصنفة مسبقًا بشكل كافٍ، اتجهنا للتعلم غير الخاضع للإشراف (Unsupervised Learning).
نصيحة من أبو عمر: لا تبدأ بالخوارزميات المعقدة والشبكات العصبية العميقة. ابدأ دائمًا بالنماذج الأبسط والأسرع والقابلة للتفسير. في 80% من الحالات، ستقدم لك نتائج ممتازة بتكلفة أقل بكثير.
كانت خوارزمية Isolation Forest (غابة العزل) هي خيارنا الأول، لسببين رئيسيين:
- سرعتها الفائقة: تتعامل مع كميات ضخمة من البيانات بكفاءة.
- كفاءتها مع البيانات عالية الأبعاد: تعمل بشكل جيد حتى مع وجود العديد من الخصائص (features).
فكرتها بسيطة: الخوارزمية تحاول “عزل” كل نقطة بيانات عن طريق تقسيمات عشوائية. النقاط الشاذة تكون أسهل وأسرع في العزل من النقاط الطبيعية (لأنها قليلة وبعيدة عن التجمعات). مثل البحث عن خروف أسود في قطيع من الخراف البيضاء، ستجده بسرعة.
الخطوة الثالثة: التدريب، الاختبار، وشوية بهارات!
قمنا بتدريب نموذج Isolation Forest على ملايين العمليات “الطبيعية” من سجلاتنا التاريخية. أهم “بهار” أو معامل (parameter) هنا هو contamination. هذا المعامل يخبر الخوارزمية بالنسبة المئوية المتوقعة للبيانات الشاذة في مجموعة البيانات (مثلاً 0.01 تعني 1%). تحديد هذا الرقم يتطلب بعض التجربة والفهم لطبيعة عملك.
بعد تدريب النموذج، بدأنا بتمرير العمليات الجديدة عليه بشكل حي. كان النموذج يعطي لكل عملية “درجة شذوذ” (anomaly score). قمنا بتحديد عتبة (threshold)، أي عملية تتجاوز درجتها هذه العتبة، يتم تصنيفها كـ “شاذة محتملة” وإرسالها لفريق التحليل للمراجعة.
خلينا نشوف كود: مثال عملي باستخدام Isolation Forest
لتقريب الصورة، هذا مثال بسيط بلغة بايثون باستخدام مكتبات pandas و scikit-learn يوضح الفكرة الأساسية.
import pandas as pd
from sklearn.ensemble import IsolationForest
# 1. إنشاء بيانات وهمية (في الواقع ستقوم بتحميلها من قاعدة بياناتك)
# بيانات طبيعية: مبالغ صغيرة في أوقات متفرقة
data = {
'amount': [10.5, 25.0, 15.7, 30.2, 8.0, 19.5, 22.0],
'tx_per_hour': [1, 2, 1, 3, 1, 2, 1] # عدد العمليات في الساعة للمستخدم
}
df = pd.DataFrame(data)
# إضافة بعض البيانات الشاذة يدويًا للتجربة
# عملية بمبلغ كبير جدًا، وعملية أخرى جزء من نشاط مكثف
anomalies = pd.DataFrame({
'amount': [5000.0, 12.0],
'tx_per_hour': [1, 50] # 50 عملية في ساعة واحدة هو أمر شاذ
})
df = pd.concat([df, anomalies], ignore_index=True)
print("--- البيانات المدخلة ---")
print(df)
# 2. تهيئة وتدريب النموذج
# contamination تعني أننا نتوقع حوالي 10% من البيانات شاذة (للتجربة فقط)
model = IsolationForest(contamination=0.1, random_state=42)
model.fit(df)
# 3. التنبؤ بالبيانات الشاذة
# النموذج سيعيد 1 للبيانات الطبيعية و -1 للبيانات الشاذة
df['anomaly_flag'] = model.predict(df)
print("n--- النتائج بعد التحليل ---")
print(df)
# 4. عرض العمليات التي تم تصنيفها كشاذة
print("n--- العمليات الشاذة المكتشفة ---")
print(df[df['anomaly_flag'] == -1])
هذا الكود البسيط يوضح كيف يمكن للنموذج أن يميز الأنماط الغريبة (مبلغ كبير جدًا، أو عدد كبير من العمليات في فترة قصيرة) حتى بدون قواعد صريحة.
النتائج كانت زي الحلاوة: كيف تغير كل شيء؟
في الأسبوع الأول من تشغيل النظام الجديد في وضع “المراقبة فقط”، كانت النتائج مذهلة. بدأ النظام يضيء لنا على مجموعات صغيرة من العمليات التي لم يكن ليلاحظها أي إنسان. كانت تلك هي “الأشباح” التي كنا نبحث عنها. شبكات من الحسابات الوهمية تقوم بتنفيذ عمليات صغيرة جدًا، تمرر أموالًا مسروقة ببطء وهدوء. لقد أمسكنا بجيش النمل متلبسًا!
الأثر كان فوريًا. انخفضت نسبة الخسائر غير المبررة إلى ما يقارب الصفر. لكن الأهم من ذلك، تغيرت طريقة عملنا بالكامل.
ليست رصاصة سحرية: دور الإنسان في المعادلة
من المهم جدًا أن أؤكد على نقطة: تعلم الآلة ليس عصا سحرية. النموذج لا يقول “هذه عملية احتيال مؤكدة”. بل يقول: “هذه العملية شاذة بنسبة 99%، الرجاء التحقق منها”.
قمنا ببناء لوحة تحكم (dashboard) بسيطة للمحللين الماليين، تعرض العمليات التي صنفها النظام كشاذة مع كل البيانات المرتبطة بها. دور المحلل هو التحقيق، وتأكيد ما إذا كانت عملية احتيال حقيقية أم مجرد حالة نادرة (false positive). هذا التكامل بين ذكاء الآلة وخبرة الإنسان هو سر النجاح.
خلاصة الكلام والنصيحة من أبو عمر 💡
رحلتنا في مكافحة الاحتيال علمتنا دروسًا قيمة، وأحب أن أشارككم خلاصتها:
- الأنظمة المبنية على القواعد هشة: هي ضرورية كخط دفاع أول، لكنها وحدها لا تكفي أبدًا في مواجهة التهديدات الحديثة.
- فكر في “الشذوذ” وليس فقط “الاحتيال”: حوّل تركيزك من البحث عن أنماط الاحتيال المعروفة إلى البحث عن أي سلوك يخرج عن المألوف في نظامك.
- ابدأ بسيطًا: خوارزميات مثل Isolation Forest أو Local Outlier Factor هي نقطة انطلاق ممتازة وقوية جدًا. لا تقفز إلى الـ Deep Learning إلا إذا كنت تحتاج إليه حقًا.
- البيانات هي الملك: استثمر وقتًا وجهدًا في جمع وهندسة وتنظيف بياناتك. هذه الخطوة ستحدد نجاح مشروعك أو فشله.
- أبقِ الإنسان في الحلقة (Human in the loop): أفضل الأنظمة هي التي تجمع بين سرعة الآلة في التحليل وحكمة الإنسان في اتخاذ القرار النهائي.
نصيحتي الأخيرة لكل مطور أو مدير منتج أو صاحب شركة في قطاع التكنولوجيا: لا تنتظروا حتى تروا الخسائر بأعينكم. “الأشباح” قد تكون موجودة في نظامكم الآن، تقتات على أرباحكم بصمت. ابدأوا اليوم قبل بكرة في بناء دفاعاتكم الذكية. الاستثمار في تعلم الآلة لكشف الشذوذ ليس رفاهية، بل هو ضرورة حتمية للبقاء والنمو في هذا العالم الرقمي المتغير. والله ولي التوفيق.