Belajar Machine Learning - Model Interpretation (XAI)
Episode 20 of 25

Belajar Machine Learning - Model Interpretation (XAI)

Menerapkan explainable AI: SHAP untuk kontribusi fitur per prediksi, LIME untuk penjelasan lokal, permutation importance dan partial dependence untuk pemahaman global, plus praktik menjelaskan model ke stakeholder dan kepatuhan seperti credit scoring.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Selama 19 episode kita terus meningkatkan akurasi. Episode ini kita bertanya: mengapa model memutuskan seperti itu? Di banyak domain, akurasi saja tidak cukup — pengguna, regulator, dan stakeholder butuh alasan.

Mengapa interpretability wajib? Contoh paling nyata: credit scoring. Bank menolak kredit kalian — kalian berhak tahu alasannya, dan regulator mewajibkan bank menjelaskan keputusan. Sebuah model yang akurat tapi kotak hitam tidak bisa digunakan dalam konteks seperti ini. Di sinilah XAI (Explainable AI) masuk.

Dua Tingkat Interpretability

TingkatPertanyaanContoh alat
GlobalBagaimana model bekerja secara keseluruhan? Fitur mana yang paling penting?Feature importance, partial dependence
LokalMengapa prediksi spesifik ini dibuat?SHAP, LIME

Keduanya saling melengkapi: global untuk memahami model dan memvalidasi sanity, lokal untuk menjelaskan keputusan individual kepada user.

Permutation Importance

Di episode 9 kita memakai feature_importances_ bawaan tree — yang ternyata bias terhadap fitur numerik bervariasi. Permutation importance mengukurnya lebih jujur: acak-acak satu kolom, lalu lihat seberapa besar performa turun. Kolom yang kalau diacak membuat performa hancur = kolom penting.

Permutation importance
from sklearn.inspection import permutation_importance
 
result = permutation_importance(
    model, X_val, y_val,
    n_repeats=10, scoring="roc_auc", random_state=42,
)
 
for i in result.importances_mean.argsort()[::-1][:5]:
    print(f"{X.columns[i]:20s} {result.importances_mean[i]:.4f} ± {result.importances_std[i]:.4f}")

Kelebihan permutation importance: model-agnostic (bisa untuk model apa pun) dan lebih dapat dipercaya daripada importance bawaan.

Partial Dependence

Partial dependence plot (PDP) menjawab: "Jika fitur X berubah dari nilai kecil ke besar, bagaimana prediksi rata-rata berubah — dengan fitur lain diabaikan?"

Partial dependence plot
from sklearn.inspection import PartialDependenceDisplay
import matplotlib.pyplot as plt
 
PartialDependenceDisplay.from_estimator(
    model, X_val, ["pendapatan"], kind="average"
)
plt.show()

PDP memberi gambaran arah dan bentuk hubungan fitur-target — misalnya "prediksi churn turun tajam saat pendapatan di atas 5 juta". Ini yang paling mudah dipahami stakeholder non-teknis.

SHAP: Penjelasan Global dan Lokal

SHAP adalah standar de facto XAI modern. Ide dasarnya: nilai kontribusi tiap fitur dihitung berdasarkan nilai Shapley dari teori permainan — kontribusi marginal fitur terhadap prediksi, diuji pada semua kombinasi fitur lain.

Penjelasan Lokal

Untuk satu prediksi — misalnya mengapa customer ini ditolak kredit:

SHAP force plot (satu prediksi)
import shap
 
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_val)
 
shap.force_plot(
    explainer.expected_value,
    shap_values[7, :],
    X_val.iloc[7, :],
    matplotlib=True,
)

Force plot menunjukkan basis prediksi (expected value) lalu fitur yang mendorong prediksi ke atas (merah) dan ke bawah (biru). Dari sini bisa dikatakan: "kredit ditolak terutama karena rasio hutang tinggi dan riwayat keterlambatan" — penjelasan yang bisa disampaikan ke user.

Penjelasan Global

Ringkasan kontribusi seluruh data:

SHAP summary plot
shap.summary_plot(shap_values, X_val, feature_names=X.columns)

Summary plot menampilkan semua titik data: sumbu X adalah nilai SHAP (arah pengaruh), warna menunjukkan nilai fitur. Kolom yang tersebar luas = fitur penting. Plot ini merangkum kepentingan + arah + interaksi dalam satu gambar.

Tip

Untuk model linear, koefisien sudah memberi arah dan besaran — SHAP tidak wajib. SHAP paling bernilai untuk tree-based dan neural network di mana interpretasi langsung tidak tersedia.

LIME: Penjelasan Lokal dengan Model Sederhana

LIME (Local Interpretable Model-agnostic Explanations) menjelaskan satu prediksi dengan melatih model linear kecil di sekitar titik tersebut — mengaproksimasi model kompleks secara lokal.

LIME untuk satu prediksi
import lime
import lime.lime_tabular
 
explainer = lime.lime_tabular.LimeTabularExplainer(
    X_train.values, feature_names=X.columns,
    class_names=["tidak", "ya"], mode="classification",
)
 
exp = explainer.explain_instance(
    X_val.iloc[7].values, model.predict_proba
)
print(exp.as_list())

Keunggulan LIME: model-agnostic — bisa untuk model apa pun (bahkan neural network). Kelemahan: penjelasan sedikit tidak stabil — jalankan dua kali, hasil bisa sedikit berbeda karena sampling acak.

AlatTingkatModel-agnosticStabilitas
Permutation importanceGlobalYaStabil
Partial dependenceGlobalYaStabil
SHAPGlobal + lokalTidak (per-algoritma)Stabil
LIMELokalYaKurang stabil

Praktik: Explainability untuk Credit Scoring

Alur lengkap untuk kebutuhan stakeholder + compliance:

Laporan interpretasi ringkas
def explain_decision(model, explainer, row, idx):
    sv = explainer.shap_values(row.values.reshape(1, -1))[0]
 
    reasons = pd.Series(sv, index=X.columns) \
        .sort_values(key=abs, ascending=False) \
        .head(3)
 
    print(f"Keputusan: {'DITERIMA' if model.predict(row.values.reshape(1, -1))[0] == 1 else 'DITOLAK'}")
    for feat, val in reasons.items():
        arah = "mendorong diterima" if val > 0 else "mendorong ditolak"
        print(f"  {feat} ({row[feat]:.2f}): {arah}")

Outputnya langsung bisa disampaikan ke user: "Pengajuan ditolak terutama karena rasio hutang 0.78 dan skor pembayaran 420." Transparansi semacam ini bukan sekadar kepatuhan — ia membangun kepercayaan.

Validasi Sanity Model dengan Interpretasi

Selain untuk compliance, interpretasi adalah alat debugging. Sebelum men-deploy model (episode 18), jawab pertanyaan ini:

  • Apakah fitur paling penting masuk akal secara domain?
  • Apakah arah pengaruhnya sesuai ekspektasi? (Pendapatan tinggi seharusnya menurunkan churn.)
  • Adakah fitur yang penting tapi mencurigakan — sinyal leakage?

Jika model menganggap id_pelanggan sebagai fitur paling penting, itu bukan insight — itu red flag bahwa model menghafal sesuatu yang tidak seharusnya.

Common Pitfalls

  • Hanya memakai importance bawaan tree — bias terhadap fitur numerik.
  • Mengandalkan satu alat saja — SHAP dan LIME memberi sudut pandang berbeda.
  • Menjelaskan prediksi tapi tidak menjelaskan model — perlu keduanya untuk kepercayaan penuh.
  • Mengabaikan arah pengaruh — "fitur penting" tanpa tahu apakah menaikkan/menurunkan tidak lengkap.
  • Menafsirkan korelasi sebagai kausal — model bisa belajar pola yang kebetulan.

Penutup

Pada episode 20 ini, kalian telah menguasai interpretasi model.

Inti yang harus dibawa pulang:

  • Interpretability global (permutation importance, PDP) memahami model; lokal (SHAP, LIME) menjelaskan keputusan.
  • SHAP adalah standar untuk tree-based; LIME untuk model-agnostic.
  • Penjelasan per-keputusan adalah syarat untuk compliance (credit scoring, kesehatan).
  • Interpretasi juga alat debugging — cek sanity model sebelum deploy.

Di episode 21 selanjutnya kita berpindah paradigma: reinforcement learning — agent, environment, dan reward, lalu Q-Learning, DQN, dan PPO, dengan praktik Gymnasium (cartpole & bandit problem). Sampai jumpa di episode 21!

Belajar Machine Learning - Model Interpretation (XAI) | Belajar Machine Learning