SHAP: Menjelaskan Kenapa Model Memprediksi Pelanggan Akan Churn
Blog/Tips & Trik/SHAP: Menjelaskan Kenapa Model Memprediksi Pelanggan Akan Churn

SHAP: Menjelaskan Kenapa Model Memprediksi Pelanggan Akan Churn

BimaBima
·16 Oktober 2025·11 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

SHAP ngasih angka kontribusi tiap fitur ke satu prediksi, dan jumlah semua kontribusi plus nilai dasar model selalu pas sama hasil prediksinya. Sifat itu yang bikin kamu bisa jawab kenapa satu pelanggan tertentu diprediksi berhenti, sesuatu yang nggak bisa dijawab feature importance biasa. Pakai grafik waterfall buat penjelasan satu pelanggan dan beeswarm buat gambaran umum. Batasannya, SHAP ngejelasin cara model mengambil keputusan, bukan sebab akibat di dunia nyata.

SHAP ngasih angka kontribusi tiap fitur ke satu prediksi, dan semua angka itu kalau dijumlahin sama nilai dasar model bakal pas sama hasil prediksinya.

Jadi kamu bisa bilang ke tim marketing: pelanggan ini diprediksi berhenti dengan peluang 0,78, dan yang paling ngedorong angkanya adalah 94 hari tanpa transaksi.

Nama lengkapnya SHapley Additive exPlanations, dan dasarnya nilai Shapley dari teori permainan. Cara kerjanya, kontribusi satu fitur diukur dari rata-rata perubahan prediksi waktu fitur itu ditambahin ke berbagai kombinasi fitur lain.

Apa itu SHAP dan kenapa analis butuh?

SHAP adalah metode buat ngukur seberapa besar tiap fitur ndorong satu prediksi naik atau turun dari nilai rata-rata model. Sifat penjumlahannya bikin penjelasan per pelanggan bisa dipertanggungjawabkan angkanya, bukan cuma peringkat fitur secara umum. Ini yang bikin SHAP kepakai waktu keputusan model harus dijelasin ke orang non teknis.

Bedanya sama ukuran pentingnya fitur biasa ada di cakupannya:

MetodeCakupanJawab pertanyaan
feature_importances_Seluruh modelFitur mana yang paling sering dipakai memecah data?
Permutation importanceSeluruh modelPerforma turun berapa kalau fitur ini diacak?
SHAPPer baris dan seluruh modelKenapa pelanggan nomor 4021 diprediksi berhenti?

Dua yang pertama nggak bisa jawab pertanyaan tim marketing soal satu pelanggan tertentu. SHAP bisa.

Metode ini dikenalin Lundberg dan Lee lewat makalah A Unified Approach to Interpreting Model Predictions di NeurIPS 2017. Dokumentasi resminya ada di shap.readthedocs.io.

Gimana cara pakai SHAP di model churn?

Empat langkah, semuanya di Python. Contoh ini pakai model pohon, jadi perhitungannya cepat.

  1. Latih model churn seperti biasa.
  2. Bikin objek penjelas dari model dan data latih.
  3. Hitung nilai SHAP buat data uji.
  4. Gambar hasilnya, satu grafik buat gambaran umum dan satu buat pelanggan tertentu.
import pandas as pd
import shap
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

df = pd.read_csv("pelanggan_toko_berkah.csv")
X = df.drop(columns=["churn"])
y = df["churn"]

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42, stratify=y
)

model = RandomForestClassifier(
    n_estimators=500, min_samples_leaf=5,
    class_weight="balanced", n_jobs=-1, random_state=42
)
model.fit(X_train, y_train)

explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)

Buat model pohon, shap.Explainer otomatis milih algoritma khusus pohon yang jauh lebih cepat daripada pendekatan umum.

Kalau modelmu klasifikasi dua kelas dari scikit-learn, hasilnya punya dimensi tambahan buat tiap kelas. Ambil kelas positifnya:

nilai_positif = shap_values[..., 1]

Grafik 1: gambaran umum semua pelanggan

shap.plots.beeswarm(nilai_positif, max_display=12)

Tiap titik satu pelanggan. Posisi horizontal nunjukin seberapa kuat fitur itu ndorong prediksi, warnanya nunjukin nilai fiturnya tinggi atau rendah.

Kalau titik merah numpuk di kanan buat fitur jarak hari sejak transaksi terakhir, artinya makin lama nggak belanja makin tinggi peluang berhentinya. Masuk akal, dan itu tanda modelmu belajar pola yang bener.

Grafik 2: penjelasan satu pelanggan

shap.plots.waterfall(nilai_positif[42])

Grafik ini mulai dari nilai dasar, yaitu prediksi rata-rata model buat semua pelanggan. Lalu tiap fitur nambahin atau ngurangin sampai ketemu prediksi akhir buat pelanggan itu.

Ini bentuk yang paling gampang dibawa ke rapat. Orang non teknis bisa ngikutin batang per batang tanpa ngerti isi modelnya.

Cara baca angka SHAP tanpa salah paham

Tiga hal yang sering keliru dipahami:

SHAP bukan sebab akibat. Nilai SHAP tinggi berarti fitur itu ndorong prediksi model, bukan berarti fitur itu penyebab pelanggan berhenti. Model cuma belajar hubungan dari data historis.

Satuannya ikut keluaran model. Buat model pohon dari scikit-learn, satuannya peluang. Buat XGBoost dan LightGBM, bawaannya log odds, jadi angka 0,8 di situ bukan berarti 80%.

Fitur yang saling berkorelasi bikin kontribusinya kebagi. Kalau kamu punya kolom total belanja dan rata-rata belanja yang gerakannya mirip, nilai SHAP-nya kebagi dua dan masing-masing keliatan lebih kecil dari pengaruh gabungannya.

Peringatan ketiga ini sama kayak yang berlaku di random forest waktu kamu baca permutation importance.

Contoh kasus: kenapa pelanggan toko_berkah diprediksi berhenti

Model churn di dataset toko_berkah dilatih dari 4.310 pelanggan dengan 14 kolom perilaku. Sebanyak 11,8% di antaranya berhenti belanja lebih dari 90 hari.

Nilai dasar modelnya 0,118, sama persis dengan proporsi pelanggan yang berhenti di data latih.

Ini penjelasan buat satu pelanggan dengan prediksi peluang berhenti 0,78:

FiturNilai pelangganKontribusi SHAP
Hari sejak transaksi terakhir94 hari+0,31
Frekuensi belanja 6 bulan2 kali+0,19
Jumlah kategori produk berbeda1+0,14
Nilai transaksi rata-rataRp 412.000-0,06
Sisa fitur digabung-+0,08

Kalau dijumlahin: 0,118 + 0,31 + 0,19 + 0,14 - 0,06 + 0,08 = 0,778. Pas sama prediksinya.

Yang menarik ada di baris keempat. Nilai transaksinya besar, dan itu justru nurunin peluang berhenti sebesar 6 poin.

Jadi ini pelanggan yang belanjanya jarang tapi sekali belanja nominalnya gede. Buat tim marketing, penanganannya beda dari pelanggan yang jarang belanja dan nominalnya kecil.

Waktu aku rata-ratain nilai SHAP absolut di seluruh data uji, urutan tiga fitur teratasnya sama: jarak hari, frekuensi, lalu keragaman kategori. Tiga fitur itu nyumbang 71,4% dari total besaran kontribusi.

Angka itu berguna buat mutusin kolom mana yang wajib dijaga kualitasnya. Kalau kolom jarak hari sering telat diperbarui, prediksinya langsung melenceng.

Kesalahan umum waktu pakai SHAP

Ngitung SHAP di data latih. Hasilnya terlalu optimis soalnya model udah lihat baris-baris itu. Pakai data uji atau data baru.

Nyampur satuan log odds sama peluang. Cek dulu keluaran modelmu sebelum ngomongin persentase ke orang bisnis.

Bilang fitur ini penyebabnya. Ganti kalimatnya jadi fitur ini yang paling ndorong prediksi model. Bedanya penting waktu keputusan bisnisnya mahal.

Ngitung SHAP buat ratusan ribu baris sekaligus. Buat model non pohon, perhitungannya berat. Ambil sampel acak beberapa ribu baris buat gambaran umum.

Lupa ngasih data latar. Beberapa penjelas butuh data latar sebagai pembanding. Kalau datanya nggak representatif, nilai dasarnya melenceng dan semua penjelasan ikut geser.

Nunjukin grafik beeswarm ke manajemen. Grafik itu padat dan susah dibaca orang awam. Pakai grafik waterfall satu pelanggan atau grafik batang rata-rata.

FAQ

SHAP bisa dipakai buat model apa aja?

Bisa buat hampir semua model, tapi kecepatannya beda jauh. Buat model pohon seperti random forest, XGBoost, dan LightGBM ada algoritma khusus yang cepat dan hasilnya eksak. Buat model linear ada versi khusus yang juga ringan. Buat model lain seperti jaringan saraf, perhitungannya pakai pendekatan sampling yang jauh lebih lambat, jadi ambil sampel baris secukupnya.

Apa bedanya SHAP dan feature importance biasa?

Feature importance bawaan cuma ngasih satu angka per fitur buat seluruh model, dan nggak nunjukin arahnya. SHAP ngasih angka per fitur per baris, lengkap dengan tanda positif atau negatif. Jadi kamu bisa lihat fitur yang sama ndorong satu pelanggan ke arah berhenti tapi ndorong pelanggan lain ke arah bertahan. Buat penjelasan satu per satu, feature importance nggak kepakai sama sekali.

Kenapa nilai SHAP aku bentuknya log odds, bukan peluang?

Karena keluaran mentah modelmu emang log odds, dan ini bawaan XGBoost serta LightGBM buat klasifikasi. Nilai SHAP selalu ngikutin satuan keluaran yang dijelasin. Kalau kamu butuh satuan peluang, atur parameter keluaran modelnya waktu bikin penjelas, atau konversi sendiri hasil akhirnya. Yang penting jangan nyebut angka log odds sebagai persentase waktu presentasi.

Berapa banyak data yang perlu dihitung nilai SHAP-nya?

Buat model pohon, ngitung seluruh data uji biasanya masih cepat sampai puluhan ribu baris. Buat model lain, mulai dari sampel acak 1.000 sampai 2.000 baris dulu buat gambaran umum, lalu hitung nilai per baris cuma buat pelanggan yang mau kamu tindak lanjuti. Sampel acak yang cukup besar udah ngasih urutan fitur yang stabil.

Gimana cara jelasin SHAP ke tim marketing yang nggak teknis?

Jangan sebut istilahnya di awal. Mulai dari grafik waterfall satu pelanggan, lalu jelasin pakai kalimat biasa: model mulai dari peluang rata-rata 12%, lalu naik 31 poin karena pelanggan ini udah 94 hari nggak belanja. Setelah mereka paham polanya, baru sebut nama metodenya. Cara ini jauh lebih nyantol dibanding mulai dari teori permainan.

Penutup

SHAP ngubah prediksi model jadi daftar angka yang bisa dibaca orang, lengkap sama arah dan besarannya.

Yang bikin dia kepakai bukan grafiknya, tapi sifat penjumlahannya. Semua kontribusi plus nilai dasar selalu pas sama prediksi akhir, jadi angkanya bisa dipertanggungjawabkan waktu ditanya.

Ingat satu batasannya: SHAP ngejelasin model, bukan dunia nyata. Kalau modelmu belajar dari data yang bias, penjelasannya juga ikut bias.

Coba jalanin kode di atas ke model churn kamu, lalu ambil satu pelanggan dan bikin grafik waterfall-nya. Lanjut baca random forest untuk analis kalau modelnya belum ada, atau pahami dulu segmentation buat nentuin siapa yang mau kamu tindak lanjuti.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

Pandas groupby: Agregasi Data ala Pivot di Python (2026)

groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

Pandas to_excel: Ekspor DataFrame ke Excel (2026)

to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

Pandas read_excel: Baca File Excel di Python

pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore