Scikit-learn: Menerapkan validasi silang WalkForward untuk data deret waktu.

Dibuat pada 15 Jul 2019  ·  23Komentar  ·  Sumber: scikit-learn/scikit-learn

Keterangan


Implementasikan walk forward cv untuk data time series dengan gap antara train set dan test set.

Hasil yang diharapkan


image

Memperluas
image

Needs Decision New Feature

Komentar yang paling membantu

Saya pikir menambahkan validasi silang deret waktu yang lebih baik ada dalam ruang lingkup.

Semua 23 komentar

@saninstein Mengapa kesenjangan?

@clstaudt gap adalah fitur yang berguna untuk evaluasi model dalam perdagangan saham. Dalam prediksi harga, kasus yang sangat umum terjadi ketika model berkinerja sangat baik pada data tepat setelah set pelatihan dan menurun seiring waktu. Jadi, dalam beberapa kasus akan berguna untuk melewatkan sejumlah kecil data "baik" yang terjadi setelah set pelatihan.

Saya pikir posisi kami yang biasa pada fitur-fitur terkait deret waktu adalah bahwa itu di luar cakupan untuk sklearn (setidaknya untuk saat ini). Dan bagi saya, masuk akal untuk meninjau kembali masalah ini setelah kami memiliki properti sampel seperti stempel waktu yang dilampirkan pada data.

Saya ingin memiliki setidaknya satu pendapat lain dari @ scikit-learn/core-devs tentang ini, tetapi suara saya adalah resolusi "tidak akan diperbaiki" untuk saat ini.

@adrinjalali sklearn sudah memiliki banyak model bagus untuk rangkaian waktu,

Yang mana?

@adrinjalali ada TimeSeriesSplit yang sudah diimplementasikan di sklearn :)

TimeSeriesSplit adalah kasus spesifik dari WalkForwardCV yang diusulkan (dapat dicapai dengan gap=0, expanding=True args), sebenarnya TimeSeriesSplit dapat dengan mudah diganti dengan WalkForwardCV (cukup atur argumen default seperti yang saya sebutkan sebelumnya).

Saya adalah bagian dari tim ML perdagangan saham dan kami berhasil menggunakan berbagai fitur sklearn dan pustaka yang kompatibel dengan sklearn. Ada kekurangan CV splitter yang tepat dan kami memutuskan untuk mengembalikannya ke sklearn, tetapi jika ini tidak terjadi, kami akan menggunakannya secara internal :)

TimeSeriesSplit adalah kasus spesifik dari WalkForwardCV yang diusulkan (dapat dicapai dengan gap=0, expand=True args), sebenarnya TimeSeriesSplit dapat dengan mudah diganti dengan WalkForwardCV (cukup atur argumen default seperti yang saya sebutkan sebelumnya).

Wajar, tapi kemudian saya mungkin akan mencoba untuk menambal TimeSeriesSplit dengan cara yang kompatibel untuk menambahkan fitur yang Anda butuhkan. Itu juga memiliki peluang lebih tinggi untuk diterima oleh masyarakat.

Prediksi deret waktu bukan satu-satunya kasus untuk WalkForwardCV. Ini berguna ketika pengamatan dataset dipesan dalam waktu dan validasi perlu dilakukan dengan cara yang sama.

Misalnya salah satu tugas kami adalah kehilangan masalah klasifikasi penyaringan perdagangan ketika kami mencoba meningkatkan strategi perdagangan yang ada dengan model ml yang akan "memberi izin" untuk berdagang.


Adil, tapi kemudian saya mungkin akan mencoba untuk menambal TimeSeriesSplit dengan cara yang kompatibel untuk menambahkan fitur yang Anda butuhkan. Itu juga memiliki peluang lebih tinggi untuk diterima oleh masyarakat.

Saya percaya itu akan menjadi solusi terbaik.

Saya seorang ilmuwan data yang mengerjakan model peramalan deret waktu. Saya berasumsi hal-hal khusus deret waktu berada di luar cakupan scikit-learn, jadi saya mulai menerapkan kode validasi saya sendiri, sedikit berbeda dari metode yang dijelaskan di utas ini.

Kemudian saya mengetahui keberadaan TimeSeriesSplit dan bertanya-tanya apakah saya sudah mulai menemukan kembali roda. Saya lebih suka menyumbangkan kode validasi ke proyek yang sudah ada dan sudah mapan.

Karena jelas ada permintaan untuk evaluasi model semacam ini, saya masih bertanya-tanya di mana itu cocok.

Ada banyak pola yang dibutuhkan untuk prediksi pada time series. Saya
akan berpikir misalnya bahwa transformator yang membuat fitur wavelet akan
menjadi sangat berguna.

Namun, ini berada di luar lingkup scikit-learn. Ini akan berguna
untuk membuat paket yang mengimplementasikan semua ini dengan cara yang konsisten. Dia
mungkin akan mengambil momentum.

Akan berguna untuk membuat paket yang mengimplementasikan semua ini dengan cara yang konsisten. Itu mungkin akan mengambil momentum.

Ya. Daftarkan aku.

Kami akan senang memiliki paket seperti itu di https://github.com/scikit-learn-contrib/

Tutup yang ini kalau begitu :)

Saya pikir menambahkan validasi silang deret waktu yang lebih baik ada dalam ruang lingkup.

lihat juga #13666 #13204 #6322 #13761

Lingkup kembali, saya setuju dengan @amueller bahwa kita harus terbuka untuk memperluas ini ke kasus penggunaan umum. Pada dasarnya, kita umumnya mengasumsikan dalam scikit-learn estimator (yaitu paket sklearn) bahwa model harus lebih atau kurang invarian terhadap urutan sampel dan urutan fitur. Ini tidak termasuk penduga deret waktu. Namun, kami tidak memiliki kendala ini dalam pembagi validasi silang di mana kami telah lama mempertimbangkan pesanan sampel sebagai sesuatu yang harus diperhatikan; pada akhirnya, validasi silang adalah tempat asumsi inti seputar ML.

Tetapi seperti yang juga ditunjukkan oleh @amueller , sebenarnya percakapan harus dilanjutkan dalam permintaan tarik yang ada, memindahkannya ke keadaan yang menyenangkan.

Tentu, tapi saya waspada terhadap kasus di mana stempel waktu sebenarnya dari data harus penting dalam pemisahan (yang seharusnya IMO), dan bukan hanya hitungan baris. Saya tidak berpikir kita akan menangani cap waktu dalam waktu dekat, bukan?

Dalam 5 tahun sejak saya pertama kali mengusulkan ini di https://github.com/scikit-learn/scikit-learn/issues/3202 , pertanyaan ini telah muncul setidaknya 50 kali dalam percakapan mengajar atau melamar. @saninstein , apakah Anda membuat keputusan tentang apakah akan mendorong penyertaan di sini atau -contrib? Saya akan senang membantu jika ada sesuatu yang Anda perlu bantuan untuk menyelesaikan ini (di suatu tempat).

Saya juga ingin berkontribusi. Menulis di edisi lain tentang ini dan ingin memperluas TimeSeriesSplit atau berkolaborasi untuk membuat paket lain untuk itu. Saya merasa ini adalah sesuatu yang terkait dengan perpecahan di domain CV dan harus di sklearn.
Sejujurnya saya benar-benar bingung ke mana harus pergi dan apa yang harus saya lakukan sekarang karena saya ingin berkontribusi. Saya sadar akan waktu saya dan saya ingin menggunakannya dengan cara yang benar untuk komunitas.

@mjbommar Saya pikir seperti yang saya dan @jnothman katakan di atas, kami cukup terbuka untuk bergerak maju dan ada beberapa PR yang keluar, khususnya #13761 dan #13204 dan umpan balik pada dua API akan sangat dihargai.

Saya pikir #13204 terlihat paling dewasa jadi mungkin pergi dari sana paling masuk akal? Saya tidak yakin apakah @kykosic masih mengerjakannya, mengingat keterlambatan tanggapan kami?

Hm meskipun #13204 tidak mengimplementasikan WalkForward... Apakah kita ingin menggabungkan #13204 terlebih dahulu dan kemudian mengimplementasikan WalkForward nanti?
Haruskah itu menjadi objek CV yang terpisah?

@amueller Saya lupa tentang #13204 sampai posting ini muncul. Saya akan membahas ulasannya selama minggu depan dan melihat apakah itu masih cocok.

@kykosic luar biasa, terima kasih!

Penasaran kenapa masalah ini ditutup karena #13204 sudah selesai. Saya pikir #13204 adalah prasyarat untuk yang satu ini.

13204 menambahkan gap ke TimeSeriesSplit yang merupakan fitur yang diminta oleh masalah ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat