Evalml: Untuk beberapa tujuan di mana baseline adalah 0, "pct lebih baik dari baseline" adalah nan

Dibuat pada 20 Nov 2020  ·  9Komentar  ·  Sumber: alteryx/evalml

{'F1': nan,
 'MCC Binary': nan,
 'Log Loss Binary': 93.29789549298991,
 'AUC': 58.36492736629537,
 'Precision': nan,
 'Balanced Accuracy Binary': 63.46659876071641,
 'Accuracy Binary': 12.876088314169193}

Saya telah membuat notebook Jupyter yang mereproduksi masalah ini di evalml , dan melampirkannya serta file data terkait ke utas di Slack.

enhancement

Komentar yang paling membantu

Suka. :-)

Semua 9 komentar

Reproduksi

import evalml
import pandas as pd
X = pd.read_csv('~/Downloads/fraud_500_data.csv').drop(['id', 'expiration_date'], axis=1)
y = X.pop('fraud')
automl = evalml.automl.AutoMLSearch(problem_type="binary", objective="f1")
automl.search(X, y)
# note that all percent_better_than_baseline values are nan in the rankings table
print(automl.rankings)
# can also check the scores of any pipeline other than the baseline pipeline, which should have id 0
print(automl.results['pipeline_results'][1]['percent_better_than_baseline_all_objectives'])

Kumpulan data ada di sini

@dsherry @rpeck Ini adalah perilaku yang diharapkan karena garis dasar pipa mendapat skor 0 pada tujuan dengan NaN ( F1 , MCCBinary , Precision ). Ada diskusi tentang pengaturan pembagian dengan 0 menjadi tak terhingga atau Tidak Ada dalam metode ini, tetapi kami tidak pernah memutuskan itu lebih baik daripada NaN karena jika garis dasar mencetak skor terburuk yang mungkin pada tujuan apa pun, kemudian membandingkan "persen lebih baik" pada itu objektif tidak banyak membantu dan itu dapat disampaikan dengan None, NaN, atau infinity.

Karena itu, mungkin ada alasan lain untuk memilih salah satu dari opsi ini daripada NaN!

@freddyaboulton Ah, masuk akal! Saya akan mengubah tes untuk melewati tujuan apa pun di mana garis dasarnya adalah 0. Terima kasih!

Terima kasih @freddyaboulton ! @rpeck maaf saya tidak menangkap ini ketika Anda bertanya kepada saya tentang hal itu kemarin.

Membiarkan masalah ini terbuka untuk didiskusikan: haruskah kita mengubah perilaku dalam kasus ini?

@freddyaboulton jadi F1, MCCBinary dan Precision adalah semua metrik di mana lebih besar lebih baik dan dibatasi dalam kisaran [-1, 1] (corr) atau [0, 1]. Bisakah kita mengubah impl peningkatan persen untuk menghitung perbedaan absolut dari 0 dan menggunakannya sebagai peningkatan persen? Dan jika itu yang kami lakukan saat ini, saya tidak akan mengharapkan garis dasar 0 menghasilkan peningkatan nan persen untuk metrik tersebut.

@dsherry Kami mengusulkan komputasi perbedaan absolut untuk tujuan yang dibatasi oleh [0, 1] dalam fase desain tetapi kami memutuskan memiliki dua perhitungan yang berbeda akan membingungkan. Karena itu, kita mungkin harus mempertimbangkan kembali bahwa garis dasar pipa hampir dirancang untuk mencetak 0 pada tujuan tersebut lol. Perlu dicatat bahwa ketika kami pertama kali membuat keputusan itu, kami hanya menghitung persentase yang lebih baik untuk tujuan utama (yang bukan salah satu dari tujuan terbatas ini kecuali untuk regresi).

Bahkan jika kita menghitung selisih mutlak, kita mungkin ingin mempertimbangkan untuk mengubah perilaku Nan/None/inf pembagian-oleh-0. Satu kasus menarik untuk dipertimbangkan adalah R2 , karena dalam kebanyakan kasus ini [0, 1] tetapi secara teknis (-inf, 1]. Jadi menghitung perbedaan absolut mungkin tidak terdengar secara matematis tetapi karena itu adalah tujuan default untuk regresi , kita akan melihat banyak garis dasar yang mencetak 0.

Jadi untuk meringkas, ada dua perubahan independen yang dapat kita buat, yang mengarah ke empat kemungkinan hasil:

  1. Jangan hitung selisih mutlak untuk tujuan yang dibatasi [0, 1], pembagian dengan 0 adalah Nan. Perilaku saat ini.
  2. Jangan hitung selisih mutlak untuk tujuan yang dibatasi [0, 1], pembagian dengan 0 adalah inf.
  3. Hitung perbedaan mutlak untuk tujuan yang dibatasi dalam [0, 1], pembagian dengan 0 adalah Nan.
  4. Hitung perbedaan mutlak untuk tujuan yang dibatasi pada [0, 1], pembagian dengan 0 adalah inf.

Meskipun saya lebih suka mengembalikan NaN ketika kita membaginya dengan 0, reaksi awal pengguna ketika mereka melihat NaN adalah mengira ada sesuatu yang rusak di automl. Saya pikir mengembalikan inf akan memperjelas bahwa tidak ada yang rusak dan bahwa jalur pipa sebenarnya lebih baik daripada baseline.

Itu meninggalkan opsi 2 dan 4.

Saya pikir memiliki dua perhitungan yang berbeda untuk "persen lebih baik" akan membuat lebih sulit untuk berkomunikasi dengan pengguna apa yang sebenarnya sedang dihitung untuk setiap pipa. Meskipun demikian, pipeline baseline kami dirancang untuk mencetak 0 untuk banyak tujuan (R2, F1, MCC) terutama dalam masalah yang tidak seimbang (kami hanya memprediksi mode). Itu membuat fitur "persen lebih baik" tidak terlalu berguna untuk sebagian besar masalah realistis karena semua saluran pipa akan "jauh" lebih baik daripada garis dasar.

Saya pikir saya condong 55% untuk opsi 4 dan 45% untuk opsi 2 tetapi saya ingin mendengar sudut pandang lain sebelum melakukan perubahan itu!

Dalam standup hari ini kami memutuskan waktunya untuk memperbarui perilaku "lebih baik daripada baseline". Kami akan menggunakan opsi 2 dan 4 di atas:

  • Gunakan perbedaan relatif untuk tujuan tanpa batas (MSE, log loss, dll)
  • Gunakan selisih mutlak untuk tujuan dengan batas [0, 1] (AUC, R2, dll)
  • Kita harus menangani kasus tepi seperti korelasi Pearson ([-1, 1])
  • Kembalikan inf daripada nan jika ada kesalahan bagi-dengan-0

@freddyaboulton apakah ini cocok dengan yang kita diskusikan?

Suka. :-)

Selanjutnya: Saya setuju dengan keputusan tersebut. IMO, jika metrik [biasanya, setidaknya] 0..1, kemudian beralih dari 0 ke 0,2 _terasa_ seperti peningkatan 20%, meskipun secara matematis tidak. Di satu sisi, ini mengingatkan saya pada semua rumus yang mengambil log dari suatu kuantitas, tetapi mereka menambahkan 1 terlebih dahulu sehingga mereka tidak mengambil log dari 0. :slightly_smiling_face:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat