Saat ini saya menggunakan XGBoost untuk prediksi risiko, tampaknya melakukan pekerjaan yang baik di departemen klasifikasi biner tetapi output probabilitas jauh, yaitu, mengubah nilai fitur dalam pengamatan dengan jumlah yang sangat kecil dapat membuat probabilitas output melonjak dari 0,5 ke 0,99.
Saya hampir tidak melihat output di kisaran 0,6-0,8. Dalam semua kasus, probabilitasnya kurang dari 0,99 atau 1.
Saya mengetahui metode kalibrasi pasca pelatihan seperti Penskalaan Platt dan Koreksi Logistik, tetapi saya bertanya-tanya apakah ada sesuatu yang dapat saya atur dalam proses pelatihan XGBoost.
Saya menelepon XGBoost dari berbagai bahasa menggunakan FFI, jadi alangkah baiknya jika saya dapat memperbaiki masalah ini tanpa memperkenalkan perpustakaan kalibrasi lain, misalnya, mengubah metrik eval dari AUC ke log loss.
sumber
XGBoost
cukup kuat terhadap outlier, bila dibandingkan dengan metode vanilla lain sepertiSVM
.Jawaban:
XGBoost tidak dikalibrasi secara alami dalam probabilitas. Anda perlu menggunakan sesuatu seperti:
untuk memastikan bahwa output model dapat diartikan sebagai suatu probabilitas. Kalau tidak, Anda hanya akan mendapatkan skor, yang hanya dapat digunakan untuk memberi peringkat instance. Karena sebagian besar metrik kinerja dapat dihitung berdasarkan skor, itu adalah kesalahan umum untuk menggunakan apa yang tampak seperti probabilitas (terkait dengan metrik kinerja yang baik) alih-alih probabilitas 'nyata'.
AS untuk ketidakstabilan model (di sini dalam arti bahwa sedikit perubahan dalam variabel penjelas banyak mengubah prediksi), Anda perlu memeriksa ulang seluruh proses kalibrasi Anda: pemilihan variabel, partisi kereta / uji coba, hiper-parameter-tuning / validasi silang, kinerja metrik yang digunakan, untuk memastikan bahwa model Anda tidak terlalu pas.
sumber
Ya, periksa distribusi log-loss karena jumlah iterasi meningkat. Jika mulai menembak sebelum final Anda meningkatkan iterasi maka itu terlalu pas.
sumber
Yang pertama saya tanyakan adalah "Apa rasio positif / negatif?". Hanya karena saya memiliki masalah yang sama beberapa kali ketika kelas sangat tidak seimbang. Jika ini kasus Anda, Anda dapat mencoba menyeimbangkan dataset atau mencoba bermain dengan
scale_pos_weight
parameter XGboost. Dalam kasus rasio kelas 50/50, kemungkinan mungkin lebih atau kurang dinormalisasi.Juga, sangat mungkin Anda mengalami overfitting pada saat yang sama. Cobalah untuk menyesuaikan tingkat belajar, parameter pengambilan sampel, dan parameter regularisasi (reg_alpha, reg_lambda).
sumber
Pertama, Anda harus yakin bahwa data Anda cukup besar ketika bekerja dengan algoritma berbasis pohon seperti XGBoost dan LightGBM, perubahan mendadak seperti itu mungkin mengindikasikan overfitting. (Setidaknya 10.000 sampel, praktis)
Kedua, bagaimana kardinalitas Anda; jika Anda memiliki 3-4 fitur, diharapkan perubahan fitur yang menyebabkan efek seperti itu.
Ketiga, apa pilihan hiperparameter Anda? Model berbasis pohon jauh lebih sensitif terhadap perubahan parameter. Pastikan Anda menerapkan penyetelan hyperparameter dengan hati-hati.
Terakhir, ketika berhadapan dengan klasifikasi biner; metrik kesalahan menjadi sangat penting. Anda dapat melakukan kombinasi kehilangan log biner dan kesalahan biner (XGBoost memungkinkan Anda untuk memilih beberapa); juga pastikan untuk menerapkan penghentian awal dengan memilih early_stopping_rounds = N dalam metode kereta XGBoost, di mana N adalah pilihan iterasi. Dengan itu, algoritma Anda akan berhenti lebih awal pada titik yang masuk akal di mana kerugian Anda berhenti berkurang, menghindari overfitting.
sumber