يا جماعة الخير، السلام عليكم. معكم أخوكم أبو عمر.
بتذكر هذاك اليوم زي كأنه مبارح. كنت قاعد في مكتبي الصغير، بحاول أدير متجر إلكتروني بسيط كنت عامله جنب شغلي الأساسي في البرمجة. كنت أبيع فيه منتجات رقمية، يعني قوالب تصميم وأشياء زي هيك. الأمور كانت ماشية، “الحمد لله”، والطلبات بتيجي، وأنا مبسوط إنه هالمشروع الصغير بلش يوقف على رجليه.
لحد ما إجا هداك الإيميل من بوابة الدفع الإلكتروني. “إشعار بعملية رد المبالغ المدفوعة (Chargeback)”. فتحته وأنا مش فاهم شو القصة. لقيت إنه في عميل اشترى مني منتج بقيمة محترمة، وبعدها راح لبنكه وحكالهم “أنا ما عملت هاي العملية!”. البنك، طبعاً، صدّق العميل ورجّعله مصاريه وسحبهم من حسابي، وفوقها غرّمني رسوم إضافية. أنا خسرت قيمة المنتج، وخسرت رسوم العملية، وكمان دفعت غرامة!
بالأول قلت “يلا بسيطة، بتحصل”. بس الموضوع تكرر. مرة، ومرتين، وعشرة. صرت أشوف إيميل الـ Chargeback وأحس قلبي بنغزني. المحتالين كانوا “متصيدين” متجري الصغير لأنه ما كان عندي أي نظام حماية حقيقي. كنت زي البيت اللي بابه مفتوح على الشارع. صرت أراجع كل عملية يدوياً، أشيّك على الآي بي، وأحاول أخمّن إذا العملية حقيقية ولا نصب. بس هادا الحكي كان جحيم: بياخد وقت، وبخليني أرفض عمليات لناس محترمين بالخطأ، والنزيف المالي ما وقف.
هون، قررت إنه “خلص، بكفي”. أنا مبرمج ذكاء اصطناعي، كيف أسمح لمشكل زي هاي تهزمني؟ قررت أستخدم سلاحي اللي بعرفه منيح: التعلم الآلي. ومن يومها، تغير كل شيء. خلوني أحكيلكم كيف.
لماذا الطرق التقليدية لم تعد كافية؟ (مشكلة أنظمة القواعد)
قبل ما ندخل في تفاصيل التعلم الآلي، لازم نفهم كيف كانت الشركات تحارب الاحتيال زمان (وللأسف، بعضها لا يزال يفعل). الطريقة التقليدية كانت تعتمد على “أنظمة القواعد” (Rule-based Systems).
الفكرة بسيطة: المبرمج بيكتب مجموعة من الشروط الصارمة. مثلاً:
- إذا كانت قيمة العملية أكبر من 1000 دولار، أرسل العملية للمراجعة اليدوية.
- إذا كانت الدولة المسجل منها الآي بي تختلف عن دولة إصدار البطاقة، ارفض العملية.
- إذا حاول المستخدم الدفع بأكثر من 3 بطاقات مختلفة خلال ساعة، احظر الحساب.
هذا النظام يبدو منطقياً في البداية، لكن مشكلته كبيرة:
- جامد وغير مرن: المحتالون أذكياء، وبمجرد ما يعرفوا القواعد، بصيروا يتحايلوا عليها بسهولة.
- إيجابيات كاذبة كثيرة (False Positives): ممكن عميل حقيقي ومحترم يكون مسافر ويستخدم بطاقته من بلد ثاني، فيقوم النظام برفض عمليته! هيك أنت خسرت عميل جيد وأزعجته.
- صعب الصيانة: مع الوقت، بتصير عندك مئات بل آلاف القواعد المتشابكة، وأي تعديل صغير ممكن يكسر المنظومة كلها. شغل مش مرتب بالمرة.
هون بيجي دور البطل تبعنا: التعلم الآلي.
التعلم الآلي لكشف الاحتيال: السحر الحقيقي
ببساطة شديدة، بدل ما نكتب قواعد ثابتة، إحنا بنخلي الكمبيوتر “يتعلم” الأنماط اللي بتميز بين العملية الحقيقية والعملية الاحتيالية من خلال تحليل آلاف أو ملايين العمليات السابقة. النموذج (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}% -> قبول العملية.")
طبعاً هذا مثال بسيط جداً، لكنه يوضح سير العمل الأساسي. في الأنظمة الحقيقية، تكون الميزات أكثر تعقيداً بعشرات المرات، والبيانات بالملايين.
الخلاصة: من ضحية إلى حارس بوابة 🛡️
التحول من مراجعة يدوية مرهقة وخسائر مالية موجعة إلى نظام آلي ذكي كان نقلة نوعية. لم يقتصر الأمر على حماية أموالي فقط، بل أعطاني راحة بال وثقة لأركز على تنمية عملي بدلاً من مطاردة المحتالين. التعلم الآلي ليس عصا سحرية، بل هو أداة قوية جداً تحتاج إلى فهم، بيانات جيدة، وعمل دؤوب.
نصيحتي الأخيرة لك، سواء كنت صاحب عمل أو مبرمجاً مهتماً بالمجال: ابدأ الآن. لا تنتظر حتى تقع الفأس في الرأس. ابدأ بتعلم الأساسيات، اجمع بياناتك بانتظام حتى لو لم تكن ستستخدمها اليوم، وجرّب بناء نموذج بسيط. الرحلة طويلة، لكن كل خطوة فيها ستحمي مستقبلك المالي. بالتوفيق يا جماعة الخير!