प्रमुख संपादन: मैं डेव और निक को उनकी प्रतिक्रियाओं के लिए अब तक बड़ा धन्यवाद कहना चाहूंगा। अच्छी खबर यह है कि मुझे काम करने के लिए लूप मिला (सिद्धांत ने प्रो। हाईडमैन के बैच पूर्वानुमान पर पोस्ट से उधार लिया है)। बकाया प्रश्नों को समेकित करने के लिए:
a) मैं auto.arima के लिए अधिकतम पुनरावृत्तियों को कैसे बढ़ाऊं - ऐसा लगता है कि बड़ी संख्या में बहिर्जात चर के साथ auto.arima अंतिम मॉडल पर परिवर्तित होने से पहले अधिकतम पुनरावृत्तियों को मार रहा है। कृपया मुझे सही करें अगर मैं इसे गलत समझ रहा हूं।
बी) निक से एक उत्तर, प्रकाश डाला गया है कि प्रति घंटे के अंतराल के लिए मेरी भविष्यवाणियां केवल उन प्रति घंटे के अंतराल से प्राप्त होती हैं और दिन में होने वाली घटनाओं से प्रभावित नहीं होती हैं। मेरी वृत्ति, इस डेटा से निपटने से, मुझे बताएं कि यह अक्सर एक महत्वपूर्ण मुद्दा नहीं होना चाहिए, लेकिन मैं सुझाव के लिए खुला हूं कि इससे कैसे निपटना है।
ग) डेव ने कहा है कि मुझे अपने भविष्यवक्ता चर के आसपास लीड / लैग समय की पहचान करने के लिए बहुत अधिक परिष्कृत दृष्टिकोण की आवश्यकता है। किसी को भी आर में इस के लिए एक प्रोग्रामेटिक दृष्टिकोण के साथ कोई अनुभव नहीं है? मैं निश्चित रूप से उम्मीद करता हूं कि सीमाएं होंगी, लेकिन मैं जहां तक हो सके इस परियोजना को लेना चाहूंगा, और मुझे संदेह नहीं है कि यहां दूसरों के लिए भी इसका उपयोग करना चाहिए।
घ) नई क्वेरी लेकिन पूरी तरह से हाथ में कार्य से संबंधित है - क्या ऑटो.रिमा आदेशों का चयन करते समय रजिस्टरों पर विचार करता है?
मैं एक स्टोर की यात्राओं का पूर्वानुमान लगाने की कोशिश कर रहा हूं। मुझे चलती छुट्टियों, लीप वर्ष और छिटपुट घटनाओं (अनिवार्य रूप से आउटलेर) के लिए खाते की क्षमता की आवश्यकता होती है; इस आधार पर मैं इकट्ठा करता हूं कि ARIMAX मेरा सबसे अच्छा दांव है, जिसमें एक्सोजेन्स चर का उपयोग करके कई मौसमी और साथ ही उपरोक्त कारकों को मॉडल किया गया है।
डेटा 24 घंटे प्रति घंटे के अंतराल पर दर्ज किया जाता है। यह मेरे डेटा में शून्य की मात्रा के कारण समस्याग्रस्त साबित हो रहा है, विशेष रूप से दिन के समय जो कि बहुत कम मात्रा में विज़िट देखते हैं, कभी-कभी कोई भी नहीं जब दुकान अभी-अभी खुली है। इसके अलावा, शुरुआती घंटे अपेक्षाकृत अनियमित हैं।
साथ ही, ऐतिहासिक डेटा के 3 साल + के साथ एक पूर्ण समय श्रृंखला के रूप में पूर्वानुमान करते समय कम्प्यूटेशनल समय बहुत बड़ा है। मुझे लगा कि यह दिन के प्रत्येक घंटे को अलग-अलग समय श्रृंखला के रूप में दर्ज करके इसे और तेज़ बना देगा, और दिन के व्यस्त समय पर इसका परीक्षण करने पर उच्च सटीकता प्राप्त होती है, लेकिन फिर से शुरुआती / बाद के घंटों के साथ एक समस्या साबित होती है कि डॉन ' t लगातार विज़िट प्राप्त करते हैं। मेरा मानना है कि इस प्रक्रिया से auto.arima का उपयोग करने से लाभ होगा, लेकिन यह पुनरावृत्तियों की अधिकतम संख्या तक पहुँचने से पहले एक मॉडल पर अभिसरण करने में सक्षम प्रतीत नहीं होता है (इसलिए एक मैनुअल फिट और अधिकतम खंड का उपयोग करके)।
मैंने विज़िट करने के लिए एक बहिर्मुखी चर बनाकर 'लापता' डेटा को संभालने की कोशिश की है। 0. फिर से, यह दिन के व्यस्त समय के लिए बहुत अच्छा काम करता है, जब केवल विज़िट ही नहीं होती हैं जब स्टोर दिन के लिए बंद होता है; इन उदाहरणों में, बहिर्जात चर सफलतापूर्वक आगे पूर्वानुमान लगाने के लिए इसे संभालने के लिए लगता है और पहले बंद होने वाले दिन के प्रभाव को शामिल नहीं करता है। हालाँकि, मुझे यकीन नहीं है कि इस सिद्धांत का उपयोग कैसे करना है जहां स्टोर खुला है, लेकिन हमेशा यात्रा नहीं मिलती है।
प्रोफेसर हंडमैन द्वारा आर में बैच के पूर्वानुमान के बारे में पोस्ट की मदद से, मैं 24 श्रृंखलाओं के पूर्वानुमान के लिए एक लूप स्थापित करने का प्रयास कर रहा हूं, लेकिन ऐसा नहीं लगता है कि मैं दोपहर 1 बजे के लिए पूर्वानुमान लगाना चाहता हूं और समझ नहीं पा रहा हूं। मुझे "त्रुटि में त्रुटि (init [मास्क]], armafn, विधि = optim.method, hessian = TRUE: गैर-परिमित परिमित-अंतर मूल्य [1]" मिलता है, लेकिन जैसा कि सभी श्रृंखलाएं समान लंबाई की हैं और मैं अनिवार्य रूप से उपयोग कर रहा हूं वही मैट्रिक्स, मुझे समझ में नहीं आता कि ऐसा क्यों हो रहा है। इसका मतलब है कि मैट्रिक्स पूरी रैंक का नहीं है, नहीं? मैं इस दृष्टिकोण में इससे कैसे बच सकता हूं?
https://www.dropbox.com/s/26ov3xp4ayig4ws/Data.zip
date()
#Read input files
INPUT <- read.csv("Input.csv")
XREGFDATA <- read.csv("xreg.csv")
#Subset time series data from the input file
TS <- ts(INPUT[,2:25], f=7)
fcast <- matrix(0, nrow=nrow(XREGFDATA),ncol=ncol(TS))
#Create matrix of exogenous variables for forecasting.
xregf <- (cbind(Weekday=model.matrix(~as.factor(XREGFDATA$WEEKDAY)),
Month=model.matrix(~as.factor(XREGFDATA$MONTH)),
Week=model.matrix(~as.factor(XREGFDATA$WEEK)),
Nodata=XREGFDATA$NoData,
NewYearsDay=XREGFDATA$NewYearsDay,
GoodFriday=XREGFDATA$GoodFriday,
EasterWeekend=XREGFDATA$EasterWeekend,
EasterMonday=XREGFDATA$EasterMonday,
MayDay=XREGFDATA$MayDay,
SpringBH=XREGFDATA$SpringBH,
SummerBH=XREGFDATA$SummerBH,
Christmas=XREGFDATA$Christmas,
BoxingDay=XREGFDATA$BoxingDay))
#Remove intercepts
xregf <- xregf[,c(-1,-8,-20)]
NoFcast <- 0
for(i in 1:24) {
if(max(INPUT[,i+1])>0) {
#The exogenous variables used to fit are the same for all series except for the
#'Nodata' variable. This is to handle missing data for each series
xreg <- (cbind(Weekday=model.matrix(~as.factor(INPUT$WEEKDAY)),
Month=model.matrix(~as.factor(INPUT$MONTH)),
Week=model.matrix(~as.factor(INPUT$WEEK)),
Nodata=ifelse(INPUT[,i+1] < 1,1,0),
NewYearsDay=INPUT$NewYearsDay,
GoodFriday=INPUT$GoodFriday,
EasterWeekend=INPUT$EasterWeekend,
EasterMonday=INPUT$EasterMonday,
MayDay=INPUT$MayDay,
SpringBH=INPUT$SpringBH,
SummerBH=INPUT$SummerBH,
Christmas=INPUT$Christmas,
BoxingDay=INPUT$BoxingDay))
xreg <- xreg[,c(-1,-8,-20)]
ARIMAXfit <- Arima(TS[,i],
order=c(0,1,8), seasonal=c(0,1,0),
include.drift=TRUE,
xreg=xreg,
lambda=BoxCox.lambda(TS[,i])
,optim.control = list(maxit=1500), method="ML")
fcast[,i] <- forecast(ARIMAXfit, xreg=xregf)$mean
} else{
NoFcast <- NoFcast +1
}
}
#Save the forecasts to .csv
write(t(fcast),file="fcasts.csv",sep=",",ncol=ncol(fcast))
date()
मैं इस बारे में रचनात्मक आलोचना की पूरी तरह से सराहना करूंगा कि मैं इस बारे में और इस स्क्रिप्ट को काम करने के लिए कोई मदद कर रहा हूं। मुझे पता है कि अन्य सॉफ्टवेयर उपलब्ध है, लेकिन मैं यहां R और / या SPSS के उपयोग के लिए सख्ती से सीमित हूं ...
इसके अलावा, मैं इन मंचों के लिए बहुत नया हूं - मैंने यथासंभव पूर्ण स्पष्टीकरण देने की कोशिश की है, मैंने जो पूर्व शोध किया है उसका प्रदर्शन करता हूं और एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण भी प्रदान करता हूं; मुझे उम्मीद है कि यह पर्याप्त है लेकिन कृपया मुझे बताएं कि क्या कुछ और है जो मैं अपनी पोस्ट पर सुधार करने के लिए प्रदान कर सकता हूं।
संपादित करें: निक ने सुझाव दिया कि मैं पहले दैनिक योगों का उपयोग करता हूं। मुझे यह जोड़ना चाहिए कि मैंने इसका परीक्षण किया है और बहिर्जात चर दैनिक, साप्ताहिक और वार्षिक मौसमी पर कब्जा करने वाले पूर्वानुमानों का उत्पादन करते हैं। यह एक अन्य कारण था जिसके बारे में मैंने सोचा था कि प्रत्येक घंटे को एक अलग श्रृंखला के रूप में पूर्वानुमानित किया जाता है, जैसा कि निक ने भी उल्लेख किया है, किसी भी दिन 4pm के लिए मेरा पूर्वानुमान दिन में पिछले घंटों से प्रभावित नहीं होगा।
संपादित करें: 09/08/13, लूप के साथ समस्या बस उन मूल आदेशों के साथ थी जो मैंने परीक्षण के लिए उपयोग किए थे। मुझे यह जल्द ही स्पॉट करना चाहिए था और इस डेटा के साथ काम करने के लिए auto.arima पर प्रयास करने के लिए अधिक आग्रह करता हूं - ऊपर बिंदु a) और d) देखें।