Pengujian ulang atau validasi silang ketika proses pembuatan model bersifat interaktif

9

Saya memiliki beberapa model prediktif yang kinerjanya ingin saya uji kembali (yaitu, ambil dataset saya, "putar kembali" ke titik waktu sebelumnya, dan lihat bagaimana model tersebut akan tampil secara prospektif).

Masalahnya adalah bahwa beberapa model saya dibangun melalui proses interaktif. Misalnya, mengikuti saran dalam Strategi Pemodelan Regresi Frank Harrell , dalam satu model saya menggunakan splines kubik terbatas untuk menangani kemungkinan asosiasi nonlinear antara fitur dan respons. Saya mengalokasikan derajat kebebasan masing-masing spline berdasarkan pada kombinasi pengetahuan domain dan ukuran kekuatan asosiasi yang univariat. Tetapi derajat kebebasan yang saya ingin izinkan model saya jelas tergantung pada ukuran dataset, yang bervariasi secara dramatis ketika backtesting. Jika saya tidak ingin memilih sendiri derajat kebebasan secara terpisah untuk setiap kali model diuji ulang, apa pilihan saya yang lain?

Sebagai contoh lain, saya sedang bekerja pada deteksi outlier melalui menemukan poin dengan leverage tinggi. Jika saya senang melakukan ini dengan tangan, saya hanya akan melihat pada setiap titik data leverage tinggi, memeriksa kewaspadaan bahwa data itu bersih, dan apakah menyaringnya atau membersihkannya dengan tangan. Tapi ini bergantung pada banyak pengetahuan domain, jadi saya tidak tahu bagaimana mengotomatiskan proses.

Saya akan menghargai saran dan solusi baik (a) untuk masalah umum otomatisasi bagian interaktif dari proses pembangunan model, atau (b) saran khusus untuk dua kasus ini. Terima kasih!

Ben Kuhn
sumber

Jawaban:

4

FYI, ini mungkin lebih cocok untuk SE.DataScience, tetapi untuk saat ini, saya akan menjawabnya di sini.

Sepertinya saya seperti Anda mungkin berada dalam situasi di mana Anda tidak punya pilihan selain menulis skrip yang akan mengimplementasikan solusi Anda. Tidak pernah bekerja dengan splines, pengetahuan saya tentang mereka benar-benar teoretis jadi tolong tahan dengan saya dan beri tahu saya jika ada sesuatu yang tidak saya lihat.

Secara umum, tampaknya Anda memiliki beberapa item berbeda yang harus Anda selesaikan untuk mengimplementasikannya.

1.) Menentukan parameter model secara dinamis. Anda sebelumnya telah menyebutkan bahwa Anda telah menggunakan kombinasi pengetahuan domain dan tindakan univariat. Bagi saya itu seperti sesuatu yang harus Anda tangani secara heuristik. Anda harus menyetujui sejak awal pada seperangkat aturan yang akan diterapkan oleh program Anda. Ini mungkin atau mungkin bukan tugas sepele karena Anda harus melakukan pemikiran keras tentang implikasi potensial dari aturan tersebut. Ini mungkin mengharuskan Anda mengunjungi kembali setiap langkah dari proses Anda dan membuat katalog bukan hanya keputusan, tetapi juga alasan di balik keputusan itu.

2.) Sebenarnya menerapkan program Anda. Untuk membuat pengujian kinerja Anda menjadi dinamis dan mudah untuk dipertahankan dan dimodifikasi di masa mendatang, Anda harus memikirkan bagaimana Anda akan menyusunnya. Anda mungkin ingin menggunakan semacam loop untuk estimasi kinerja prediktif model utama Anda, lebih disukai dengan panjang yang dapat ditentukan pengguna untuk memungkinkan fleksibilitas yang lebih besar ke depan. Anda juga mungkin ingin menulis fungsi terpisah untuk setiap tindakan yang Anda ingin program Anda lakukan karena ini akan membuatnya lebih mudah untuk menguji fungsionalitas, dan untuk mempertahankan dan memodifikasi program Anda di masa depan. Anda akan, setidaknya, kemungkinan membutuhkan fungsi untuk pemilihan dataset (yaitu hanya periode waktu yang telah "berlalu" pada saat backtesting), pembersihan dan validasi (yang Anda harus benar-benar pikirkan,

Pertanyaan Anda tentang deteksi dan penanganan outlier juga termasuk dalam dua masalah tersebut dan saya akan menerapkannya dengan menulis loop yang lebih kecil dalam loop program utama Anda yang akan terus "membersihkan" dan mereparasi model hingga mencapai titik di mana Anda akan senang dengan itu (yang lagi, Anda harus menentukan sendiri).

Jika ini terdengar seperti tugas besar, itu karena itu; orang telah menulis seluruh pustaka perangkat lunak (kadang-kadang sangat menguntungkan) untuk melakukan tugas semacam ini. Di luar itu, sulit untuk menawarkan saran yang lebih spesifik tanpa mengetahui lebih banyak tentang proses Anda, struktur data, dan bahasa pemrograman yang telah Anda lakukan sejauh ini.

Jika semua ini bermanfaat bagi Anda dan Anda ingin saya memperluasnya, beri komentar, beri tahu saya, dan saya akan dengan senang hati melakukannya.

habu
sumber
Saya tidak butuh bantuan untuk benar-benar menulis kode, terima kasih - infrastruktur backtesting kami sudah ada dan cukup kuat. Saya hanya tertarik dengan prosedur statistik apa yang mungkin digunakan. Berkenaan dengan heuristically mengotomatiskan bagian interaktif dari pembangunan model: apakah ada yang ditulis tentang ini? Saya belum melihat adanya proses semacam ini dalam literatur. Anda menyebutkan "orang telah menulis seluruh pustaka perangkat lunak" - apakah Anda punya referensi?
Ben Kuhn
@ BenKuhn - Berdasarkan komentar Anda, saya sedikit tidak jelas tentang kesulitan yang Anda hadapi; tolong bantu saya mendapatkan lebih banyak kejelasan. Penggunaan heuristik dalam membangun model otomatis cukup luas; aplikasi paling dasar yang dapat saya pikirkan saat ini adalah regresi bertahap sederhana. Karena tidak memiliki detail yang tepat dari model Anda, saya tidak dapat menunjuk ke bagian literatur yang tepat yang dapat membantu Anda, tetapi pencarian Google yang sepintas menampilkan beberapa artikel mengeksplorasi metode untuk pemilihan parameter otomatis, terutama untuk menghaluskan dan menghukum splines. Lihat komentar saya berikutnya untuk beberapa tautan
habu
@ BenKuhn - apa yang Anda maksud ketika Anda mengatakan prosedur statistik yang mungkin Anda gunakan? Menurut saya, backtest dapat ditangani dengan cukup mudah dengan menggunakan sampel uji kereta dengan jendela pemilihan data yang bergulir atau meluas. Semua data yang telah Anda peroleh hingga titik uji ulang akan menjadi set pelatihan Anda, sementara data yang Anda harapkan untuk dilihat pada periode waktu berikutnya, sebelum Anda memiliki kesempatan untuk menyesuaikan kembali model Anda, akan menjadi set tes Anda. Semua ukuran biasa kinerja prediksi dan goodness of fit dapat digunakan untuk melakukan evaluasi yang sebenarnya.
habu
@BenKuhn - Menerapkan bagian pengetahuan bisnis aktual akan mengharuskan Anda untuk mengkodifikasinya dan memastikan bahwa data yang diperlukan untuk membuat penentuan seperti itu tersedia saat diperlukan. Juga, saya menggunakan istilah "perpustakaan perangkat lunak" sebagai istilah selimut yang mencakup segala sesuatu mulai dari ekstensi hingga perpustakaan pemodelan yang ada yang dimaksudkan untuk mengotomatisasi pembuatan model untuk aplikasi tertentu, sampai ke tingkat industri, pakar kepemilikan, dan sistem pendukung keputusan.
habu
3

Daripada mencoba mencari cara mengotomatiskan upaya penyetelan model manual Anda, saya akan mengatasi masalah itu bersama-sama dengan melihat ke dalam pelajar varian yang lebih rendah yang memerlukan penyetelan yang jauh lebih sedikit, bahkan jika itu ada pada biaya peningkatan bias model. Anda ingin percaya diri dalam hasil backtest Anda yang sebagian besar turun ke varians sampling rendah dalam prediksi Anda, dan memperkenalkan beberapa proses tuning otomatis di atas pelajar yang sudah memiliki varians sampling itu sendiri yang bekerja melawan tujuan itu. Ini mungkin tampak seperti ekor yang mengibas-ngibaskan anjing di sini, tetapi apa pun yang membutuhkan penyetelan yang hati-hati (manual atau otomatis) bukanlah kandidat yang bagus untuk lingkungan backtest IMO yang benar-benar jujur.

andrew
sumber
Mengapa penyetelan otomatis (dengan penyetelan terpisah dijalankan pada setiap titik waktu backtest) menjadi "lingkungan backtest yang benar-benar jujur"?
Ben Kuhn
Mengurangi varians dengan menjatuhkan splines akan menyebabkan kerugian yang tidak dapat diterima dalam daya prediksi, sayangnya. Apakah itu yang Anda pikirkan ketika Anda menyarankan untuk menggunakan pelajar dengan varian rendah? Jika tidak, apa yang Anda pikirkan?
Ben Kuhn
@BenKuhn - Saya berbagi kekhawatiran andrew tentang apakah tes backtest akan benar-benar "jujur" uji kekuatan prediksi model out-of-sampel, jika tanpa alasan lain selain fakta bahwa Anda telah mengembangkan parameter tuning Anda pada seluruh dataset tersedia untuk Anda; bahkan jika Anda "memutar balik jarum jam" dan membangun kembali model Anda secara dinamis, metodologi yang dengannya Anda akan melakukannya akan dikembangkan dengan merujuk ke seluruh dataset, sehingga ada risiko bahwa model tersebut akan tetap sesuai, bahkan jika itu adalah dilatih ulang pada subset dari data yang tersedia.
habu
1
Untuk memperjelas, penyetelan otomatis akan membuatnya jujur ​​dalam arti bahwa prediksi pada saat tidak bergantung pada data dari waktu yang lebih besar dari . Untuk titik @ habu, akan selalu ada sejumlah bias sampel yang tidak dapat dikurangi yang dihasilkan dari peningkatan model Anda secara iteratif berdasarkan kinerja backtest, dan saya tidak benar-benar melihat jalan keluarnya (saya berasumsi ini adalah aplikasi keuangan). Maksud saya adalah bahwa interval kepercayaan Anda tentang hasil backtest Anda terkait dengan varians sampling prediktor dan proses tuning di atasnya. ttt
andrew
1
Dan dalam domain yang berisik seperti keuangan, Anda ingin memastikan bahwa jika sejarah telah dibuka sedikit berbeda (tetapi masih diambil dari beberapa distribusi yang mendasarinya) Anda masih akan sampai pada model yang sama. Jika Anda yakin bahwa proses Anda kuat untuk varians pengambilan sampel daripada saya pikir Anda baik. Tetapi dalam pengalaman saya prosedur tuning otomatis bisa sangat sensitif terhadap varians pengambilan sampel.
andrew