Algoritma untuk pemilihan model otomatis

193

Saya ingin menerapkan algoritma untuk pemilihan model otomatis. Saya berpikir untuk melakukan regresi bertahap tetapi apa pun akan dilakukan (itu harus didasarkan pada regresi linier).

Masalah saya adalah bahwa saya tidak dapat menemukan metodologi, atau implementasi open source (saya bangun di java). Metodologi yang saya pikirkan adalah sesuatu seperti:

  1. menghitung matriks korelasi semua faktor
  2. pilih faktor-faktor yang memiliki korelasi rendah satu sama lain
  3. menghapus faktor-faktor yang memiliki t-stat rendah
  4. tambahkan faktor lain (masih berdasarkan faktor korelasi rendah yang ditemukan pada 2.).
  5. ulangi beberapa kali sampai beberapa kriteria (misalnya AIC) melewati batas tertentu atau tidak dapat atau kami tidak dapat menemukan nilai yang lebih besar.

Saya menyadari ada implementasi R untuk ini (stepAIC), tetapi saya menemukan kode yang cukup sulit untuk dipahami. Saya juga belum dapat menemukan artikel yang menggambarkan regresi bertahap.

S4M
sumber
72
Terus terang, saya pikir ini adalah ide bencana , hampir dijamin akan menyebabkan banyak kesimpulan yang salah.
gung
4
@ungung: sementara saya setuju bahwa secara membabi buta mengikuti hasil pemilihan model adalah ide yang buruk, saya pikir itu bisa berguna sebagai titik awal analisis. Dalam kasus saya, saya memiliki beberapa ratusan faktor yang tersedia, dan saya ingin memilih 5-10 yang paling relevan. Saya tidak melihat bagaimana saya bisa melakukannya tanpa pemilihan model otomatis (yang nantinya akan diubah secara manual).
S4M
12
Semua prosedur pemilihan model tunduk pada masalah yang saya bahas dalam jawaban saya di bawah ini. Selain itu, semakin besar jumlah kemungkinan faktor yang ingin Anda cari, semakin ekstrem masalah itu, dan peningkatannya tidak linier. Meskipun ada beberapa pendekatan yang lebih baik (dibahas oleh @Zach), yang harus digunakan bersama dengan cross-validation (dibahas oleh @JackTanner), pemilihan berdasarkan t, r dan AIC tidak termasuk di antara mereka. Selain itu, dengan ratusan faktor, jumlah data yang dibutuhkan dapat dengan mudah mencapai jutaan. Sayangnya, Anda memiliki tugas yang sangat sulit sebelum Anda.
gung
7
Apa tujuan melakukan pemilihan model? Apakah ini untuk model prediksi / perkiraan atau Anda mencari variabel penting? Juga seberapa besar kumpulan data yang Anda gunakan - berapa banyak pengamatan dan berapa banyak variabel?
probabilityislogic
6
Pandangan yang menarik di sini, tapi saya pikir pandangan negatif terhadap prosedur pemilihan model algoritmik agak tanggal. Ambil contoh, karya terbaru David Hendry di bidang ekonometrik, khususnya karyanya tentang perangkat lunak PcGive dan metode saturasi. Kuliah yang memberikan tinjauan umum tentang pendekatannya dapat ditemukan di sini . Seperti yang ditunjukkan oleh @MichaelChernick (dan Hendry juga akan melakukannya!), Pengetahuan materi pelajaran (sangat) penting. Inilah sebabnya mengapa ada nilai dalam spesialis subjek - untuk membiarkan algoritma bertindak sendiri adalah kesalahan.
Graeme Walsh

Jawaban:

333

Saya pikir pendekatan ini salah, tetapi mungkin akan lebih membantu jika saya menjelaskan alasannya. Ingin mengetahui model terbaik yang diberikan beberapa informasi tentang sejumlah besar variabel cukup dimengerti. Selain itu, ini adalah situasi di mana orang tampaknya menemukan diri mereka secara teratur. Selain itu, banyak buku teks (dan kursus) tentang regresi mencakup metode seleksi bertahap, yang menyiratkan bahwa mereka harus sah. Sayangnya, tidak demikian, dan pemasangan situasi dan tujuan ini cukup sulit untuk dinavigasi dengan sukses. Berikut ini adalah daftar masalah dengan prosedur pemilihan model bertahap otomatis (dikaitkan dengan Frank Harrell, dan disalin dari sini ):

  1. Ini menghasilkan nilai R-squared yang bias buruk menjadi tinggi.
  2. Tes F dan chi-squared yang dikutip di sebelah setiap variabel pada hasil cetak tidak memiliki distribusi yang diklaim.
  3. Metode ini menghasilkan interval kepercayaan untuk efek dan nilai prediksi yang sangat sempit; lihat Altman dan Andersen (1989).
  4. Ini menghasilkan nilai-p yang tidak memiliki makna yang tepat, dan koreksi yang tepat untuk mereka adalah masalah yang sulit.
  5. Ini memberikan koefisien regresi yang bias yang membutuhkan penyusutan (koefisien untuk variabel yang tersisa terlalu besar; lihat Tibshirani [1996]).
  6. Ini memiliki masalah parah dengan adanya kolinearitas.
  7. Ini didasarkan pada metode (misalnya, uji F untuk model bersarang) yang dimaksudkan untuk digunakan untuk menguji hipotesis yang telah ditentukan.
  8. Meningkatkan ukuran sampel tidak banyak membantu; lihat Derksen dan Keselman (1992).
  9. Itu memungkinkan kita untuk tidak memikirkan masalahnya.
  10. Ini menggunakan banyak kertas.

Pertanyaannya adalah, apa yang buruk dari prosedur ini / mengapa masalah ini terjadi? Kebanyakan orang yang telah mengambil kursus regresi dasar akrab dengan konsep regresi dengan rata-rata , jadi inilah yang saya gunakan untuk menjelaskan masalah ini. (Meskipun ini mungkin tampak di luar topik pada awalnya, bersabarlah, saya berjanji itu relevan.)

Bayangkan seorang pelatih lintasan SMA pada hari pertama ujicoba. Tiga puluh anak-anak muncul. Anak-anak ini memiliki tingkat kemampuan intrinsik yang mendasari di mana pelatih, atau siapa pun, tidak memiliki akses langsung. Alhasil, sang pelatih melakukan satu-satunya hal yang bisa ia lakukan, yaitu membuat mereka semua berlari 100 meter. Waktu mungkin merupakan ukuran kemampuan intrinsik mereka dan diambil seperti itu. Namun, mereka probabilistik; sebagian dari seberapa baik seseorang melakukannya berdasarkan pada kemampuan aktualnya dan sebagian lagi bersifat acak. Bayangkan bahwa situasi sebenarnya adalah sebagai berikut:

set.seed(59)
intrinsic_ability = runif(30, min=9, max=10)
time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)

Hasil balapan pertama ditampilkan pada gambar berikut bersama dengan komentar pelatih kepada anak-anak.

balapan pertama

Perhatikan bahwa mempartisi anak-anak berdasarkan waktu lomba mereka menyisakan kemampuan intrinsik mereka - fakta ini sangat penting. Setelah memuji beberapa orang, dan meneriaki beberapa orang lain (seperti yang cenderung dilakukan para pelatih), ia meminta mereka berlari lagi. Inilah hasil balapan kedua dengan reaksi pelatih (disimulasikan dari model yang sama di atas):

balapan kedua

Perhatikan bahwa kemampuan intrinsik mereka identik, tetapi waktu melambung relatif terhadap ras pertama. Dari sudut pandang pelatih, mereka yang dia berteriak cenderung untuk meningkatkan, dan mereka yang dia memuji cenderung lebih buruk (saya mengadaptasi contoh konkret ini dari kutipan Kahneman yang tercantum pada halaman wiki), meskipun sebenarnya regresi ke mean adalah matematika sederhana. konsekuensi dari kenyataan bahwa pelatih memilih atlet untuk tim berdasarkan pada pengukuran yang sebagian acak.

Sekarang, apa hubungannya ini dengan teknik pemilihan model otomatis (misalnya, bertahap)? Mengembangkan dan mengkonfirmasi model berdasarkan dataset yang sama kadang-kadang disebut pengerukan data. Meskipun ada beberapa hubungan mendasar di antara variabel-variabel, dan hubungan yang lebih kuat diharapkan menghasilkan skor yang lebih kuat (misalnya, t-statistik yang lebih tinggi), ini adalah variabel acak dan nilai-nilai yang diwujudkan mengandung kesalahan. Jadi, ketika Anda memilih variabel berdasarkan memiliki nilai realisasi yang lebih tinggi (atau lebih rendah), mereka mungkin seperti itu karena nilai sebenarnya yang mendasarinya, kesalahan, atau keduanya. Jika Anda melanjutkan dengan cara ini, Anda akan terkejut seperti pelatih setelah balapan kedua. Ini benar apakah Anda memilih variabel berdasarkan memiliki t-statistik tinggi, atau interelasi rendah. Benar, menggunakan AIC lebih baik daripada menggunakan nilai-p, karena itu menghukum model untuk kompleksitas, tetapi AIC itu sendiri adalah variabel acak (jika Anda menjalankan penelitian beberapa kali dan sesuai dengan model yang sama, AIC akan terpental seperti yang lainnya). Sayangnya,

Saya harap ini membantu.

gung
sumber
43
Penjelasan fenomenal pengerukan data.
Frank Harrell
17
Ini adalah jawaban yang dipikirkan dengan sangat baik, meskipun saya benar-benar tidak setuju dengan gagasan bahwa aic merupakan peningkatan dari nilai-p (atau bic atau serupa), dalam konteks pemilihan model linier. penalti apa pun seperti aic yang berbentuk setara dengan menetapkan nilai-p ke (baik masuk dan keluar). aic pada dasarnya memberitahu Anda bagaimana memilih nilai-p. P r ( χ 2 1 > k )2L+kpPr(χ12>k)
probabilityislogic
7
Komentar saya berkaitan dengan penggunaan aic untuk stepwise atau algoritma serupa. Komentar saya juga terlalu singkat. Catatan adalah jumlah variabel, adalah penalti ( untuk aic untuk bic), dan negatif dua kali kemungkinan log dimaksimalkan. Aic dan bic berbeda secara konseptual tetapi tidak secara operasional dari nilai-p ketika melakukan pemilihan gaya "subset" tanpa penyusutan dari koefisien bukan nol. k 2 log N - 2 Lpk2logN2L
probabilityislogic
9
@ung - jika Anda mengambil perbedaan antara dua model dengan satu parameter yang berbeda Anda dapatkan . Sekarang istilah pertama adalah statistik rasio kemungkinan di mana nilai p didasarkan. Jadi kami menambahkan parameter tambahan jika statistik rasio kemungkinan lebih besar dari beberapa cutoff. Ini sama dengan apa yang dilakukan oleh pendekatan nilai-p. Hanya ada perbedaan konseptual di sini(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2
probabilityislogic
2
untuk ilustrasi mengapa AIC tidak menyelesaikan masalah, lihat: Mundry, R. (2011). Masalah dalam inferensi statistik berbasis teori informasi - komentar dari sudut pandang frequentist. Ekologi Perilaku dan Sosiobiologi, 65 (1), 57-68.
Juli
70

Lihat paket caret di R. Ini akan membantu Anda memvalidasi silang model regresi bertahap (gunakan method='lmStepAIC'atau method='glmStepAIC'), dan mungkin membantu Anda memahami bagaimana model semacam ini cenderung memiliki kinerja prediksi yang buruk. Selanjutnya, Anda dapat menggunakan findCorrelationfungsi dalam caret untuk mengidentifikasi dan menghilangkan variabel collinear, dan rfefungsi dalam caret untuk menghilangkan variabel dengan t-statistik yang rendah (gunakan rfeControl=rfeControl(functions=lmFuncs)).

Namun, seperti yang disebutkan dalam jawaban sebelumnya, metode pemilihan variabel ini cenderung membuat Anda dalam masalah, terutama jika Anda melakukannya secara iteratif. Pastikan Anda benar-benar mengevaluasi kinerja Anda pada set tes yang SEPENUHNYA diadakan. Jangan melihat set tes sampai Anda puas dengan algoritme Anda!

Akhirnya, mungkin lebih baik (dan lebih sederhana) untuk menggunakan model prediktif dengan pemilihan fitur "bawaan", seperti regresi ridge, laso, atau jaring elastis. Secara khusus, coba method=glmnetargumen untuk caret, dan bandingkan akurasi cross-divalidasi dari model itu dengan method=lmStepAICargumen. Dugaan saya adalah bahwa yang pertama akan memberi Anda akurasi out-of-sample jauh lebih tinggi, dan Anda tidak perlu khawatir menerapkan dan memvalidasi algoritma pemilihan variabel kustom Anda.

Zach
sumber
1
Hukuman seperti pareto ganda lebih baik daripada punggungan dan laso dari perspektif statistik, karena mereka tidak mengecilkan koefisien yang jelas tidak nol. Namun sayangnya, mereka selalu mengarah ke penalti non-cembung, sehingga mereka lebih buruk dari perspektif komputasi. Saya akan berpikir penalti berdasarkan distribusi Cauchy akan bagus . log(λ2+β2)
probabilityislogic
2
@probabilityislogic Apakah Anda tahu implementasi bagus dari hukuman pareto ganda, dalam bahasa seperti ratau python? Saya ingin mencobanya.
Zach
1
Dari apa yang saya pahami, pemilihan model oleh AIC dan validasi silang-keluar-silang pada dasarnya adalah hal yang sama (kesetaraan asimptotik, lihat Stone, 1977) , sehingga AIC dan beberapa jenis validasi silang cenderung mengarah ke hal yang sangat mirip. hasil. Namun, saya belum menggunakan paket tanda sisipan, dan dari metode panggilan sepertinya AIC memang digunakan dalam beberapa kasus.
fileunderwater
38

Saya sepenuhnya setuju dengan masalah yang diuraikan oleh @ung. Yang mengatakan, secara realistis, pemilihan model adalah masalah nyata yang membutuhkan solusi nyata. Inilah sesuatu yang akan saya gunakan dalam latihan.

  1. Bagi data Anda menjadi pelatihan, validasi, dan set tes.
  2. Latih model pada set pelatihan Anda.
  3. Ukur kinerja model pada set validasi menggunakan metrik seperti prediksi RMSE, dan pilih model dengan kesalahan prediksi terendah.
  4. Buat model baru seperlunya, ulangi langkah 2-3.
  5. Laporkan kinerja model pada set tes.

Sebagai contoh penggunaan metode ini di dunia nyata, saya percaya bahwa ini digunakan dalam kompetisi Netflix Prize.

Jack Tanner
sumber
15
Pemisahan data tidak dapat diandalkan kecuali . n>20000
Frank Harrell
5
@ Frank: Mengapa menurut Anda N harus sangat tinggi?
rolando2
14
Karena presisi yang buruk. Jika Anda berpisah lagi, Anda bisa mendapatkan hasil yang jauh berbeda. Itu sebabnya orang melakukan 100 pengulangan validasi silang 10 kali lipat, atau bootstrap.
Frank Harrell
10
@FrankHarrell Apa yang n tergantung pada angka> 20000? Apakah ini berdasarkan komentar poster asli tentang memiliki " beberapa ratusan faktor "? Atau apakah itu terlepas dari aspek data apa pun?
Darren Cook
33
Jenis pengaturan yang saya uji pemisahan data adalah n = 17000 dengan sebagian kecil dari 0,3 memiliki suatu peristiwa, dan memiliki sekitar 50 parameter diperiksa atau dipasang dalam model logistik biner. Saya menggunakan split 1: 1 acak. Area ROC yang divalidasi dalam sampel uji berubah secara substantif ketika saya membagi kembali data dan memulai kembali. Lihat di bawah Studi Metode yang Digunakan dalam Teks di biostat.mc.vanderbilt.edu/rms untuk studi simulasi dan makalah terkait yang memberikan informasi lebih lanjut.
Frank Harrell
15

Untuk menjawab pertanyaan, ada beberapa opsi: 1) semua-subset oleh AIC / BIC 2) bertahap dengan p-value 3) bertahap oleh AIC / BIC 4) regularisasi seperti LASSO (dapat didasarkan pada AIC / BIC atau CV 5) algoritma genetika (GA) 6) lainnya? 7) penggunaan pemilihan berorientasi teori ("pengetahuan materi") non-otomatis

Pertanyaan selanjutnya adalah metode mana yang lebih baik. Makalah ini (doi: 10.1016 / j.amc.2013.05.016) menunjukkan "semua regresi yang mungkin" memberikan hasil yang sama dengan metode baru yang diusulkan dan secara bertahap lebih buruk. GA sederhana ada di antara mereka. Makalah ini (DOI: 10.1080 / 10618600.1998.10474784) membandingkan regresi yang dihukum (Jembatan, Lasso dll) dengan "lompatan-dan-batas" (tampaknya algoritma pencarian lengkap tetapi lebih cepat) dan juga menemukan "model jembatan setuju dengan model terbaik dari pemilihan subset dengan metode lompatan dan batas ”. Makalah ini (doi: 10.1186 / 1471-2105-15-88) menunjukkan GA lebih baik daripada LASSO. Makalah ini (DOI: 10.1198 / jcgs.2009.06164) mengusulkan metode - pada dasarnya pendekatan semua-subset (berdasarkan BIC) tetapi secara cerdik mengurangi waktu perhitungan. Mereka menunjukkan metode ini lebih baik daripada LASSO. Menariknya, makalah ini (DOI: 10.1111 / j.1461-0248.2009.01361.

Jadi secara keseluruhan hasilnya beragam tetapi saya mendapat kesan bahwa GA tampaknya sangat baik meskipun bertahap mungkin tidak terlalu buruk dan cepat.

Adapun 7), penggunaan seleksi berorientasi teori, non-otomatis ("pengetahuan materi"). Ini memakan waktu dan tidak selalu lebih baik daripada metode otomatis. Faktanya dalam literatur time-series, dapat dipastikan bahwa metode otomatis (khususnya perangkat lunak komersial) mengungguli ahli manusia "dengan selisih yang substansial" (doi: 10.1016 / S0169-2070 (01) 00119-4, halaman561 misalnya memilih berbagai smoothing eksponensial dan model ARIMA).

heran_xp
sumber
6
Ketahuilah bahwa Anda dapat memperoleh kinerja yang berbeda dalam studi simulasi berbagai algoritma pemilihan dengan mengubah proses pembuatan data untuk mendukung (bahkan jika tidak secara sengaja) suatu rutinitas tertentu. Masalah pendekatan apa yang akan lebih cepat atau lebih lambat berbeda, tetapi berpotensi masih penting.
gung
2
Bahkan contoh-contoh dalam makalah asli Tibshirani tentang LASSO menggambarkan poin @ gung dengan baik. Hal yang sama berlaku untuk studi perbandingan berbagai metode pada data nyata. BTW, apakah referensi terakhir Anda benar? Makalah oleh Clements & Hendry dengan DOI yang Anda berikan tidak membuat klaim bahwa metode otomatis mengalahkan ahli manusia, atau menggunakan kata-kata "dengan margin substansial" sama sekali. (Alangkah baiknya jika Anda memberikan referensi lengkap.)
Scortchi
Ditemukan: Goodrich (2001), "Perangkat lunak komersial dalam Kompetisi M3", Int. J. Forecast., 17, hlm 560–565. Itu di bawah koleksi "Komentar pada M3-Kompetisi" yang sama dengan kertas Clements & Hendry, itulah sebabnya Googling the DOI mengirim saya ke sana.
Scortchi
Bagaimanapun, sama sekali tidak jelas bahwa komentar Goodrich ada hubungannya dengan keahlian subjek .
Scortchi
1
@Scortchi mungkin lebih jelas pada artikel mulai dari halaman 581 tentang masalah jurnal itu. Ini lebih terkait dengan "M2-Competition" di mana, metode peramalan otomatis dibandingkan dengan pakar manusia yang diundang (termasuk beberapa nama besar dalam literatur seri waktu) yang mengetahui konteks ekonomi / industri dan bahkan dapat meminta informasi tambahan dari perusahaan yang menyediakan data.
heran_xp
6

Berikut ini jawaban dari bidang kiri - alih-alih menggunakan regresi linier, gunakan pohon regresi (paket rpart). Ini cocok untuk pemilihan model otomatis karena dengan sedikit pekerjaan Anda dapat mengotomatiskan pemilihan cp, parameter yang digunakan untuk menghindari pemasangan yang berlebihan.

JenSCDC
sumber
3

model linier dapat dioptimalkan dengan mengimplementasikan algoritma genetika dengan cara memilih variabel independen yang paling berharga. Variabel direpresentasikan sebagai gen dalam algoritma, dan kromosom terbaik (set gen) kemudian dipilih setelah operator crossover, mutasi dll. Ini didasarkan pada seleksi alam - maka 'generasi' terbaik dapat bertahan hidup, dengan kata lain, algoritma mengoptimalkan fungsi estimasi yang tergantung pada model tertentu.

marshmallow
sumber
2
Itu akan memilih variabel "terbaik" dalam data , tidak harus variabel terbaik dalam proses / populasi penghasil data, karena hanya memiliki akses ke data. Itu tidak benar-benar berbeda dari metode bertahap yang diinginkan OP.
gung
0

Kami memang memiliki fungsi dalam paket statistik dasar R, yang disebut langkah (), yang melakukan pemilihan model maju, mundur atau bertahap berdasarkan AIC terendah. Ini juga berfungsi untuk variabel faktor. Apakah ini bukan tujuan server di sini?

Praveen
sumber
-51

Saya melihat pertanyaan saya menghasilkan banyak minat dan perdebatan menarik tentang validitas pendekatan pemilihan model otomatis. Meskipun saya setuju bahwa menerima begitu saja hasil seleksi otomatis berisiko, itu dapat digunakan sebagai titik awal. Jadi di sini adalah bagaimana saya mengimplementasikannya untuk masalah khusus saya, yaitu untuk menemukan faktor n terbaik untuk menjelaskan variabel yang diberikan

  1. lakukan semua variabel regresi vs faktor individu
  2. sortir regresi dengan kriteria yang diberikan (katakanlah AIC)
  3. menghapus faktor-faktor yang memiliki t-stat rendah: mereka tidak berguna dalam menjelaskan variabel kami
  4. dengan urutan yang diberikan pada 2., coba tambahkan faktor satu per satu ke dalam model, dan pertahankan ketika mereka meningkatkan kriteria kita. beralih untuk semua faktor.

Sekali lagi, ini sangat kasar, mungkin ada cara untuk meningkatkan metodologi, tetapi itulah titik awal saya. Saya memposting jawaban ini dengan harapan dapat bermanfaat bagi orang lain. Komentar dipersilahkan!

S4M
sumber
47
(1) Saya belum menyaksikan "debat" apa pun di utas ini: semua balasan dan komentar menyajikan pesan dasar yang sama. (2) Implementasi Anda tampaknya merupakan versi ad hoc dari regresi bertahap . Saya setuju bahwa ini dapat bermanfaat sebagai titik awal asalkan tidak secara otomatis diterima sebagai tujuan itu sendiri.
Whuber
28
Anda benar-benar menerima jawaban Anda sendiri yang bertentangan dengan setiap argumen yang diajukan oleh komunitas. Tidak mengherankan melihat negatif di sini ...
jank
23
Saya percaya ini adalah pertama kalinya saya melihat begitu banyak downvotes. @ Sam, mengapa Anda tidak menerima saja beberapa jawaban luar biasa lainnya dan menghapus "jawaban" Anda?
marbel
Apakah jawaban SE ini paling banyak downvoted?
mkt
2
Anda tampaknya telah menjawab pertanyaan penting @probabilityislogic dengan mengatakan tujuan Anda "untuk menemukan n faktor terbaik untuk menjelaskan variabel yang diberikan." Pembuatan model untuk menjelaskan (untuk memahami hubungan sebab akibat) perlu dilakukan dengan lebih sengaja dan biasanya jauh lebih intensif daripada memprediksi pembuatan model.
rolando2