كانت عمليات الاحتيال تسبقنا بخطوة: كيف أنقذتنا ‘نماذج اكتشاف الشذوذ’ من جحيم القواعد الثابتة؟

مقدمة: ليلة لن أنساها.. يوم كاد المحتالون أن يكسروا ظهرنا

أذكر تلك الليلة جيداً، كانت حوالي الساعة الثانية فجراً بتوقيت مكتبي في رام الله. كنت أحتسي كوب الميرمية الساخن وأضع اللمسات الأخيرة على ميزة جديدة في نظام الدفع الذي كنا نعمل عليه في شركتنا الناشئة. فجأة، رن هاتفي. على الطرف الآخر كان صوت مدير العمليات يرتجف: “أبو عمر، الحقنا! فيه إشي غلط، غلط كبير!”.

هرعت إلى لوحة التحكم، لأجد كارثة حقيقية. سلسلة طويلة من عمليات الدفع الصغيرة، كل واحدة تحت سقف الـ 50 دولاراً، قادمة من بطاقات مختلفة ولكن بأنماط متشابهة بشكل مريب. نظامنا لاكتشاف الاحتيال، الذي بنيناه بكل فخر على مجموعة من القواعد الثابتة (Rule-Based System)، كان نائماً في العسل. لماذا؟ لأن كل عملية بمفردها كانت تبدو “شرعية” تماماً.

كانت القواعد التي وضعناها بسيطة وواضحة: “إذا كانت العملية فوق 200$ من بلد عالي الخطورة، امنعها”، “إذا تمت 3 عمليات بنفس البطاقة في أقل من 5 دقائق، جمد الحساب”. لكن هؤلاء المحتالين، الله وكيلك، كانوا أذكى من قواعدنا. كانوا مثل الماء، يتسربون من أضيق الشقوق. كانوا يجرون عمليات بمبالغ صغيرة، من شبكات IP موزعة، وبفواصل زمنية مدروسة. كانوا يلعبون “خارج الصندوق” الذي بنيناه لهم.

قضينا تلك الليلة والليالي التي تلتها في وضع “ترقيعات” للنظام. كلما اكتشفنا نمطاً جديداً، أضفنا قاعدة جديدة. IF amount 6_minutes THEN flag_as_suspicious. تحول نظامنا إلى وحش معقد من عبارات IF-ELSE المتشابكة. كنا في سباق تسلح خاسر، نلهث خلف المحتالين الذين يسبقوننا بخطوة دائماً. هنا، أدركت أننا لا نحارب المشكلة، بل نحارب أعراضها فقط. كان لا بد من حل جذري، حل لا يعتمد على ما “نعرفه” من أساليب احتيال، بل على ما هو “غير طبيعي”. هنا بدأت رحلتنا مع نماذج اكتشاف الشذوذ (Anomaly Detection).

الجحيم الذي عشناه: عالم القواعد الثابتة (Rule-Based Systems)

قبل أن نغوص في الحل، دعونا نفهم طبيعة الوحش الذي كنا نقاتله. الأنظمة القائمة على القواعد هي ببساطة مجموعة من الشروط المنطقية (IF-THEN-ELSE) التي يكتبها المبرمجون والمحللون بناءً على خبرتهم السابقة في الاحتيال.

كيف تعمل؟

ببساطة، لكل معاملة قادمة، يقوم النظام بتمريرها على قائمة من القواعد:

  • هل المبلغ أكبر من 1000 دولار؟ إذن اطلب تحققاً إضافياً.
  • هل بلد الـ IP يختلف عن بلد إصدار البطاقة؟ إذن ارفع درجة الخطورة.
  • هل هذه هي المحاولة الخامسة بكلمة سر خاطئة؟ إذن اقفل الحساب مؤقتاً.

تبدو منطقية، أليس كذلك؟ نعم، ولكنها تحمل في طياتها بذور فشلها.

لماذا هي جحيم على المدى الطويل؟

  1. صلبة وغير مرنة: هذه القواعد لا تتعلم ولا تتكيف. المحتال الذكي يدرس النظام، يكتشف عتبات القواعد (Thresholds)، ثم يعمل تحتها مباشرةً، تماماً كما حدث معنا.
  2. صيانة كابوسية: مع كل هجوم جديد، تضيف قاعدة جديدة. بعد عام واحد، يصبح لديك مئات، بل آلاف القواعد المتشابكة. تعديل قاعدة واحدة قد يؤثر بشكل غير متوقع على عشرات القواعد الأخرى. يصبح النظام “كود سباغيتي” لا يجرؤ أحد على لمسه.
  3. إيجابيات كاذبة بالجملة (False Positives): أسوأ ما في الأمر هو حظر العملاء الحقيقيين. كم مرة اتصل بنا عميل غاضب لأن نظامه منعه من شراء هدية لزوجته من الخارج فقط لأن القاعدة اعتبرت العملية “مشبوهة”؟ هذه القواعد الغبية لا تفهم السياق، وتكلفنا خسارة العملاء وثقتهم.

يا جماعة، الاعتماد الكلي على القواعد الثابتة في عالم اليوم يشبه بناء قلعة من الرمل على شاطئ البحر. قد تبدو جميلة للحظات، ولكن مع أول موجة قوية (هجوم متطور)، ينهار كل شيء.

المنقذ: نماذج اكتشاف الشذوذ (Anomaly Detection)

هنا يأتي دور الذكاء الاصطناعي. بدلاً من أن نقول للنظام “ابحث عن هذه الأنماط السيئة المعروفة”، غيرنا المعادلة بالكامل. قلنا له: “تعلم كيف يبدو السلوك الطبيعي للمستخدمين، وأخبرني بأي شيء يبدو غريباً أو شاذاً”.

الفكرة عبقرية في بساطتها. النموذج لا يحتاج إلى معرفة مسبقة بكل أنواع الاحتيال الممكنة في العالم. كل ما يحتاجه هو فهم “الوضع الطبيعي” (The Normal Baseline). أي انحراف كبير عن هذا الوضع الطبيعي هو “شذوذ” (Anomaly) يستحق التحقيق.

أهم أنواع نماذج اكتشاف الشذوذ

هناك عائلة كبيرة من الخوارزميات تحت هذا المسمى، ولكل منها قوتها. سأذكر لكم بعض ما جربناه:

1. خوارزميات التجميع (Clustering-Based) مثل DBSCAN

تخيل أن كل معاملة هي نقطة على خريطة. المعاملات الطبيعية تميل إلى التجمع معاً في “عناقيد” كثيفة. على سبيل المثال، معاملاتك الشهرية من السوبر ماركت ستشكل عنقوداً متقارباً. أما عملية الشراء المفاجئة بقيمة 3000 دولار من بلد لم تزره من قبل، فستكون نقطة وحيدة وبعيدة عن أي عنقود. خوارزمية مثل DBSCAN ممتازة في العثور على هذه “النقاط المنعزلة”.

2. غابة العزل (Isolation Forest)

هذه من الخوارزميات المفضلة عندي لسرعتها وكفاءتها. فكرتها ذكية جداً: من الأسهل “عزل” نقطة شاذة ومنعزلة عن بقية النقاط بدلاً من وصف مجموعة النقاط الطبيعية. الخوارزمية تبني “أشجار قرار” عشوائية لتقسيم البيانات. النقاط الشاذة عادة ما يتم عزلها في عدد قليل جداً من الانقسامات، بينما تحتاج النقاط الطبيعية داخل العناقيد إلى انقسامات أكثر بكثير لعزلها. بناءً على “سهولة العزل”، تعطي الخوارزمية درجة شذوذ لكل معاملة.

3. المُشفِّرات التلقائية (Autoencoders) – سلاح الشبكات العصبونية

هنا ندخل عالم التعلم العميق (Deep Learning). الـ Autoencoder هو نوع من الشبكات العصبونية التي تتكون من جزأين: “مُشفِّر” (Encoder) و”مُفكِّك تشفير” (Decoder). نقوم بتدريب هذه الشبكة على شيء واحد فقط: إعادة بناء بيانات الإدخال. أي أننا نعطيها بيانات معاملات “طبيعية” فقط، وتتعلم كيف تضغطها (تشفير) ثم تعيد فكها (فك التشفير) بأقل قدر من الخسارة (Reconstruction Error).

الجمال هنا يكمن في أنه عندما نعطيها معاملة “احتيالية” (شاذة)، والتي لم ترها من قبل، فإنها ستفشل في إعادة بنائها بشكل جيد. سيكون “خطأ إعادة البناء” عالياً جداً. وهذا الخطأ المرتفع هو الإشارة الحمراء التي نبحث عنها! 🚩

من النظرية إلى التطبيق: كيف بنينا نظامنا الجديد؟

الكلام النظري جميل، لكن “كيف بنعملها يا أبو عمر؟”. سأعطيكم خارطة طريق عملية بناءً على تجربتنا.

الخطوة 1: هندسة الميزات (Feature Engineering)

البيانات هي النفط الجديد، والميزات هي طريقة تكريره. لم نعد نعتمد على مبلغ المعاملة والبلد فقط. بدأنا بجمع وهندسة ميزات أكثر ذكاءً تصف “سلوك” المستخدم:

  • متوسط مبلغ عمليات المستخدم في آخر شهر.
  • عدد العمليات في آخر 24 ساعة.
  • الوقت منذ آخر عملية.
  • هل هذه أول عملية مع هذا التاجر؟
  • مقارنة منطقة IP الحالية بالمناطق المعتادة للمستخدم.
  • سرعة الكتابة أو التنقل بالماوس (إذا كان على واجهة ويب).

كل هذه الميزات شكلت “بصمة سلوكية” رقمية لكل مستخدم.

الخطوة 2: اختيار النموذج وتدريبه (مثال عملي بالكود)

للبداية، خوارزمية مثل Isolation Forest هي خيار ممتاز. إنها سريعة ولا تتطلب بيانات ضخمة للتدريب. إليكم مثال مبسط بلغة Python باستخدام مكتبة `scikit-learn` الشهيرة لتوضيح الفكرة:


import numpy as np
from sklearn.ensemble import IsolationForest

# لنفترض أن لدينا بيانات معاملات (ميزات مهندسة)
# الميزات: [مبلغ_المعاملة, عدد_المعاملات_في_24ساعة, الوقت_منذ_آخر_عملية]
X_train = [
    [25.5, 1, 3600],    # معاملة طبيعية
    [40.0, 2, 1800],    # معاملة طبيعية
    [15.2, 3, 900],     # معاملة طبيعية
    [1200.0, 15, 60],   # معاملة شاذة جداً!
    [33.0, 2, 2400],    # معاملة طبيعية
    [650.0, 1, 86400]   # معاملة شاذة (مبلغ كبير، أول معاملة في اليوم)
]

# 1. تهيئة النموذج
# contamination تعني النسبة المتوقعة من البيانات الشاذة
model = IsolationForest(contamination=0.1, random_state=42)

# 2. تدريب النموذج على البيانات
model.fit(X_train)

# 3. الآن، لنجرب التنبؤ على معاملة جديدة
new_transaction_normal = [[50.0, 4, 1200]]   # تبدو طبيعية
new_transaction_anomaly = [[2500.0, 20, 10]] # تبدو شاذة

# سيقوم النموذج بإرجاع 1 للبيانات الطبيعية و -1 للبيانات الشاذة
prediction_normal = model.predict(new_transaction_normal)
prediction_anomaly = model.predict(new_transaction_anomaly)

print(f"تنبؤ المعاملة الطبيعية: {prediction_normal[0]}") # المتوقع: 1
print(f"تنبؤ المعاملة الشاذة: {prediction_anomaly[0]}") # المتوقع: -1

# يمكننا أيضاً الحصول على "درجة الشذوذ" لكل معاملة
scores = model.decision_function(X_train)
print("nدرجات الشذوذ للمعاملات الأصلية:")
print(scores)

هذا الكود المبسط يوضح المبدأ. في النظام الحقيقي، تكون الميزات بالعشرات والبيانات بالملايين، لكن الفكرة الأساسية تبقى كما هي.

نصائح أبو عمر الذهبية 💡

بعد سنوات من العمل في هذا المجال، تعلمت بعض الدروس بالطريقة الصعبة. اسمحوا لي أن أشارككم إياها:

  1. النظام الهجين هو الأفضل (Hybrid Approach): لا ترمِ نظام القواعد القديم في القمامة! أفضل الأنظمة هي التي تدمج بين الاثنين. استخدم القواعد الثابتة للحالات القطعية التي لا تقبل الشك (مثلاً، الحظر الفوري لبطاقة مسروقة مبلغ عنها)، واستخدم نماذج اكتشاف الشذوذ للإمساك بالأنماط الجديدة والمتطورة التي لا تغطيها القواعد.
  2. ابدأ صغيراً ثم توسع: لا تحاول بناء Autoencoder معقد من اليوم الأول. ابدأ بنموذج بسيط مثل Isolation Forest، ضعه في وضع “المراقبة فقط” (Shadow Mode) حيث يراقب المعاملات ويصدر تنبيهات دون أن يمنعها فعلياً. قارن تنبيهاته مع الواقع، وعندما تثق بأدائه، ابدأ بإعطائه صلاحية حظر المعاملات.
  3. حلقة التغذية الراجعة (Feedback Loop) هي روح النظام: عندما يبلغ النموذج عن شذوذ، يجب أن يكون هناك محلل بشري (أو نظام آخر) ليؤكد: “هل هذا احتيال حقيقي أم إيجابية كاذبة؟”. هذه المعلومة (Label) ثمينة جداً. استخدمها لإعادة تدريب نموذجك بشكل دوري ليصبح أذكى مع الوقت.
  4. راقب أداء نموذجك باستمرار: سلوك المستخدمين يتغير، والمحتالون يطورون أساليبهم. النموذج الذي كان فعالاً قبل 6 أشهر قد يصبح قديماً اليوم. يجب أن تكون لديك آليات لمراقبة أداء النموذج (Model Monitoring) وإعادة تدريبه بانتظام على بيانات جديدة.

الخلاصة: من مطاردة اللصوص إلى بناء الحصون 🏰

رحلتنا من جحيم القواعد الثابتة إلى مرونة نماذج اكتشاف الشذوذ كانت تحولاً جذرياً في فلسفتنا الأمنية. انتقلنا من كوننا فريق إطفاء يركض خلف الحرائق، إلى مهندسين يبنون حصوناً ذكية تتعلم وتتكيف وتتوقع الخطر. لم نعد نلعب لعبة رد الفعل، بل أصبحنا نحن من يضع قواعد اللعبة.

إذا كنت لا تزال تعتمد بشكل كامل على القواعد الثابتة، فاعلم أنك تخوض معركة خاسرة على المدى الطويل. ابدأ اليوم، ولو بخطوات صغيرة، في استكشاف عالم اكتشاف الشذوذ. قد تكون هذه هي الخطوة التي تنقذ شركتك من “تلك الليلة” التي كادت أن تكسرنا.

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

التوسع والأداء العالي والأحمال

كانت قاعدة بياناتنا تحتضر: كيف أنقذنا ‘التخزين المؤقت’ (Caching) من جحيم الاستعلامات المتكررة؟

أشارككم قصة حقيقية من قلب المعركة التقنية، عندما كادت قاعدة بياناتنا أن تنهار تحت ضغط الاستعلامات المتكررة. سأشرح لكم كيف كان "التخزين المؤقت" (Caching) هو...

14 مايو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كانت بنيتنا التحتية قصرًا من ورق: كيف أنقذنا Terraform من جحيم التغييرات اليدوية وانحراف الإعدادات؟

قصة حقيقية من قلب المعركة التقنية، حيث كانت سيرفراتنا تتهاوى بسبب التعديلات اليدوية. اكتشف كيف انتقلنا من الفوضى إلى النظام باستخدام Terraform ومفهوم البنية التحتية...

14 مايو، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

المسار الوظيفي المزدوج: كيف أنقذنا خيرة مهندسينا من جحيم الاختيار بين الإدارة والكود؟

كان مهندسونا يغادرون صمتاً، واحداً تلو الآخر. لم تكن المشكلة في الراتب أو في المشروع، بل في سقف زجاجي يجبرهم على الاختيار بين شغفهم بالكود...

14 مايو، 2026 قراءة المزيد
اختبارات الاداء والجودة

كانت اختباراتنا تنهار عشوائياً: كيف أنقذنا Playwright من جحيم الاختبارات المتقشرة (Flaky Tests)؟

في هذه المقالة، أشارككم قصة حقيقية من خنادق البرمجة، حيث كانت اختباراتنا الآلية تنهار بشكل عشوائي ومحبط. سأغوص معكم في الأسباب الجذرية للاختبارات المتقشرة (Flaky...

14 مايو، 2026 قراءة المزيد
أدوات وانتاجية

كانت طرفيتي سجناً: كيف أنقذنا ‘الباحث التقريبي’ (Fuzzy Finder) من جحيم البحث في الـ History؟

أشارككم تجربتي الشخصية مع أداة fzf، الباحث التقريبي الذي حوّل طرفيتي من سجن للأوامر المتكررة إلى بيئة عمل فائقة الإنتاجية. اكتشفوا كيف يمكن لهذه الأداة...

14 مايو، 2026 قراءة المزيد
أتمتة العمليات

كانت عمليات النشر كابوساً: كيف أنقذتنا “خطوط أنابيب CI/CD” من جحيم “يوم النشر” اليدوي؟

أنا أبو عمر، مبرمج فلسطيني، وأروي لكم كيف انتقلنا من ليالي النشر اليدوي المليئة بالتوتر والأخطاء إلى عالم الأتمتة والثقة باستخدام خطوط أنابيب CI/CD. هذه...

14 مايو، 2026 قراءة المزيد
البودكاست