Pertanyaan: Saya ingin memastikan sesuatu, apakah penggunaan k-fold cross-validation dengan deret waktu sangat mudah, atau apakah orang perlu memberi perhatian khusus sebelum menggunakannya?
Latar Belakang: Saya memodelkan serangkaian waktu 6 tahun (dengan rantai semi-markov), dengan sampel data setiap 5 menit. Untuk membandingkan beberapa model, saya menggunakan validasi silang 6 kali lipat dengan memisahkan data dalam 6 tahun, jadi set pelatihan saya (untuk menghitung parameter) memiliki panjang 5 tahun, dan set tes memiliki panjang 1 tahun. Saya tidak memperhitungkan urutan waktu, jadi set saya yang berbeda adalah:
- lipat 1: pelatihan [1 2 3 4 5], ujian [6]
- lipat 2: pelatihan [1 2 3 4 6], ujian [5]
- lipat 3: pelatihan [1 2 3 5 6], ujian [4]
- lipat 4: pelatihan [1 2 4 5 6], ujian [3]
- lipat 5: pelatihan [1 3 4 5 6], ujian [2]
- lipat 6: pelatihan [2 3 4 5 6], ujian [1].
Saya membuat hipotesis bahwa setiap tahun tidak tergantung satu sama lain. Bagaimana saya bisa memverifikasi itu? Apakah ada referensi yang menunjukkan penerapan validasi silang k-fold dengan deret waktu.
sumber
Jawaban:
Rangkaian waktu (atau data yang dipesan secara intrinsik lainnya) dapat bermasalah untuk validasi silang. Jika beberapa pola muncul di tahun 3 dan tetap selama bertahun-tahun 4-6, maka model Anda dapat mengambilnya, meskipun itu bukan bagian dari tahun 1 & 2.
Pendekatan yang terkadang lebih berprinsip pada time series adalah forward chaining, di mana prosedur Anda akan seperti ini:
Yang lebih akurat memodelkan situasi yang akan Anda lihat pada waktu prediksi, di mana Anda akan memodelkan pada data masa lalu dan memprediksi pada data berwawasan ke depan. Ini juga akan memberi Anda rasa ketergantungan pemodelan Anda pada ukuran data.
sumber
Metode yang saya gunakan untuk memvalidasi silang model deret waktu saya adalah validasi silang secara bergulir. Mulailah dengan subkumpulan data kecil untuk tujuan pelatihan, ramalan poin data kemudian, dan periksa keakuratan poin data ramalan. Poin data yang diramalkan yang sama kemudian dimasukkan sebagai bagian dari dataset pelatihan berikutnya dan poin data berikutnya diperkirakan.
Untuk membuat berbagai hal menjadi intuitif, berikut ini gambar yang sama:
Kode R yang setara adalah:
sumber
Cara "kanonik" untuk melakukan validasi silang seri-waktu (setidaknya seperti yang dijelaskan oleh @Rob Hyndman) adalah dengan "menggulung" melalui dataset.
yaitu:
Pada dasarnya, set latihan Anda tidak boleh berisi informasi yang terjadi setelah set tes.
sumber
Agar validasi silang berfungsi sebagai alat pemilihan model, Anda memerlukan perkiraan independensi antara pelatihan dan data pengujian. Masalah dengan data deret waktu adalah bahwa titik data yang berdekatan sering sangat tergantung, sehingga validasi silang standar akan gagal. Obat untuk ini adalah meninggalkan celah antara sampel uji dan sampel pelatihan, di kedua sisi sampel uji . Alasan mengapa Anda juga perlu meninggalkan celah sebelum sampel tes adalah bahwa ketergantungan simetris ketika Anda bergerak maju atau mundur dalam waktu (pikirkan korelasi).
Di mana h menunjukkan bahwa h pengamatan sampel pelatihan dihapus pada sisi itu.
sumber
Seperti dikomentari oleh @thebigdog, "Tentang penggunaan validasi silang untuk evaluasi prediktor seri waktu" oleh Bergmeir et al. membahas validasi silang dalam konteks seri waktu stasioner dan tentukan Forward Chaining (diusulkan oleh penjawab lain) untuk tidak membantu. Catatan, Forward Chaining disebut Evaluasi Blok Terakhir dalam makalah ini:
" Mengevaluasi model peramalan time series: Sebuah studi empiris tentang metode estimasi kinerja " oleh Cerqueira et al. setuju dengan penilaian ini. Namun, untuk deret waktu non-stasioner, mereka merekomendasikan untuk menggunakan variasi pada Hold-Out, yang disebut Rep-Holdout. Dalam Rep-Holdout, sebuah titik
a
dipilih dalam seri waktuY
untuk menandai awal data pengujian. Titika
ditentukan dalam jendela. Ini diilustrasikan pada gambar di bawah ini:Makalah yang disebutkan di atas adalah tes yang panjang dan lengkap hampir semua metode lain yang disebutkan dalam jawaban untuk pertanyaan ini dengan kode yang tersedia untuk umum . Ini termasuk klaim @Matthias Schmidtblaicher termasuk kesenjangan sebelum dan sesudah data pengujian. Juga, saya hanya meringkas makalahnya. Kesimpulan aktual dari makalah ini melibatkan pohon keputusan untuk mengevaluasi model deret waktu!
sumber