我想在每日交易数据上预测ATM。
我有2013年至2014年2月的数据集,我想在2014年3月对其进行验证。
所以为此我在R中使用了预测包并使用ARIMA()函数拟合模型ARIMA。 我有trans_date,transaction_amount,weekdays和holiday_flag的数据。
我使用回归变量工作日拟合了ARIMA模型,但在最终输出中,我的预测值与3月份的实际值不匹配。所以请帮帮我。我与你分享我在预测中使用的数据集。在Sheet 1中有列车数据,在表2中有验证数据。
在这个链接R代码是我用过的... https://docs.google.com/document/d/1mPo0D-iTK5d_b0W5gG2lBmMA95__eG825fFo2yrSyIg/edit
在此链接数据集中有...
https://docs.google.com/spreadsheets/d/1-LJhxzfpMkeCwLf129D9-q5ZkGhISqrDQWCw30UE9TE/pubhtml
这方面的帮助非常感谢....
答案 0 :(得分:0)
如果您使用季节性Arima,则无需使用工作日或周末假人。您还需要将零值视为NA,否则它将是非重复性的。问题是你是使用固定或非固定模型。现金支出有时最好被视为日志,所以我将一个lambda = 0用于Box-Cox转换。我附上了固定和非固定模型的代码。
library(forecast)
#I put an NA in 9/1/2014
amount <- ts(cash$Amount,start = 1, frequency = 7)
amount <- na.interp(amount, lambda = 0)
fitar <- auto.arima(amount, xreg = cash$Holydays, lambda = 0 , stepwise = FALSE)
fcstar <- forecast(fitar, h=30, xreg = rep(0,30))
plot(fcstar)
fitar1 <- auto.arima(amount, D=1, xreg = cash$Holydays, lambda = 0 , stepwise = FALSE)
fcstar1 <- forecast(fitar1, h=30, xreg = rep(0,30))
plot(fcstar1)
答案 1 :(得分:0)
每天收集数据,这表示频率为365.但是,您有什么证据可以用于&#34;季节性&#34;在数据?我在绘制它们时没有看到任何东西。
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)模型是最好的&#34;。现在让我们预测March值并检查它们。
# 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")
所以,确实你有一个非常糟糕的预测模型,基本上恢复到平均值。数据中没有季节性,因此您不应期望模型中的任何内容。