Membangun transparansi model: menulis model card yang lengkap, menjelaskan prediksi dengan SHAP, dan menyiapkan audit trail — dilengkapi praktik mendokumentasikan model churn secara menyeluruh

Setelah di episode 19 kita menata data governance, pada episode ini kita menerapkannya ke sisi model: model governance & documentation. Model yang tidak terdokumentasi adalah bom waktu — ketika berjalan di produksi, tidak ada yang tahu data apa yang dilatihnya, metrik apa yang dicapainya, atau bagaimana mempertanggungjawabkannya.
Mengapa dokumentasi dan explainability wajib? Tiga alasan: (1) regulasi — makin banyak regulator meminta bukti model diperiksa; (2) bisnis — stakeholder harus paham mengapa model mengambil keputusan tertentu; (3) engineering — model yang tidak terdokumentasi mustahil dirawat atau didebug. Model card dan SHAP adalah dua alat yang membuat model kalian transparan.
Model card adalah dokumen ringkas yang menjelaskan model secara menyeluruh — diadopsi luas di industri dan menjadi standar de facto komunikasi model. Struktur standarnya:
| Bagian | Isi |
|---|---|
| Overview | Tujuan model & masalah yang dipecahkan |
| Dataset | Sumber, periode, ukuran, versi |
| Preprocessing | Encoding, imputasi, feature engineering |
| Model & tuning | Algoritma, hyperparameter, eksperimen |
| Performance | Metrik di test set, perbandingan baseline |
| Fairness | Hasil audit bias per segmen |
| Limitations | Keterbatasan, kondisi gagal |
| Deployment | Cara serving, monitoring, retraining |
Sebagian besar bagian sudah kita bangun di episode 11, 12, dan 18 — sekarang tinggal dirangkum.
Berikut contoh model card untuk model churn kita:
MODEL CARD — churn-prediction-v2
════════════════════════════════════════════
OVERVIEW
Prediksi probabilitas churn pelanggan 90-hari.
Dipakai tim retention untuk prioritasi outreach.
DATASET
Sumber: warehouse (tabel customer, transaksi, support)
Periode: 2025-01 s.d. 2026-03 | Versi: v2026.06
Ukuran: 7.043 baris, 21 fitur, target churn 18.3%
PREPROCESSING
Imputasi median per region, one-hot untuk kategorikal,
StandardScaler, fitur RFM + usage, drop duplikat
MODEL
XGBoost, n_estimators=300, max_depth=6, lr=0.05
Baseline yang dikalahkan: LogisticRegression (AUC 0.78)
PERFORMANCE
AUC 0.87 | Precision 0.64 | Recall 0.58 (threshold 0.5)
Evaluasi: stratified 5-fold CV + holdout test
FAIRNESS
TPR senior_citizen=0 → 0.61, =1 → 0.52 (selisih 0.09)
TPR per region: max selisih 0.11 → investigasi lanjut
LIMITATIONS
Data historis — tidak menangkap kebijakan baru;
threshold harus disesuaikan saat biaya outreach berubah
DEPLOYMENT
Serving: skor mingguan via Airflow → tabel prioritasi
Monitoring: drift bulanan (episode 24)
Owner: tim data science; retraining tiap kuartalModel card ini menjawab semua pertanyaan yang akan muncul 6 bulan kemudian. Simpan di repo, bukan di notebook — ia dokumen hidup yang diperbarui setiap kali model berubah.
Tip
Template model card yang sudah lazim di industri bisa langsung dipakai — Google, Hugging Face, dan banyak vendor menyediakan format standar. Yang penting bukan formatnya, melainkan kelengkapannya: kalau bagian limitations kosong, berarti kalian belum berpikir keras.
Model card menjelaskan tentang model; SHAP menjelaskan per prediksi. SHAP (SHapley Additive exPlanations) menghitung kontribusi tiap fitur terhadap setiap prediksi, berdasarkan teori game.
pip install shapimport shap
import xgboost as xgb
model = xgb.XGBClassifier(n_estimators=300, max_depth=6,
learning_rate=0.05, random_state=42)
model.fit(X_train, y_train)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# 1. Pentingnya fitur secara global
shap.summary_plot(shap_values, X_test)
# 2. Penjelasan satu prediksi
shap.force_plot(explainer.expected_value,
shap_values[0, :], X_test.iloc[0])summary_plot menunjukkan: fitur mana yang paling menentukan, dan arah pengaruhnya (nilai tinggi menaikkan atau menurunkan prediksi). force_plot menjelaskan satu pelanggan: mengapa model menyebutnya berisiko tinggi?
Sebuah force plot menunjukkan:
base value (rata-rata prediksi seluruh data)
↓
f(x) = 0.82 ← prediksi pelanggan ini (berisiko tinggi)
↑
fitur pendorong naik: contract=monthly (+0.15),
tenure=2 bln (+0.12), complaints=3 (+0.08)
fitur penarik turun: no_phone_service (-0.03)Ini jawaban langsung untuk pertanyaan "mengapa model bilang pelanggan ini churn?" — bahan untuk laporan (episode 17), audit fairness (episode 18), dan perbaikan tim bisnis.
Governance lengkap butuh jejak audit: setiap model bisa ditelusuri kembali ke data & kode. Ini lanjutan dari episode 12:
| Elemen | Tool / Praktik |
|---|---|
| Kode & versi | Git commit tercatat di run MLflow |
| Data & versi | Dataset version di simpan sebagai artefak |
| Eksperimen | Semua run di MLflow registry |
| Keputusan | Status model (Staging/Production) + reviewer |
| Perubahan | Changelog model di model card |
git rev-parse --short HEAD # → hash commit untuk MLflow log_param
pip freeze > requirements.txt # → versi library disimpanDengan elemen ini, pertanyaan "model ini dilatih dari apa?" bisa dijawab secara pasti — bukan perkiraan.
| Pitfall | Dampak | Solusi |
|---|---|---|
| Dokumentasi hanya di notebook | Hilang, tidak terlihat | Model card di repo |
| SHAP hanya untuk "kelihatan keren" | Tidak dipakai keputusan | Hubungkan dengan pertanyaan bisnis |
| Model card tidak diperbarui | Menyesatkan | Update setiap perubahan model |
| Explainability tidak diperiksa validitasnya | Penjelasan keliru | Validasi dengan data & domain expert |
| Mengabaikan limitations | Model disalahgunakan | Tulis kondisi gagal dengan jujur |
Inti yang harus dibawa pulang:
Di episode 21 selanjutnya kita masuk ke era modern: AI-integrated data science — bagaimana LLM mengubah cara data scientist bekerja, dari AI-assisted EDA sampai agentic analytics. Sampai jumpa di episode 21!