Bagaimana cara membagi dataset untuk prediksi deret waktu?

22

Saya memiliki data penjualan bersejarah dari toko roti (setiap hari, lebih dari 3 tahun). Sekarang saya ingin membuat model untuk memprediksi penjualan di masa depan (menggunakan fitur seperti hari kerja, variabel cuaca, dll.).

Bagaimana saya harus membagi dataset untuk pemasangan dan evaluasi model?

  1. Apakah perlu kronologis kereta / validasi / ujian split?
  2. Apakah saya kemudian akan melakukan penyetelan hyperparameter dengan set kereta dan validasi?
  3. Apakah validasi silang (bersarang) merupakan strategi yang buruk untuk masalah deret waktu?


EDIT

Berikut adalah beberapa tautan yang saya temui setelah mengikuti URL yang disarankan oleh @ ene100:

  • Rob Hyndman menjelaskan "asal usul peramalan bergulir" dalam teori dan dalam praktik (dengan kode R)
  • istilah lain untuk bergulir perkiraan asal adalah "berjalan maju optimasi" (di sini atau di sini ), "bergulir cakrawala" atau "bergerak asal"
  • tampaknya teknik ini tidak akan diintegrasikan ke dalam scikit-learning dalam waktu dekat, karena "permintaan dan seminalitas teknik ini tidak jelas" (dinyatakan di sini ).

Dan ini adalah saran lain untuk validasi silang time-series.

tobip
sumber

Jawaban:

8

Tautan ini dari blog Rob Hyndman memiliki beberapa info yang mungkin berguna: http://robjhyndman.com/hyndsight/crossvalidation/

Dalam pengalaman saya, membagi data menjadi set kronologis (tahun 1, tahun 2, dll) dan memeriksa stabilitas parameter dari waktu ke waktu sangat berguna dalam membangun sesuatu yang kuat. Selain itu, jika data Anda musiman, atau memiliki cara lain yang jelas untuk dipecah menjadi kelompok (misalnya wilayah geografis) maka memeriksa stabilitas parameter di sub-kelompok tersebut juga dapat membantu menentukan seberapa kuat model akan dan apakah masuk akal untuk menyesuaikan model terpisah untuk kategori data yang terpisah.

Saya pikir tes statistik bisa berguna tetapi hasil akhirnya juga harus lulus "tes bau".

ene100
sumber
3

1) Secara teknis, Anda tidak perlu menguji sampel jika Anda menggunakan AIC dan kriteria serupa karena mereka membantu menghindari overfitting.

3) Saya tidak melihat bagaimana Anda dapat melakukan CV standar karena itu menyiratkan pelatihan model deret waktu dengan beberapa nilai yang hilang. Alih-alih, coba gunakan jendela putar untuk pelatihan dan prediksi respons di satu atau beberapa titik yang mengikuti jendela.

James
sumber
3
AIC dalam deret waktu sering didasarkan pada satu kesalahan perkiraan periode depan. Ini tidak memberi tahu banyak tentang kinerja perkiraan n-periode depan dinamis. Karenanya, itu sama sekali tidak cukup.
Aksakal
Bisakah Anda memberikan referensi?
James
1

Saya sering mendekati masalah dari perspektif Bayesian. Dalam hal ini, saya akan mempertimbangkan menggunakan implikasi berlebihan sebagai strategi. Ini berarti menyiapkan kemungkinan untuk data Anda, tetapi mengabaikan beberapa hasil Anda. Perlakukan nilai-nilai itu sebagai hilang, dan modelkan hasil-hasil yang hilang itu dengan menggunakan kovariat yang sesuai. Kemudian putar melalui mana data dihilangkan. Anda dapat melakukan ini di dalam, misalnya, prosedur CV 10 kali lipat.

Ketika diterapkan di dalam program pengambilan sampel, ini berarti bahwa pada setiap langkah Anda menggambar nilai kandidat dari nilai data Anda yang dihilangkan (di samping parameter Anda) dan menilai kemungkinannya terhadap model yang Anda usulkan. Setelah mencapai stasioneritas, Anda memiliki nilai sampel counter-faktual yang diberikan model Anda yang dapat Anda gunakan untuk menilai kesalahan prediksi: sampel ini menjawab pertanyaan "seperti apa model saya setelah tidak adanya nilai-nilai ini?" Perhatikan bahwa prediksi ini juga akan mewarisi ketidakpastian dari ketidakpastian yang ada dalam estimasi koefisien, jadi ketika Anda mengumpulkan semua nilai prediksi Anda untuk, misalnya 1 Maret 2010 bersama-sama, Anda akan memiliki distribusi prediksi untuk tanggal tersebut.

Fakta bahwa nilai-nilai ini dijadikan sampel berarti Anda masih dapat menggunakan istilah kesalahan yang bergantung pada ketersediaan rangkaian data lengkap (misalnya rata-rata bergerak), karena Anda memiliki nilai hasil sampel yang tersedia di setiap langkah.

Sycorax berkata Reinstate Monica
sumber
1

Dalam kasus Anda, Anda tidak memiliki banyak opsi. Anda hanya memiliki satu toko roti, tampaknya. Jadi, untuk menjalankan tes out-of-sample, satu-satunya pilihan Anda adalah pemisahan waktu, yaitu sampel pelatihan akan dari awal ke beberapa titik waktu terakhir, dan ketidaksepakatan akan dari titik itu hingga hari ini.

yt=f(t)+εtf(t)ys<t

Aksakal
sumber
Kedengarannya menjanjikan. Berapakah subskrip "s" dalam y_s <= t?
tobip
tyss<t
Saya kira penjualan roti saya agak tergantung pada faktor-faktor eksogen. Saya tidak berpikir itu adalah model deret waktu yang sangat dinamis karena, misalnya, harga saham. Dalam data saya, Kesalahan Rata-Rata dengan CV 5 kali lipat hanya sedikit lebih besar dari CV seri waktu 5 kali yang mempertahankan urutan kronologis lipatan seperti dijelaskan di sini (misalnya, 30,7 vs 33,8 untuk ExtraTreesRegressor) . Tidak yakin apakah ini cara yang valid untuk menguji secara empiris model dinamis?
tobip
Sesuatu seperti ARIMA akan menjadi model yang dinamis. Penjualan biasanya persisten, yaitu penjualan hari ini seperti kemarin.
Aksakal
0

Penafian: Metode yang dijelaskan di sini tidak didasarkan pada pembacaan literatur yang menyeluruh. Ini adalah upaya terbaik saya untuk mengimprovisasi metode K-lipat CV untuk analisis deret waktu multivariat dengan panjang jendela input yang relatif pendek (dengan asumsi tidak ada / ketergantungan rendah selama rentang waktu yang lebih lama), di mana ada masalah dengan kehadiran non-homogen sumber data lebih dari periode pengumpulan data.

Pertama-tama rangkaian pengamatan ditransformasikan menjadi serangkaian jendela sejarah pengamatan dengan panjang window_length dan dengan langkah 1 antar windows (tanpa langkah). Maka prinsipnya adalah untuk membagi dataset jendela dalam "beling" berkali-kali lebih lama dari window_length (tetapi lebih banyak dari jumlah instance model), dan menangani pecahan (seperti kartu remi) sebagai data validasi untuk memisahkan instance model. Untuk menjaga agar model lebih terpisah dengan bersih, jendela karantina dari window_length pada awal setiap beling diadakan dari semua pelatihan.

Model dilatih pada semua pecahan kecuali miliknya sendiri, dan validasi dilakukan atas kepingnya sendiri. Validasi koleksi / ansambel model dilakukan dengan menjumlahkan kesalahan validasi atas semua pecahan, di mana setiap pecahan ditangani oleh submodel yang sesuai. Pengujian pada data yang tidak terlihat dapat dilakukan dengan menggunakan rata-rata (atau kombinasi lain yang sesuai) dari output semua model yang terlatih.

Metode ini dimaksudkan untuk mengurangi ketergantungan pada sistem (dan sumber data) yang sama selama seluruh periode pengumpulan data. Hal ini juga dimaksudkan untuk memberikan setiap bagian kasar dari data pengaruh yang sama pada model. Perhatikan bahwa untuk tidak membiarkan jendela karantina merusak pelatihan, itu adalah titik bahwa panjang beling tidak selaras dengan periode yang (diharapkan) muncul di data, seperti (biasanya) siklus harian, mingguan dan tahunan.

Model ensemble mungkin menangani data yang benar-benar baru dengan buruk. (Saya belum tahu.)

Elias Hasle
sumber