Saya memiliki pengalaman sebelumnya dengan validasi silang K-fold 'normal' untuk tuning model dan saya sedikit bingung dengan aplikasi dalam model time-series.
Ini adalah pemahaman saya bahwa untuk model deret waktu konsekuensi wajar untuk cross-validasi adalah prosedur 'asal-usul ke depan' yang dijelaskan oleh Hyndman . Ini masuk akal bagi saya dan kode di bawah ini menunjukkan penggunaan tsCV
fungsi dalam R, dari blog Hydman , untuk menunjukkan bagaimana kesalahannya berbeda dari CV vs seluruh dataset dalam sekali jalan.
library(fpp)
e <- tsCV(dj, rwf, drift=TRUE, h=1)
sqrt(mean(e^2, na.rm=TRUE))
## [1] 22.68249
sqrt(mean(residuals(rwf(dj, drift=TRUE))^2, na.rm=TRUE))
## [1] 22.49681
Sekarang, di tautan di atas disebutkan bahwa parameter drift diestimasikan ulang pada setiap asal perkiraan baru. Dalam CV 'normal' saya akan memiliki grid parameter saya akan mengevaluasi terhadap setiap lipatan sehingga saya bisa mendapatkan rata-rata untuk menentukan parameter terbaik untuk digunakan. Saya kemudian akan menggunakan parameter-parameter 'terbaik' itu agar sesuai dengan set pelatihan penuh dan menggunakannya sebagai model akhir saya untuk mengevaluasi set tes saya sebelumnya. Catatan, ini adalah validasi silang bersarang jadi saya tidak melatih set pengujian saya kapan pun.
Ini jelas tidak terjadi dengan 'bergulir asal maju' prosedur dimana parameter yang dioptimalkan untuk setiap kali lipat (setidaknya untuk metode R seperti bats
, tbats
, auto.arima
, dll). Apakah saya salah berpikir tentang metode ini dalam hal penyetelan parameter model atau bagaimana saya memilih parameter model deret waktu untuk ditetapkan untuk model akhir yang akan digunakan? Atau apakah penyetelan parameter tidak mempertimbangkan masalah dengan model deret waktu di mana optimasi tampaknya menjadi bagian dari pemasangan model dan hasil dari CV adalah dengan mengatakan seberapa baik kinerja masing-masing model secara keseluruhan? Dan bahwa model akhir dibangun dengan sebagian besar data pada akhirnya adalah model yang akan saya gunakan?
Saya menyadari ini bisa diulangi dalam pertanyaan yang bahkan lebih sederhana. Setelah melakukan validasi silang ('asal-usul ke depan'), apakah saya hanya menggunakan model terakhir yang dibuat (dengan superset terbesar sebagai model pas terakhir? Atau apa yang disarankan?
sumber
Jawaban:
Anda dapat menggabungkan asal bergulir ke depan dengan k-fold cross-validation (alias backtesting dengan cross-validation). Tentukan lipatan di muka sekali, dan pada setiap waktu bergulir lakukan iterasi melalui lipatan k, latih pada k-1 dan uji pada k. Gabungan dari semua lipatan uji yang diulur memberi Anda satu cakupan lengkap dari seluruh dataset pada waktu itu, dan lipatan kereta mencakup dataset k-1 kali pada waktu itu, yang dapat Anda agregat dengan cara apa pun yang sesuai (misalnya, rata-rata ). Kemudian skor kereta dan tes secara terpisah seperti biasanya untuk mendapatkan skor kereta / tes terpisah pada waktu itu.
Saat mengoptimalkan parameter, buat set perangkat penahan terpisah terlebih dahulu, dan kemudian lakukan validasi silang yang hanya dijelaskan pada data yang tersisa. Agar setiap parameter dioptimalkan, Anda perlu memutuskan apakah parameter itu tidak tergantung waktu (sehingga Anda dapat melakukan optimasi pada semua waktu bergulir) atau bergantung pada waktu (sehingga parameter dioptimalkan secara terpisah pada setiap waktu). Jika yang terakhir, Anda mungkin mewakili parameter sebagai fungsi waktu (mungkin linier) dan kemudian mengoptimalkan koefisien waktu-independen dari fungsi itu sepanjang waktu.
sumber
Jika Anda mengoptimalkan parameter ke data uji, Anda akan menyesuaikan sebagian data Anda untuk menguji data, bukan data pelatihan. Anda ingin tahu metode mana yang lebih baik daripada data yang ditahan tidak, misalnya, apa yang harus ditetapkan gamma dalam model Holt Winters.
sumber