數據每天都收集,這表明頻率爲365。但是,您對數據中的「季節性」有什麼證據?當我繪製它們時我沒有看到任何東西。
library(forecast)
# data through Feb
datFit <- read.csv("atm_fit.csv")
# convert 0 to NA
datFit$tot_amount[datFit$tot_amount==0] <- NA
nFit <- length(datFit$tot_amount)
beginDay <- (as.Date("2013-09-01") - as.Date("2013-01-01"))
t1 <- ts(datFit$tot_amount, start=c(2013,beginDay), freq=365)
plot.ts(t1)
的另一個問題是,你的價值都大於零,因此,或許對數變換會更合適(或使用非高斯時間序列模型)。無論如何,現在忽略這個,我們來適應一個ARIMA模型。
tsMod <- auto.arima(t1, xreg=datFit$Holiday_flag)
summary(tsMod)
Series: tt
ARIMA(3,0,0) with non-zero mean
Coefficients:
ar1 ar2 ar3 intercept datFit$Holiday_flag
0.2669 0.1611 0.1102 162648.08 -11568.59
s.e. 0.0757 0.0787 0.0772 11232.19 23829.38
sigma^2 estimated as 4.711e+09: log likelihood=-2159.72
AIC=4331.44 AICc=4331.95 BIC=4350.36
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -0.0005199295 0.5135824 0.3887894 -0.2049583 3.350222 0.8049315 0.005689687
因此,它看起來像一個ARMAX(3,0,0)模型是「最好的」。現在讓我們預測三月份的價值並檢查它們。
# get March data
datFore <- read.csv("atm_fore.csv")
nFore <- length(datFore$tot_amount)
# forecast March values
ff <- forecast(tsMod, nFore, xreg=rep(0,nFore))
# plot all data together
tf <- ts(c(datFit$tot_amount,datFore$tot_amount), start=c(2013,beginDay), freq=365)
plot.ts(tf)
# fitted values
points(ff$fitted, pch=16, col="blue")
# forecasts
points(ff$mean, pch=16, col="red")
所以,你確實有一個基本回復到均值相當糟糕預測模型。數據中沒有季節性因素,因此您不應該期望模型中的任何內容。
您在數據集中有幾天沒有數值,例如10月30日 - 11月2日。銀行恐慌? :) http://apps.axibase.com/chartlab/0baf81ba –
是的,我是無視日期,因爲有零交易金額 – Shahnawaz
如何計算那些預測值 – Shahnawaz