
Author(s): Fares Sayah
Awalnya diterbitkan di Menuju AI.
Proyek Pembelajaran Mesin Selangkah demi Selangkah dengan Python — Deteksi Penipuan Kartu Kredit
Demonstrasi Cara Menangani Masalah Klasifikasi yang Sangat Tidak Seimbang
Foto oleh CardMapr di UnsplashApa itu Penipuan Kartu Kredit? Penipuan kartu kredit terjadi ketika seseorang menggunakan kartu kredit atau informasi akun orang lain tanpa izin untuk melakukan pembelian yang tidak sah atau menarik dana melalui penarikan tunai. Itu bisa terjadi baik online maupun di toko fisik. Sebagai pemilik bisnis, Anda dapat melindungi diri dari potensi sakit kepala dan publisitas negatif dengan waspada dan mengidentifikasi kasus penggunaan kartu kredit penipuan dalam sistem pembayaran Anda.
Tiga tantangan seputar Penipuan Kartu Kredit
Tidak selalu mudah untuk menyetujui kebenaran dasar dari apa yang dimaksud dengan “penipuan”. Terlepas dari bagaimana Anda mendefinisikan kebenaran dasar, sebagian besar tuduhan bukanlah penipuan. Sebagian besar pedagang tidak ahli dalam mengevaluasi dampak bisnis dari penipuan.
Pernyataan masalah:
Tujuan dari Deteksi Penipuan Kartu Kredit adalah untuk secara akurat mengidentifikasi transaksi penipuan dari kumpulan besar transaksi kartu kredit dengan membangun model prediktif berdasarkan data transaksi sebelumnya. Tujuannya adalah untuk mendeteksi semua transaksi penipuan dengan alarm palsu minimum.
Pengamatan
Kumpulan data sangat tidak seimbang, dengan hanya 0,172% pengamatan yang curang. Dataset terdiri dari 28 fitur yang diubah (V1 hingga V28) dan dua fitur yang tidak diubah (Waktu dan Jumlah). Tidak ada data yang hilang dalam kumpulan data, dan tidak ada informasi tentang fitur asli yang disediakan.
Mengapa ketidakseimbangan kelas memengaruhi kinerja model?
Secara umum, kami ingin memaksimalkan penarikan sambil membatasi FPR (Tingkat Positif Palsu), tetapi Anda dapat mengklasifikasikan banyak tagihan yang salah dan tetap mempertahankan FPR rendah karena Anda memiliki banyak negatif sebenarnya. Ini kondusif untuk memilih ambang yang relatif rendah, yang menghasilkan daya ingat yang tinggi tetapi presisi yang sangat rendah.
Apa tangkapannya?
Melatih model pada kumpulan data seimbang akan mengoptimalkan kinerja pada data validasi. Namun, tujuannya adalah untuk mengoptimalkan kinerja pada kumpulan data produksi yang tidak seimbang. Anda pada akhirnya perlu menemukan keseimbangan yang bekerja paling baik dalam produksi. Salah satu solusi untuk masalah ini adalah: Gunakan semua transaksi penipuan tetapi subsampel transaksi non-penipuan seperlunya untuk mencapai tingkat target kami.
Pertanyaan bisnis untuk dipikirkan:
Karena semua fitur bersifat anonim, kami akan memfokuskan analisis kami pada fitur yang tidak dianonimkan: Waktu, Jumlah
Seberapa berbeda jumlah uang yang digunakan dalam kelas transaksi yang berbeda? Apakah transaksi curang lebih sering terjadi pada frame tertentu?
Analisis Data Eksplorasi — EDA
Mari kita periksa nilai yang hilang dalam kumpulan data.
0
Satu-satunya variabel yang tidak diubah untuk dikerjakan adalah:
Kelas Jumlah Waktu (1: penipuan, 0: bukan_penipuan)
0 284315
1 492
Nama: Kelas, dtype: int64
Perhatikan betapa tidak seimbangnya kumpulan data asli kita! Sebagian besar transaksi non-penipuan. Jika kami menggunakan DataFrame ini sebagai dasar untuk model dan analisis prediktif kami, kami mungkin mendapatkan banyak kesalahan, dan algoritme kami mungkin akan terlalu cocok karena mereka akan “menganggap” bahwa sebagian besar transaksi bukanlah penipuan. Tapi kami tidak ingin model kami berasumsi, kami ingin model kami mendeteksi pola yang memberikan tanda-tanda penipuan!
Tentukan jumlah penipuan dan transaksi yang valid di seluruh dataset.
Bentuk Transaksi Penipuan: (492, 31)
Bentuk transaksi Non-Fraudulan: (284315, 31)
Seberapa berbeda jumlah uang yang digunakan dalam kelas transaksi yang berbeda?
Apakah transaksi penipuan lebih sering terjadi selama jangka waktu tertentu?
Distribusi:
Dengan melihat sebarannya, kita dapat mengetahui seberapa miringnya fitur-fitur tersebut, dan kita juga dapat melihat sebaran lebih lanjut dari fitur-fitur lainnya. Ada teknik yang dapat membantu distribusi agar tidak terlalu miring, yang akan diterapkan di notebook ini di masa mendatang.
Sepertinya waktu transaksi tidak terlalu penting di sini, sesuai pengamatan di atas. Sekarang mari kita ambil sampel dataset untuk pemodelan dan prediksi kita.
Matriks Korelasi
Matriks korelasi adalah inti dari pemahaman data kita. Kami ingin mengetahui apakah ada fitur yang sangat memengaruhi apakah transaksi tertentu merupakan penipuan. Namun, penting bagi kami untuk menggunakan DataFrame (subsampel) yang benar agar kami dapat melihat fitur mana yang memiliki korelasi positif atau negatif yang tinggi sehubungan dengan transaksi penipuan.
Ringkasan dan Penjelasan:
Korelasi Negatif: V17, V14, V12, dan V10 berkorelasi negatif. Perhatikan bagaimana semakin rendah nilai-nilai ini, semakin besar kemungkinan hasil akhirnya adalah transaksi penipuan. Korelasi Positif: V2, V4, V11, dan V19 berkorelasi positif. Perhatikan bagaimana semakin tinggi nilai-nilai ini, semakin besar kemungkinan hasil akhirnya adalah transaksi penipuan. BoxPlots: Kami akan menggunakan boxplots untuk lebih memahami distribusi fitur ini dalam transaksi penipuan dan non-penipuan.
Catatan: Kami harus memastikan bahwa kami menggunakan subsampel dalam matriks korelasi kami atau matriks korelasi kami akan dipengaruhi oleh ketidakseimbangan yang tinggi antara kelas kami. Ini terjadi karena ketidakseimbangan kelas tinggi di DataFrame asli.
Korelasi tertinggi berasal dari:
– Waktu & V3 (-0,42)
– Jumlah & V2 (-0,53)
– Jumlah & V4 (0,4)
Pra-pemrosesan Data
Waktu dan Jumlah harus diskalakan sebagai kolom lainnya.
Bobot transaksi penipuan: 0,0017994745785028623
Bobot transaksi Non-Penipuan: 0,9982005254214972 PELATIHAN: X_train: (159491, 30), y_train: (159491,)
_______________________________________________________
VALIDASI: X_validasi: (39873, 30), validasi_y: (39873,)
___________________________________________________
PENGUJIAN: X_test: (85443, 30), y_test: (85443,)
Bangunan Model
Jaringan Syaraf Tiruan (JST)
2671/2671 [==============================] – 11s 4ms/step – loss: 0.0037 – fn: 29.0000 – fp: 12.0000 – tn: 85295.0000 – tp: 107.0000 – presisi: 0.8992 – recall: 0.7868
[0.003686850192025304, 29.0, 12.0, 85295.0, 107.0, 0.8991596698760986, 0.7867646813392639]
Hasil Kereta:
================================================
Skor Akurasi: 99,99%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 1,00 1,00 1,00 1,00
ingat 1,00 0,95 1,00 0,98 1,00
skor-f1 1,00 0,97 1,00 0,99 1,00
dukungan 159204.00 287.00 1.00 159491.00 159491.00
_______________________________________________
Matriks Kebingungan:
[[159204 0]
[ 14 273]]
Hasil tes:
================================================
Skor Akurasi: 99,96%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,92 1,00 0,96 1,00
ingat 1,00 0,81 1,00 0,90 1,00
skor-f1 1,00 0,86 1,00 0,93 1,00
dukungan 85307.00 136.00 1.00 85443.00 85443.00
_______________________________________________
Matriks Kebingungan:
[[85298 9]
[ 26 110]]
XGBoost
Hasil Kereta:
================================================
Skor Akurasi: 100,00%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 1,00 1,00 1,00 1,00
ingat 1,00 1,00 1,00 1,00 1,00
skor-f1 1,00 1,00 1,00 1,00 1,00
dukungan 159204.00 287.00 1.00 159491.00 159491.00
_______________________________________________
Matriks Kebingungan:
[[159204 0]
[ 0 287]]
Hasil tes:
================================================
Skor Akurasi: 99,96%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,95 1,00 0,97 1,00
ingat 1,00 0,82 1,00 0,91 1,00
skor-f1 1,00 0,88 1,00 0,94 1,00
dukungan 85307.00 136.00 1.00 85443.00 85443.00
_______________________________________________
Matriks Kebingungan:
[[85301 6]
[ 25 111]]
Hutan Acak
Hasil Kereta:
================================================
Skor Akurasi: 100,00%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 1,00 1,00 1,00 1,00
ingat 1,00 1,00 1,00 1,00 1,00
skor-f1 1,00 1,00 1,00 1,00 1,00
dukungan 159204.00 287.00 1.00 159491.00 159491.00
_______________________________________________
Matriks Kebingungan:
[[159204 0]
[ 0 287]]
Hasil tes:
================================================
Skor Akurasi: 99,96%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,91 1,00 0,95 1,00
ingat 1,00 0,82 1,00 0,91 1,00
skor-f1 1,00 0,86 1,00 0,93 1,00
dukungan 85307.00 136.00 1.00 85443.00 85443.00
_______________________________________________
Matriks Kebingungan:
[[85296 11]
[ 25 111]]
dorongan kucing
Hasil Kereta:
================================================
Skor Akurasi: 100,00%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 1,00 1,00 1,00 1,00
ingat 1,00 1,00 1,00 1,00 1,00
skor-f1 1,00 1,00 1,00 1,00 1,00
dukungan 159204.00 287.00 1.00 159491.00 159491.00
_______________________________________________
Matriks Kebingungan:
[[159204 0]
[ 1 286]]
Hasil tes:
================================================
Skor Akurasi: 99,96%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,93 1,00 0,97 1,00
ingat 1,00 0,82 1,00 0,91 1,00
skor-f1 1,00 0,87 1,00 0,94 1,00
dukungan 85307.00 136.00 1.00 85443.00 85443.00
_______________________________________________
Matriks Kebingungan:
[[85299 8]
[ 25 111]]
LightGBM
Hasil Kereta:
================================================
Skor Akurasi: 99,58%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,23 1,00 0,62 1,00
ingat 1,00 0,59 1,00 0,79 1,00
skor-f1 1,00 0,33 1,00 0,67 1,00
dukungan 159204.00 287.00 1.00 159491.00 159491.00
_______________________________________________
Matriks Kebingungan:
[[158652 552]
[ 119 168]]
Hasil tes:
================================================
Skor Akurasi: 99,50%
_______________________________________________
Laporan Klasifikasi:
0 1 akurasi rata-rata makro tertimbang rata-rata
presisi 1,00 0,16 0,99 0,58 1,00
ingat 1,00 0,53 0,99 0,76 0,99
skor-f1 1,00 0,25 0,99 0,62 1,00
dukungan 85307.00 136.00 0.99 85443.00 85443.00
_______________________________________________
Matriks Kebingungan:
[[84942 365]
[ 64 72]]
Perbandingan Model
Kesimpulan:
Kami mempelajari cara mengembangkan model deteksi penipuan kartu kredit menggunakan pembelajaran mesin. Kami menggunakan berbagai algoritme ML, termasuk JST dan model berbasis Pohon. Di akhir pelatihan, dari 85443 transaksi validasi, kinerja XGBoost lebih baik daripada model lain:
Mengidentifikasi dengan benar 111 di antaranya sebagai penipuan Hilang 9 transaksi penipuan Akibat salah menandai 25 transaksi yang sah
Tautan dan Sumber Daya:
Proyek Pembelajaran Mesin dengan Python Langkah-demi-Langkah — Deteksi Penipuan Kartu Kredit awalnya diterbitkan di Menuju AI di Medium, di mana orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI