Permutation Importance untuk Penentuan Peubah Penting dengan Python

Permutation Importance Python sklearn

Salah satu isu yang menjadi perhatian pada model-model machine learning adalah mengenai interpretabilitas. Idealnya, setiap peneliti tidak hanya mengharapkan performa model yang optimal tetapi juga mudah dipahami. Untuk beberapa alasan, umumnya model menjadi jauh lebih dipercaya jika kita mengetahui faktor yang mendasari suatu model dalam pengambilan keputusan (Drobnič et al., 2020).

Features Importance merupakan ukuran yang menunjukkan besar kecilnya kepentingan atau kontribusi peubah dalam perubahan performa model. Salah satu ukuran yang dapat digunakan yaitu Permutation Importance. Permutation Importance mengukur besarnya perubahan performa model, ketika nilai-nilai pada satu peubah tertentu dilakukan permutasi acak (Altmann et al., 2010). Permutation Importance bersifat model agnostik, sehingga dapat diterapkan pada berbagai algoritma pemodelan.

Intuisi dibalik permutation importance adalah Jika nilai pada peubah tersebut diacak namun performa model tidak berubah, ini menunjukkan berapapun nilai peubah tersebut tidak begitu berpengaruh. Sebaliknya, jika performa model mengalami penurunan yang besar, maka dapat diyakini nilai peubah tersebut sangat mempengaruhi kemampuan model dalam memprediksi.

Penghitungan permutation importance pada satu peubah dapat dilakukan berulang kali. Dengan demikian, kita tidak hanya memperoleh satu nilai tertentu, namun dapat melihat dalam bentuk selang nilai. Selain itu, proses komputasi permutation importance juga sangat cepat, karena tidak memerlukan proses training model berkali-kali. Performa diukur hanya pada 1 model, namun dengan nilai peubah yang telag dilakukan permutasi acak.

Permutation Importance

Ilustrasi pada Gambar 1 menunjukkan suatu model dengan 4 peubah prediktor dan peubah respon bertipe kategorik dengan 3 kategori. Model mampu memprediksi nilai dari dataset dengan akurasi sebesar 0,8.

Permutation Importance Python sklearn
Gambar 1. Ilustrasi Akurasi Model (sumber: penulis)

Sebagai contoh, untuk menghitung nilai permutation importance pada peubah X1:

  • lakukan permutasi acak untuk nilai peubah X1,
  • dengan menggunakan model yang sama, prediksi kembali output dari data yang sudah diacak,
  • hitung nilai akurasi dari prediksi yang diperoleh,
  • banndingkan nilai akurasi dengan nilai akurasi pada data asli,
  • proses dapat dilakukan berulang kali untuk memberikan gambaran hasil yang lebih umum,
  • jika dilakukan secara iteratif, maka permutation importance diukur berdasarkan nilai rata-rata dari setiap iterasi.

Gambar 2 di bawah ini mengilustrasikan permutasi acak pada nilai-nilai peubah X1. Akurasi model setelah data X1 diacak menjadi lebih rendah dibandingkan sebelumnya. Penurunan ini menunjukkan bahwa peubah X1 memiliki pengaruh yang besar di dalam model.

Permutation Importance Python sklearn
Gambar 2. Ilustrasi Proses Permutation Importance (sumber: penulis)

Untuk membandingkan tingkat kepentingan setiap peubah pembentuk model, maka lakukan proses yang sama untuk peubah lainnya. Peubah dengan nilai permutation importance yang lebih besar berarti memiliki pengaruh lebih besar pula pada model tersebut.

Permutation importance memiliki kelemahan ketika adanya kondisi multikolinearitas, atau hubungan yang kuat antar peubah prediktor. Pada kondisi semacam ini, terdapat kemungkinan peubah yang seharusnya memiliki pengaruh besar dianggap tidak berpengaruh. Hal ini disebabkan performa model yang tidak berkurang banyak karena sudah terwakili oleh peubah lainnya yang memiliki korelasi tinggi.

Implementasi dengan Scikit-Learn

Pada bagian ini kita akan mencoba menghitung permutation importance pada model prediksi kelas wine. Dataset yang digunakan tersedia pada modul sklearn.datasets sehingga dapat langsung digunakan. Total sampel pada dataset sebanyak 178, dengan 13 peubah prediktor bertipe numerik dan peubah respon dengan 3 kelas (0, 1 dan 2).

Membuat Model (Gradient Boosting)

Model yang akan digunakan dalam contoh ini adalah Gradient Boosting. Namun seperti yang sudah disampaikan di awal, permutation importance dapat digunakan untuk model apapun.

Proses training akan menggunakan sebanyak 70% sebagai data dan sisanya sebanyak 30% sebagai data testing untuk mengevaluasi performa model.

Kita tidak melakukan tuning hyperparameter apapun, karena fokus tulisan ini adalah pada penghitungan permutation importance bukan tentang pencarian model terbaik. Parameter model dibuat dengan pengaturan jumlah pohon 100 dan learning rate 0.01. Nilai akurasi (mean accuracy) yang diperoleh menggunakan data testing adalah 0,963.

Python

# membaca dataset wine
from sklearn.datasets import load_wine
# Membagi data training dan testing
from sklearn.model_selection import train_test_split
# Membuat model GradientBoosting untuk Klasifikasi
from sklearn.ensemble import GradientBoostingClassifier

# membaca dataset wine
wine = load_wine(as_frame=True)

X = wine.data
y = wine.target

# Membagi data (training: 70%, testing: 30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=111)

# Membuat Model Gradient Boosting
# Jumlah Pohon: 100, Learning Rate = 0.01, Lainnya: Default
model_gb = GradientBoostingClassifier(n_estimators=100, learning_rate=0.01)
model_gb.fit(X_train, y_train)

Print("Skor Akurasi:", model_gb.score(X_test, y_test))

# Output
# 0.9629629629629629

Menghitung Permutation Importance

Untuk menghitung permutation importance kita menggunakan fungsi permutation_importance dari modul sklearn.inspection. Beberapa parameter penting yang perlu dtentukan adalah:

  • estimator: model yang akan dihitung nilai permutation importance,
  • X: DataFrame atau Array yang berisi data peubah prediktor (features)
  • y: Peubah target
  • n_repeats : jumlah ulangan untuk setiap peubah X (default: 5)

Pada kode berikut kita akan menggunakan 100 kali ulangan. Adapun performa yang akan diukur adalah performa model pada data testing, sehingga parameter X dan y kita isi dengan data testing.

Nilai random_state dapat dipilih berapa saja, jika ingin memperoleh hasil yang persis sama dengan contoh ini maka gunakan 100. n_jobs dapat diisi maksimal sebanyak jumlah prosesor pada perangkat yang digunakan.

Python

# Manajemen DataFrame
import pandas as pd
# Menghitung permutation importance
from sklearn.inspection import permutation_importance

# Menghitung Permutation Importance (100 ulangan)
pimp = permutation_importance(
    model_gb, X_test, y_test, n_repeats=100, random_state=100, n_jobs=4
)

result = pd.DataFrame(pimp["importances"], index=X.columns).T

# Menampilkan hasil untuk 5 kolom pertama
print(result.iloc[:,:5])

mean_result = result.mean(axis=0).sort_values(ascending=False)
print("\nNilai rata-rata Permutation Importance:\n")
print(mean_result)

Output

OUTPUT    

     alcohol  malic_acid  ash  alcalinity_of_ash  magnesium
0   0.166667         0.0  0.0                0.0   0.074074
1   0.129630         0.0  0.0                0.0   0.037037
2   0.148148         0.0  0.0                0.0   0.055556
3   0.148148         0.0  0.0                0.0   0.055556
4   0.111111         0.0  0.0                0.0   0.074074
..       ...         ...  ...                ...        ...
95  0.074074         0.0  0.0                0.0   0.055556
96  0.111111         0.0  0.0                0.0   0.037037
97  0.185185         0.0  0.0                0.0   0.055556
98  0.203704         0.0  0.0                0.0   0.074074
99  0.074074         0.0  0.0                0.0   0.055556

[100 rows x 5 columns]

Nilai rata-rata Permutation Importance:

flavanoids                      0.244259
alcohol                         0.128889
color_intensity                 0.126296
proline                         0.098333
magnesium                       0.056852
od280/od315_of_diluted_wines    0.028889
malic_acid                      0.000000
ash                             0.000000
alcalinity_of_ash               0.000000
total_phenols                   0.000000
nonflavanoid_phenols            0.000000
proanthocyanins                 0.000000
hue                             0.000000
dtype: float64

Output yang ditampilkan di atas terdiri dari 2 bagian. Bagian pertama kita menampilkan contoh hasil permutation importance dari 5 peubah (alcohol, malic_acid, dst). Nilai yang ditampilkan pada setiap baris menunjukkan nilai permutation importance untuk ulangan pertama (indeks ke-0) hingga ke-100 (indeks ke-99).

Pada bagian kedua, kita tampilkan nilai rata-rata permutation importance berdasarkan nilai 100 ulangan. Hasil penghitungan menunjukkan bahwa peubah flavanoids merupakan peubah paling penting dari model. Ketika nilai pada peubah ini kita acak, maka secara rata-rata performa model akan berkurang hingga 0.244. Peubah penting berikutnya adalah alcohol dan color_intensity dengan nilai yang hampir sama.

Terdapat 7 peubah dengan rata-rata nilai 0, ini menunjukkan peubah-peubah tersebut tidak memberikan pengaruh apa-apa terhadap performa model. Namun sekali lagi, mungkin perlu pengecekan terlebih dahulu terhadap kemungkinan adanya kondisi multikolinieritas.

Karena penghitungan nilai dilakukan sebanyak 100 ulangan, maka selain nilai rataan, tentu kita dapat juga menghitung standar deviasinya sehingga dapat diukur pula selang bagi nilai permutation importance.

Visualisasi Boxplot

Nilai permutation importance sering kali dipresentasikan dalam bentuk boxplot. Berikut ini adalah visualisasi hasil yang sudah diperoleh pada bagian sebelumnya.

Python

# Visualisasi
import seaborn as sns
import matplotlib.pyplot as plt

sorted_index = result.mean(axis=0).sort_values(ascending=False).index
sorted_result = result[sorted_index]

plt.figure(figsize=(5, 6))
sns.boxplot(data=sorted_result, orient='h', 
            color='orange', linewidth=0.5, width=0.5,
            fliersize=1.5, flierprops={"marker": "o"})

plt.title("Permutation Importances (Data Test)")

Output

Permutation Importance Python sklearn
Boxplot Permutation Importance (sumber : penulis)

Melalui visualisasi boxplot seperti di atas, semakin memudahkan kita untuk memahami bagaimana posisi nilai permutation importance masing-masing peubah dalam mempengaruhi performa model.

Referensi

Altmann, A., Toloşi, L., Sander, O., & Lengauer, T. (2010). Permutation importance: A corrected feature importance measure. Bioinformatics, 26(10), 1340–1347. https://doi.org/10.1093/BIOINFORMATICS/BTQ134

Drobnič, F., Kos, A., & Pustišek, M. (2020). On the Interpretability of Machine Learning Models and Experimental Feature Selection in Case of Multicollinear Data. Electronics 2020, Vol. 9, Page 761, 9(5), 761. https://doi.org/10.3390/ELECTRONICS9050761

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi