Trophy Global Feature Importance (Mean |SHAP|)

Seberapa besar rata-rata kontribusi setiap fitur terhadap keputusan model, diukur menggunakan mean absolute SHAP value.

Book Cara Membaca SHAP
SHAP Value = Kontribusi fitur ke prediksi
Positif → mendorong prediksi ke arah FRAUD
Negatif → mendorong prediksi ke arah NORMAL
Insight per Fitur
V14, V17, V12 — Top 3 Most Discriminative
Komponen PCA yang merepresentasikan pola transaksi asli. Nilai rendah (negatif) sangat berkorelasi dengan fraud — menunjukkan profil transaksi yang menyimpang dari normal.
log_amount — Amount Feature
Log transform dari nominal transaksi. Amount kecil (card testing pattern) mendorong ke fraud; amount normal mendorong ke normal.
hour_sin, hour_cos — Cyclic Temporal
Representasi jam dalam koordinat lingkaran. Transaksi dini hari memiliki SHAP positif — konsisten dengan temuan EDA.
Kenapa SHAP, bukan feature importance bawaan LightGBM?
Feature importance (gain/split) hanya menunjukkan frekuensi penggunaan. SHAP memberikan attribution yang konsisten secara matematis dan bisa menjelaskan prediksi individual — wajib untuk audit di industri keuangan.
Feature Type Feature Type Breakdown
28
V Features (PCA)
Data asli di-anonymize bank
4
Amount Features
log, zscore, flag kecil/besar
6
Temporal Features
hour, cyclic, night, weekend
3
Interaction Features
composite score, kombinasi
Chart Down Precision vs Recall Trade-off

Menurunkan threshold meningkatkan Recall (lebih banyak fraud tertangkap) tapi menurunkan Precision (lebih banyak false alarm). Threshold optimal = 0.80 berdasarkan F1 maksimum.

Precision
Recall
F1
Optimal (0.80)
Bar Chart Metrik per Threshold
Threshold Precision Recall F1
Insight Mengapa Threshold Bukan Keputusan Teknis Semata?
Threshold Rendah (misal 0.3)
→ Recall tinggi — hampir semua fraud tertangkap
→ Precision rendah — banyak false alarm
→ Nasabah sah sering terganggu
→ Cocok jika biaya fraud sangat tinggi
Threshold 0.80 (Optimal)
→ Balance antara Precision & Recall
→ F1 score maksimum
→ Net benefit tahunan tertinggi
→ Dipilih berdasarkan simulasi bisnis
Threshold Tinggi (misal 0.95)
→ Precision tinggi — sedikit false alarm
→ Recall rendah — banyak fraud lolos
→ Kerugian finansial lebih besar
→ Cocok jika false alarm sangat mahal
Settings Asumsi Bisnis

Ubah asumsi untuk melihat proyeksi net benefit tahunan secara dinamis.

Kerugian per fraud
Rata-rata kerugian per transaksi fraud yang lolos
Biaya per false alarm (€)
Biaya review manual + customer experience cost
True Positives (TP)
Fraud berhasil dideteksi (dari test set)
False Positives (FP)
Transaksi sah yang salah diblokir
False Negatives (FN)
Fraud yang lolos tidak terdeteksi
Scale factor
Dataset ≈ 2 hari → 1 tahun = ×182.5
Proyeksi Tahunan
Fraud Dicegah / Tahun
€0
TP × loss × scale
False Alarm Cost / Tahun
€0
FP × fa_cost × scale
Fraud Lolos (Missed) / Tahun
€0
FN × loss × scale
Net Benefit / Tahun
€0
prevented − false alarm cost
Fraud Recall Rate
0%
TP / (TP + FN)
Catatan: Angka di atas menggunakan data dari test set (2 hari transaksi) dan di-scale ke proyeksi tahunan. Asumsi biaya bersifat ilustratif — dalam implementasi nyata, nilai ini harus ditetapkan bersama tim bisnis berdasarkan data historis kerugian aktual. Threshold optimal juga bisa berubah seiring waktu sesuai perubahan cost assumption.
Q Kenapa LightGBM, bukan XGBoost?
LightGBM menggunakan histogram-based algorithm dengan leaf-wise tree growth — secara konsisten lebih cepat dari XGBoost pada dataset tabular besar. Mendukung class_weight natively dan punya SHAP compatibility yang baik. Untuk dataset 284k rows, perbedaan training time-nya signifikan.
Q Kenapa SMOTE dengan sampling_strategy=0.1?
Ratio 50/50 antara fraud dan normal terlalu jauh dari distribusi dunia nyata dan meningkatkan risiko overfitting pada sampel sintetis. Ratio 10% memberikan signal yang cukup tanpa membuat model "lupa" bahwa fraud itu langka. SMOTE juga hanya diterapkan pada train set untuk mencegah data leakage.
Q Kenapa RobustScaler, bukan StandardScaler?
StandardScaler sensitif terhadap outlier karena menggunakan mean & std. Data keuangan sering punya transaksi ekstrem yang akan menarik mean jauh dari pusat distribusi. RobustScaler menggunakan median & IQR sehingga outlier tidak mendominasi scaling.
Q Kenapa cyclic encoding untuk jam?
Model ML memperlakukan angka secara linear. Jam 23 dan jam 0 secara angka berjarak 23, padahal secara waktu hanya berjarak 1 jam. Cyclic encoding menggunakan sin & cos untuk merepresentasikan jam sebagai koordinat lingkaran sehingga jarak geometrisnya benar.
Q Kenapa PR-AUC, bukan ROC-AUC atau Accuracy?
Accuracy menyesatkan — model yang selalu prediksi "normal" sudah 99.83% accurate. ROC-AUC bisa optimistic karena terpengaruh jumlah True Negative yang sangat besar. PR-AUC lebih informatif untuk imbalanced data karena fokus pada performa di kelas minoritas (fraud).
Q Kenapa tidak V features di-scale ulang?
V1–V28 sudah merupakan hasil PCA yang by definition sudah zero-mean. Scaling ulang akan mengubah proporsi variance antar komponen dan merusak makna geometris PCA space. Hanya fitur Amount dan Time-derived yang perlu di-scale.
Q Kenapa stratified split, bukan random split?
Dengan hanya 492 fraud dari 284k transaksi, random split bisa menaruh terlalu banyak atau terlalu sedikit fraud di test set secara kebetulan. Stratified split menjamin proporsi fraud sama persis di train dan test set.
Q Mengapa fraud justru nominal kecil?
Ini pola yang dikenal sebagai "card testing" — fraudster menguji apakah kartu masih aktif dengan transaksi kecil sebelum melakukan transaksi besar. Tapi distribusi amount fraud juga lebih lebar (std dev lebih tinggi) — fraudster beroperasi di dua ujung: sangat kecil dan sangat besar.
Tech Stack Tech Stack
ML Pipeline
Python 3.11 Runtime
LightGBM Model utama
SHAP Explainability
imbalanced-learn SMOTE
scikit-learn Preprocessing
Backend API
FastAPI REST endpoints
Uvicorn ASGI server
Railway Cloud deploy
Docker Containerization
joblib Model serialization
Frontend
HTML/CSS/JS Pure frontend
Netlify Static deploy
DM Sans Typography
Fetch API HTTP client