مشروع الكشف عن الاحتيال في بطاقة الائتمان - مشروع التعلم الآلي
نشرت: 2021-05-24مرحبًا بكم في مشروع الكشف عن الاحتيال لبطاقات الائتمان. اليوم ، سنستخدم Python والتعلم الآلي لاكتشاف الاحتيال في مجموعة بيانات لمعاملات بطاقات الائتمان. على الرغم من أننا شاركنا الكود لكل خطوة ، إلا أنه من الأفضل فهم كيفية عمل كل خطوة ثم تنفيذها.
هيا نبدأ!
جدول المحتويات
مشروع كشف الاحتيال على بطاقة الائتمان بخطوات
في مشروع الكشف عن الاحتيال ببطاقات الائتمان ، سنستخدم لغة Python ، إحدى أشهر لغات البرمجة المتاحة. سيكتشف حلنا ما إذا كان شخص ما قد تجاوز الجدران الأمنية لنظامنا وقام بإجراء معاملة غير مشروعة.
تحتوي مجموعة البيانات على معاملات بطاقات الائتمان ، وميزاتها هي نتيجة تحليل PCA. تحتوي على ميزات "المبلغ" و "الوقت" و "الفئة" حيث يُظهر "المبلغ" القيمة النقدية لكل معاملة ، ويعرض "الوقت" الثواني المنقضية بين المعاملة الأولى والمعاملة المعنية ، و "الفئة" تُظهر ما إذا كانت هناك معاملة شرعي أم لا.
في "الفئة" ، تمثل القيمة 1 معاملة احتيال ، وتمثل القيمة 0 معاملة صحيحة.
يمكنك الحصول على مجموعة البيانات وكود المصدر بالكامل هنا .
الخطوة الأولى: استيراد الحزم
سنبدأ مشروع الكشف عن الاحتيال الخاص ببطاقات الائتمان عن طريق تثبيت الحزم المطلوبة. أنشئ ملف "main.py" واستورد هذه الحزم:
استيراد numpy كـ np
استيراد الباندا كما pd
استيراد sklearn
من معيار الاستيراد scipy.stats
من scipy.stats استيراد multivariate_normal
من sklearn.preprocessing استيراد MinMaxScaler
استيراد matplotlib.pyplot كـ PLT
استيراد seaborn as sns
الخطوة 2: ابحث عن الأخطاء
قبل أن نستخدم مجموعة البيانات ، يجب أن نبحث عن أي أخطاء وقيم مفقودة فيها. يمكن أن يتسبب وجود القيم المفقودة في أن يعطي النموذج الخاص بك نتائج خاطئة ، مما يجعله غير فعال وغير فعال. ومن ثم ، سنقرأ مجموعة البيانات ونبحث عن أي قيم مفقودة:
df = pd.read_csv ("creditcardfraud / creditcard.csv")
# قيم مفقودة
طباعة ("القيم المفقودة:" ، df.isnull (). قيم أي ())
لم نعثر على أي قيم مفقودة في مجموعة البيانات هذه ، لذا يمكننا المتابعة إلى الخطوة التالية.
انضم إلى دورة الذكاء الاصطناعي عبر الإنترنت من أفضل الجامعات في العالم - الماجستير ، وبرامج الدراسات العليا التنفيذية ، وبرنامج الشهادات المتقدمة في ML & AI لتسريع مسار حياتك المهنية.
الخطوة 3: التصور
في هذه الخطوة من مشروع الكشف عن الاحتيال في بطاقات الائتمان ، سنقوم بتصور بياناتنا. يساعد التخيل في فهم ما تظهره بياناتنا ويكشف عن أي أنماط قد فاتناها. لنقم بإنشاء قطعة أرض لمجموعة البيانات الخاصة بنا:
# مؤامرة عادية و احتيال
count_classes = pd.value_counts (df ['Class'] ، sort = True)
count_classes.plot (نوع = 'شريط' ، تعفن = 0)
plt.title ("المعاملات الموزعة")
plt.xticks (النطاق (2) ، ["عادي" ، "الاحتيال"])
plt.xlabel ("فئة")
plt.ylabel ("التردد")
plt.show ()
في مؤامرة لدينا ، وجدنا أن البيانات غير متوازنة للغاية. هذا يعني أنه لا يمكننا استخدام خوارزميات التعلم الخاضع للإشراف لأنها ستؤدي إلى زيادة التجهيز. علاوة على ذلك ، لم نتوصل إلى أفضل طريقة لحل مشكلتنا ، لذلك سنقوم بمزيد من التخيل. استخدم ما يلي لرسم خريطة التمثيل اللوني:
# خريطة الحرارة
sns.heatmap (df.corr ()، vmin = -1)
plt.show ()
الآن ، سننشئ رسومًا بيانية لتوزيع البيانات لمساعدتنا على فهم مصدر بياناتنا:
شكل ، محاور = plt.subplots (6 ، 5 ، ضغط = خطأ)
بالنسبة إلى i ، تعداد الفأس (axs.flatten ()):
ax.set_facecolor ('xkcd: charcoal')
ax.set_title (df.columns [i])
sns.distplot (df.iloc [: ، i] ، الفأس = الفأس ، الملاءمة = القاعدة ،
color = ”# DC143C”، fit_kws = {“color”: “# 4e8ef5”})
ax.set_xlabel (”)
fig.tight_layout (h_pad = -1.5 ، w_pad = -1.5)
plt.show ()
باستخدام الرسوم البيانية لتوزيع البيانات ، وجدنا أن كل ميزة تقريبًا تأتي من التوزيع الغوسي باستثناء "الوقت".
لذلك سنستخدم التوزيع الغوسي متعدد المتغيرات لاكتشاف الاحتيال. نظرًا لأن ميزة "الوقت" فقط تأتي من التوزيع الثنائي (ولاحظ التوزيع الغاوسي) ، فسوف نتجاهلها. علاوة على ذلك ، كشف تصورنا أن ميزة "الوقت" لا تحتوي على أي قيم متطرفة مثل الآخرين ، وهذا سبب آخر لتجاهلنا لها.
أضف الكود التالي لإسقاط الميزات التي ناقشناها وتوسيع نطاق الميزات الأخرى:
الفصول = df ['Class']
df.drop (['Time'، 'Class'، 'Amount']، المحور = 1، inplace = True)
cols = df.columns.difference (['Class'])
MMscaller = MinMaxScaler ()
df = MMscaller.fit_transform (df)
df = pd.DataFrame (البيانات = df ، الأعمدة = العواميد)
df = pd.concat ([df ، الفئات] ، المحور = 1)
الخطوة 4: تقسيم مجموعة البيانات
قم بإنشاء ملف "jobs.py". سنضيف هنا وظائف لتنفيذ المراحل المختلفة للخوارزمية. ومع ذلك ، قبل أن نضيف هذه الوظائف ، دعنا نقسم مجموعة البيانات الخاصة بنا إلى مجموعتين ، مجموعة التحقق ومجموعة الاختبار.
استيراد الباندا كما pd
استيراد numpy كـ np
def train_validation_splits (df):
# معاملات الاحتيال
الاحتيال = df ['Class'] == 1]
# المعاملات العادية
عادي = df ['Class'] == 0]
طباعة ('normal:'، normal.shape [0])
print ('الاحتيال:'، الغش.شيب [0])
normal_test_start = int (normal.shape [0] * .2)
الاحتيال_test_start = int (الغش.شيب [0] * .5)
normal_train_start = normal_test_start * 2
val_normal = عادي [: normal_test_start]
val_fraud = الاحتيال [: crime_test_start]
Validation_set = pd.concat ([val_normal، val_fraud] ، المحور = 0)
test_normal = عادي [normal_test_start: normal_train_start]
test_fraud = graduate [
test_set = pd.concat ([test_normal، test_fraud]، المحور = 0)
Xval = validation_set.iloc [:،: -1]
Yval = validation_set.iloc [:، -1]
Xtest = test_set.iloc [:،: -1]
Ytest = test_set.iloc [:، -1]
train_set = عادي [normal_train_start: normal.shape [0]]
Xtrain = train_set.iloc [:،: -1]
إرجاع Xtrain.to_numpy () ، Xtest.to_numpy () ، Xval.to_numpy () ، Ytest.to_numpy () ، Yval.to_numpy ()
الخطوة 5: حساب مصفوفة المتوسط والتغاير
ستساعدنا الوظيفة التالية في حساب المتوسط ومصفوفة التغاير:
تقدير قيمة المواصفة (X):
"" "
تحسب المتوسط والتغاير لكل معلم.
الحجج:
X: مجموعة البيانات
"" "
mu = np.mean (X ، المحور = 0)
سيجما = np.cov (XT)
عودة مو ، سيجما
الخطوة 6: أضف اللمسات الأخيرة
في ملف "main.py" الخاص بنا ، سنقوم باستيراد واستدعاء الوظائف التي قمنا بتنفيذها في الخطوة السابقة لكل مجموعة:
(Xtrain ، Xtest ، Xval ، Ytest ، Yval) = train_validation_splits (df)
(مو ، سيجما) = grad_gaussian_params (Xtrain)
# حساب gaussian pdf
p = multivariate_normal.pdf (Xtrain ، mu ، سيجما)
pval = multivariate_normal.pdf (Xval، mu، sigma)
ptest = multivariate_normal.pdf (Xtest ، mu ، سيجما)
الآن علينا أن نشير إلى إبسيلون (أو العتبة). عادة ، من الأفضل تهيئة العتبة بالقيمة الدنيا لملف pdf وزيادة كل خطوة حتى تصل إلى الحد الأقصى لقوات الدفاع الشعبي مع حفظ كل قيمة إبسيلون في متجه.
بعد أن نقوم بإنشاء المتجه المطلوب ، نقوم بعمل حلقة 'for' ونكررها فوقها. نقارن العتبة بقيم pdf التي تولد تنبؤاتنا في كل تكرار.
نحسب أيضًا درجة F1 وفقًا لقيم الحقيقة الأساسية والتنبؤات. إذا كانت درجة F1 التي تم العثور عليها أعلى من النتيجة السابقة ، فإننا نتجاوز متغير "أفضل حد".
ضع في اعتبارك أنه لا يمكننا استخدام "الدقة" كمقياس في مشروع الكشف عن الاحتيال في بطاقة الائتمان. هذا لأنه سيعكس جميع المعاملات كالمعتاد بدقة 99٪ ، مما يجعل خوارزمية لدينا عديمة الفائدة.
سنقوم بتنفيذ جميع العمليات التي ناقشناها أعلاه في ملف "function.py" الخاص بنا:
مقاييس التعريف (ص ، التنبؤات):
fp = np.sum (np.all ([التوقعات == 1 ، y == 0] ، المحور = 0))
tp = np.sum (np.all ([التوقعات == 1 ، y == 1] ، المحور = 0))
fn = np.sum (np.all ([التوقعات == 0 ، y == 1] ، المحور = 0))
الدقة = (tp / (tp + fp)) إذا (tp + fp)> 0 else 0
الاستدعاء = (tp / (tp + fn)) إذا (tp + fn)> 0 else 0
F1 = (2 * دقة * استدعاء) / (دقة +
أذكر) إذا (الدقة + الاستدعاء)> 0 وإلا 0
عودة الدقة ، أذكر ، F1
تحديد def حد أدنى (yval ، pval):
e_values = pval
أفضل F1 = 0
أفضل إبسيلون = 0
لإبسيلون في e_values:
تنبؤات = pval <إبسيلون
(الدقة ، الاسترجاع ، F1) = المقاييس (yval ، التنبؤات)
إذا كان F1> bestF1:
أفضل F1 = F1
bestEpsilon = إبسيلون
إرجاع أفضل إبسيلون ، أفضل F1
في النهاية ، سنقوم باستيراد الوظائف في ملف "main.py" وندعوها لإرجاع درجة F1 والعتبة. سيسمح لنا بتقييم نموذجنا في مجموعة الاختبار:
(إبسيلون ، F1) = حدد عتبة (Yval ، pval)
طباعة ("أفضل ما تم العثور عليه من إبسيلون:" ، إبسيلون)
طباعة ("أفضل F1 في مجموعة التحقق من الصحة المتقاطعة:" ، F1)
(test_precision، test_recall، test_F1) = المقاييس (Ytest، ptest <epsilon)
طباعة ("تم العثور على القيم المتطرفة:" ، np.sum (ptest <epsilon))
print ("Test set Precision:"، test_precision)
طباعة ("استدعاء مجموعة الاختبار:" ، test_recall)
طباعة ("اختبار مجموعة الدرجة F1:" ، test_F1)
فيما يلي نتائج كل هذا الجهد:
تم العثور على أفضل إبسيلون: 5e-324
أفضل مجموعة التحقق من صحة F1 عند التقاطع: 0.7852998065764023
تم العثور على القيم المتطرفة: 210
اختبار مجموعة الدقة: 0.9095238095238095
مجموعة اختبار استدعاء: 0.7764227642276422
مجموعة الاختبار F1 النتيجة: 0.837719298245614
خاتمة
إليكم الأمر - مشروع للكشف عن الاحتيال في بطاقات الائتمان يعمل بكامل طاقته!
إذا كان لديك أي أسئلة أو اقتراحات بخصوص هذا المشروع ، فأخبرنا عن طريق إسقاط تعليق أدناه. نحب أن نسمع منك.
مع كل المهارات المكتسبة ، يمكنك أن تصبح نشطًا على منصات تنافسية أخرى أيضًا لاختبار مهاراتك والحصول على مزيد من التدريب العملي. إذا كنت مهتمًا بمعرفة المزيد عن الدورة التدريبية ، فراجع صفحة برنامج Execitive PG في التعلم الآلي والذكاء الاصطناعي وتحدث إلى مستشارنا المهني للحصول على مزيد من المعلومات.
ما هو الهدف من مشروع كشف الاحتيال لبطاقات الائتمان؟
الهدف من هذا المشروع هو التنبؤ بما إذا كانت معاملة بطاقة الائتمان احتيالية أم لا ، بناءً على مبلغ المعاملة والموقع والبيانات الأخرى المتعلقة بالمعاملات. يهدف إلى تعقب بيانات معاملات بطاقات الائتمان ، والتي يتم إجراؤها عن طريق الكشف عن الحالات الشاذة في بيانات المعاملات. عادةً ما يتم تنفيذ الكشف عن الاحتيال في بطاقة الائتمان باستخدام خوارزمية تكتشف أي حالات شاذة في بيانات المعاملة وتخطر حامل البطاقة (كإجراء وقائي) والبنك بأي معاملة مشبوهة.
كيف يساعد الكشف عن الاحتيال في بطاقة الائتمان في الكشف عن عمليات الاحتيال على بطاقات الائتمان ووقفها؟
لاكتشاف ووقف الاحتيال على بطاقات الائتمان ، تقوم شركة بطاقات الائتمان بتحليل البيانات التي تتلقاها من التجار حول المستهلكين الذين أجروا عمليات شراء باستخدام بطاقتهم. تقارن شركة بطاقات الائتمان تلقائيًا البيانات من الشراء مع البيانات المخزنة مسبقًا على المستهلك لتحديد ما إذا كان الشراء والمستهلك متسقين. يقوم الكمبيوتر بتحليل بيانات المستهلك ومقارنتها ببيانات الشراء. يحاول الكمبيوتر أيضًا اكتشاف أي اختلاف بين تاريخ مشتريات المستهلك والشراء الحالي. يقوم الكمبيوتر بعد ذلك بإجراء تحليل للمخاطر لعملية الشراء ويحدد ما إذا كان ينبغي على الشركة السماح بمرور عملية الشراء.
ما هي خوارزمية التعلم الآلي المستخدمة في اكتشاف الاحتيال على بطاقة الائتمان؟
هناك العديد من خوارزميات التعلم الآلي المستخدمة في الكشف عن الاحتيال في بطاقات الائتمان. واحدة من الخوارزميات الأكثر شيوعًا هي SVM أو آلات المتجهات الداعمة. يعد SVM خوارزمية تصنيف وانحدار تكيفية مع العديد من التطبيقات في علوم الكمبيوتر. يتم استخدامه في الكشف عن الاحتيال في بطاقة الائتمان للتنبؤ بمجموعة بيانات جديدة وتصنيفها إلى مجموعة من الفئات المحددة مسبقًا (تسمى أيضًا الفئات). يمكن استخدام SVM في الكشف عن الاحتيال ببطاقات الائتمان للتنبؤ بما إذا كانت البيانات الجديدة تنتمي إلى فئة معينة تم تحديدها بالفعل من قبلنا.