2015-10-27 101 views
0

我想对日常交易数据做ATM预测。ATM每日现金预测

我有数据2013年9月设定为2014年2月,我想要验证它为2014年三月

所以对于这方面,我使用的预测包已在R和拟合模型ARIMA使用ARIMA()函数。 我有trans_date,transaction_amount,weekdays和holiday_flag的数据。

我装ARIMA模型与回归变量平日但最终输出我的预测值不符合3月份的实际值。所以请帮助我。我与你分享我在预测中使用的数据集。在表一中有列车数据,在表二中有验证数据。

在这个环节R代码里面有我用它... https://docs.google.com/document/d/1mPo0D-iTK5d_b0W5gG2lBmMA95__eG825fFo2yrSyIg/edit

在这个链接数据是存在的......在这个

https://docs.google.com/spreadsheets/d/1-LJhxzfpMkeCwLf129D9-q5ZkGhISqrDQWCw30UE9TE/pubhtml

帮助真的非常感激...

+0

您在数据集中有几天没有数值,例如10月30日 - 11月2日。银行恐慌? :) http://apps.axibase.com/chartlab/0baf81ba –

+0

是的,我是无视日期,因为有零交易金额 – Shahnawaz

+0

如何计算那些预测值 – Shahnawaz

回答

0

如果您使用季节性华宇航线,则不需要使用平日或周末假人。您还需要将零值作为NA来处理,否则它将成为不重复的更大的值。问题是如果你使用固定或非固定模型。现金支出有时最好视为日志,所以我为Box-Cox转换放置了一个lambda = 0。我附上了静止和非静止模型的代码。

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) 
+0

感谢Acoustesh您的回应,但从这种方法仍然季节性不很好捕获。如果我们验证预测值与实际数据不匹配,则这些值之间存在差异。 – Shahnawaz

0

数据每天都收集,这表明频率为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) 

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)模型是“最好的”。现在让我们预测三月份的价值并检查它们。

# 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

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