Model Baseline

DummyClassifier sebagai tolok ukur minimum yang harus dikalahkan setiap model.

Daftar isi

Topik ini membahas model baseline, yaitu model pembanding sederhana yang mengabaikan fitur sama sekali dan hanya menggunakan distribusi label. Pembahasan mencakup DummyClassifier dengan dua strateginya, perbandingan baseline dengan model sungguhan pada data iris dan pada data tidak seimbang, serta cara membaca keadaan ketika model tidak mengalahkan pembandingnya. Setelah topik ini dipahami, setiap skor model dapat dinilai terhadap tolok ukur minimum yang jelas.

Skor tanpa pembanding tidak bermakna#

Angka accuracy 0.95 pada data dengan dua kelas dapat berarti dua hal yang sangat berbeda, yaitu model yang benar-benar memanfaatkan fitur atau model yang hanya menebak kelas mayoritas pada data yang 95 persen berisi kelas tersebut. Tanpa pembanding, kedua kemungkinan itu tidak dapat dibedakan. Model baseline mengisi kekosongan ini dengan tolok ukur minimum, yaitu skor yang dicapai tanpa belajar apa pun dari fitur.

scikit-learn menyediakan DummyClassifier sebagai estimator baseline. Estimator ini menerima fitur seperti model lain, tetapi keluarannya hanya mengikuti distribusi label pada data latih dan tidak menggunakan isi fitur sama sekali. Setiap model sungguhan wajib mengalahkan baseline karena model yang tidak mampu melampaui tebakan sederhana belum membawa nilai tambah.

Nama Dummy pada kelasnya menegaskan bahwa estimator ini tidak mempelajari hubungan apa pun antara fitur dan label. Skor baseline juga dapat diperkirakan sebelum dijalankan. Pada data seimbang dengan k kelas, tebakan acak berkisar di sekitar 1 dibagi k, sedangkan pada data tidak seimbang tebakan murni kelas mayoritas mendekati proporsi kelas terbesar. Perkiraan kasar ini membantu menilai apakah angka baseline yang muncul masuk akal.

Dua strategi DummyClassifier#

Strategi most_frequent selalu memprediksi label yang paling banyak muncul pada data latih, apa pun fiturnya. Strategi stratified memilih label secara acak mengikuti proporsi label data latih, sehingga keluarannya menyerupai tebakan yang hasilnya bergantung pada peluang. Karena strategi stratified menggunakan keacakan, argumen random_state perlu ditetapkan agar perbandingan tetap dapat direproduksi. Strategi most_frequent bersifat deterministik sehingga tidak memerlukan benih acak.

Kode berikut membandingkan dua strategi baseline dengan KNeighborsClassifier pada data iris yang seimbang.

python baseline-iris.py
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

dummy_freq = DummyClassifier(strategy="most_frequent", random_state=42)
dummy_freq.fit(X_train, y_train)
dummy_strat = DummyClassifier(strategy="stratified", random_state=42)
dummy_strat.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

print("Baseline most_frequent:", round(accuracy_score(y_test, dummy_freq.predict(X_test)), 4))
print("Baseline stratified   :", round(accuracy_score(y_test, dummy_strat.predict(X_test)), 4))
print("KNeighborsClassifier  :", round(accuracy_score(y_test, knn.predict(X_test)), 4))
text Keluaran
Baseline most_frequent: 0.3333
Baseline stratified   : 0.3333
KNeighborsClassifier  : 0.9556

Data iris memuat tiga kelas dengan proporsi yang seimbang, sehingga baseline most_frequent hanya mencapai 0.3333, yaitu 15 prediksi benar dari 45 sampel data uji. Strategi stratified jatuh pada angka yang sama pada pemecahan ini. Sementara itu, KNeighborsClassifier mencapai 0.9556, jauh di atas kedua baseline, dan selisih lebar ini menjadi bukti bahwa model sungguhan memang memanfaatkan fiturnya.

Baseline pada data tidak seimbang#

Peran baseline menjadi lebih jelas pada data tidak seimbang. Kode berikut menggunakan data sintetis 600 baris dengan kelas mayoritas sekitar 90 persen, lalu membandingkan baseline most_frequent dengan KNeighborsClassifier.

python Contoh: baseline pada data tidak seimbang
from sklearn.datasets import make_classification
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

X, y = make_classification(
    n_samples=600, n_features=6, n_informative=3, n_redundant=0,
    weights=[0.9, 0.1], random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

dummy = DummyClassifier(strategy="most_frequent", random_state=42)
dummy.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

print("Proporsi kelas mayoritas pada data latih:", round(max(y_train.mean(), 1 - y_train.mean()), 4))
print("Baseline most_frequent:", round(accuracy_score(y_test, dummy.predict(X_test)), 4))
print("KNeighborsClassifier:", round(accuracy_score(y_test, knn.predict(X_test)), 4))
text Keluaran
Proporsi kelas mayoritas pada data latih: 0.8958
Baseline most_frequent: 0.9
KNeighborsClassifier: 0.95

Baseline most_frequent mencapai 0.9 tanpa membaca satu pun fitur, cukup dengan menebak kelas mayoritas pada setiap sampel. Model KNeighborsClassifier menang dengan 0.95, tetapi keunggulannya hanya sekitar lima poin di atas tebakan paling sederhana. Tanpa baseline, angka 0.95 mudah dibaca sebagai hasil yang mengesankan, padahal jaraknya terhadap tebakan minimum yang sebenarnya tipis.

Angka 0.9 pada baseline juga dapat ditelusuri asalnya. Proporsi kelas mayoritas pada data latih yang tercetak adalah 0.8958, sedangkan skor 0.9 persis sama dengan proporsi kelas mayoritas pada data uji, karena model yang selalu menebak kelas mayoritas benar sebanyak proporsi kelas itu. Kedua angka ini sedikit berbeda karena stratifikasi hanya dapat menghasilkan jumlah baris yang bulat.

Ketika model tidak mengalahkan pembandingnya#

Model yang skornya sama dengan atau lebih rendah dari baseline memberi pesan yang jelas, yaitu model tidak belajar apa pun dari fitur yang diberikan. Keadaan ini bukan akhir analisis, melainkan petunjuk diagnosis pertama. Penyebab yang lazim di antaranya adalah fitur yang tidak informatif, data latih yang terlalu kecil, parameter yang belum sesuai, dan pemilihan metrik yang tidak cocok dengan sifat datanya.

Langkah penelusurannya dimulai dari yang paling murah. Periksa terlebih dahulu bahwa pemecahan data sudah benar dan baseline memang dihitung dengan prosedur yang sama seperti model, lalu tinjau kembali mutu fiturnya sebelum menaikkan kompleksitas model. Model yang lebih rumit jarang menjadi jawaban atas kegagalan mengalahkan tebakan sederhana, karena persoalannya biasanya terletak pada data dan bukan pada modelnya.

Beberapa pemeriksaan konkret dapat dikerjakan secara berurutan. Bandingkan proporsi kelas pada data dengan skor model untuk menilai apakah model hanya mengulangi kelas mayoritas. Hitung ulang baseline dengan strategi yang berbeda untuk memastikan pembandingnya stabil. Apabila kedua pemeriksaan tidak menyingkap penyebabnya, perbesar data latih atau cari fitur yang lebih informatif, karena penyetelan parameter pada fitur yang sama jarang mengubah kesimpulan.

Ringkasan#

  • DummyClassifier adalah model pembanding yang mengabaikan fitur dan hanya menggunakan distribusi label data latih.
  • Strategi most_frequent menebak label terbanyak, sedangkan stratified menebak secara acak mengikuti proporsi label.
  • Setiap model sungguhan wajib mengalahkan baseline, dan pada data tidak seimbang baseline most_frequent dapat mencapai skor tinggi tanpa belajar.
  • Model yang tidak mengalahkan baseline menandakan persoalan pada fitur, ukuran data, parameter, atau metrik yang digunakan.

Referensi#