तंत्रिका नेटवर्क, ऑटो.रिमा और ईटीएस के साथ आर-सीरीज़ का पूर्वानुमान


10

मैंने समय श्रृंखला का पूर्वानुमान करने के लिए तंत्रिका नेटवर्क का उपयोग करने के बारे में थोड़ा सुना है।

मैं कैसे तुलना कर सकता हूं, मेरी समय-श्रृंखला (दैनिक खुदरा डेटा) के पूर्वानुमान के लिए कौन सी विधि बेहतर है: ऑटो.रिमा (एक्स), ईटीएस (एक्स) या नेनेटार (एक्स)।

मैं एआईसी या बीआईसी द्वारा ऑटो के साथ ऑटो की तुलना कर सकता हूं। लेकिन मैं उनकी तुलना तंत्रिका नेटवर्क से कैसे कर सकता हूं?

उदाहरण के लिए:

   > dput(x)
 c(1774, 1706, 1288, 1276, 2350, 1821, 1712, 1654, 1680, 1451, 
 1275, 2140, 1747, 1749, 1770, 1797, 1485, 1299, 2330, 1822, 1627, 
 1847, 1797, 1452, 1328, 2363, 1998, 1864, 2088, 2084, 594, 884, 
 1968, 1858, 1640, 1823, 1938, 1490, 1312, 2312, 1937, 1617, 1643, 
 1468, 1381, 1276, 2228, 1756, 1465, 1716, 1601, 1340, 1192, 2231, 
 1768, 1623, 1444, 1575, 1375, 1267, 2475, 1630, 1505, 1810, 1601, 
 1123, 1324, 2245, 1844, 1613, 1710, 1546, 1290, 1366, 2427, 1783, 
 1588, 1505, 1398, 1226, 1321, 2299, 1047, 1735, 1633, 1508, 1323, 
 1317, 2323, 1826, 1615, 1750, 1572, 1273, 1365, 2373, 2074, 1809, 
 1889, 1521, 1314, 1512, 2462, 1836, 1750, 1808, 1585, 1387, 1428, 
 2176, 1732, 1752, 1665, 1425, 1028, 1194, 2159, 1840, 1684, 1711, 
 1653, 1360, 1422, 2328, 1798, 1723, 1827, 1499, 1289, 1476, 2219, 
 1824, 1606, 1627, 1459, 1324, 1354, 2150, 1728, 1743, 1697, 1511, 
 1285, 1426, 2076, 1792, 1519, 1478, 1191, 1122, 1241, 2105, 1818, 
 1599, 1663, 1319, 1219, 1452, 2091, 1771, 1710, 2000, 1518, 1479, 
 1586, 1848, 2113, 1648, 1542, 1220, 1299, 1452, 2290, 1944, 1701, 
 1709, 1462, 1312, 1365, 2326, 1971, 1709, 1700, 1687, 1493, 1523, 
 2382, 1938, 1658, 1713, 1525, 1413, 1363, 2349, 1923, 1726, 1862, 
 1686, 1534, 1280, 2233, 1733, 1520, 1537, 1569, 1367, 1129, 2024, 
 1645, 1510, 1469, 1533, 1281, 1212, 2099, 1769, 1684, 1842, 1654, 
 1369, 1353, 2415, 1948, 1841, 1928, 1790, 1547, 1465, 2260, 1895, 
 1700, 1838, 1614, 1528, 1268, 2192, 1705, 1494, 1697, 1588, 1324, 
 1193, 2049, 1672, 1801, 1487, 1319, 1289, 1302, 2316, 1945, 1771, 
 2027, 2053, 1639, 1372, 2198, 1692, 1546, 1809, 1787, 1360, 1182, 
 2157, 1690, 1494, 1731, 1633, 1299, 1291, 2164, 1667, 1535, 1822, 
 1813, 1510, 1396, 2308, 2110, 2128, 2316, 2249, 1789, 1886, 2463, 
 2257, 2212, 2608, 2284, 2034, 1996, 2686, 2459, 2340, 2383, 2507, 
 2304, 2740, 1869, 654, 1068, 1720, 1904, 1666, 1877, 2100, 504, 
 1482, 1686, 1707, 1306, 1417, 2135, 1787, 1675, 1934, 1931, 1456)

Auto.arima का उपयोग करना:

y=auto.arima(x)
plot(forecast(y,h=30))
points(1:length(x),fitted(y),type="l",col="green")

यहां छवि विवरण दर्ज करें

> summary(y)
Series: x 
ARIMA(5,1,5)                    

Coefficients:
         ar1      ar2     ar3      ar4      ar5      ma1     ma2      ma3     ma4      ma5
      0.2560  -1.0056  0.0716  -0.5516  -0.4822  -0.9584  1.2627  -1.0745  0.8545  -0.2819
s.e.  0.1014   0.0778  0.1296   0.0859   0.0844   0.1184  0.1322   0.1289  0.1388   0.0903

sigma^2 estimated as 58026:  log likelihood=-2191.97
AIC=4405.95   AICc=4406.81   BIC=4447.3

Training set error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE
Training set 1.457729 240.5059 173.9242 -2.312207 11.62531 0.6157512

Ets का उपयोग करना:

fit <- ets(x)
plot(forecast(fit,h=30))
points(1:length(x),fitted(fit),type="l",col="red")

यहां छवि विवरण दर्ज करें

 > summary(fit)
 ETS(M,N,N) 

 Call:
  ets(y = x) 

   Smoothing parameters:
     alpha = 0.0449 

   Initial states:
     l = 1689.128 

   sigma:  0.2094

      AIC     AICc      BIC 
 5570.373 5570.411 5577.897 

 Training set error measures:
                    ME     RMSE      MAE      MPE     MAPE      MASE
 Training set 7.842061 359.3611 276.4327 -4.81967 17.98136 0.9786665

इस मामले में auto.arima बेहतर है तो ets।

चलो तंत्रिका नेटवर्क गाने की कोशिश करते हैं:

 library(caret)
 fit <- nnetar(x)
 plot(forecast(fit,h=60))
 points(1:length(x),fitted(fit),type="l",col="green")

यहां छवि विवरण दर्ज करें

ग्राफ से, मैं देख सकता हूं, कि तंत्रिका नेटवर्क मॉडल काफी अच्छी तरह से फिट बैठता है, लेकिन मैं इसे ऑटो.आईआरएम / ईटीएस के साथ कैसे तुलना कर सकता हूं? मैं एआईसी की गणना कैसे कर सकता हूं?

एक और सवाल यह है कि तंत्रिका नेटवर्क के लिए आत्मविश्वास अंतराल को कैसे जोड़ा जाए, अगर यह संभव है, जैसे कि यह स्वत: ऑटोइम / ईटीएस के लिए जोड़ा जाता है?

जवाबों:


14

इन-सैंपल फिट आउट-ऑफ-सैंपल फोरकास्टिंग सटीकता के लिए एक विश्वसनीय मार्गदर्शिका नहीं है। सटीकता माप के पूर्वानुमान में सोने का मानक होल्डआउट नमूने का उपयोग करना है। प्रशिक्षण के नमूने से पिछले 30 दिनों को हटा दें, अपने मॉडल को बाकी डेटा में फिट करें, होल्डआउट नमूने का पूर्वानुमान लगाने के लिए फिट किए गए मॉडल का उपयोग करें और केवल पूर्ण विचलन (एमएडी) या भार का उपयोग करके औसतन प्रतिशत प्रतिशत त्रुटियों की तुलना करें। (wMAPEs)।

यहां R. का उपयोग कर एक उदाहरण है। मैं एम 3 प्रतियोगिता की 2000 वीं श्रृंखला का उपयोग कर रहा हूं, जो पहले से ही प्रशिक्षण श्रृंखला M3[[2000]]$xऔर परीक्षण डेटा में विभाजित है M3[[2000]]$xx। यह मासिक डेटा है। अंतिम दो पंक्तियाँ दो मॉडलों से पूर्वानुमानों के wMAPE को आउटपुट करती हैं, और हम यहाँ देखते हैं कि ARIMA मॉडल (wMAPE 18.6%) स्वचालित रूप से सज्जित ETS मॉडल (32.4%) को बेहतर बनाता है:

library(forecast)
library(Mcomp)

M3[[2000]]

ets.model <- ets(M3[[2000]]$x)
    arima.model <- auto.arima(M3[[2000]]$x)

ets.forecast <- forecast(ets.model,M3[[2000]]$h)$mean
arima.forecast <- forecast(arima.model,M3[[2000]]$h)$mean

sum(abs(ets.forecast-M3[[2000]]$xx))/sum(M3[[2000]]$xx)
sum(abs(arima.forecast-M3[[2000]]$xx))/sum(M3[[2000]]$xx)

इसके अलावा, ऐसा लगता है कि 280-300 सूचकांक के पास असामान्य रूप से उच्च बिक्री है। क्या यह क्रिसमस की बिक्री हो सकती है? यदि आप इन जैसी कैलेंडर घटनाओं के बारे में जानते हैं, तो अपने पूर्वानुमान मॉडल के लिए उन्हें व्याख्यात्मक चर के रूप में खिलाना सबसे अच्छा होगा, जो आपको अगली बार एक बेहतर पूर्वानुमान देगा जो क्रिसमस के आसपास घूमता है। आप ARIMA (X) और NN में आसानी से कर सकते हैं, ETS में इतनी आसानी से नहीं।

अंत में, मैं पूर्वानुमान पर इस पाठ्यपुस्तक की सलाह देता हूं: http://otexts.com/fpp/


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

मैं हर बार सीरी को मैन्युअल रूप से नहीं देख सकता, मुझे एक कार्यक्रम लिखना चाहिए, जो सबसे अच्छा मॉडल
ढूंढेगा

क्या auto.arima फोरकास्टिंग मॉडल में व्याख्यात्मक चर (क्रिसमस के दिन) जोड़ना संभव है? या यह केवल तभी संभव है जब अरिमा के साथ काम किया जाए?
जंगीता

1
आप अपनी श्रृंखला पर एक लूप लिख सकते हैं और यह देख सकते हैं कि कौन सी विधि प्रत्येक श्रृंखला के लिए सर्वश्रेष्ठ वाष्प प्रदान करती है। यदि एक विधि स्पष्ट रूप से दूसरों को बेहतर बनाती है, तो सभी श्रृंखला के लिए उस का उपयोग करें। अन्यथा, प्रति श्रृंखला विभिन्न तरीकों का उपयोग करने के बारे में सोचें। AIC आपकी कई श्रृंखलाओं में मदद नहीं करेगा ! या, और भी बेहतर, दैनिक खुदरा समय श्रृंखला की बड़ी संख्या के पूर्वानुमान के लिए समर्पित सॉफ्टवेयर की तलाश करें जो मूल्य परिवर्तन आदि जैसी चीजों को भी ध्यान में रखते हैं। यह वही है जो मैं जीवनयापन के लिए करता हूँ, मैं ख़ुशी से आपको हमारे सैलपर्स के संपर्क में डालूँगा;; लेकिन मुझे यहाँ आपकी सहायता करने में भी ख़ुशी होगी!
Stephan Kolassa

के लिए auto.arima(), xregपैरामीटर का उपयोग करें । देख?auto.arima
स्टीफन कोलासे

4

ऊपर स्टेपहान का सुझाव अच्छा है। मैं यह जोड़ना चाहूंगा कि AIC का उपयोग निश्चित रूप से मॉडल के भीतर चुनने का एक वैध तरीका है - लेकिन उनमें से नहीं। यानी, आप कर सकते हैं (और चाहिए) एआरएमआई मॉडल (ओं) को चुनने के लिए सूचना मानदंड का उपयोग करें, जो घातीय चौरसाई मॉडल (ओं), आदि, और फिर नमूना भविष्यवाणी (एमएएसई, एमएपीई, आदि) का उपयोग करके अपने शीर्ष उम्मीदवारों की तुलना करें। )।

http://robjhyndman.com/hyndsight/aic/


1

इस वीडियो को Prof Rob https://www.youtube.com/watch?v=1Lh1HlBUf8k देखें

वीडियो में, प्रो रॉब ने सटीकता समारोह और नमूना सटीकता और नमूना सटीकता के बीच के अंतर के बारे में सिखाया।

अर्थात: अपने डेटा का 80-90% कहना, एक मॉडल, पूर्वानुमान को फिट करना। फिर 10% के साथ पूर्वानुमानित डेटा का उपयोग करके सटीकता की जांच करें (क्योंकि हमारे पास आपके 10% डेटा का वास्तविक मूल्य है, हम मॉडल की नमूना सटीकता की जांच कर सकते हैं)

साथ ही otext में ऑनलाइन पाठ्यपुस्तक को देखें

अन्य उल्लिखित की तरह, जब हम मॉडल बनाम मॉडल की तुलना करते हैं, तो हम परीक्षण सेट के साथ तुलना करने के लिए सटीकता () का उपयोग करते हैं। तब आपके पास विभिन्न त्रुटि माप जैसे एमएई, एमएसई, आरएमएसई ... आदि हो सकते हैं, जिनका उपयोग मॉडल बनाम मॉडल की तुलना करने के लिए किया जाता है


0

NN मॉडल को नाम देने के बजाय fit_nn का उपयोग करें। इसी तरह, fit_arima और fit_ets। ताकि आप सभी मॉडलों की तुलना कर सकें।

library(caret)
#ets
fit_ets <- ets(x)
#ANN
fit_nn <- nnetar(x)
plot(forecast(fit,h=60))
points(1:length(x),fitted(fit_nn),type="l",col="green")
library(forecast)
accuracy(fit_nn)
accuracy(fit_ets)

अब, आप ME, MAE या जो भी चाहें, दोनों मॉडलों की तुलना कर सकते हैं।


मुझे आपकी बात पाने के लिए एक दो बार पढ़ना पड़ा। जबकि चर का नामकरण अच्छा कोडिंग अभ्यास है, यह उत्तर के लिए केंद्रीय नहीं है। आपके उत्तर का मुख्य भाग अंतिम पंक्ति (MAE, आदि का उपयोग करके) में है। यदि आप हाइलाइट कर सकते हैं (या इससे भी बेहतर, पर विस्तार करें), तो यह इसमें सुधार करेगा।
mkt -

जब आप फ़ंक्शन सटीकता (मॉडल) का उपयोग करते हैं, तो यह कुछ आंकड़े जैसे ME, MAE, RMSE, MPE इत्यादि देता है। आप उनमें से किसी भी या सभी का उपयोग दो या अधिक मॉडलों की तुलना करने के लिए कर सकते हैं। उदाहरण के लिए, कम से कम RMSE (रूट मीन स्क्वायर त्रुटि) वाला मॉडल सभी के बीच सबसे अच्छा मॉडल माना जाता है।
कोमल बाटुल

जो जानना उपयोगी है। लेकिन मेरा कहना यह है कि यह कोडिंग के बारे में एक साइट नहीं है, भले ही कोड निश्चित रूप से प्रश्नों और उत्तरों को प्रकाशित कर सकता है। और इसलिए आपका उत्तर बेहतर होगा यदि आपने मूल मुद्दे पर प्रकाश डाला है ।
mkt -

सवाल यह था कि ARIMA जैसे सांख्यिकीय मॉडलों के साथ ANN की तुलना कैसे की जा सकती है (क्योंकि इन मॉडलों की तुलना उनके AIC मूल्यों का उपयोग करके की जाती है) और उत्तर अन्य सांख्यिकीय मूल्यों जैसे MAE या RMSE का उपयोग कर रहा है जो सटीकता () फ़ंक्शन द्वारा प्राप्त किया जा सकता है। इसमें भ्रम की कोई बात नहीं है।
कोमल बाटुल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.