Evalml: Performa buruk pada kumpulan data berlian

Dibuat pada 5 Okt 2020  ·  3Komentar  ·  Sumber: alteryx/evalml

Masalah
Automl menghasilkan model dengan R2 negatif.

Repro
Kumpulan data di sini .

import evalml
import pandas as pd
import numpy as np
df = pd.read_csv('stones_encoded_small.csv')
y = df.pop('total_sales_price')
automl = evalml.automl.AutoMLSearch(problem_type='regression')
automl.search(df, y)

Pemeriksaan data akan gagal karena kolom yang sangat nol/bernilai tunggal. Anda dapat menonaktifkannya dengan data_checks='disabled' . Atau, untuk mengatasinya dan melanjutkan:

cols_to_drop = ['culet_condition', 'fancy_color_dominant_color', 'fancy_color_intensity', 'fancy_color_overtone', 'fancy_color_secondary_color', 'fluor_color', 'image_file_url', 'diamond_id', 'currency_code', 'currency_symbol', 'fancy_color_dominant_color', 'fancy_color_intensity', 'fancy_color_overtone', 'fancy_color_secondary_color', 'has_sarineloupe']
df.drop(columns=cols_to_drop, inplace=True)
automl = evalml.automl.AutoMLSearch(problem_type='regression')
automl.search(df, y)

Hasilnya sangat mirip: nilai R2 negatif untuk semua model, yaitu model tidak dapat menghasilkan hasil yang berarti.

Mengalihkan metrik ke MSE dan MAE menghasilkan model yang sama buruknya.

Diskusi
Kecurigaan pertama saya adalah bahwa fitur-fiturnya tidak mendapatkan tipe yang tepat. Ketika saya melihat dtypes yang disimpulkan oleh panda, saya melihat banyak yang ditetapkan sebagai float64 tetapi hanya memiliki beberapa nilai unik, yaitu mereka harus ditetapkan sebagai kategorikal. Saya mencobanya tetapi sepertinya tidak mengubah hasil model, jadi ada lebih banyak cerita.

bug

Semua 3 komentar

Hai tim,

Saya percaya ini terkait dengan memiliki kumpulan data input yang diurutkan berdasarkan variabel target, dan metode pengambilan sampel yang digunakan untuk validasi silang 3 kali lipat. Kumpulan data ini diurutkan berdasarkan harga dari yang terendah hingga tertinggi. Saya menduga bahwa validasi silang membagi catatan secara berurutan, sehingga pemisahan terkait dengan variabel target - artinya nilai R2 sangat rendah karena sedang diuji terhadap nilai variabel target yang tidak termasuk dalam data pelatihan. Perilaku ini diselesaikan dengan melakukan acak pada kumpulan data lengkap sebelum memasukkannya ke dalam pencarian.

  • Seperti yang disebutkan @SydneyAyx , Anda mendapatkan skor R2 yang lebih baik setelah Anda mengacak dataset.
import evalml
import pandas as pd
import numpy as np
from evalml.data_checks import EmptyDataChecks

df = pd.read_csv('stones_encoded_small.csv')

# shuffles data
df = df.sample(frac=1)

y = df.pop('total_sales_price')
automl = evalml.automl.AutoMLSearch(problem_type='regression')
automl.search(df, y, data_checks=EmptyDataChecks()))

Terima kasih @SydneyAyx @gsheni ! Detektif hebat bekerja di sana, jenius :)

Ya, dikonfirmasi. Tampaknya pembagi data default kami di automl saat ini tidak disetel shuffle=True .

@SydneyAyx @gsheni salah satu solusinya adalah mengacak sebelum menjalankan automl seperti yang ditunjukkan @gsheni di atas. Solusi lain adalah mengatur pembagi data Anda sendiri, seperti:

import evalml
import pandas as pd
import numpy as np
import sklearn.model_selection
df = pd.read_csv('stones_encoded_small.csv')
y = df.pop('total_sales_price')

data_splitter = sklearn.model_selection.KFold(n_splits=3, random_state=0, shuffle=True)
automl = evalml.automl.AutoMLSearch(problem_type='regression', data_split=data_splitter)
automl.search(df, y, data_checks='disabled')

Saya akan mendapatkan PR dengan perbaikan evalml.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat