Sunting utama: Saya ingin mengucapkan terima kasih yang sebesar-besarnya kepada Dave & Nick sejauh ini atas tanggapan mereka. Kabar baiknya adalah bahwa saya mendapatkan loop untuk bekerja (prinsip dipinjam dari posting Prof Hydnman pada peramalan batch). Untuk mengkonsolidasikan kueri yang beredar:
a) Bagaimana cara meningkatkan jumlah iterasi maksimum untuk auto.arima - tampaknya dengan sejumlah besar variabel eksogen auto.arima memukul iterasi maksimum sebelum melakukan konvergensi pada model akhir. Tolong koreksi saya jika saya salah paham.
b) Satu jawaban, dari Nick, menyoroti bahwa prediksi saya untuk interval per jam hanya berasal dari interval per jam itu dan tidak dipengaruhi oleh kejadian sebelumnya pada hari itu. Naluri saya, dari berurusan dengan data ini, memberi tahu saya bahwa ini seharusnya tidak sering menyebabkan masalah yang signifikan tetapi saya terbuka untuk saran bagaimana menangani hal ini.
c) Dave telah menunjukkan bahwa saya memerlukan pendekatan yang jauh lebih canggih untuk mengidentifikasi lead / lag time seputar variabel prediktor saya. Adakah yang punya pengalaman dengan pendekatan terprogram untuk ini dalam R? Saya tentu berharap akan ada batasan tetapi saya ingin mengambil proyek ini sejauh yang saya bisa, dan saya tidak ragu bahwa ini harus bermanfaat bagi orang lain di sini juga.
d) Permintaan baru tetapi sepenuhnya terkait dengan tugas yang dihadapi - apakah auto.arima mempertimbangkan para regresi ketika memilih pesanan?
Saya mencoba memperkirakan kunjungan ke toko. Saya membutuhkan kemampuan untuk memperhitungkan liburan yang berpindah, tahun kabisat dan acara sporadis (pada dasarnya pencilan); atas dasar ini saya mengumpulkan bahwa ARIMAX adalah taruhan terbaik saya, menggunakan variabel eksogen untuk mencoba dan memodelkan beberapa musim serta faktor-faktor yang disebutkan di atas.
Data direkam 24 jam pada interval per jam. Ini terbukti bermasalah karena jumlah nol dalam data saya, terutama pada saat-saat yang melihat volume kunjungan sangat rendah, kadang-kadang tidak ada sama sekali ketika toko baru saja dibuka. Juga, jam buka relatif tidak menentu.
Also, computational time is huge when forecasting as one complete time series with 3 years+ of historical data. I figured that it would make it faster by computing each hour of the day as separate time series, and when testing this at busier hours of the day seems to yield higher accuracy but again proves to become a problem with early/later hours that don't consistently receive visits. I believe the process would benefit from using auto.arima but it doesn't seem to be able to converge on a model before reaching the maximum number of iterations (hence using a manual fit and the maxit clause).
Saya telah mencoba menangani data 'yang hilang' dengan membuat variabel eksogen ketika kunjungan = 0. Sekali lagi, ini bekerja dengan baik untuk waktu yang lebih sibuk ketika satu-satunya waktu tidak ada kunjungan adalah ketika toko ditutup untuk hari itu; dalam hal ini, variabel eksogen berhasil menangani hal ini untuk peramalan ke depan dan tidak termasuk efek hari sebelumnya ditutup. Namun, saya tidak yakin bagaimana menggunakan prinsip ini dalam memprediksi jam yang lebih tenang di mana toko buka tetapi tidak selalu menerima kunjungan.
Dengan bantuan pos oleh Profesor Hyndman tentang peramalan batch dalam R, saya mencoba mengatur lingkaran untuk meramalkan seri 24 tetapi tampaknya tidak ingin meramalkan selama 1 jam dan seterusnya dan tidak tahu mengapa. Saya mendapatkan "Kesalahan dalam optim (init [mask], armafn, method = optim.method, hessian = TRUE,: nilai selisih beda hingga tidak terbatas [1]" tetapi karena semua seri memiliki panjang yang sama dan saya pada dasarnya menggunakan matriks yang sama, saya tidak mengerti mengapa ini terjadi.Ini berarti matriks tidak dari peringkat penuh, bukan? Bagaimana saya bisa menghindari ini dalam pendekatan ini?
https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip
date()
#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")
#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)
fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))
#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
Nodata=XREGFDATA$NoData,
NewYearsDay=XREGFDATA$NewYearsDay,
GoodFriday=XREGFDATA$GoodFriday,
EasterWeekend=XREGFDATA$EasterWeekend,
EasterMonday=XREGFDATA$EasterMonday,
MayDay=XREGFDATA$MayDay,
SpringBH=XREGFDATA$SpringBH,
SummerBH=XREGFDATA$SummerBH,
Christmas=XREGFDATA$Christmas,
BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]
NoFcast <- 0
for(i in 1:24) {
if(max(INPUT[,i+1])>0) {
#The exogenous variables used to fit are the same for all series except for the
#'Nodata' variable. This is to handle missing data for each series
xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
Month=model.matrix(~as.factor(INPUT$MONTH)),
Week=model.matrix(~as.factor(INPUT$WEEK)),
Nodata=ifelse(INPUT[,i+1] < 1,1,0),
NewYearsDay=INPUT$NewYearsDay,
GoodFriday=INPUT$GoodFriday,
EasterWeekend=INPUT$EasterWeekend,
EasterMonday=INPUT$EasterMonday,
MayDay=INPUT$MayDay,
SpringBH=INPUT$SpringBH,
SummerBH=INPUT$SummerBH,
Christmas=INPUT$Christmas,
BoxingDay=INPUT$BoxingDay))
xreg <- xreg[,c(-1,-8,-20)]
ARIMAXfit <- Arima(TS[,i],
order=c(0,1,8), seasonal=c(0,1,0),
include.drift=TRUE,
xreg=xreg,
lambda=BoxCox.lambda(TS[,i])
,optim.control = list(maxit=1500), method="ML")
fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean
} else{
NoFcast <- NoFcast +1
}
}
#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))
date()
Saya akan sangat menghargai kritik konstruktif tentang cara saya menangani hal ini dan bantuan apa pun untuk membuat skrip ini berfungsi. Saya menyadari bahwa ada perangkat lunak lain yang tersedia tetapi saya sangat terbatas pada penggunaan R dan / atau SPSS di sini ...
Juga, saya sangat baru di forum ini - saya telah mencoba memberikan penjelasan selengkap mungkin, menunjukkan penelitian sebelumnya yang telah saya lakukan dan juga memberikan contoh yang dapat direproduksi; Saya harap ini cukup tetapi tolong beri tahu saya jika ada hal lain yang dapat saya berikan untuk memperbaiki posting saya.
EDIT: Nick menyarankan agar saya menggunakan total harian terlebih dahulu. Saya harus menambahkan bahwa saya telah menguji ini dan variabel eksogen menghasilkan perkiraan yang menangkap musiman harian, mingguan & tahunan. Ini adalah salah satu alasan lain mengapa saya berpikir untuk memperkirakan setiap jam sebagai seri terpisah, meskipun, seperti yang disebutkan oleh Nick, perkiraan saya untuk jam 4 sore pada hari tertentu tidak akan dipengaruhi oleh jam sebelumnya di hari itu.
EDIT: 09/08/13, masalah dengan loop hanya berkaitan dengan pesanan asli yang saya gunakan untuk pengujian. Saya seharusnya melihat ini lebih cepat dan lebih mendesak untuk mencoba auto.arima untuk bekerja dengan data ini - lihat poin a) & d) di atas.
Jawaban:
Sayangnya misi Anda ditakdirkan untuk gagal karena Anda dibatasi untuk R dan SPSS. Anda perlu mengidentifikasi struktur hubungan kepemimpinan dan keterlambatan untuk setiap variabel peristiwa / liburan / eksogen yang mungkin ikut berperan. Anda perlu mendeteksi Tren Waktu yang mungkin yang tidak dapat dilakukan SPSS. Anda perlu memasukkan Tren / Prediksi Harian ke dalam masing-masing perkiraan jam untuk memberikan perkiraan yang terkonsolidasi. Anda harus khawatir dengan mengubah parameter dan mengubah varians. Semoga ini membantu. Kami telah memodelkan data seperti ini selama bertahun-tahun dengan cara otomatis, tentu saja dengan kontrol opsional yang ditentukan pengguna.
EDIT: Seperti yang diminta OP saya menyajikan analisis khas di sini Saya mengambil satu jika jam sibuk dan mengembangkan model harian. Dalam analisis lengkap, semua 24 jam akan dikembangkan dan juga model harian untuk merekonsiliasi perkiraan. Berikut ini adalah sebagian daftar model . Selain regressor yang signifikan (perhatikan lead dan lag struktur sebenarnya telah dihilangkan) ada indikator yang mencerminkan musiman, pergeseran level, efek harian, perubahan efek harian, dan nilai-nilai tidak biasa yang tidak konsisten dengan sejarah. Statistik model adalah . Alur ramalan untuk 360 hari berikutnya ditampilkan di sini . Grafik Aktual / Fit / Prakiraan dengan rapi merangkum hasilnya.Ketika dihadapkan dengan masalah yang sangat kompleks (seperti ini!) Kita perlu muncul dengan banyak keberanian, pengalaman dan bantuan produktivitas komputer. Cukup beri tahu manajemen Anda bahwa masalahnya dapat dipecahkan tetapi tidak harus dengan menggunakan alat primitif. Saya harap ini memberi Anda dorongan untuk melanjutkan upaya Anda karena komentar Anda sebelumnya sangat profesional, diarahkan untuk pengayaan dan pembelajaran pribadi. Saya ingin menambahkan bahwa orang perlu mengetahui nilai yang diharapkan dari analisis ini dan menggunakannya sebagai pedoman ketika mempertimbangkan perangkat lunak tambahan. Mungkin Anda membutuhkan suara yang lebih keras untuk membantu mengarahkan "direktur" Anda menuju solusi yang layak untuk tugas yang menantang ini.
Setelah meninjau Total Harian dan masing-masing dari 24 Model Per Jam, saya pasti akan merefleksikan bahwa Jumlah Kunjungan mengalami kemunduran serius! Analisis semacam ini oleh calon pembeli akan menyarankan non-pembelian sementara penjual akan bijaksana untuk melipatgandakan upaya mereka untuk menjual bisnis berdasarkan pada proyeksi yang sangat negatif ini.
sumber
Ini tidak lebih dari seikat komentar tetapi akan terlalu panjang untuk format itu. Saya tidak lebih dari seorang amatir deret waktu, tetapi saya punya beberapa saran sederhana.
Anda mungkin berada di bawah pesanan di sini, tetapi saya pikir ini perlu dipertajam dalam hal apa yang Anda harapkan untuk capai dan apa yang paling penting bagi Anda. Sayangnya, meramalkan kunjungan adalah tujuan yang kabur. Misalnya, anggap sudah jam 4 sore dan Anda ingin memperkirakan kunjungan satu jam ke depan. Apakah Anda benar-benar membutuhkan super-model yang menggabungkan perawatan dari seluruh seri sebelumnya? Ini harus datang dari beberapa pertimbangan tujuan praktis dan / atau ilmiah yang nyata, yang dapat ditetapkan oleh atasan Anda atau klien atau mungkin Anda sendiri sebagai peneliti. Saya menduga kemungkinan besar model yang berbeda diperlukan untuk tujuan yang berbeda.
Memisahkan rangkaian per jam tampaknya didorong oleh gagasan untuk mengurangi perhitungan tanpa mempertimbangkan seberapa besar akal yang dihasilkannya. Jadi, implikasinya adalah bahwa Anda tidak (tidak akan) menggunakan informasi dari hari ini sebelumnya dalam memprediksi apa yang terjadi pada jam 4 sore, hanya semua pengamatan jam 4 sore sebelumnya? Menurut saya itu perlu banyak dibicarakan.
Anda jelas seorang pembelajar dalam deret waktu (dan saya menempatkan diri pada posisi yang setara) tetapi tidak ada pelajar yang harus memulai dengan masalah sebesar ini. Betulkah! Anda memiliki banyak data, Anda memiliki periodik pada beberapa skala, Anda memiliki penyimpangan jam buka dan liburan, Anda memiliki variabel eksogen: Anda telah memilih masalah yang sangat sulit. (Bagaimana dengan tren juga?) Mudah untuk mengatakannya, tetapi sejauh ini sudah melewati Anda: Anda mungkin harus mengerjakan versi masalah yang sangat sederhana terlebih dahulu dan merasakan bagaimana menyesuaikan model yang lebih sederhana. Melempar semuanya ke dalam model rumit yang besar jelas tidak berfungsi dengan baik, dan sesuatu yang secara radikal lebih sederhana diperlukan, atau kesadaran bahwa proyek itu mungkin terlalu ambisius.
sumber