Perbankan adalah salah satu bidang yang beruntung karena secara historis banyak data terstruktur dikumpulkan, dan juga menjadi salah satu yang pertama menerapkan teknologi data science.
Bagaimana data science digunakan di perbankan? Saat ini, data telah menjadi aset paling berharga di ranah ini. Data science merupakan kebutuhan bagi bank untuk tetap bersaing, menarik lebih banyak nasabah, meningkatkan loyalitas nasabah yang sudah ada, membuat keputusan berbasis data yang lebih efisien, memberdayakan bisnis, meningkatkan efisiensi operasional, memperbaiki layanan/produk yang ada dan meluncurkan yang baru, memperkuat keamanan, dan sebagai hasil dari semua tindakan ini, memperoleh lebih banyak pendapatan. Tidak mengherankan jika mayoritas permintaan pekerjaan data science berasal dari perbankan.
Data science memungkinkan industri perbankan untuk berhasil menjalankan banyak tugas, termasuk:
analisis risiko investasi
prediksi nilai seumur hidup pelanggan (customer lifetime value)
segmentasi pelanggan
prediksi churn pelanggan
pemasaran yang dipersonalisasi
analisis sentimen pelanggan
asisten virtual dan chatbot
Di bawah ini, kita akan melihat lebih dekat salah satu use case data science yang paling umum di perbankan.
Use Case Data Science di Perbankan: Mendeteksi Penipuan
Aktivitas penipuan merupakan masalah menantang tidak hanya di perbankan tetapi juga di banyak bidang lain, seperti pemerintahan, asuransi, sektor publik, penjualan, dan layanan kesehatan. Setiap bisnis yang menangani jumlah transaksi online yang tinggi berisiko besar mengalami penipuan. Kejahatan keuangan dapat berbentuk berbagai macam, termasuk transaksi kartu kredit palsu, cek bank palsu, penghindaran pajak, pencucian uang, serangan siber, pencurian akun pelanggan, identitas sintetis, aplikasi palsu, dan penipuan.
Deteksi penipuan adalah serangkaian tindakan proaktif yang dilakukan untuk mengidentifikasi dan mencegah aktivitas penipuan serta kerugian finansial. Teknik analitis utamanya dapat dibagi menjadi dua kelompok:
Statistik: perhitungan parameter statistik, regresi, distribusi probabilitas, pencocokan data
Pembelajaran mesin merupakan pilar penting untuk deteksi penipuan. Perangkatnya menyediakan dua pendekatan:
Metode terawasi: k-nearest neighbors, regresi logistik, support vector machines, decision tree, random forest, analisis deret waktu, neural network, dan lain-lain.
Metode tidak terawasi: analisis klaster, analisis keterkaitan (link analysis), self-organizing maps, analisis komponen utama, pengenalan anomali, dan lain-lain.
Tidak ada algoritme pembelajaran mesin yang bersifat universal dan andal untuk deteksi penipuan. Sebaliknya, dalam use case data science dunia nyata, beberapa teknik atau kombinasinya biasanya diuji, akurasi prediktif model dihitung, dan pendekatan optimal dipilih.
Tantangan utama bagi sistem deteksi penipuan adalah beradaptasi dengan cepat terhadap pola penipuan dan taktik pelaku yang terus berubah serta segera mengungkap skema baru yang makin canggih. Kasus penipuan selalu merupakan minoritas dan tersembunyi rapat di antara transaksi yang valid.
Menyiapkan Dataset
Mari kita telusuri implementasi pembelajaran mesin untuk deteksi penipuan kartu kredit menggunakan bahasa pemrograman Python. Kita akan bekerja pada dataset creditcard_data, yang merupakan sampel modifikasi dari dataset Kaggle tentang Credit Card Fraud Detection. Data asli merepresentasikan transaksi yang dilakukan pada kartu kredit milik pemegang kartu di Eropa selama dua hari pada September 2013.
Mari impor datanya dan lihat sekilas:
import pandas as pd
creditcard_data = pd.read_csv('creditcard_data.csv', index_col=0)print(creditcard_data.info())print('\n')
pd.options.display.max_columns =len(creditcard_data)print(creditcard_data.head(3))Didukung oleh
Variabel yang dikodekan secara numerik V1 hingga V28 yang merupakan principal components yang diperoleh dari transformasi PCA. Karena alasan kerahasiaan, tidak ada informasi latar belakang tentang fitur asli yang disediakan.
Variabel Amount merepresentasikan jumlah transaksi.
Variabel Class menunjukkan apakah transaksi tersebut penipuan (1) atau bukan (0).
Secara alami, kejadian penipuan untungnya merupakan minoritas ekstrem dalam daftar transaksi mana pun. Namun, algoritme pembelajaran mesin biasanya bekerja paling baik ketika kelas yang berbeda dalam dataset kurang lebih sama banyak. Jika tidak, hanya ada sedikit data untuk dipelajari. Masalah ini disebut ketidakseimbangan kelas.
Menghitung Penipuan dalam Dataset
Mari hitung persentase transaksi penipuan dari total jumlah transaksi dalam dataset kita:
round(creditcard_data['Class'].value_counts()*100/len(creditcard_data)).convert_dtypes()Didukung oleh
dan buat plot untuk memvisualisasikan titik data penipuan dibanding non-penipuan:
import matplotlib.pyplot as plt
import numpy as np
defprep_data(df):
X = df.iloc[:,1:28]
X = np.array(X).astype(float)
y = df.iloc[:,29]
y = np.array(y).astype(float)return X, y
defplot_data(X, y):
plt.scatter(X[y==0,0], X[y==0,1], label='Class #0', alpha=0.5, linewidth=0.15)
plt.scatter(X[y==1,0], X[y==1,1], label='Class #1', alpha=0.5, linewidth=0.15, c='r')
plt.legend()return plt.show()
X, y = prep_data(creditcard_data)
plot_data(X, y)Didukung oleh
Menggunakan SMOTE untuk Menyeimbangkan Data
Kini kita dapat memastikan bahwa rasio transaksi penipuan sangat rendah dan kita menghadapi masalah ketidakseimbangan kelas. Untuk mengatasinya, kita dapat menyeimbangkan kembali data menggunakan synthetic minority oversampling technique (SMOTE). Berbeda dengan oversampling acak, SMOTE sedikit lebih canggih karena tidak hanya membuat salinan persis dari observasi. Sebagai gantinya, teknik ini menggunakan karakteristik tetangga terdekat dari kasus penipuan untuk membuat sampel sintetis baru yang cukup mirip dengan observasi yang ada pada kelas minoritas. Mari terapkan SMOTE pada data kartu kredit kita:
from imblearn.over_sampling import SMOTE
method = SMOTE()
X_resampled, y_resampled = method.fit_resample(X, y)
plot_data(X_resampled, y_resampled)Didukung oleh
Seperti yang terlihat, penggunaan SMOTE tiba-tiba memberi kita lebih banyak observasi pada kelas minoritas. Untuk melihat hasil pendekatan ini dengan lebih jelas, kita akan membandingkannya dengan data asli:
Original set:0.050001.050
dtype: int64
SMOTE:0.050001.05000
dtype: int64Didukung oleh
Dengan demikian, metode SMOTE telah menyeimbangkan data kita sepenuhnya, dan ukuran kelas minoritas kini sama dengan kelas mayoritas.
Kita akan kembali ke penerapan praktis metode SMOTE segera, tetapi untuk saat ini, mari kembali ke data asli dan coba deteksi kasus penipuan. Mengikuti cara "old-school", kita harus membuat beberapa aturan untuk menangkap penipuan. Aturan tersebut dapat berkaitan, misalnya, dengan lokasi transaksi yang tidak biasa atau frekuensi transaksi yang mencurigakan. Gagasannya adalah menentukan nilai ambang berdasarkan statistik umum, sering kali pada nilai rata-rata observasi, dan menggunakan ambang tersebut pada fitur kita untuk mendeteksi penipuan.
print(creditcard_data.groupby('Class').mean().round(3)[['V1','V3']])Didukung oleh
Pada kasus khusus kita, mari terapkan kondisi berikut: V1 < -3 dan V3 < -5. Lalu, untuk mengestimasi kinerja pendekatan ini, kita bandingkan kasus yang ditandai sebagai penipuan dengan yang sebenarnya:
creditcard_data['flag_as_fraud']= np.where(np.logical_and(creditcard_data['V1']<-3, creditcard_data['V3']<-5),1,0)print(pd.crosstab(creditcard_data['Class'], creditcard_data['flag_as_fraud'], rownames=['Actual Fraud'], colnames=['Flagged Fraud']))Didukung oleh
Flagged Fraud 01
Actual Fraud
049841612822Didukung oleh
Menerapkan Regresi Logistik
Kita mendeteksi 22 dari 50 kasus penipuan, tetapi tidak dapat mendeteksi 28 lainnya, dan menghasilkan 16 positif palsu. Mari lihat apakah penggunaan teknik pembelajaran mesin dapat melampaui hasil tersebut.
Sekarang kita akan mengimplementasikan algoritme klasifikasi regresi logistik sederhana pada data kartu kredit kita untuk mengidentifikasi kejadian penipuan dan kemudian memvisualisasikan hasilnya pada confusion matrix:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
lr = LogisticRegression()
lr.fit(X_train, y_train)
predictions = lr.predict(X_test)print(pd.crosstab(y_test, predictions, rownames=['Actual Fraud'], colnames=['Flagged Fraud']))Didukung oleh
Flagged Fraud 0.01.0
Actual Fraud
0.0150411.019Didukung oleh
Penting untuk dicatat bahwa di sini kita memiliki lebih sedikit observasi pada confusion matrix karena kita hanya menggunakan himpunan uji untuk menghitung hasil model, yaitu hanya 30% dari keseluruhan dataset.
Kita menangkap persentase kasus penipuan yang lebih tinggi: 90% (9 dari 10), dibandingkan hasil sebelumnya 44% (22 dari 50). Kita juga mendapatkan jauh lebih sedikit positif palsu dibanding sebelumnya, sehingga ada peningkatan.
Sekarang mari kembali ke masalah ketidakseimbangan kelas yang dibahas sebelumnya dan telusuri apakah kita dapat meningkatkan hasil prediksi lebih jauh dengan menggabungkan model regresi logistik dengan metode resampling SMOTE. Untuk melakukannya secara efisien dan sekaligus, kita perlu mendefinisikan pipeline dan menjalankannya pada data kita:
from imblearn.pipeline import Pipeline
# Defining which resampling method and which ML model to use in the pipeline
resampling = SMOTE()
lr = LogisticRegression()
pipeline = Pipeline([('SMOTE', resampling),('Logistic Regression', lr)])
pipeline.fit(X_train, y_train)
predictions = pipeline.predict(X_test)print(pd.crosstab(y_test, predictions, rownames=['Actual Fraud'], colnames=['Flagged Fraud']))Didukung oleh
Flagged Fraud 0.01.0
Actual Fraud
0.0149691.019Didukung oleh
Seperti terlihat, dalam kasus kita SMOTE tidak memberikan peningkatan: kita tetap menangkap 90% kejadian penipuan dan, terlebih lagi, jumlah positif palsu sedikit lebih tinggi. Penjelasannya adalah resampling tidak selalu menghasilkan hasil yang lebih baik dalam semua kasus. Ketika kasus penipuan tersebar sangat luas di seluruh data, tetangga terdekatnya belum tentu juga kasus penipuan, sehingga penggunaan SMOTE dapat memperkenalkan bias.
Kesimpulan
Ke depan, untuk meningkatkan akurasi model regresi logistik, kita dapat menyetel beberapa parameter algoritme. K-fold cross-validation juga dapat dipertimbangkan alih-alih hanya membagi dataset menjadi dua bagian. Terakhir, kita dapat mencoba beberapa algoritme pembelajaran mesin lain (misalnya, decision tree atau random forest) dan melihat apakah hasilnya lebih baik.
Jika Anda ingin mempelajari lebih lanjut aspek teoretis dan teknis penerapan model deteksi penipuan, Anda dapat menelusuri materi kursus Fraud Detection in Python.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Perbankan adalah salah satu bidang yang beruntung karena secara historis banyak data terstruktur dikumpulkan, dan juga menjadi salah satu yang pertama menerapkan teknologi data science.
Bagaimana data science digunakan di perbankan? Saat ini, data telah menjadi aset paling berharga di ranah ini. Data science merupakan kebutuhan bagi bank untuk tetap bersaing, menarik lebih banyak nasabah, meningkatkan loyalitas nasabah yang sudah ada, membuat keputusan berbasis data yang lebih efisien, memberdayakan bisnis, meningkatkan efisiensi operasional, memperbaiki layanan/produk yang ada dan meluncurkan yang baru, memperkuat keamanan, dan sebagai hasil dari semua tindakan ini, memperoleh lebih banyak pendapatan. Tidak mengherankan jika mayoritas permintaan pekerjaan data science berasal dari perbankan.
Data science memungkinkan industri perbankan untuk berhasil menjalankan banyak tugas, termasuk:
Di bawah ini, kita akan melihat lebih dekat salah satu use case data science yang paling umum di perbankan.
Use Case Data Science di Perbankan: Mendeteksi Penipuan
Aktivitas penipuan merupakan masalah menantang tidak hanya di perbankan tetapi juga di banyak bidang lain, seperti pemerintahan, asuransi, sektor publik, penjualan, dan layanan kesehatan. Setiap bisnis yang menangani jumlah transaksi online yang tinggi berisiko besar mengalami penipuan. Kejahatan keuangan dapat berbentuk berbagai macam, termasuk transaksi kartu kredit palsu, cek bank palsu, penghindaran pajak, pencucian uang, serangan siber, pencurian akun pelanggan, identitas sintetis, aplikasi palsu, dan penipuan.
Deteksi penipuan adalah serangkaian tindakan proaktif yang dilakukan untuk mengidentifikasi dan mencegah aktivitas penipuan serta kerugian finansial. Teknik analitis utamanya dapat dibagi menjadi dua kelompok:
Pembelajaran mesin merupakan pilar penting untuk deteksi penipuan. Perangkatnya menyediakan dua pendekatan:
Tidak ada algoritme pembelajaran mesin yang bersifat universal dan andal untuk deteksi penipuan. Sebaliknya, dalam use case data science dunia nyata, beberapa teknik atau kombinasinya biasanya diuji, akurasi prediktif model dihitung, dan pendekatan optimal dipilih.
Tantangan utama bagi sistem deteksi penipuan adalah beradaptasi dengan cepat terhadap pola penipuan dan taktik pelaku yang terus berubah serta segera mengungkap skema baru yang makin canggih. Kasus penipuan selalu merupakan minoritas dan tersembunyi rapat di antara transaksi yang valid.
Menyiapkan Dataset
Mari kita telusuri implementasi pembelajaran mesin untuk deteksi penipuan kartu kredit menggunakan bahasa pemrograman Python. Kita akan bekerja pada dataset creditcard_data, yang merupakan sampel modifikasi dari dataset Kaggle tentang Credit Card Fraud Detection. Data asli merepresentasikan transaksi yang dilakukan pada kartu kredit milik pemegang kartu di Eropa selama dua hari pada September 2013.
Mari impor datanya dan lihat sekilas:
Dataset ini berisi variabel berikut:
Secara alami, kejadian penipuan untungnya merupakan minoritas ekstrem dalam daftar transaksi mana pun. Namun, algoritme pembelajaran mesin biasanya bekerja paling baik ketika kelas yang berbeda dalam dataset kurang lebih sama banyak. Jika tidak, hanya ada sedikit data untuk dipelajari. Masalah ini disebut ketidakseimbangan kelas.
Menghitung Penipuan dalam Dataset
Mari hitung persentase transaksi penipuan dari total jumlah transaksi dalam dataset kita:
dan buat plot untuk memvisualisasikan titik data penipuan dibanding non-penipuan:
Menggunakan SMOTE untuk Menyeimbangkan Data
Kini kita dapat memastikan bahwa rasio transaksi penipuan sangat rendah dan kita menghadapi masalah ketidakseimbangan kelas. Untuk mengatasinya, kita dapat menyeimbangkan kembali data menggunakan synthetic minority oversampling technique (SMOTE). Berbeda dengan oversampling acak, SMOTE sedikit lebih canggih karena tidak hanya membuat salinan persis dari observasi. Sebagai gantinya, teknik ini menggunakan karakteristik tetangga terdekat dari kasus penipuan untuk membuat sampel sintetis baru yang cukup mirip dengan observasi yang ada pada kelas minoritas. Mari terapkan SMOTE pada data kartu kredit kita:
Seperti yang terlihat, penggunaan SMOTE tiba-tiba memberi kita lebih banyak observasi pada kelas minoritas. Untuk melihat hasil pendekatan ini dengan lebih jelas, kita akan membandingkannya dengan data asli:
Dengan demikian, metode SMOTE telah menyeimbangkan data kita sepenuhnya, dan ukuran kelas minoritas kini sama dengan kelas mayoritas.
Kita akan kembali ke penerapan praktis metode SMOTE segera, tetapi untuk saat ini, mari kembali ke data asli dan coba deteksi kasus penipuan. Mengikuti cara "old-school", kita harus membuat beberapa aturan untuk menangkap penipuan. Aturan tersebut dapat berkaitan, misalnya, dengan lokasi transaksi yang tidak biasa atau frekuensi transaksi yang mencurigakan. Gagasannya adalah menentukan nilai ambang berdasarkan statistik umum, sering kali pada nilai rata-rata observasi, dan menggunakan ambang tersebut pada fitur kita untuk mendeteksi penipuan.
Pada kasus khusus kita, mari terapkan kondisi berikut: V1 < -3 dan V3 < -5. Lalu, untuk mengestimasi kinerja pendekatan ini, kita bandingkan kasus yang ditandai sebagai penipuan dengan yang sebenarnya:
Menerapkan Regresi Logistik
Kita mendeteksi 22 dari 50 kasus penipuan, tetapi tidak dapat mendeteksi 28 lainnya, dan menghasilkan 16 positif palsu. Mari lihat apakah penggunaan teknik pembelajaran mesin dapat melampaui hasil tersebut.
Sekarang kita akan mengimplementasikan algoritme klasifikasi regresi logistik sederhana pada data kartu kredit kita untuk mengidentifikasi kejadian penipuan dan kemudian memvisualisasikan hasilnya pada confusion matrix:
Penting untuk dicatat bahwa di sini kita memiliki lebih sedikit observasi pada confusion matrix karena kita hanya menggunakan himpunan uji untuk menghitung hasil model, yaitu hanya 30% dari keseluruhan dataset.
Kita menangkap persentase kasus penipuan yang lebih tinggi: 90% (9 dari 10), dibandingkan hasil sebelumnya 44% (22 dari 50). Kita juga mendapatkan jauh lebih sedikit positif palsu dibanding sebelumnya, sehingga ada peningkatan.
Sekarang mari kembali ke masalah ketidakseimbangan kelas yang dibahas sebelumnya dan telusuri apakah kita dapat meningkatkan hasil prediksi lebih jauh dengan menggabungkan model regresi logistik dengan metode resampling SMOTE. Untuk melakukannya secara efisien dan sekaligus, kita perlu mendefinisikan pipeline dan menjalankannya pada data kita:
Seperti terlihat, dalam kasus kita SMOTE tidak memberikan peningkatan: kita tetap menangkap 90% kejadian penipuan dan, terlebih lagi, jumlah positif palsu sedikit lebih tinggi. Penjelasannya adalah resampling tidak selalu menghasilkan hasil yang lebih baik dalam semua kasus. Ketika kasus penipuan tersebar sangat luas di seluruh data, tetangga terdekatnya belum tentu juga kasus penipuan, sehingga penggunaan SMOTE dapat memperkenalkan bias.
Kesimpulan
Ke depan, untuk meningkatkan akurasi model regresi logistik, kita dapat menyetel beberapa parameter algoritme. K-fold cross-validation juga dapat dipertimbangkan alih-alih hanya membagi dataset menjadi dua bagian. Terakhir, kita dapat mencoba beberapa algoritme pembelajaran mesin lain (misalnya, decision tree atau random forest) dan melihat apakah hasilnya lebih baik.
Jika Anda ingin mempelajari lebih lanjut aspek teoretis dan teknis penerapan model deteksi penipuan, Anda dapat menelusuri materi kursus Fraud Detection in Python.