معاملاتي كانت هدفًا سهلاً للمحتالين: كيف أنقذني التعلم الآلي لكشف الاحتيال من جحيم الخسائر المالية؟

يا جماعة الخير، السلام عليكم. معكم أخوكم أبو عمر.

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

لحد ما إجا هداك الإيميل من بوابة الدفع الإلكتروني. “إشعار بعملية رد المبالغ المدفوعة (Chargeback)”. فتحته وأنا مش فاهم شو القصة. لقيت إنه في عميل اشترى مني منتج بقيمة محترمة، وبعدها راح لبنكه وحكالهم “أنا ما عملت هاي العملية!”. البنك، طبعاً، صدّق العميل ورجّعله مصاريه وسحبهم من حسابي، وفوقها غرّمني رسوم إضافية. أنا خسرت قيمة المنتج، وخسرت رسوم العملية، وكمان دفعت غرامة!

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

هون، قررت إنه “خلص، بكفي”. أنا مبرمج ذكاء اصطناعي، كيف أسمح لمشكل زي هاي تهزمني؟ قررت أستخدم سلاحي اللي بعرفه منيح: التعلم الآلي. ومن يومها، تغير كل شيء. خلوني أحكيلكم كيف.

لماذا الطرق التقليدية لم تعد كافية؟ (مشكلة أنظمة القواعد)

قبل ما ندخل في تفاصيل التعلم الآلي، لازم نفهم كيف كانت الشركات تحارب الاحتيال زمان (وللأسف، بعضها لا يزال يفعل). الطريقة التقليدية كانت تعتمد على “أنظمة القواعد” (Rule-based Systems).

الفكرة بسيطة: المبرمج بيكتب مجموعة من الشروط الصارمة. مثلاً:

  • إذا كانت قيمة العملية أكبر من 1000 دولار، أرسل العملية للمراجعة اليدوية.
  • إذا كانت الدولة المسجل منها الآي بي تختلف عن دولة إصدار البطاقة، ارفض العملية.
  • إذا حاول المستخدم الدفع بأكثر من 3 بطاقات مختلفة خلال ساعة، احظر الحساب.

هذا النظام يبدو منطقياً في البداية، لكن مشكلته كبيرة:

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

هون بيجي دور البطل تبعنا: التعلم الآلي.

التعلم الآلي لكشف الاحتيال: السحر الحقيقي

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

مثلاً، النموذج ممكن يلاحظ إن العمليات الاحتيالية غالباً ما بتصير الساعة 3 الفجر، من جهاز جديد، بمبلغ متوسط (لا هو عالي جداً فيلفت الانتباه ولا هو قليل جداً)، وباستخدام إيميل تم إنشاؤه قبل يومين فقط. هاي التفاصيل الدقيقة هي قوة التعلم الآلي.

مراحل بناء نظام كشف الاحتيال خطوة بخطوة

خلونا ندخل في الجانب العملي. بناء نظام زي هاد بمر بمراحل واضحة، وكل مرحلة أهم من اللي قبلها.

1. جمع البيانات وهندسة الميزات (Feature Engineering)

هادي أهم خطوة “من الآخر”. جودة النموذج بتعتمد 90% على جودة البيانات اللي بتعطيها إياه. البيانات اللي بنحتاجها ممكن تكون:

  • معلومات العملية: قيمة المبلغ، العملة، وقت وتاريخ العملية.
  • معلومات المستخدم: تاريخ إنشاء الحساب، عدد العمليات السابقة، متوسط قيمة مشترياته.
  • معلومات الجهاز والدفع: عنوان IP، نوع الجهاز، بصمة المتصفح، أول 6 أرقام من البطاقة (BIN).
  • ميزات سلوكية (Velocity Checks): عدد العمليات لنفس المستخدم في آخر ساعة/يوم، عدد البطاقات المستخدمة، إلخ.

نصيحة من أبو عمر: هندسة الميزات (Feature Engineering) هي الفن الحقيقي في التعلم الآلي. لا تكتفِ بالبيانات الخام. فكّر كمحتال! اسأل نفسك: “لو كنت محتالاً، ما هي السلوكيات غير الطبيعية التي سأقوم بها؟”. مثلاً، يمكنك إنشاء “ميزة” جديدة مثل “المسافة بين موقع IP العملية وموقع عنوان الفاتورة”. لو المسافة آلاف الكيلومترات، فهذه إشارة خطر!

2. المعالجة المسبقة للبيانات (Data Preprocessing)

البيانات اللي بنجمعها نادراً ما تكون نظيفة وجاهزة. لازم نمررها بمرحلة تنظيف وتحضير، وتشمل:

  • التعامل مع القيم المفقودة: مثلاً، لو ما عندك تاريخ إنشاء حساب لعميل جديد، كيف بتتعامل معها؟
  • تحويل البيانات النصية: النموذج ما بفهم نصوص زي “مصر” أو “الأردن”. لازم نحولها لأرقام (e.g., One-Hot Encoding).
  • توحيد المقاييس (Scaling): قيمة العملية ممكن تكون بين 1 و 5000، بينما عدد العمليات السابقة بين 0 و 50. هذا الفرق الكبير ممكن يضلل النموذج، فلازم نعمل Scaling عشان نخليهم في نطاق متقارب.

3. تدريب النموذج (Model Training) – معضلة البيانات غير المتوازنة

هون بنختار خوارزمية التعلم الآلي وبنبدأ ندربها. الخوارزميات الشائعة في هذا المجال هي:

  • الانحدار اللوجستي (Logistic Regression): بسيط وسريع، وممتاز كنقطة بداية (Baseline).
  • الغابات العشوائية (Random Forests): قوية جداً وتقدر تفسر قراراتها بشكل جيد.
  • التعزيز المتدرج (Gradient Boosting – XGBoost, LightGBM): هدول هم وحوش المجال. غالباً ما بيعطوا أفضل دقة لكنهم أعقد شوي.

مشكلة كبيرة رح تواجهك: البيانات غير متوازنة (Imbalanced Data). العمليات الاحتيالية قليلة جداً مقارنة بالعمليات الحقيقية (ممكن تكون أقل من 1%). لو درّبت النموذج على هاي البيانات مباشرة، رح يتعلم أسهل طريق: “صنّف كل شيء على أنه حقيقي وستكون دقتك 99%!”.

الحل؟ في تقنيات للتعامل مع هذا، أشهرها:

  • SMOTE (Synthetic Minority Over-sampling Technique): تقوم هذه التقنية “بتوليد” عينات احتيال جديدة صناعياً تشبه العينات الحقيقية، وبهيك بتوازن الكفة.
  • استخدام أوزان الفئات (Class Weights): بتخلي النموذج يهتم أكثر بالخطأ في تصنيف الفئة الأقل (الاحتيال) ويعطيها “وزن” أكبر عند التدريب.

4. تقييم النموذج (Model Evaluation)

كيف بنعرف إذا نموذجنا “شغل مرتب”؟ مقياس الدقة (Accuracy) خادع جداً هنا كما ذكرنا. لازم نستخدم مقاييس أدق:

  • الدقة (Precision): من بين كل العمليات اللي صنّفها النموذج على أنها احتيال، كم نسبة اللي كانت فعلاً احتيال؟ (مهم عشان ما نزعج العملاء الحقيقيين).
  • الاستدعاء (Recall): من بين كل العمليات الاحتيالية الحقيقية، كم نسبة اللي قدر النموذج يمسكها؟ (مهم عشان ما نخسر مصاري).
  • F1-Score: هو المتوسط التوافقي بين المقياسين السابقين، بيعطينا فكرة متوازنة عن أداء النموذج.
  • منحنى ROC-AUC: مقياس احترافي يقيس قدرة النموذج على التمييز بين الفئتين. كلما اقتربت النتيجة من 1، كان النموذج أفضل.

مثال عملي بالكود (Python)

هذا مثال مبسط جداً باستخدام مكتبة `scikit-learn` في بايثون عشان أوضح الفكرة. تخيل عنا ملف `transactions.csv` فيه بيانات عمليات.


import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# 1. تحميل وتحضير البيانات (تخيلية)
# في الواقع، ستحتوي على عشرات الميزات
data = {
    'amount': [100, 2500, 50, 120, 8000, 150],
    'hour_of_day': [14, 3, 18, 15, 2, 22],
    'user_history_months': [12, 0, 24, 5, 0, 30],
    'is_fraud': [0, 1, 0, 0, 1, 0] # 0: حقيقي, 1: احتيال
}
df = pd.DataFrame(data)

# فصل الميزات (X) عن الهدف (y)
X = df[['amount', 'hour_of_day', 'user_history_months']]
y = df['is_fraud']

# 2. تقسيم البيانات إلى مجموعات تدريب واختبار
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y)

# 3. تدريب النموذج
# class_weight='balanced' مهم جداً للبيانات غير المتوازنة
model = RandomForestClassifier(n_estimators=100, random_state=42, class_weight='balanced')
model.fit(X_train, y_train)

# 4. تقييم النموذج
predictions = model.predict(X_test)
print("--- تقرير أداء النموذج ---")
print(classification_report(y_test, predictions))

# 5. استخدام النموذج للتنبؤ بعملية جديدة
print("n--- التنبؤ بعملية جديدة ---")
new_transaction = [[4500, 2, 0]] # مبلغ عالي، وقت متأخر، مستخدم جديد
prediction = model.predict(new_transaction)
probability = model.predict_proba(new_transaction)

if prediction[0] == 1:
    print(f"العملية مشبوهة بنسبة احتيال: {probability[0][1]*100:.2f}% -> إرسال للمراجعة!")
else:
    print(f"العملية تبدو حقيقية بنسبة: {probability[0][0]*100:.2f}% -> قبول العملية.")

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

الخلاصة: من ضحية إلى حارس بوابة 🛡️

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

نصيحتي الأخيرة لك، سواء كنت صاحب عمل أو مبرمجاً مهتماً بالمجال: ابدأ الآن. لا تنتظر حتى تقع الفأس في الرأس. ابدأ بتعلم الأساسيات، اجمع بياناتك بانتظام حتى لو لم تكن ستستخدمها اليوم، وجرّب بناء نموذج بسيط. الرحلة طويلة، لكن كل خطوة فيها ستحمي مستقبلك المالي. بالتوفيق يا جماعة الخير!

أبو عمر

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

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

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

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

آخر المدونات

الحوسبة السحابية

خوادمي كانت تعمل 24/7: كيف أنقذتني “الحوسبة بدون خوادم” (Serverless) من جحيم الفواتير؟

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

30 مارس، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

مقابلاتي التقنية كانت فوضى: كيف أنقذني إطار عمل تصميم الأنظمة من جحيم ‘سوف نُعلمك بالنتيجة’؟

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

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

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

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

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

اختباراتي كانت تمر، لكن الكود كان هشًا: كيف أنقذني ‘الاختبار الطفري’ (Mutation Testing) من جحيم الثقة الزائفة؟

كنت أظن أن تغطية الاختبارات بنسبة 100% هي درع الأمان لكودي، إلى أن كشف لي "الاختبار الطفري" (Mutation Testing) عن هشاشة هذه الثقة. في هذه...

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

كنت أقضي ساعاتي في كتابة الكود المتكرر: كيف أنقذني ‘المبرمج الزوجي الاصطناعي’ من جحيم إعادة اختراع العجلة؟

أشارككم تجربتي كـ "أبو عمر"، مبرمج فلسطيني، وكيف حولت أدوات الذكاء الاصطناعي مثل GitHub Copilot طريقة عملي. اكتشفوا كيف تخلصت من الكود المتكرر وزدت إنتاجيتي...

30 مارس، 2026 قراءة المزيد
نصائح برمجية

الكود الخاص بي كان هرمًا: كيف أنقذتني ‘شروط الحماية’ (Guard Clauses) من جحيم الكود السهمي؟

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

30 مارس، 2026 قراءة المزيد
​معمارية البرمجيات

تطبيقي المونوليثي كان وحشًا: كيف أنقذني نمط ‘التين الخانق’ (Strangler Fig) من جحيم التحديث المستحيل؟

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

30 مارس، 2026 قراءة المزيد
خوارزميات

بحثي كان يقرأ كل سطر: كيف أنقذتني خوارزمية ‘البحث الثنائي’ (Binary Search) من جحيم الانتظار الطويل؟

أشارككم قصة حقيقية من بداياتي في البرمجة، عندما كان كود البحث البطيء كابوساً يؤرقني. اكتشفوا معي كيف غيرت خوارزمية البحث الثنائي البسيطة كل شيء، وحولت...

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