2015-10-27 26 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

所以,你確實有一個基本回復到均值相當糟糕預測模型。數據中沒有季節性因素,因此您不應該期望模型中的任何內容。