主な編集:Dave&Nickの対応に感謝します。良い知らせは、ループが機能するようになったことです(原則として、バッチ予測に関するHydnman教授の投稿から借用しました)。未解決のクエリを統合するには:
a)auto.arimaの最大反復回数を増やすにはどうすればよいですか。外生変数が多数あるため、auto.arimaは最終モデルに収束する前に最大反復回数に達しているようです。これを誤解している場合は訂正してください。
b)Nickからの1つの回答は、時間間隔の私の予測はそれらの時間間隔のみから導き出され、その日の早い段階での発生に影響されないことを強調しています。このデータを処理することから、本能は、これがしばしば重大な問題を引き起こすべきではないことを教えてくれますが、これをどのように処理するかについての提案を受け入れます。
c)Daveは、予測変数を取り巻くリードタイムとラグタイムを特定するには、より高度なアプローチが必要であることを指摘しました。Rのこれに対するプログラムによるアプローチの経験はありますか?もちろん制限はあると思いますが、できる限りこのプロジェクトを進めたいと思っています。これが他の人にも役立つことは間違いありません。
d)新しいクエリですが、当面のタスクに完全に関連しています-注文を選択するときにauto.arimaはリグレッサを考慮しますか?
来店を予測しようとしています。移動する休日、うるう年、散発的なイベント(本質的には外れ値)を説明する機能が必要です。これに基づいて、私はARIMAXが私の最善の策であると収集し、外因性変数を使用して、複数の季節性と前述の要因を試してモデル化します。
データは1時間ごとに24時間記録されます。これは私のデータにゼロの量があるため、特に訪問数が非常に少ない1日の時間帯に問題があることが判明しています。また、営業時間は比較的不安定です。
また、3年以上の履歴データを持つ1つの完全な時系列として予測する場合、計算時間は膨大です。毎日の時間を別々の時系列として計算することで、それがより速くなると考えました。そして、忙しい時間帯でこれをテストすると、より高い精度が得られるようですが、早朝/後期の時間で問題になることが判明しましたt常に訪問を受ける。auto.arimaを使用するとプロセスにメリットがあると思いますが、最大反復回数に達する前にモデルに収束できないようです(そのため、手動での適合とmaxit句を使用しています)。
訪問数= 0の場合の外生変数を作成して、「欠落」データを処理しようとしました。繰り返しますが、これは、訪問がない唯一の時間である1日の店舗が閉まっているときだけ、忙しい1日の時間帯に最適です。これらの例では、外生変数は前向きに予測するためにこれを正常に処理するようであり、以前に閉じられた日の影響を含みません。ただし、店が開いているが、常に訪問を受けるとは限らない静かな時間を予測することに関して、この原則を使用する方法がわかりません。
Rでのバッチ予測についてのHyndman教授の投稿を利用して、24シリーズを予測するループを設定しようとしていますが、午後1時以降は予測したくなく、その理由を理解できません。「optim(init [mask]、armafn、method = optim.method、hessian = TRUE、:non-finite finite-difference value [1]のエラー」というエラーが表示されますが、すべての系列の長さが等しく、基本的に同じマトリックスですが、なぜこれが起こっているのか理解できません。これは、マトリックスがフルランクではないことを意味しますか?このアプローチでこれを回避するにはどうすればよいですか?
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()
私がこれについて進んでいる方法についての建設的な批判と、このスクリプトを機能させるための支援があれば、十分に感謝します。他にも利用可能なソフトウェアがあることは承知していますが、ここではRやSPSSの使用に厳密に制限しています...
また、私はこれらのフォーラムに非常に慣れていない-私は可能な限り完全な説明を提供し、私が行った以前の研究を実証し、再現可能な例を提供することを試みた。これで十分だと思いますが、投稿を改善するために他に提供できることがあれば、お知らせください。
編集:ニックは、毎日の合計を最初に使用するよう提案しました。私はこれをテストしましたが、外生変数は毎日、毎週、毎年の季節性を捉える予測を生成することを付け加えておきます。これは、別のシリーズとして各時間を予測することを考えた他の理由の1つですが、ニックも述べたように、任意の日の午後4時の私の予測は、その日の前の時間の影響を受けません。
編集:09/08/13、ループの問題は、私がテストに使用した元の注文に関係しています。私はもっと早くこれを見つけたはずであり、auto.arimaがこのデータを処理することをより緊急にすべきです-上記のa)およびd)のポイントを参照してください。