أذكر ذلك اليوم جيداً، كان يوم ثلاثاء عادي وهادئ حتى بدأ نظام الإنذارات يصرخ كطفل جائع. تنبيه تلو الآخر، كلها من نفس النوع: عمليات شراء صغيرة ومتعددة ببطاقات مختلفة، ولكن من نفس الجهاز. للوهلة الأولى، بدا الأمر وكأنه مستخدم طبيعي يختبر عدة بطاقات. لكن شيئاً ما لم يكن مريحاً.
ناديت على زميلي أحمد وقلت له باللهجة العامية: “يا زلمة، تعال شوف هالحالة. إشي غريب، قلبي مش مرتاحله”. بدأنا بالتحقيق بالطريقة التقليدية: استعلامات SQL معقدة تحاول ربط المستخدم بالجهاز، الجهاز بالبطاقات، البطاقات بمعاملات أخرى، وهكذا. بعد نصف ساعة من الـ `JOIN` والـ `LEFT JOIN`، كانت شاشاتنا مليئة بالجداول والبيانات، وكنا غارقين في بحر من المعلومات التي لا معنى لها. كلما سحبنا خيطاً، وجدنا أنه لا يؤدي إلى شيء. كنا كمن يحاول إمساك الماء بيديه. في تلك اللحظة، أدركت أننا لا نحارب محتالاً واحداً، بل شبكة كاملة، وقواعدنا التقليدية كانت، بكل بساطة، شبكة مثقوبة لا تصلح لصيد هذه الحيتان.
لماذا كانت طريقتنا القديمة “فاشوش”؟ (أي كلام فارغ)
لفهم المشكلة، دعونا نلقي نظرة على كيفية عمل الأنظمة التقليدية لمكافحة الاحتيال، والتي تعتمد في الغالب على قواعد البيانات العلائقية (Relational Databases) مثل MySQL أو PostgreSQL.
عذاب الـ SQL Joins
في قاعدة البيانات العلائقية، كل شيء مقسم إلى جداول: جدول للمستخدمين (`Users`)، جدول للمعاملات (`Transactions`)، جدول للأجهزة (`Devices`)، وجدول للبطاقات (`Cards`).
لنفترض أننا نريد أن نجد كل المستخدمين الذين استخدموا نفس البطاقة التي استخدمها مستخدم مشبوه (دعنا نسميه `user-123`). ستبدو جملة الاستعلام هكذا:
SELECT u2.user_id
FROM transactions t1
JOIN transactions t2 ON t1.card_id = t2.card_id
JOIN users u1 ON t1.user_id = u1.user_id
JOIN users u2 ON t2.user_id = u2.user_id
WHERE u1.user_id = 'user-123' AND u2.user_id != 'user-123';
هذا الاستعلام يبحث عن علاقة من الدرجة الثانية فقط (مستخدم -> بطاقة -> مستخدم آخر). الآن تخيل أنك تريد البحث عن علاقات أكثر تعقيداً: مستخدم شارك جهازاً مع مستخدم آخر، وهذا المستخدم الآخر استخدم بطاقة مسروقة تمت مشاركتها عبر عنوان IP مع مجموعة ثالثة من المستخدمين. ستصبح استعلامات SQL كابوساً حقيقياً، بطيئة جداً، ومعقدة لدرجة شبه مستحيلة للكتابة والصيانة، وفي كثير من الأحيان، تفشل في إعطاء نتيجة في الوقت الفعلي (Real-time).
القواعد الثابتة = أهداف سهلة
كنا نعتمد على مجموعة من القواعد مثل: “إذا قام مستخدم بأكثر من 5 معاملات في 10 دقائق، أطلق إنذاراً”. المشكلة؟ المحتالون أذكى من ذلك. يقرأون عن هذه القواعد، ويتعلمون كيفية تجنبها. يقومون بعمليات تحت الحد المسموح به، يستخدمون شبكات موزعة، وينشئون أنماطاً تبدو طبيعية للوهلة الأولى. باختصار، كانوا يلعبون حول قواعدنا بسهولة.
التفكير بطريقة جديدة: أهلاً بقواعد البيانات الرسومية (Graph Databases)
يقول المثل: “عشان تمسك الحرامي، لازم تفكر زيه”. المحتالون لا يفكرون في جداول وصفوف، بل يفكرون في شبكات وعلاقات. من يعرف من؟ ما هو الشيء المشترك بين هؤلاء؟ كيف يمكنني الاختباء داخل الشبكة؟ هنا يأتي دور قواعد البيانات الرسومية. لقد كانت نقلة نوعية في التفكير.
ما هي العُقد والروابط (Nodes and Edges)؟
الفكرة بسيطة بشكل عبقري:
- العُقد (Nodes): هي الكيانات أو الأشياء في نظامك. في حالتنا، العقدة يمكن أن تكون:
User,Card,Device,IPAddress,Email. - الروابط (Edges): هي العلاقات التي تربط هذه العقد ببعضها. الرابط له اتجاه واسم، مثل:
(User)-[:MADE_TRANSACTION]-(Transaction),(User)-[:USED_DEVICE]->(Device),(Card)-[:SHARED_BY]-(User).
بدلاً من جداول منفصلة، أصبح لدينا شبكة واحدة كبيرة ومترابطة، تماماً مثلما يرسم المحققون العلاقات على لوح أبيض في أفلام الجريمة.
نصيحة من أبو عمر: أفضل طريقة لبدء التفكير بالرسم البياني هي حرفياً بالرسم. أحضر قلماً وورقة (أو افتح لوحاً أبيض رقمياً) وابدأ برسم الكيانات في نظامك كدوائر والخطوط التي تربطها كأسهم. ستتفاجأ بالبصائر التي ستكتشفها حتى قبل كتابة سطر كود واحد.
لحظة “وجدتها!”: قوة الرسم البياني في كشف الاحتيال
بالعودة إلى قصتنا، بعد أن تبنينا قاعدة بيانات رسومية (استخدمنا Neo4j في ذلك الوقت)، أعدنا تحليل نفس الحالة المعقدة. هذه المرة، لم نكن بحاجة إلى `JOIN`.
من استعلامات معقدة إلى “عبور” بسيط
باستخدام لغة استعلام مثل Cypher (وهي لغة شبه إنجليزية وسهلة القراءة)، أصبح السؤال عن العلاقات المعقدة أمراً بسيطاً. لنعد إلى مثال “المستخدم الذي شارك بطاقة مع مستخدم مشبوه”:
MATCH (suspicious_user:User {id: 'user-123'})-[:USED]->(card:Card)<-[:USED]-(other_user:User)
RETURN other_user.id
هل ترى كم هو بسيط ومباشر؟ الاستعلام يقرأ كجملة: “ابحث عن المستخدم المشبوه الذي استخدم بطاقة، وهذه البطاقة استخدمها مستخدم آخر، ثم أرجع لي هوية المستخدم الآخر”.
كشف الشبكات الخفية بالكامل
القوة الحقيقية ظهرت عندما بدأنا نطرح أسئلة أعمق. أردنا أن نعرف ما إذا كان مستخدمنا المشبوه متصلاً بأي شكل من الأشكال (حتى 5 مستويات من العلاقات) بمحتال معروف في نظامنا.
MATCH (start_node:User {id: 'user-123'})
MATCH (end_node:User {is_fraudster: true})
MATCH path = allShortestPaths((start_node)-[*..5]-(end_node))
RETURN path
هذا الاستعلام، الذي كان من المستحيل تنفيذه في الوقت الفعلي باستخدام SQL، أعطانا الإجابة في أجزاء من الثانية. أظهر لنا مساراً واضحاً: المستخدم المشبوه استخدم جهازاً (1)، هذا الجهاز سجل الدخول من عنوان IP (2)، هذا الـ IP استخدمه مستخدم آخر (3) قام بمعاملة ببطاقة مسروقة (4) مرتبطة بمحتال معروف (5). كانت تلك هي اللحظة التي صرخنا فيها جميعاً “وجدناها!”. لقد كشفنا الشبكة بأكملها.
نصائح عملية من خبرة “أبو عمر”
الانتقال إلى تكنولوجيا جديدة يمكن أن يكون مخيفاً، لكنه ليس بحاجة لأن يكون كذلك. إليك بعض النصائح من تجربتنا:
ابدأ صغيراً، ولكن فكر على نطاق واسع
لست بحاجة إلى ترحيل كل شيء دفعة واحدة. ابدأ بإنشاء نسخة متزامنة من بياناتك ذات الصلة (المستخدمون، المعاملات، الأجهزة، إلخ) في قاعدة بيانات رسومية. استخدمها كنظام تحليل متخصص بجانب نظامك الحالي. عندما تثبت قيمتها، يمكنك التوسع.
نمذجة البيانات هي كل شيء (أهم إشي كيف ترتب بياناتك)
قوة الرسم البياني تكمن في النموذج الذي تصممه. خذ وقتك في التفكير في العقد والعلاقات. لا تقتصر على الواضح فقط. فكر في علاقات مثل: “هل تشارك المستخدمان نفس بصمة المتصفح؟”، “هل قاموا بالتسجيل في غضون دقيقة واحدة من بعضهم البعض؟”، “هل يستخدمون نفس كلمة المرور المشفرة؟” (نعم، هذه علامة حمراء كبيرة!). كلما كانت علاقاتك أغنى، كانت تحليلاتك أقوى.
استخدم خوارزميات الرسم البياني المدمجة
العديد من قواعد البيانات الرسومية تأتي مع مكتبات خوارزميات قوية. على سبيل المثال:
- Community Detection (كشف المجموعات): للعثور على مجموعات من المستخدمين المترابطين بشكل كبير، والتي غالباً ما تكون شبكات احتيالية.
- PageRank: لتحديد المستخدمين الأكثر “تأثيراً” أو مركزية في الشبكة، والذين قد يكونون قادة الشبكات الاحتيالية.
استخدام هذه الخوارزميات يمكن أن يحول نظامك من نظام كشف تفاعلي إلى نظام وقائي استباقي، حيث يمكنك تحديد المخاطر حتى قبل وقوع عملية الاحتيال.
الخلاصة يا جماعة الخير 🏁
كان الانتقال من قواعد البيانات العلائقية إلى قواعد البيانات الرسومية في مجال مكافحة الاحتيال أشبه بالانتقال من استخدام خريطة ورقية قديمة إلى استخدام نظام GPS حي ومباشر. كلاهما يوصلك، لكن أحدهما يريك الاختناقات المرورية والحوادث والطرق المختصرة التي لم تكن تعرف بوجودها.
إذا كنت تواجه صعوبة في كشف الأنماط المعقدة ومحاربة الشبكات، فربما حان الوقت للتوقف عن محاولة فرض منطق الشبكات على الجداول والصفوف. ابدأ في التفكير بالرسوم البيانية، لأن خصومك يفعلون ذلك بالفعل.
لا تخف من التغيير. أحياناً، أفضل حل لمشكلة معقدة هو ببساطة تغيير زاوية نظرك للمشكلة نفسها. ابدأوا بالرسم على اللوح الأبيض، وشوفوا كيف الشبكات بتصير أوضح. بالتوفيق! 🚀