Model berbasis pohon dapat melaporkan fitur mana yang paling banyak digunakan dalam pengambilan keputusannya, tetapi angka tersebut mudah dibaca secara berlebihan. Topik ini menjelaskan dua ukuran kepentingan fitur pada scikit-learn, yaitu kepentingan berbasis pengurangan ketidakmurnian dan permutation importance, beserta bias yang melekat pada keduanya. Praktiknya menghitung keduanya dari satu random forest pada dataset breast cancer, lalu membandingkan urutan lima fitur teratas yang dihasilkan. Pembacaan yang terlalu percaya pada satu angka sering berujung pada kesimpulan yang keliru tentang fitur, sehingga topik ini juga menyiapkan cara membacanya dengan hati-hati.
Kepentingan berbasis pengurangan impurity#
Setiap pembagian simpul menurunkan ketidakmurnian (impurity), misalnya indeks Gini, sebesar rata-rata tertimbang dari penurunan pada kedua simpul anaknya. Penurunan itu diperhitungkan sepenuhnya milik fitur yang digunakan untuk membagi. Nilai feature_importances_ adalah jumlah penurunan tersebut per fitur, dirata-ratakan di seluruh pohon, kemudian dinormalisasi sehingga totalnya berjumlah 1. Karena itu setiap angka harus dibaca sebagai porsi kontribusi di dalam satu model, bukan sebagai kontribusi mutlak.
Ukuran ini membawa dua bias yang perlu diantisipasi. Pertama, fitur dengan banyak nilai unik memiliki lebih banyak kandidat ambang, sehingga lebih mungkin menemukan pembagian yang tampak baik dan menyerap kepentingan yang bukan miliknya. Kedua, fitur-fitur yang saling berkorelasi membagi peran secara sembarangan. Salah satu fitur digunakan pada pembagian tertentu, sehingga kepentingan masing-masing tampak kecil padahal gabungannya besar. Fitur identitas atau kode yang nilainya hampir unik per baris adalah contoh fitur yang kepentingannya dilebih-lebihkan oleh bias pertama. Karena itu, daftar teratasnya tetap perlu diperiksa silang, bukan langsung digunakan sebagai kesimpulan. Kepentingan versi impurity juga dihitung pada data latih, sehingga ikut mencerminkan penghafalan pohon.
Kepentingan berbasis permutasi#
Permutation importance mengukur sesuatu yang berbeda, yaitu penurunan skor model ketika nilai satu fitur diacak pada data yang dinilai. Pengacakan merusak hubungan fitur itu dengan target, sehingga apabila skor jatuh jauh, fitur tersebut memang digunakan model. Pengukuran diulang n_repeats kali dan hasilnya dirata-rata, sedangkan fitur yang tidak digunakan model tidak menggerakkan skor sama sekali. Urutan pengerjaannya sederhana, yaitu skor awal dihitung, satu kolom diacak, skor dihitung ulang, lalu kolom tersebut dikembalikan ke semula sebelum fitur berikutnya diperlakukan sama.
Permutasi dinilai pada himpunan yang dipilih, dan pilihan yang tepat adalah data uji, sehingga hasilnya mencerminkan kinerja pada data baru dan bukan penghafalan. Biaya komputasinya lebih mahal karena setiap fitur dan setiap pengulangan menuntut satu putaran prediksi penuh. Ukuran ini juga bersifat umum, yaitu dapat digunakan pada model apa pun yang memiliki metode skor, bukan hanya model pohon. Penurunan skornya pun bisa negatif, yaitu model sedikit lebih akurat tanpa fitur itu, dan nilai semacam itu menandakan fitur yang tidak berguna.
Membandingkan kedua ukuran#
Skrip berikut melatih random forest berisi seratus pohon pada dataset breast cancer. Skrip itu mencetak lima fitur teratas menurut kepentingan impurity dan lima teratas menurut permutasi dengan n_repeats=10 pada data uji. Hasil permutasinya berupa rata-rata penurunan skor beserta simpangannya, sehingga fitur dengan penurunan yang tidak konsisten antar pengulangan tidak langsung dipercaya.
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split
data = load_breast_cancer()
X, y = data.data, data.target
X_latih, X_uji, y_latih, y_uji = train_test_split(
X, y, test_size=0.2, random_state=42
)
hutan = RandomForestClassifier(
n_estimators=100, random_state=42
).fit(X_latih, y_latih)
print("Lima teratas versi impurity (dihitung pada data latih):")
urutan = np.argsort(hutan.feature_importances_)[::-1][:5]
for i in urutan:
print(f" {data.feature_names[i]:<28} {hutan.feature_importances_[i]:.4f}")
print()
print("Lima teratas versi permutasi (dihitung pada data uji):")
hasil = permutation_importance(
hutan, X_uji, y_uji, n_repeats=10, random_state=42
)
urutan = np.argsort(hasil.importances_mean)[::-1][:5]
for i in urutan:
print(f" {data.feature_names[i]:<28} {hasil.importances_mean[i]:.4f}")Lima teratas versi impurity (dihitung pada data latih):
worst area 0.1539
worst concave points 0.1447
mean concave points 0.1062
worst radius 0.0780
mean concavity 0.0680
Lima teratas versi permutasi (dihitung pada data uji):
worst radius 0.0035
mean area 0.0035
mean texture 0.0035
worst area 0.0026
worst texture 0.0026Kedua daftar memberi urutan yang berbeda. Versi impurity menempatkan worst area dan kedua fitur concave points di puncak, sedangkan versi permutasi menempatkan worst radius, mean area, dan mean texture terdepan. Fitur mean concave points, yang menempati posisi tiga pada versi impurity, bahkan tidak muncul di lima teratas versi permutasi.
Perbedaan itu wajar dan justru menggambarkan kedua bias yang dibahas di atas. Fitur ukuran tumor seperti radius, area, dan perimeter saling berkorelasi kuat, sehingga perannya tersebar dan pengacakan satu fitur saja tidak membuat skor jatuh jauh. Nilai permutasi teratas sekitar 0.0035 berarti pengacakan satu fitur hanya menggerakkan akurasi kurang dari setengah poin persen pada 114 baris data uji.
Dalam praktik, kepentingan impurity digunakan untuk gambaran cepat saat eksplorasi, sedangkan permutasi pada data uji digunakan saat penilaian. Keduanya dibaca bersama peta korelasi antar-fitur, bukan sebagai daftar pemenang tunggal. Urutan lima teratasnya bukan patokan akhir, dan yang penting adalah kebiasaan mencocokkan kedua daftar sebelum satu nama fitur diangkat menjadi kesimpulan.
Kesalahan umum#
- Membaca urutan kepentingan sebagai sebab-akibat. Kedua ukuran bersifat asosiatif terhadap perilaku model, dan fitur yang saling berkorelasi dapat bertukar peran tanpa mengubah skor. Angka yang tinggi hanya menyatakan fitur itu sering dipilih model, sehingga kesimpulan sebab-akibat memerlukan analisis terpisah di luar daftar kepentingan.
- Membandingkan pentingnya fitur antar model yang berbeda. Nilai impurity dinormalisasi di dalam satu model, sehingga tidak boleh dicocokkan langsung antar model dengan struktur berbeda. Normalisasi menjadikan total setiap model berjumlah 1, dan porsi yang sama besar dapat menyatakan kontribusi yang berbeda.
- Menghitung permutasi pada data latih untuk penilaian. Model mengenali nilai asli setiap baris data latih, sehingga pengacakan pada himpunan itu menjatuhkan skor bukan karena fiturnya berguna, melainkan karena nilainya sudah dihafal. Perhitungan permutasi untuk penilaian dilakukan pada data uji, sebagaimana dilakukan skrip di atas.
- Menyimpulkan fitur tidak berguna hanya dari kepentingan yang kecil. Peran fitur yang saling berkorelasi terbagi, sehingga satu fitur dapat tampak kecil padahal fitur penggantinya membawa informasi serupa, misalnya
worst perimeterdi sampingworst area. Kepentingan kecil dibaca bersama peta korelasi antar-fitur, dan fitur semacam itu diperlakukan sebagai kandidat yang perlu diperiksa, bukan sebagai fitur yang boleh langsung dibuang.
Ringkasan#
- Kepentingan impurity menjumlahkan penurunan ketidakmurnian yang diperhitungkan milik tiap fitur, lalu dinormalisasi berjumlah 1.
- Ukuran itu condong ke fitur dengan banyak nilai unik dan membagi peran di antara fitur yang saling berkorelasi.
- Permutation importance mengukur penurunan skor saat satu fitur diacak dan lebih jujur bila dihitung pada data uji.
- Kedua daftar digunakan sebagai petunjuk perilaku model, bukan sebagai bukti sebab-akibat.
Referensi#
- Permutation feature importance — scikit-learn — Panduan resmi kepentingan berbasis permutasi beserta bias yang menyertainya.
- sklearn.inspection.permutation_importance — scikit-learn
— Dokumentasi parameter
n_repeatsdan struktur hasilnya. - sklearn.ensemble.RandomForestClassifier — scikit-learn
— Dokumentasi atribut
feature_importances_berbasis pengurangan impurity.