Saya terkesan dengan forecast
paket R , serta misalnya zoo
paket untuk seri waktu tidak beraturan dan interpolasi nilai yang hilang.
Aplikasi saya ada di bidang perkiraan lalu lintas pusat panggilan, sehingga data pada akhir pekan selalu (hampir) hilang, yang dapat ditangani dengan baik zoo
. Juga, beberapa titik diskrit mungkin hilang, saya hanya menggunakan R NA
untuk itu.
Masalahnya adalah: semua keajaiban bagus dari paket perkiraan, seperti eta()
, auto.arima()
dll, tampaknya mengharapkan ts
objek biasa , yaitu deret waktu equispaced tidak berisi data yang hilang. Saya pikir aplikasi dunia nyata untuk seri waktu hanya-equispaced pasti ada, tetapi - menurut saya - sangat terbatas.
Masalah beberapa NA
nilai diskrit dapat dengan mudah dipecahkan dengan menggunakan salah satu fungsi interpolasi yang ditawarkan zoo
dan juga oleh forecast::interp
. Setelah itu, saya menjalankan ramalan.
Pertanyaan saya:
- Adakah yang menyarankan solusi yang lebih baik?
(pertanyaan utama saya) Setidaknya dalam domain aplikasi saya, perkiraan lalu lintas pusat panggilan (dan sejauh yang saya bayangkan sebagian besar domain masalah lainnya), deret waktu tidak sama. Setidaknya kami memiliki skema "hari kerja" berulang atau sesuatu. Apa cara terbaik untuk mengatasinya dan masih menggunakan semua sihir keren dari paket ramalan?
Haruskah saya "mengompres" deret waktu untuk mengisi akhir pekan, melakukan ramalan, dan kemudian "menggembungkan" data lagi untuk memasukkan kembali nilai-nilai NA di akhir pekan? (Itu akan memalukan, saya pikir?)
Apakah ada rencana untuk membuat paket perkiraan sepenuhnya kompatibel dengan paket seri waktu tidak teratur seperti kebun binatang atau nya? Jika ya, kapan dan jika tidak, mengapa tidak?
Saya cukup baru dalam meramalkan (dan statistik secara umum), jadi saya mungkin mengabaikan sesuatu yang penting.
sumber
auto.arima
dapat menangani nilai yang hilang.Jawaban:
Saya bukan ahli R jadi mungkin ada cara yang lebih sederhana tapi saya pernah menemukan ini sebelumnya. Apa yang saya lakukan sebelumnya adalah mengimplementasikan fungsi yang mengukur jarak (dalam satuan waktu) antara tanggal aktual dan menyimpannya di kolom baru dalam rangkaian waktu yang ada. Jadi kita punya sesuatu seperti:
Dengan cara ini, jika deret waktu Anda belum dikaitkan dengan serangkaian titik waktu aktual (atau format yang salah atau apa pun), maka Anda masih dapat menggunakannya.
Selanjutnya, Anda menulis fungsi yang membuat deret waktu baru untuk Anda, seperti:
Pertama, Anda menghitung berapa unit waktu yang seharusnya dimiliki deret waktu antara tanggal pemilihan ponsel Anda dan buat garis waktu itu di kebun binatang atau kebun binatang atau apa pun pilihannya dengan nilai kosong.
Kedua, Anda mengambil array deret waktu yang tidak lengkap dan, menggunakan loop, mengisi nilai-nilai ke dalam garis waktu yang benar, sesuai dengan batas yang Anda pilih. Ketika Anda menemukan sebuah baris di mana jarak unit tidak satu (hari (unit) tidak ada), Anda mengisi nilai-nilai yang diinterpolasi.
Sekarang, karena ini adalah fungsi Anda, Anda sebenarnya dapat memilih cara interpolasi. Misalnya Anda memutuskan bahwa jika jaraknya kurang dari dua unit, Anda menggunakan interpolasi linier standar. Jika satu minggu hilang, Anda melakukan sesuatu yang lain dan jika ambang batas tanggal yang hilang tercapai, Anda memberikan peringatan tentang data - benar-benar apa pun yang ingin Anda bayangkan.
Jika loop mencapai tanggal akhir Anda mengembalikan ts Anda yang baru.
Keuntungan dari fungsi tersebut adalah bahwa Anda dapat menggunakan interpolasi yang berbeda atau prosedur penanganan tergantung pada panjang celah dan mengembalikan seri menciptakan rapi dalam format yang Anda pilih. Setelah ditulis, ini memungkinkan Anda mendapatkan data tabular yang bersih dan bagus. Semoga ini bisa membantu Anda.
sumber
Anda harus sangat berhati-hati ketika menerapkan interpolasi sebelum perawatan statistik lebih lanjut. Pilihan yang Anda lakukan untuk interpolasi Anda menimbulkan bias pada data Anda. Ini adalah sesuatu yang Anda pasti ingin hindari, karena dapat mengubah kualitas prediksi Anda. Menurut pendapat saya untuk nilai-nilai yang hilang seperti yang Anda sebutkan, yang secara teratur diberi jarak waktu dan yang sesuai dengan penghentian dalam kegiatan, mungkin lebih tepat untuk tidak menggunakan model Anda hari ini. Di dunia kecil pusat panggilan Anda (model yang Anda buat tentang itu), mungkin lebih baik untuk mempertimbangkan bahwa waktu hanya berhenti ketika ditutup daripada menciptakan pengukuran aktivitas yang tidak ada. Di sisi lain, model ARIMA secara statistik dibangun berdasarkan asumsi bahwa data memiliki jarak yang sama. Sejauh yang saya tahu tidak ada adaptasi ARIMA untuk kasus Anda. Jika Anda hanya melewatkan beberapa pengukuran pada hari kerja yang sebenarnya, Anda mungkin terpaksa menggunakan interpolasi.
sumber
Saya tidak akan menginterpolasi data sebelum memperkirakan model pada data ini, seperti dicatat oleh @Remi. Itu ide yang buruk. Contoh ekstrem: bayangkan Anda memiliki dua titik data Jan 2013 dan Jan 2014. Sekarang interpolasi 10 poin bulanan di antaranya: Februari hingga Desember 2013, dan jalankan regresi pada tanggal bulanan. Pada kenyataannya itu tidak akan seburuk ini, tetapi itu adalah ide yang sama: Anda akan menggelembungkan statistik Anda yang terbaik.
Cara untuk pergi adalah dengan menggunakan metode deret waktu yang menangani data yang hilang. Misalnya, nyatakan metode ruang. Lihatlah paket astsa R. Muncul dengan buku yang bagus tentang analisis deret waktu. Ini akan menangani data yang hilang dengan baik. Matlab sekarang memiliki fungsi serupa dalam paket ssm . Anda harus belajar mengubah model Anda menjadi bentuk ruang angkasa, tetapi Anda harus mempelajarinya jika Anda ingin menjauh dari
auto.arima
"sihir".sumber