Output XGBoost cenderung ke arah ekstrem

15

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.

selalu belajar
sumber
Sudahkah Anda memeriksa bahwa penskalaan apa pun yang Anda terapkan pada set pelatihan juga telah diterapkan dengan benar pada set tes?
bradS
Saya memiliki masalah yang sama. Bisakah Anda menemukan sesuatu yang bermanfaat? Sebagai solusi sementara saya mengurutkan ke probs dan dinormalisasi di bawah 0 ke 1 berdasarkan kejadian tetapi saya tidak berpikir itu solusi yang baik.
Ilker Kurtulus
Berapa banyak variabel kategori yang Anda miliki dalam model Anda?
ngopal
Sebenarnya XGBoostcukup kuat terhadap outlier, bila dibandingkan dengan metode vanilla lain seperti SVM.
Piotr Rarus - Pasang kembali Monica

Jawaban:

1

XGBoost tidak dikalibrasi secara alami dalam probabilitas. Anda perlu menggunakan sesuatu seperti:

objective = "binary:logistic"

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.

lcrmorin
sumber
0

Ya, periksa distribusi log-loss karena jumlah iterasi meningkat. Jika mulai menembak sebelum final Anda meningkatkan iterasi maka itu terlalu pas.

bbennett36
sumber
0

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_weightparameter 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).

i1bgv
sumber
-1

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.

MULUK yang jelek
sumber