Berurusan dengan kinerja yang baik pada data pelatihan dan validasi, tetapi kinerja yang sangat buruk pada pengujian data

8

Saya memiliki masalah regresi dengan variabel 5-6k. Saya membagi data saya menjadi 3 set yang tidak tumpang tindih: pelatihan, validasi, dan pengujian. Saya melatih hanya menggunakan set pelatihan, dan menghasilkan banyak model regresi linier yang berbeda dengan memilih serangkaian 200 variabel yang berbeda untuk masing-masing model (saya mencoba sekitar 100k subset seperti itu). Saya menilai model sebagai . Dengan menggunakan kriteria ini, saya akhirnya memilih model. Ternyata model yang dipilih memiliki R ^ 2 yang sangat mirip pada pelatihan dan data validasi. Namun, ketika saya mencoba model ini pada data pengujian, ia memiliki R ^ 2 jauh lebih rendah . Jadi sepertinya saya entah bagaimana overfitting pada data pelatihan dan validasi. Ada ide tentang bagaimana saya bisa mendapatkan model yang lebih kuat? min(Rtraining data2,Rvalidation data2)R2R2

Saya mencoba meningkatkan ukuran data pelatihan, tetapi itu tidak membantu. Saya berpikir mungkin menyusutkan ukuran setiap subset.

Saya telah mencoba menggunakan regularisasi. Namun, model yang saya peroleh menggunakan laso atau jaring elastis memiliki R ^ 2 yang jauh lebih rendah R2pada set pelatihan serta set validasi, dibandingkan dengan model yang saya peroleh dengan melakukan pendekatan pemilihan subset. Oleh karena itu, saya tidak mempertimbangkan model-model ini, karena saya berasumsi bahwa jika Model A berkinerja lebih baik daripada Model B di kedua set pelatihan serta set validasi, Model A jelas lebih baik daripada Model B. Saya akan sangat ingin tahu jika Anda tidak setuju dengan ini.

Pada catatan terkait, apakah menurut Anda R2 adalah kriteria yang buruk untuk memilih model saya?

pengguna10
sumber

Jawaban:

5

Walaupun ini kedengarannya seperti overfitting, saya pikir itu sebenarnya lebih mungkin bahwa Anda memiliki semacam "bug" dalam kode Anda atau proses Anda. Saya akan mulai dengan memverifikasi bahwa set tes Anda tidak secara sistematis berbeda dari set pelatihan / validasi. Misalkan data Anda diurutkan berdasarkan tanggal (atau apa pun). Jika Anda menggunakan 50% pertama untuk pelatihan, 25% berikutnya untuk validasi, dan sisanya untuk pengujian, Anda mungkin secara tidak sengaja membuat stratifikasi data Anda dengan cara yang membuat data pelatihan agak mewakili data validasi, tetapi kurang begitu untuk menguji data. Ini cukup mudah dilakukan secara tidak sengaja.

Anda juga harus memastikan Anda tidak "mencelupkan dua kali" dalam data validasi, yang terkadang terjadi secara tidak sengaja.

Sebagai alternatif, @Frank Harrell sendiri dari CV telah melaporkan bahwa kereta tunggal / test split sering terlalu variabel untuk memberikan informasi yang berguna pada kinerja sistem (mungkin dia dapat mempertimbangkan dengan kutipan atau beberapa data). Anda mungkin mempertimbangkan untuk melakukan sesuatu seperti validasi silang atau bootstrap, yang memungkinkan Anda mengukur rerata dan ragam ukuran akurasi Anda.

Tidak seperti Mikera, saya tidak berpikir masalahnya adalah mekanisme penilaian Anda. Yang mengatakan, saya tidak bisa membayangkan situasi di mana , jadi saya sarankan mencetak menggunakan data validasi saja.Rtraining2<Rvalidation2

Secara umum, saya pikir atau sesuatu seperti itu adalah pilihan yang masuk akal untuk mengukur kinerja model output-kontinu, dengan asumsi Anda menyadari potensi peringatannya. Tergantung pada apa yang Anda lakukan, Anda mungkin juga ingin melihat kesalahan maksimum atau terburuk. Jika Anda entah bagaimana mendiskritisasi output Anda (regresi logistik, beberapa ambang eksternal), maka melihat presisi / recall / AUC mungkin ide yang lebih baik.R2

Matt Krause
sumber
Terima kasih atas balasan Anda, Matt. Saya memang memiliki data yang diurutkan berdasarkan tanggal. Saya membaginya menjadi 3 bagian dan menggunakan bagian pertama untuk pelatihan, bagian berikutnya untuk validasi, dan bagian terakhir untuk pengujian. Untuk aplikasi saya, data pengujian akan selalu secara kronologis setelah pelatihan dan validasi ditetapkan, meskipun saya dapat memadukan pelatihan dan validasi yang saya inginkan (termasuk melakukan validasi silang). Saya akan mencoba validasi silang. Meskipun, saya tidak berharap untuk melakukannya dengan baik karena di kedua pelatihan dan set validasi cukup dekat. <Istirahat dilanjutkan di komentar berikutnya>R2
user10
Saya juga akan memeriksa varians dalam untuk hari yang berbeda. Jika variansnya tinggi, saya berharap validasi silang akan membantu. Jika tidak, saya berharap akan memberikan hasil yang sama dengan hanya memiliki set validasi seperti yang sudah saya miliki. Terima kasih lagi! R2
user10
Memesan per se bukan masalah; namun set pelatihan mungkin lebih representatif dari set validasi daripada set tes. Misalnya, bayangkan Anda memperkirakan penjualan toko. Jika set pelatihan Anda berisi Juni, Juli, dan Agustus, itu mungkin akan melakukan pekerjaan yang baik untuk memprediksi penjualan September juga (set validasi). Namun, itu mungkin benar-benar berantakan ketika diuji pada penjualan November dan Desember: orang membeli hadiah liburan dan pakaian musim dingin alih-alih celana pendek dan tabir surya, dll.
Matt Krause
1

Anda overfitting karena Anda menggunakan min(training r-square,validation r-square)data untuk menghasilkan skor, yang pada gilirannya digunakan untuk mendorong pemilihan model. Karena r-square pelatihan Anda cenderung sama atau lebih rendah (Anda hanya menjalankan regresi, setelah semua), ini kira-kira setara dengan melakukan pemilihan model pada r-square dari data pelatihan.

Ini memiliki efek pas terlalu ketat pada data pelatihan, dan mengabaikan data validasi.

Jika Anda menggunakan saat itu validation r-squaremaka Anda harus mendapatkan hasil yang lebih baik.

mikera
sumber
Tapi bukankah itu titik memiliki set data validasi? Bukankah saya harus memilih model yang memiliki kesalahan rendah pada validasi (mis. Dari sampel) yang ditetapkan?
pengguna10
Maaf saya sedikit salah membaca pertanyaan Anda. Saya telah mengubah jawabannya.
mikera
Karena saya menjalankan regresi, pelatihan saya umumnya harus lebih besar daripada validasi , dan karena saya menggunakan min, bukankah itu setara dengan melakukan pemilihan model menggunakan set validasi? Kebetulan karena saya menggunakan min, saya mendapatkan baik untuk pelatihan dan validasi, yang sayangnya tidak diterjemahkan ke set tes. Terima kasih! R2R2R2
pengguna10