تشخیص تقلب در پرداخت آنلاین با استفاده از یادگیری ماشین در پایتون
موسسه پایاپروژه به عنوان متصدی انجام پروژه های داده کاوی با پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری مبحث تشخیص تقلب در پرداخت آنلاین شما داشته باشد.
با نزدیک شدن به مدرنیته، روند پرداخت آنلاین به شدت در حال افزایش است. پرداخت آنلاین برای خریدار بسیار سودمند است زیرا باعث صرفه جویی در زمان می شود و مشکلات پولی را حل می کند و همچنین نیازی نیست پول نقد همراه خود داشته باشیم. اما همه ما می دانیم که چیزهای خوب همیشه یه سری مشکلات نیز دارند.
روش پرداخت آنلاین منجر به کلاهبرداری می شود که می تواند با استفاده از هر برنامه پرداخت اتفاق بیفتد. به همین دلیل است که تشخیص تقلب در پرداخت آنلاین بسیار مهم است.
در مقاله ی “تشخیص تقلب در پرداخت آنلاین با استفاده از یادگیری ماشینی در پایتون” سعی خواهیم کرد این مشکل را با کمک یادگیری ماشین در پایتون حل کنیم.
مجموعه داده ای که ما استفاده خواهیم کرد دارای این ستون ها است:
| step | در مورد واحد زمان می گوید |
| type | نوع معامله انجام شده |
| amount | کل مبلغ معامله |
| nameOrig | حسابی که تراکنش را شروع می کند |
| oldbalanceOrg | موجودی حساب فرستنده قبل از معامله |
| newbalanceOrg | موجودی حساب فرستنده پس از معامله |
| nameDest | حسابی که تراکنش را دریافت می کند |
| oldbalanceDest | موجودی حساب گیرنده قبل از معامله |
| newbalanceDest | موجودی حساب گیرنده پس از معامله |
| isFraud | مقدار قابل پیش بینی یعنی 0 یا 1 |
نکته: مقدار 0 و 1 در isFraud برای تشخیص کلاهبرداری بودن با نبودن پس از پردازش تمام اطلاعات در پایان اجرای برنامه است.
واردات کتابخانه ها و مجموعه داده ها
کتابخانه های مورد استفاده عبارتند از:
Pandas: این کتابخانه به بارگذاری قاب داده در قالب آرایه دو بعدی کمک می کند و دارای عملکردهای متعددی برای انجام وظایف تجزیه و تحلیل در یک حرکت است.
Seaborn / Matplotlib: برای تجسم داده ها.
Numpy: آرایه های Numpy بسیار سریع هستند و می توانند محاسبات بزرگ را در زمان بسیار کوتاهی انجام دهند.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
matplotlib inline%
مجموعه داده شامل ویژگی هایی مانند نوع پرداخت، موجودی قدیمی، مبلغ پرداختی، نام مقصد و غیره است.
data = pd.read_csv(‘new_data.csv’)
()data.head
:خروجی

برای چاپ اطلاعات داده ها می توانیم از دستور () data.infoاستفاده کنیم.
()data.info
:خروجی

بیایید میانگین، تعداد، حداقل و حداکثر مقادیر داده ها را ببینیم.
() data.describe
:خروجی

تجسم داده ها
در این بخش سعی می کنیم تمام ستون ها را درک و مقایسه کنیم.
بیایید ستون ها را با انواع داده های مختلف مانند Category، Integer، Float بشماریم.
obj = (data.dtypes == ‘object’)
object_cols = list(obj[obj].index)
print(“Categorical variables:”, len(object_cols))
int_ = (data.dtypes == ‘int’)
num_cols = list(int_[int_].index)
print(“Integer variables:”, len(num_cols))
fl = (data.dtypes == ‘float’)
fl_cols = list(fl[fl].index)
print(“Float variables:”, len(fl_cols))
:خروجی
Categorical variables: 3
Integer variables: 2
Float variables: 5
بیایید نمودار تعداد ستون نوع پرداخت را با استفاده از کتابخانه Seaborn ببینیم.
sns.countplot(x=’type’, data=data)
:خروجی

نمودار به وضوح نشان می دهد که بیشتر نوع cash_out و انتقال از نظر تعداد و همچنین از نظر مقدار حداکثر هستند.
بیایید توزیع داده ها را در بین هر دو مقدار پیش بینی بررسی کنیم.
()data[‘isFraud’].value_counts
:خروجی
8000 0
8000 1
مجموعه داده در حال حاضر در همان تعداد است. بنابراین نیازی به نمونه برداری نیست.
حال بیایید توزیع ستون step را با استفاده از distplot ببینیم.
plt.figure(figsize=(15, 6))
sns.distplot(data[‘step’], bins=50)
:خروجی

نمودار حداکثر توزیع را بین 200 تا 400 پله نشان می دهد.
اکنون، بیایید با استفاده از Heatmap همبستگی بین ویژگیهای مختلف را پیدا کنیم .
plt.figure(figsize=(12, 6))
,()sns.heatmap(data.corr
‘,cmap=’BrBG
‘, fmt=’.2f
, linewidths=2
( annot=True
:خروجی

پیش پردازش داده ها
این مرحله شامل موارد زیر است:
- رمزگذاری نوع ستون
- حذف ستون های نامربوط مانند nameOrig، nameDest
- تقسیم داده ها
type_new = pd.get_dummies(data[‘type’], drop_first=True)
data_new = pd.concat([data, type_new], axis=1)
()data_new.head
:خروجی

وقتی کدگذاری را تمام کردیم، اکنون میتوانیم ستونهای نامربوط را رها کنیم. برای این کار، کد زیر را دنبال کنید.
X = data_new.drop([‘isFraud’, ‘type’, ‘nameOrig’, ‘nameDest’], axis=1)
y = data_new[‘isFraud’]
بیایید شکل داده های استخراج شده را بررسی کنیم.
X.shape, y.shape
:خروجی
((16000,10),(16000,))
حالا بیایید داده ها را به دو بخش تقسیم کنیم: آموزش و آزمایش.
from sklearn.model_selection import train_test_split
)X_train, X_test, y_train, y_test = train_test_split
( X, y, test_size=0.3, random_state=42
آموزش مدل
از آنجایی که پیشبینی یک مشکل طبقهبندی است، مدلهایی که ما استفاده خواهیم کرد عبارتند از:
LogisticRegression: پیش بینی می کند که احتمال داده های داده شده به دسته خاصی تعلق دارد یا خیر.
XGBClassifier: به درخت های تصمیم تقویت شده Gradient اشاره دارد. در این الگوریتم، درختهای تصمیم به صورت متوالی ایجاد میشوند و وزنهایی به همه متغیرهای مستقل اختصاص مییابد که سپس به درخت تصمیم که نتایج را پیشبینی میکند، وارد میشود.
SVC : برای یافتن یک ابر صفحه در یک فضای N بعدی استفاده می شود که به طور مشخص نقاط داده را طبقه بندی می کند. سپس خروجی را مطابق نزدیک ترین عنصر می دهد.
RandomForestClassifier: طبقهبندیکننده جنگل تصادفی مجموعهای از درختهای تصمیم را از زیرمجموعهای انتخاب شده تصادفی از مجموعه آموزشی ایجاد میکند. سپس، آرا را از درخت های تصمیم گیری مختلف جمع آوری می کند تا پیش بینی نهایی را تعیین کند.
حال بیایید ماژول های مدل های مربوطه را وارد کنیم.
from xgboost import XGBClassifier
from sklearn.metrics import roc_auc_score as ras
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
پس از انجام واردات، بیایید مدل را آموزش دهیم.
,()models = [LogisticRegression(), XGBClassifier
,SVC(kernel=’rbf’, probability=True)
,RandomForestClassifier(n_estimators=7
‘,criterion=’entropy
[(random_state=7
:for i in range(len(models))
models[i].fit(X_train, y_train)
print(f'{models[i]} : ‘)
train_preds = models[i].predict_proba(X_train)[:, 1]
print(‘Training Accuracy : ‘, ras(y_train, train_preds))
y_preds = models[i].predict_proba(X_test)[:, 1]
print(‘Validation Accuracy : ‘, ras(y_test, y_preds))
:خروجی

ارزیابی مدل
بهترین مدل XGBClassifier است. بیایید ماتریس سردرگمی را برای همان ترسیم کنیم.
from sklearn.metrics import plot_confusion_matrix
plot_confusion_matrix(models[1], X_test, y_test)
()plt.show
:خروجی

