दैनिक डेटा के साथ Auto.arima: मौसमी / आवधिकता पर कब्जा कैसे करें?


21

मैं एक ARIMA मॉडल को दैनिक समय श्रृंखला में फिट कर रहा हूं। डेटा को दैनिक रूप से 02-01-2010 से 30-07-2011 तक एकत्र किया जाता है और अखबार की बिक्री के बारे में होता है। चूंकि बिक्री में एक साप्ताहिक पैटर्न पाया जा सकता है (बिकने वाली प्रतियों की दैनिक औसत मात्रा आमतौर पर सोमवार से शुक्रवार तक समान होती है, फिर शनिवार और रविवार को बढ़ जाती है), मैं इस "मौसमी" को पकड़ने की कोशिश कर रहा हूं। बिक्री डेटा "डेटा" को देखते हुए, मैं निम्नानुसार समय श्रृंखला बनाता हूं:

salests<-ts(data,start=c(2010,1),frequency=365)

और फिर मैं AIC कसौटी के माध्यम से सर्वश्रेष्ठ ARIMA मॉडल का चयन करने के लिए auto.arima (।) फ़ंक्शन का उपयोग करता हूं। परिणाम हमेशा एक गैर-मौसमी ARIMA मॉडल होता है, लेकिन अगर मैं उदाहरण के रूप में निम्नलिखित सिंटैक्स के साथ कुछ SARIMAs मॉडल की कोशिश करता हूं:

sarima1<-arima(salests, order = c(2,1,2), seasonal = list(order = c(1, 0, 1), period = 7))

मैं बेहतर परिणाम प्राप्त कर सकता हूं। क्या ts कमांड / arima विनिर्देशन में कुछ गलत है? साप्ताहिक पैटर्न बहुत मजबूत है इसलिए मुझे इसे पकड़ने में इतनी कठिनाइयों की उम्मीद नहीं होगी। कोई मदद बहुत उपयोगी होगी। धन्यवाद, गूलिया डेपिएरी

अद्यतन करें:

मैंने पहले ही कुछ तर्क बदल दिए हैं। अधिक सटीक रूप से, प्रक्रिया ARIMA (4,1,3) को सबसे अच्छे मॉडल के रूप में चुनती है जब मैं सेट करता हूं D=7, लेकिन एआईसी और अन्य फिट इंडेक्स और पूर्वानुमान के साथ अच्छे होते हैं) बिल्कुल भी सुधार नहीं करते हैं। मुझे लगता है कि मौसमी और आवधिकता के बीच भ्रम के कारण कुछ गलतियाँ हैं ..?!

Auto.arima कॉल का उपयोग और आउटपुट प्राप्त:

modArima<-auto.arima(salests,D=7,max.P = 5, max.Q = 5)



 ARIMA(2,1,2) with drift         : 1e+20
 ARIMA(0,1,0) with drift         : 5265.543
 ARIMA(1,1,0) with drift         : 5182.772
 ARIMA(0,1,1) with drift         : 1e+20
 ARIMA(2,1,0) with drift         : 5137.279
 ARIMA(2,1,1) with drift         : 1e+20
 ARIMA(3,1,1) with drift         : 1e+20
 ARIMA(2,1,0)                    : 5135.382
 ARIMA(1,1,0)                    : 5180.817
 ARIMA(3,1,0)                    : 5117.714
 ARIMA(3,1,1)                    : 1e+20
 ARIMA(4,1,1)                    : 5045.236
 ARIMA(4,1,1) with drift         : 5040.53
 ARIMA(5,1,1) with drift         : 1e+20
 ARIMA(4,1,0) with drift         : 5112.614
 ARIMA(4,1,2) with drift         : 4953.417
 ARIMA(5,1,3) with drift         : 1e+20
 ARIMA(4,1,2)                    : 4960.516
 ARIMA(3,1,2) with drift         : 1e+20
 ARIMA(5,1,2) with drift         : 1e+20
 ARIMA(4,1,3) with drift         : 4868.669
 ARIMA(5,1,4) with drift         : 1e+20
 ARIMA(4,1,3)                    : 4870.92
 ARIMA(3,1,3) with drift         : 1e+20
 ARIMA(4,1,4) with drift         : 4874.095

 Best model: ARIMA(4,1,3) with drift        

इसलिए मुझे लगता है कि arima फंक्शन को इस तरह इस्तेमाल किया जाना चाहिए:

bestOrder <- cbind(modArima$arma[1],modArima$arma[5],modArima$arma[2])
sarima1<-arima(salests, order = c(4,1,3))

कोई मौसमी घटक मापदंडों और अवधि विनिर्देशों के साथ। डेटा और खोजपूर्ण विश्लेषण बताते हैं कि अगस्त 2010 के एकमात्र अपवाद (जब बिक्री में लगातार वृद्धि दर्ज की गई है) के साथ एक ही साप्ताहिक पैटर्न प्रत्येक सप्ताह के लिए अनुमानित रूप से माना जा सकता है। दुर्भाग्य से मेरे पास मॉडलिंग के समय में कोई विशेषज्ञता नहीं है, वास्तव में मैं इस दृष्टिकोण की कोशिश कर रहा हूं ताकि अन्य पैरामीट्रिक ई गैर-पैरामीट्रिक मॉडल के लिए एक वैकल्पिक समाधान मिल सके, जो मैंने इन समस्याग्रस्त डेटा के लिए फिट करने की कोशिश की है। मेरे पास कई निर्भर संख्यात्मक चर भी हैं, लेकिन उन्होंने प्रतिक्रिया चर की व्याख्या करने में कम शक्ति दिखाई है: निस्संदेह, मॉडल का सबसे कठिन हिस्सा समय घटक है। इसके अलावा, महीने और सप्ताह का प्रतिनिधित्व करने के लिए डमी चर का निर्माण एक मजबूत समाधान नहीं निकला।

जवाबों:


28

यदि साप्ताहिक मौसम है, तो मौसमी अवधि को 7 पर सेट करें।

salests <- ts(data,start=2010,frequency=7) 
modArima <- auto.arima(salests)

ध्यान दें कि मौसमी भिन्नता का चयन auto.arima()बहुत हाल तक बहुत अच्छा नहीं था । यदि आप forecastपैकेज के v2.xx का उपयोग कर रहे हैं , तो मौसमी भिन्नता को मजबूर D=1करने के auto.arima()लिए कॉल में सेट करें । यदि आप forecastपैकेज के v3.xx का उपयोग कर रहे हैं , तो स्वचालित रूप से Dबेहतर काम करता है (CH परीक्षण के बजाय OCSB परीक्षण का उपयोग करके)।

विभिन्न स्तरों के विभिन्न स्तरों वाले मॉडलों के लिए AIC की तुलना करने का प्रयास न करें। वे सीधे तुलनीय नहीं हैं। आप केवल भिन्नता के समान आदेश वाले मॉडल के साथ एआईसी की तुलना मज़बूती से कर सकते हैं।

आपको कॉल करने के बाद मॉडल को फिर से फिट करने की आवश्यकता नहीं है auto.arima()। यह एक Arima ऑब्जेक्ट लौटाएगा, जैसे कि आपने arima()चयनित मॉडल ऑर्डर के साथ कॉल किया था ।


मेरी मूर्खतापूर्ण गलती को इंगित करने के लिए धन्यवाद। मैं अपना जवाब वापस लूंगा।
mpiktas

1
आपके बहुत उपयोगी सुझावों के लिए आपको बहुत धन्यवाद। मैं पूर्वानुमान पैकेज के 2.19 संस्करण का उपयोग कर रहा हूं, इसलिए मैंने आपकी सलाह का पालन किया और डी पैरामीटर को ऑटो.रिमा () कॉल में 1 के बराबर सेट किया। अब सलास्ट सीरीज़ के लिए सबसे अच्छा मॉडल एआरआईएमए (1,0,0) है जिसमें गैर-शून्य का मतलब है। क्या मुझे लौटे सर्वश्रेष्ठ मॉडल के लिए सीज़न पार्ट के विनिर्देश की अपेक्षा करनी चाहिए, मेरा मतलब है कि पी, डी, क्यू या कम से कम डी के लिए मान है?
Giulia

2
जब तक आपके डेटा में 1 के अलावा एक आवृत्ति होती है, मौसमी ARIMA मॉडल पर विचार किया जाएगा। यदि एक गैर-मौसमी मॉडल वापस किया जा रहा है, तो या तो मौसमी बहुत कमजोर है या डेटा आवृत्ति के साथ एक ts ऑब्जेक्ट में नहीं हैं> 1.
रोब Hyndman

15

दैनिक डेटा के लिए मौसमी ARIMA के साथ समस्या यह है कि "मौसमी घटक" केवल सप्ताहांत पर काम कर सकता है या शायद केवल सप्ताह के दिनों में इस प्रकार कुल मिलाकर एक गैर-महत्वपूर्ण "मौसमी घटक" है। अब आपको जो करना है, वह सप्ताह के दिनों का प्रतिनिधित्व करने वाले 6 डमी के साथ अपने डेटा सेट को बढ़ाना है और शायद वार्षिक प्रभावों का प्रतिनिधित्व करने के लिए मासिक संकेतक हैं। अब छुट्टियों जैसी घटनाओं को शामिल करने पर विचार करें और इन ज्ञात चर के आसपास किसी भी तरह के लीड, थिंकिंग या लैग प्रभाव को शामिल करें। डेटा में कोई असामान्य मान (दालों) या स्तर की बदलाव या स्थानीय समय के रुझान नहीं हो सकते हैं। इसके अलावा दिन-प्रति-सप्ताह के प्रभाव समय के साथ बदल सकते हैं जैसे कि पहले 20 सप्ताह के लिए कोई शनिवार प्रभाव नहीं था लेकिन पिछले 50 हफ्तों के लिए शनिवार का प्रभाव था।


उस मामले में (आयरिशस्टैट), ARIMA के बजाय मिश्रित मॉडलिंग तकनीक नहीं होगी। बॉक्स Jlung टेस्ट को छोड़कर, ARIMA में लैग्स कहीं भी नहीं लिया जाता है। Auto.arima (हाल ही में) डेटा की स्केलिंग, मौसमी उतार-चढ़ाव सहित सब कुछ ठीक करता है (यही कारण है कि मुझे सबसे अच्छा पी, डी, क्यू पैरामीटर मिलता है)।
वैकेनिल

इसे एक ट्रांसफ़र फ़ंक्शन कहा जाता है और यह आडम्बर 42 के साथ शुरू होने वाले ऑटोबॉक्स . com/pdfs/capable.pd को देखने के लिए एक सहक्रियात्मक दृष्टिकोण को दर्शाता है । Auto.arima साधारण मामलों के लिए काम कर सकता है लेकिन मेरी राय में यह सामान्य नहीं है। यदि आपके पास कोई डेटा सेट है, तो एक नया प्रश्न बनाएं और उसे शामिल करें।
आयरिशस्टैट

@IrishStat क्या आपका मतलब हस्तक्षेप के साथ ARIMA था? सप्ताह का दिन डमी चर रहा है? और छुट्टियों के लिए समान डमी चर?
उत्साही

हां .. यह दैनिक डेटा के लिए मेरा दृष्टिकोण होगा
आइरिशस्टैट

0

मेरे ts (3years के साथ दैनिक डेटा) में मौसम के क्रम को निर्धारित करने के लिए, मैंने इस कोड का इस्तेमाल किया है Matlab में:

रों = 0; न्यूनतम = 1e +07; एन = लंबाई (एक्स); i = 1 के लिए: 400 diff = x (i + 1: n) -x (1: ni); रों (i) = राशि (पेट (अंतर)); अगर (एस)

यह मुझे 365 देता है जो तार्किक है।


1
साइट पर आपका स्वागत है। यह मेरे लिए स्पष्ट नहीं है कि यह मूल प्रश्न का उत्तर कैसे देता है और यह मेरे लिए स्पष्ट नहीं है कि आपने जो कोड पोस्ट किया है वह इसे देखने से ही है। हो सकता है कि आप उत्तर को थोड़ा बढ़ा सकें?
einar

1
आपका समाधान सप्ताह के निश्चित दिन, महीने के प्रभाव, सप्ताह के महीने के प्रभाव, सप्ताह के महीने के प्रभाव, दिन के प्रभाव, छुट्टियों के नेतृत्व और अंतराल प्रभावों के साथ कैसे निपटता है , सोमवार के बाद शुक्रवार की छुट्टी, सोमवार की छुट्टी से पहले शुक्रवार, मासिक प्रभाव, साप्ताहिक प्रभाव, समय के साथ दिन-ब-सप्ताह के प्रभाव में परिवर्तन, दालें, स्तर / कदम बदलाव?
आयरिशस्टैट

मतलाब कोड s = 0; min = 1e + 07; n = लंबाई (x); i = 1 के लिए: 400 diff = x (i + 1: n) -x (1: ni); रों (i) = राशि (पेट (अंतर)); if (s (i) <min) min = s (i); मैं अंत अंत
nkabouche
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.