Bagaimana cara menangani perkiraan deret waktu online?

9

Saya telah berurusan dengan masalah berikut. Saya memiliki semacam sistem waktu nyata dan setiap kerangka waktu saya membaca nilai saat ini, membuat rangkaian waktu (seperti 1, 12, 2, 3, 5, 9, 1, ...). Saya ingin mengetahui metode (statistik dan pembelajaran mesin) untuk memperkirakan nilai selanjutnya secara online (artinya setiap kali nilai baru dibaca). Saya mencoba R's ARIMA dan Weka's SMOreg, mereka menghasilkan prediksi yang baik, tetapi mereka agak lambat karena setiap kali nilai baru datang saya harus mengulang matematika.

PS Akan lebih bagus juga jika metode ini memiliki interval kepercayaan.

Fernando
sumber

Jawaban:

4

Dalam sistem waktu nyata Anda, apakah waktu pengamatan tidak homogen dan data tidak stasioner? Jika Anda menginginkan sesuatu yang sederhana dan cepat, saya sarankan menggunakan operator tipe EMA yang tidak homogen:

Operator pada Rangkaian Waktu Tidak Seragam

Mereka memperbarui EMA ( ) dengan setiap pengamatan baru sesuai dengan,value

value+=α(newDatavalue),α=1exp(Δtτ)

dengan parameter smoothing / tuning. Ini adalah cara sederhana untuk memperkirakan ekspektasi.τ

Anda juga dapat membuat estimasi median online sederhana melalui pembaruan

sg=sgn(newDatamed)med+=ϵ(sgmed)

Dalam praktiknya Anda ingin kecil (atau membusuk dengan lebih banyak pengamatan). Idealnya harus bergantung pada seberapa miringnya pembaruan yang terjadi; yaitu jika benar-benar sama dengan median maka harus seragam pada . Anda kemudian dapat memperluas ini ke kedalaman struktur jenis pohon biner seimbang untuk mendapatkan kuantil yang berjarak seragam.ϵϵmedsg{1,1}d2d+11

Kombinasi hal-hal di atas akan memberi Anda distribusi data online yang layak. Pohon sulit untuk mendapatkan yang benar, saya memiliki implementasi keduanya di C ++ jika Anda tertarik. Saya menggunakan keduanya dalam praktik banyak (data tick waktu-nyata finansial) dan mereka telah bekerja dengan baik.

muratoa
sumber
Hai Murat! Saya membuat hyperlink ke makalah yang Anda poskan dan memusatkan persamaan Anda. Lihat riwayat kiriman jika Anda tertarik melihat cara melakukan ini untuk referensi di masa mendatang. Ada juga beberapa tombol yang membantu di bagian atas kotak teks yang muncul ketika Anda menulis jawaban yang akan melakukan banyak hal secara otomatis untuk Anda (misalnya memasukkan gambar, tautan, cetak tebal / miring dan banyak lagi). (+1, btw)
Makro
3

Pertama, Anda perlu membuat data Anda melekat waktu. Misalnya ambil sebagai input pertama [1, 12, 2, 3] dan output yang sesuai [5], dan sebagai input kedua Anda ambil [12, 2, 3, 5] dan output yang sesuai [9]. (Ini menyematkan dengan penundaan 4 tetapi Anda dapat memilih nilai lain yang lebih cocok.)

Sekarang Anda memiliki masalah prediksi yang valid. Untuk data ini Anda dapat menerapkan Proses Gaussian Online . Ini adalah metode pembelajaran mesin yang melakukan apa yang Anda gambarkan, dan memberikan interval kepercayaan.

Jika model Anda non-stasioner, Anda dapat mencoba ekstensi non-stasioner, pelacak kuadrat kernel rekursif . By the way, makalah itu termasuk kode Matlab untuk kasus stasioner dan non-stasioner.

Metode-metode ini cukup cepat: kompleksitas komputasionalnya kuadratik dalam hal jumlah data yang Anda simpan dalam memori (yang biasanya merupakan bagian kecil dari semua data yang diproses). Untuk metode yang lebih cepat, saya sarankan untuk metode kernel least mean, misalnya, tetapi akurasinya kurang.

Steven
sumber
Prosedur yang Anda rekomendasikan, apakah itu melaporkan ketika level bergeser atau perubahan tren waktu terjadi? Apakah ia mendeteksi perubahan parameter atau perubahan varian dari waktu ke waktu? Apakah itu membedakan antara memori auto-regresif musiman dan boneka musiman?
IrishStat
@IrishStat Saya pikir pertanyaan Anda retoris. Jika suatu model dapat memiliki rekursi sederhana untuk memperbarui model itu tidak dapat memiliki semua kompleksitas yang Anda gambarkan. Terkadang lebih penting untuk mendapatkan jawaban yang benar daripada jawaban cepat yang buruk. Itulah sebabnya dalam jawaban saya, saya katakan hanya melakukannya jika modelnya cocok dengan data!
Michael R. Chernick
1
@IrishStat Metode-metode ini adalah "non-parametrik", yang berarti mereka tidak menganggap model data tertentu (mereka hanya "cocok" dengan data). Mereka tidak melaporkan perubahan tren. Namun mereka melaporkan kesalahan prediksi, jadi jika Anda ingin menemukan perubahan tren, Anda mungkin dapat melihat kapan kesalahan prediksi cukup besar.
Steven
Saya tidak terbiasa dengan proses Gaussian online yang jarang, tetapi dari melihat artikel yang ditautkan, saya pikir itu tidak benar untuk menggambarkannya sebagai "nonparameter" karena mereka menggunakan proses Gaussian untuk distribusi sebelumnya dan melibatkan sejumlah parameter dalam "Kalman" mereka. -seperti filter "recursiona. Tampaknya beberapa struktur model harus implisit dalam formulasi. Saya masih berpikir komentar IrishStat berlaku.
Michael R. Chernick
3

Filter Kalman adalah algoritma rekursif. Dibutuhkan pengamatan baru dan menggabungkannya dengan prediksi sebelumnya. Akan baik untuk digunakan tetapi hanya jika itu adalah model yang sesuai untuk data Anda. Saya tidak yakin betapa mudahnya memperbarui interval prediksi.

Michael R. Chernick
sumber
0

Saya tidak tahu apakah Anda mencoba ini, tetapi dalam R ketika Anda menggunakan fungsi Arima Anda dapat menentukan model sebagai input. Jadi, jika pada awalnya Anda menemukan model arima, katakanlah Arima (1,2,1) dengan masing-masing komponen penghalus, Anda dapat memperbaiki model tersebut di iterasi selanjutnya sehingga tidak mencoba mereparasi model. Jika data Anda diam dalam kasus itu, prediksi mungkin cukup baik untuk Anda - dan jauh lebih cepat.

Semoga ini membantu..

Roark
sumber