تشخیص تخلف در کارت های اعتباری

مقدمه

از آغاز مسیر خود در علوم داده همواره به فکر استفاده از علوم داده برای اقدامات مثبت و ایجاد ارزش از طریق آن بوده ام. بنابراین وقتی با مجموعه داده های مربوط به تشخیص تخلف در Kaggle برخورد کردم، نظرم رو در نگاه اول جلب کرد. این مجموعه داده 31  ویژگی دارد که 28 ویژگی از آنها (از V1 تا V28) ناشناس و بدون نام هستند. 3 ویژگی دیگر از این مجموعه مبلغ تراکنش زمان آن و برچسب تخلف تراکنش می باشد. قبل از بارگذاری در Kaggle ستون های بدون نام با استفاده از PCA (تحلیل مولفه اصلی) تغییر داده شده اند. همچنین هیچ سطر یا ستون بدون مقدار در این مجموعه وجود ندارد. با استناد به این مقدمه در رابطه با مجموعه داده به سراغ نگاه تحلیلی تر از این داده ها می رویم.

پروژه در github

تحلیل داده ها به صورت تحقیقی (EDA)

از آنجایی اغلب ستون های مجموعه داده به صورت ناشناس ارائه شده اند، در مرحله اول تمرکز را به روی داده های که برچسب مشخص دارند قرار می دهیم. این مجموعه داده دارای 284,807 تراکنش می باشد. میانگین تمامی تراکنش ها 88.35 دلار است،  در حالی که بزرگترین تراکنش ثبت شده از نظر مبلغ معادل 25,691.16 دلار می باشد. با این توضیحات و مقدار میانگین و حداکثری تراکنش ها، همانطور که حدس زدید پراکندگی تراکنش به سمت چپ و نزدیک به میانه پایینی تراکنش ها می باشد. حجم زیادی از تراکنش ها مقادیر کم دارند و مقدار ناچیزی از تراکنش ها حتی به نزدیکی بیشینه تراکنش ثبت شده می رسند.

 

زمان ثبت شده در مجموعه داده بر اساس ثانیه نسبت به اولین تراکنش می باشد، بنابراین  میتوان نتیجه گرفت که مجموعه این داده ها در طول دو روز جمع آوری شده است. همچنین نمودار توزیع زمانی نشان می دهد تقریبا بعد از 28 ساعت از اولین تراکنش افت قابل توجهی در تراکنش ها صورت گرفته است و با توجه به این که زمان اولین تراکنش در دسترس نمی باشد می توان حدس زد که افت تراکنش ها در طول شب رخ داده است.

نمودار بعد توزیع تراکنش های همراه با تخلف و تراکنش های بدون تخلف را نمایش میدهد، همانطور که انتظار می رود 99.83 درصد تراکنش ها بدون تخلف و تنها  0.17% تراکنش ها همراه با خطا هستند.

پیدا کردن متغیرهای که با خروجی کلاس مورد نظر ما همسو هستند در انتها جذاب خواهد بود. یکی از بهترین گزینه ها برای به تصویر کشیدن این امر استفاده از heatmap می باشد.

همانطور که مشاهده می نمایید برخی از این متغیرها به زیبایی با کلاس مورد نظر جهت پیش بینی همسو هستند. با این وجود به نظر می رسد برای مجموعه داده ای با این تعداد متغیر تعداد ویژگی هایی که با هم همسو هستند خیلی هم زیاد نیست و این مساله می تواند به دلیل یکی از موارد زیر باشد.

  1. داده ها با استفاده از PCA از پیش آماده شده اند. متغیرهای پیش بینی ما مولفه های اصلی هستند.
  2. عدم توازن اساسی در کلاس می تواند اهمیت همسویی متغیرها با خروجی مورد نظر را تحت و الشعاع قرار دهد

 

آماده سازی اطلاعات

پیش از آنکه به تحلیل اطلاعات ادامه دهیم مهم است فراموش نکنیم که برخلاف مقادیر مبلغ  و زمان، داده های بدون برچسب از لحاظ مقیاس، استاندارد شده اند و در محدوده صفر قرار دارند در حالی که پارامترهای مربوط به مبلغ و زمان چنین شرایطی را ندارند. استاندارد نکردن این مقادیر ممکن است باعث شود برخی از الگوریتمها که به متغییرهای موجود وزن میدهند (همانند logistic regression) یا الگوریتم هایی که بر اساس ارزیابی فاصله عمل می کنند (همانند KNN)، عملکرد نامناسبی مشاهده شود. برای پیشگیری از این مساله بهتر است ستون های زمان و مبلغ ر ا نیز استاندارد کرد و با توجه به این که سطر بدون داده ای وجود ندارد نگران پیشبینی سطرهای بدون داده نخواهیم بود.

ایجاد نمونه داده یادگیری برای مجموعه داده بسیار نامتوازن

ایجاد نمونه داده یادگیری که به الگوریتمهای انتخابی این امکان را میدهد تا ویژگی های لازم برای تشخیص تخلف در تراکنش را تشخیص دهد چالش برانگیز است.  با دلایلی ساده ای ثابت شده است که استفاده از داده های اصلی ایده خوبی برای یادگیری نیست، از آنجایی که بیش از 99% تراکنش ها بدون تخلف هستند الگوریتمی که اغلب تراکنش ها را به همین ترتیب با دقت 99% بدون تخلف تشخیص دهد کارآمد نخواهد بود و دقیقا برعکس چیزی است که ما میخواهیم. قصد ما برچسب گذاری داده بدون تخلف با دقت 99% نمی باشد بلکه می خواهیم تراکنش ها همراه با تخلف را برچسب گذاری کنیم.

دو نکته مهم جهت تمرکز برای کمک به حل این مسئله وجود دارد. اول، بکارگیری از random under-sampling  برای تولید داده های اولیه یادگیری که الگوریتم یادگیری را یا بهره گیری از توزیع متوازن مجبور به تشخیص تراکنش های همراه با تخلف با دقت بالا می نماید.

برای ایجاد داده های یادگیری متوازن، تمامی داده های همراه با تخلف را از داخل مجموعه داده ها برداشته و آنها را می شماریم. سپس به صورت تصادفی به همان تعداد داده های بدون تخلف را از مجموعه داده ها خارج میکنیم و با مجموعه قبل ترکیب می نماییم. بعد از همزدن مجموعه جدید تابع توزیع را برای نمایش بصری مجددا نمایش می دهیم.

تشخیص و حذف Outlier

تشخیص داده های خارج از محدوده موضوع پیچیده است. تشخیص میزان مناسب از حذف داده ها برای کاهش داده های خارج از محدوده و یا نگه داشتن حجم داده های بیشتر موجود برای ایجاد الگوریتم با پذیرفتن حجم بالا داده های خارج از محدود کار سختی است و به شدت به نوع داده ها و صورت مسئله موجود بستگی دارد. در مورد نمونه داده های ما تصمیم گرفته شد تا مشخصا بر روی ویژگی هایی با همگرای 0.5 و بالاتر تمرکز شود. قبل از حذف این داده های بهتر است نگاه به نمودارهای (Box plots) توزیع این ویژگی ها بیندازیم.

 

نمودار Box plots ذهنیت خوبی در رابطه با داده های خارج از محدوده برای ما ایجاد میکند با توجه به اینکه تمامی تراکنش های فراتر از 1.5 برابر IQR (Inter-Quartile Range) اغلب به عنوان داده خارج از محدوده تصور می شوند. از طرفی حذف تمامی داده داد ها با این نرخ حجم داده های یادگیری را به شدت کاهش میدهد که در حال عادی هم بسیار بزرگ نیست. بنابراین در این نمونه داده تصمیم گرفته شد که داده های با ضریب بیش از 2.5 به عنوان داده های خارج از محدوده در نظر گرفته شود.

 

کاهش ابعاد داده با  t-SNE برای تصویرسازی

تصویر سازی کلاس ها بسیار جذاب است و به ما وضعیت کلاس ها و اینکه چقدر خوب  از یکدیگر جدا شده اند را نمایش می دهد. با این حال امکان تولید تصویر با 30 بعد با حضور تمامی شاخص ها امکان پذیر نمی باشد. به صورت جایگزین با استفاده از یک تکنیک کاهش ابعاد همچون  t-SNE می توانیم پروژه ها با ابعاد بسیار را به ابعاد کوچکتر جهت تصویر سازی تبدیل کرد. برای این پروژه تصمیم گرفته شده تا از t-SNE استفاده شود.

نمایش داده در یک فضای دو بعدی به ما این امکان را میدهد تا نمودار گسسته توزیع داده ها را در قالب  scatter plot برای داده های همراه با تخلف و بدون تخلف ایجاد کنیم.

الگوریتم های دسته بندی (Classifications)

سرانجام به بخشی که مدتها انتظارش را میکشیدیم رسیدم: یادگیری الگوریتم یادگیری ماشین. برای ارزیابی عملکرد الگوریتم یادگیری ماشین، داده ها را در ابتدا با ترکیب 80/20 به دو قسمت 80 برای یادگیری و 20 برای تست تقسیم می کنیم. برای جلوگیری از overfitting در مدل از روش مرسوم بازنمونه گیری k-fold استفاده کرده ایم. این بدین معنی است که داده ها را به k قسمت تقسیم کرده و مدل را با k-1 قسمت آموزش می دهیم برای پیشبینی بخش k. این کار را برای تمامی بخش ها انجام می دهیم و میزان متوسط پیشبینی را محاسبه میکنیم.

برای پیدا کردن اطلاعات بهتر در رابطه با اینکه کدام الگوریتم برای نمونه داده ما مناسب تر است و بررسی عملکرد آنها لیستی از الگوریتم های دسته بندی محبوب را در زیر مشاهده می کنید:

  • Logistic Regression
  • Linear Discriminant Analysis
  • K Nearest Neighbors (KNN)
  • Classification Trees
  • Support Vector Classifier
  • Random Forest Classifier
  • XGBoost Classifier

نتیجه بررسی الگوریتم های مختلف در نمودار زیر قابل مشاهده است:

همانطور که مشاهده می فرمایید، تعدادی از الگوریتم ها نسبت به بقیه عملکرد واقعا بهتری داشته اند. با در نظر گرفتن این موضوع کدام الگوریتم را انتخاب کنیم؟ همانطور که بالا هم اشاره شد هدف از ایجاد این پروژه علاوه بر دقت ایجاد ارزش در کسب و کار است. بنابراین انتخاب Random Forest به جای XGBoost بخاطر درجه بالای جامعیت با پذیرفتن اندک کارایی کمتر، باید گزینه منصفانه ای باشد. برای توضیح بیشتر خروجی کار در ادامه تصویر درخت تصمیم گیری مربوط به مدل ایجاد شده زیر و دلیل تصمیم گیری های صورت گرفته را می توانید مشاهده کنید.

 

نتیجه گیری و کارهای پیش رو

شناسایی تخلف موضوع پیچیده است که حجم بالایی از طراحی و نیازمند سنجی را قبل از ورود به مساله یادگیری ماشین نیاز دارد. با این وجود، موضوعی در مسیر کارآمد در حوزه علوم داده و یادگیری ماشین می باشد، که باعث میشود تا اطمینان حاصل کنیم دارایی های مشتریان در امان هستند.

اقدامات بیشتر مستلزم بهبود الگوریتم  Random Forest می باشد. همچنین داشتن اطلاعات بیشتر در رابطه با داده این امکان را میدهد که متغیر ها را عمیق تر بررسی کرد و تاثیر آنها را در تشخیص خطا بیشتر مشاهده نمود.

 

منبع : وب سایت towardsdatascience