ATM每日现金预测

时间:2015-10-27 04:23:24

标签: time-series

我想在每日交易数据上预测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

这方面的帮助非常感谢....

2 个答案:

答案 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)

Time series plot

另一个问题是你的值都大于零,所以也许对数变换更合适(或者使用非高斯时间序列模型)。无论如何,暂时忽略它,让我们适合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")

data and fits

所以,确实你有一个非常糟糕的预测模型,基本上恢复到平均值。数据中没有季节性,因此您不应期望模型中的任何内容。