टाइम्स विश्लेषण प्रक्रिया और आर का उपयोग करने के तरीके


13

मैं एक छोटी परियोजना पर काम कर रहा हूं, जहां हम अगले 6 महीनों के लिए वस्तुओं (तेल, एल्यूमीनियम, टिन, आदि) की कीमतों की भविष्यवाणी करने की कोशिश कर रहे हैं। मेरे पास भविष्यवाणी करने के लिए 12 ऐसे चर हैं और मेरे पास अप्रैल, 2008 - मई, 2013 के आंकड़े हैं।

मुझे भविष्यवाणी के बारे में कैसे जाना चाहिए? मैंने निम्नलिखित कार्य किया है:

  • एक डेटा डेटासेट के रूप में आयात किया गया
  • सभी वेरिएबल की सीज़नसिटी ट्रेंड के साथ बदलती रहती है, इसलिए मैं कई मॉडल में जा रहा हूं।
  • मैंने परिवर्ती मॉडल में बदलने के लिए चर का लॉग लिया
  • प्रत्येक चर के लिए एसटीएल का उपयोग कर डेटा को विघटित कर दिया

मैं पूर्वानुमान के लिए Holt Winters घातीय चौरसाई, ARIMA और तंत्रिका जाल का उपयोग करने की योजना बना रहा हूं। मैंने प्रशिक्षण और परीक्षण (80, 20) के रूप में डेटा को विभाजित किया। कम MAE, MPE, MAPE और MASE वाले मॉडल को चुनने की योजना है।

क्या मैं यह ठीक कर रहा हूँ?

इसके अलावा एक प्रश्न जो मेरे पास था, ARIMA या न्यूरल नेट पास करने से पहले मुझे डेटा को सुचारू करना चाहिए? यदि हाँ, तो क्या उपयोग कर रहा है? डेटा सीज़नसिटी और ट्रेंड दोनों को दर्शाता है।

संपादित करें:

टाइमशीट प्लॉट और डेटा संलग्न करना यहाँ छवि विवरण दर्ज करें

Year  <- c(2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2009, 2009, 
           2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2010, 
           2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 
           2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 
           2011, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 
           2012, 2012, 2013, 2013)
Month <- c(4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
           12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 
           8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2) 
Coil  <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000, 
           29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500, 
           33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500, 
           33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700, 
           40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500, 
           40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300, 
           39300, 39300, 39300, 39300, 39800)
coil <- data.frame(Year = Year, Month = Month, Coil = Coil)

EDIT 2: एक प्रश्न, क्या आप मुझे बता सकते हैं कि मेरे डेटा में कोई मौसमी या प्रवृत्ति है? और उन्हें पहचानने के तरीके के बारे में कुछ सुझाव भी दें। यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें


2
यदि आप विभिन्न प्रकार की धातु (स्टील ए, स्टील बी, स्टील सी, आदि) जैसे वस्तुओं के समूहों का पूर्वानुमान लगाने की कोशिश कर रहे हैं, तो यह संयोग के अस्तित्व के लिए परीक्षण के लायक हो सकता है। उदाहरण के लिए, कुछ इस तरह से: क्या स्टील की कीमतें एक साथ चलती हैं? । यह बेहतर तरीकों से 6 महीने (मध्यम / दीर्घकालिक) के पूर्वानुमान प्रदान कर सकता है, लेकिन यह वास्तव में एक कठिन खेल है जिसे आप खेलने की कोशिश कर रहे हैं। ;-)
ग्रीम वाल्श

1
AS @GraemeWalsh बताते हैं, इस प्रकार के डेटा के लिए यूनिवेट ट्रेंड एक्सट्रपलेशन आदर्श नहीं हो सकता है। तेल की भविष्यवाणी के लिए साहित्य में अच्छी तरह से स्थापित तरीके हैं, स्टील की कीमतें जो खोज के लायक हो सकती हैं।
फोरकास्टर

1
क्या आप एक अलग प्रश्न के रूप में नए संपादन पोस्ट कर सकते हैं? चूंकि आपने पहले ही एक उत्तर स्वीकार कर लिया है, इसलिए नए प्रश्नों पर ध्यान नहीं दिया जा सकता है। डेटा पर नजर रखने से मैं कह सकता हूं कि उनमें से कोई भी रुझान या मौसमी पैटर्न नहीं है। जैसा कि नीचे मेरी पोस्ट में बताया गया है, 2009 के पहले की मंदी की तरह एक व्यापक आर्थिक घटना है?
फोरकास्टर

@ फोरकास्टर, @ ग्रीमवेलश: धन्यवाद। मैं ADF परीक्षणों का उपयोग कर संयोग विधि का उपयोग करने की योजना बना रहा हूं।
निरंजन सोनाचलम

1
आपने अपने नए प्रश्न में संदर्भ प्रदान किया है और यह अब मस्जिद की समझ में आता है। तो 2009 से पहले ड्रॉप वास्तव में कुछ स्थूल आर्थिक घटना थी। उस उदाहरण में ड्रिफ्ट या अरिमा (0,1,0) + बहाव के साथ रैंडम वॉक मेथड का प्रयोग करें
फोरकास्टर

जवाबों:


21

आपको पूर्वानुमान पैकेज का उपयोग करना चाहिए , जो इन सभी मॉडलों (और अधिक) का समर्थन करता है और उन्हें एक तस्वीर देता है:

library(forecast)
x <- AirPassengers
mod_arima <- auto.arima(x, ic='aicc', stepwise=FALSE)
mod_exponential <- ets(x, ic='aicc', restrict=FALSE)
mod_neural <- nnetar(x, p=12, size=25)
mod_tbats <- tbats(x, ic='aicc', seasonal.periods=12)
par(mfrow=c(4, 1))
plot(forecast(mod_arima, 12), include=36)
plot(forecast(mod_exponential, 12), include=36)
plot(forecast(mod_neural, 12), include=36)
plot(forecast(mod_tbats, 12), include=36)

मैं आपके मॉडल को फिट करने से पहले डेटा को स्मूद करने के खिलाफ सलाह दूंगा। आपका मॉडल स्वाभाविक रूप से डेटा को सुचारू करने का प्रयास करने जा रहा है, इसलिए पूर्व-चौरसाई सिर्फ चीजों को जटिल बनाती है।

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

नए डेटा पर आधारित संपादन:

यह वास्तव में ऐसा लगता है कि अरिमा सबसे खराब मॉडल है जिसे आप इस प्रशिक्षण और परीक्षण सेट के लिए चुन सकते हैं।

मैंने आपके डेटा को एक फ़ाइल कॉल में सहेजा coil.csv, इसे R में लोड किया, और इसे एक प्रशिक्षण और परीक्षण सेट में विभाजित किया:

library(forecast)
dat <- read.csv('~/coil.csv')
x <- ts(dat$Coil, start=c(dat$Year[1], dat$Month[1]), frequency=12)
test_x <- window(x, start=c(2012, 3))
x <- window(x, end=c(2012, 2))

अगला मैं समय श्रृंखला के मॉडल का एक गुच्छा फिट करता हूं: अरिमा, घातीय चौरसाई, तंत्रिका नेटवर्क, tbats, चमगादड़, मौसमी अपघटन और संरचनात्मक समय श्रृंखला:

models <- list(
  mod_arima = auto.arima(x, ic='aicc', stepwise=FALSE),
  mod_exp = ets(x, ic='aicc', restrict=FALSE),
  mod_neural = nnetar(x, p=12, size=25),
  mod_tbats = tbats(x, ic='aicc', seasonal.periods=12),
  mod_bats = bats(x, ic='aicc', seasonal.periods=12),
  mod_stl = stlm(x, s.window=12, ic='aicc', robust=TRUE, method='ets'),
  mod_sts = StructTS(x)
  )

तब मैंने कुछ पूर्वानुमान लगाए और परीक्षण सेट की तुलना में। मैंने एक भोला पूर्वानुमान शामिल किया है जो हमेशा एक सपाट, क्षैतिज रेखा की भविष्यवाणी करता है:

forecasts <- lapply(models, forecast, 12)
forecasts$naive <- naive(x, 12)
par(mfrow=c(4, 2))
for(f in forecasts){
  plot(f)
  lines(test_x, col='red')
}

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

जैसा कि आप देख सकते हैं, अरिमा मॉडल की प्रवृत्ति गलत है, लेकिन मुझे "बेसिक स्ट्रक्चरल मॉडल" की तरह दिखना पसंद है

अंत में, मैंने परीक्षण सेट पर प्रत्येक मॉडल की सटीकता को मापा:

acc <- lapply(forecasts, function(f){
  accuracy(f, test_x)[2,,drop=FALSE]
})
acc <- Reduce(rbind, acc)
row.names(acc) <- names(forecasts)
acc <- acc[order(acc[,'MASE']),]
round(acc, 2)
                ME    RMSE     MAE   MPE MAPE MASE ACF1 Theil's U
mod_sts     283.15  609.04  514.46  0.69 1.27 0.10 0.77      1.65
mod_bats     65.36  706.93  638.31  0.13 1.59 0.12 0.85      1.96
mod_tbats    65.22  706.92  638.32  0.13 1.59 0.12 0.85      1.96
mod_exp      25.00  706.52  641.67  0.03 1.60 0.12 0.85      1.96
naive        25.00  706.52  641.67  0.03 1.60 0.12 0.85      1.96
mod_neural   81.14  853.86  754.61  0.18 1.89 0.14 0.14      2.39
mod_arima   766.51  904.06  766.51  1.90 1.90 0.14 0.73      2.48
mod_stl    -208.74 1166.84 1005.81 -0.52 2.50 0.19 0.32      3.02

उपयोग किए गए मेट्रिक्स का वर्णन ह्यंडमान, आरजे और अथानसोपोलोस, जी (2014) "पूर्वानुमान: सिद्धांतों और अभ्यास" में किया गया है , जो पूर्वानुमान पैकेज के लेखक भी हैं। मैं आपको उनके पाठ को पढ़ने की अत्यधिक सलाह देता हूं: यह मुफ्त में ऑनलाइन उपलब्ध है। MASE सहित कई मेट्रिक्स द्वारा संरचनात्मक समय श्रृंखला सबसे अच्छा मॉडल है, जो कि मीट्रिक मैं मॉडल चयन के लिए पसंद करते हैं।

एक अंतिम प्रश्न यह है कि क्या इस परीक्षण सेट पर संरचनात्मक मॉडल भाग्यशाली था? इसका आकलन करने का एक तरीका प्रशिक्षण सेट त्रुटियों को देख रहा है। प्रशिक्षण सेट त्रुटियां परीक्षण सेट त्रुटियों की तुलना में कम विश्वसनीय हैं (क्योंकि वे ओवर-फिट हो सकते हैं), लेकिन इस मामले में संरचनात्मक मॉडल अभी भी आता है:

acc <- lapply(forecasts, function(f){
  accuracy(f, test_x)[1,,drop=FALSE]
})
acc <- Reduce(rbind, acc)
row.names(acc) <- names(forecasts)
acc <- acc[order(acc[,'MASE']),]
round(acc, 2)
                ME    RMSE     MAE   MPE MAPE MASE  ACF1 Theil's U
mod_sts      -0.03    0.99    0.71  0.00 0.00 0.00  0.08        NA
mod_neural    3.00 1145.91  839.15 -0.09 2.25 0.16  0.00        NA
mod_exp     -82.74 1915.75 1359.87 -0.33 3.68 0.25  0.06        NA
naive       -86.96 1936.38 1386.96 -0.34 3.75 0.26  0.06        NA
mod_arima  -180.32 1889.56 1393.94 -0.74 3.79 0.26  0.09        NA
mod_stl     -38.12 2158.25 1471.63 -0.22 4.00 0.28 -0.09        NA
mod_bats     57.07 2184.16 1525.28  0.00 4.07 0.29 -0.03        NA
mod_tbats    62.30 2203.54 1531.48  0.01 4.08 0.29 -0.03        NA

(ध्यान दें कि तंत्रिका नेटवर्क ओवरफिट होता है, प्रशिक्षण सेट पर उत्कृष्ट प्रदर्शन करता है और खराब परीक्षण सेट पर)

अंत में, इन सभी मॉडलों को क्रॉस-वैरिफाई करना एक अच्छा विचार होगा, शायद 2008-2009 पर प्रशिक्षण द्वारा / 2010 में परीक्षण, 2008-2010 को प्रशिक्षण / 2011 को परीक्षण, 2008-2011 को प्रशिक्षण / 2012 को परीक्षण, प्रशिक्षण 2008-2012 / 2013 को परीक्षण, और इन सभी समय अवधि में त्रुटियों का औसत। यदि आप उस मार्ग से नीचे जाना चाहते हैं, तो मेरे पास जीथुब पर क्रॉस-वैरिफिकेशन टाइम सीरीज़ मॉडल के लिए एक आंशिक रूप से पूर्ण पैकेज है जो मैं आपको पसंद करने और मुझे प्रतिक्रिया देने / अनुरोध करने के लिए प्यार दूंगा:

devtools::install_github('zachmayer/cv.ts')
library(cv.ts)

संपादित करें 2: देखते हैं कि क्या मुझे याद है कि मुझे अपने पैकेज का उपयोग कैसे करना है!

सबसे पहले, जीथब से पैकेज को स्थापित और लोड करें (ऊपर देखें)। फिर कुछ मॉडलों को पार-मान्य करें (पूर्ण डेटासेट का उपयोग करके):

library(cv.ts)
x <- ts(dat$Coil, start=c(dat$Year[1], dat$Month[1]), frequency=12)
ctrl <- tseriesControl(stepSize=1, maxHorizon=12, minObs=36, fixedWindow=TRUE)
models <- list()

models$arima = cv.ts(
  x, auto.arimaForecast, tsControl=ctrl,
  ic='aicc', stepwise=FALSE)

models$exp = cv.ts(
  x, etsForecast, tsControl=ctrl,
  ic='aicc', restrict=FALSE)

models$neural = cv.ts(
  x, nnetarForecast, tsControl=ctrl,
  nn_p=6, size=5)

models$tbats = cv.ts(
  x, tbatsForecast, tsControl=ctrl,
  seasonal.periods=12)

models$bats = cv.ts(
  x, batsForecast, tsControl=ctrl,
  seasonal.periods=12)

models$stl = cv.ts(
  x, stl.Forecast, tsControl=ctrl,
  s.window=12, ic='aicc', robust=TRUE, method='ets')

models$sts = cv.ts(x, stsForecast, tsControl=ctrl)

models$naive = cv.ts(x, naiveForecast, tsControl=ctrl)

models$theta = cv.ts(x, thetaForecast, tsControl=ctrl)

(ध्यान दें कि मैंने तंत्रिका नेटवर्क मॉडल के लचीलेपन को कम कर दिया, ताकि इसे ओवरफिटिंग से बचाने में मदद करने की कोशिश की जा सके)

एक बार जब हम मॉडल फिट कर लेते हैं, तो हम MAPE द्वारा उनकी तुलना कर सकते हैं (cv.ts अभी तक MASE का समर्थन नहीं करता है):

res_overall <- lapply(models, function(x) x$results[13,-1])
res_overall <- Reduce(rbind, res_overall)
row.names(res_overall) <- names(models)
res_overall <- res_overall[order(res_overall[,'MAPE']),]
round(res_overall, 2)
                 ME    RMSE     MAE   MPE MAPE
naive     91.40 1126.83  961.18  0.19 2.40
ets       91.56 1127.09  961.35  0.19 2.40
stl     -114.59 1661.73 1332.73 -0.29 3.36
neural     5.26 1979.83 1521.83  0.00 3.83
bats     294.01 2087.99 1725.14  0.70 4.32
sts     -698.90 3680.71 1901.78 -1.81 4.77
arima  -1687.27 2750.49 2199.53 -4.23 5.53
tbats   -476.67 2761.44 2428.34 -1.23 6.10

आउच। ऐसा प्रतीत होता है कि हमारा संरचनात्मक पूर्वानुमान भाग्यशाली है। दीर्घावधि में, 12-महीने के क्षितिज में औसतन औसत पूर्वानुमान सबसे अच्छा पूर्वानुमान बनाता है, (अरिमा मॉडल अभी भी सबसे खराब मॉडलों में से एक है)। आइए प्रत्येक 12 पूर्वानुमान क्षितिज पर मॉडलों की तुलना करें और देखें कि क्या उनमें से कोई भी भोली मॉडल को हरा देता है:

library(reshape2)
library(ggplot2)
res <- lapply(models, function(x) x$results$MAPE[1:12])
res <- data.frame(do.call(cbind, res))
res$horizon <- 1:nrow(res)
res <- melt(res, id.var='horizon', variable.name='model', value.name='MAPE')
res$model <- factor(res$model, levels=row.names(res_overall))
ggplot(res, aes(x=horizon, y=MAPE, col=model)) +
  geom_line(size=2) + theme_bw() +
  theme(legend.position="top") +
  scale_color_manual(values=c(
    "#1f78b4", "#ff7f00", "#33a02c", "#6a3d9a",
    "#e31a1c", "#b15928", "#a6cee3", "#fdbf6f",
    "#b2df8a")
    )

मॉडल की तुलना

धीरे-धीरे, घातीय चौरसाई मॉडल हमेशा भोली मॉडल (नारंगी रेखा और नीली रेखा ओवरलैप 100%) उठा रहा है। दूसरे शब्दों में, "अगले महीने की कुंडल कीमतों की भोली भविष्यवाणी इस महीने के कुंडल की कीमतों के समान होगी" 7 बेहद परिष्कृत समय श्रृंखला मॉडल की तुलना में अधिक सटीक (लगभग हर पूर्वानुमान क्षितिज पर) है। जब तक आपके पास कुछ गुप्त जानकारी नहीं होती है, जो कुंडल बाजार पहले से नहीं जानता है, तो भोले कुंडल मूल्य पूर्वानुमान की धड़कन बेहद मुश्किल होने वाली है

यह कभी भी जवाब नहीं है जिसे कोई भी सुनना चाहता है, लेकिन यदि पूर्वानुमान सटीकता आपका लक्ष्य है, तो आपको सबसे सटीक मॉडल का उपयोग करना चाहिए। भोली मॉडल का उपयोग करें।


यह दिलचस्प है कि इन मॉडलों के अंतरों को देखना दिलचस्प है। NNAR विशेष रूप से अलग दिखता है। यह देखते हुए कि यह एक प्रसिद्ध डेटासेट (और ऐतिहासिक रूप से पुराना है, मेरा मानना ​​है), क्या यह ज्ञात है कि कौन सही है और क्या एक मॉडल प्रकार के आउटपरफॉर्म हैं? (नायब, मैं टीएस के बारे में अपेक्षाकृत कम जानते हैं।)
गुंग - को पुनः स्थापित मोनिका

@gung ऐसा करने का सबसे अच्छा तरीका है कि एक होल्डआउट सेट को विभाजित करके मॉडल का परीक्षण किया जाए। ध्यान दें कि सबसे अच्छा अल्पकालिक पूर्वानुमान बनाने वाला मॉडल वह मॉडल नहीं हो सकता है जो सबसे अच्छा दीर्घकालिक पूर्वानुमान बनाता है ....
Zach

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

@ निरंजन क्या आप हमें बता सकते हैं / दिखा सकते हैं कि आप कैसे निष्कर्ष निकालते हैं कि आपको अच्छा पूर्वानुमान नहीं मिल रहा है?
फोरकास्टर

@forecaster: कृपया यहां देखें pbrd.co/1DRPRsq । मैं पूर्वानुमान के लिए नया हूं। अगर आपको किसी विशेष जानकारी की आवश्यकता है तो मुझे बताएं। मैंने अरिमा मॉडल के साथ प्रयास किया।
निरंजन सोनाचलम

12

आपके द्वारा लिया गया दृष्टिकोण उचित है। यदि आप पूर्वानुमान के लिए नए हैं, तो मैं निम्नलिखित पुस्तकों की सिफारिश करूंगा:

  1. Makridakis, Wheelright और Hyndman द्वारा पूर्वानुमान के तरीके और अनुप्रयोग
  2. पूर्वानुमान: Hyndman और Athanasopoulos द्वारा सिद्धांत और अभ्यास

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

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

तंत्रिका नेटवर्क के बारे में एक अतिरिक्त टिप्पणी: तंत्रिका नेटवर्क को प्रायोगिक प्रतियोगिताओं में असफल होने के लिए जानते हैं । मैं समय श्रृंखला पूर्वानुमान कार्यों के लिए तंत्रिका नेटवर्क का उपयोग करने का प्रयास करने से पहले समय श्रृंखला के लिए पारंपरिक सांख्यिकीय तरीकों की कोशिश करूंगा।

मैंने आपके डेटा को मॉडल करने का प्रयास किया R's forecast package, उम्मीद है कि टिप्पणियाँ स्वयं व्याख्यात्मक हैं।

coil <- c(44000, 44500, 42000, 45000, 42500, 41000, 39000, 35000, 34000, 
          29700, 29700, 29000, 30000, 30000, 31000, 31000, 33500, 33500, 
          33000, 31500, 34000, 35000, 35000, 36000, 38500, 38500, 35500, 
          33500, 34500, 36000, 35500, 34500, 35500, 38500, 44500, 40700, 
          40500, 39100, 39100, 39100, 38600, 39500, 39500, 38500, 39500, 
          40000, 40000, 40500, 41000, 41000, 41000, 40500, 40000, 39300, 
          39300, 39300, 39300, 39300, 39800)


coilts <- ts(coil,start=c(2008,4),frequency=12)

library("forecast")

# Data for modeling
coilts.mod <- window(coilts,end = c(2012,3))

#Data for testing
coil.test <- window(coilts,start=c(2012,4))

# Model using multiple methods - arima, expo smooth, theta, random walk, structural time series

#arima
coil.arima <- forecast(auto.arima(coilts.mod),h=11)

#exponential smoothing
coil.ets <- forecast(ets(coilts.mod),h=11)

#theta
coil.tht <- thetaf(coilts.mod, h=11)

#random walk
coil.rwf <- rwf(coilts.mod, h=11)

#structts
coil.struc <- forecast(StructTS(coilts.mod),h=11)


##accuracy 

arm.acc <- accuracy(coil.arima,coil.test)
ets.acc <- accuracy(coil.ets,coil.test)
tht.acc <- accuracy(coil.tht,coil.test)
rwf.acc <- accuracy(coil.rwf,coil.test)
str.acc <- accuracy(coil.struc,coil.test)

डेटा को होल्ड करने पर MAE का उपयोग करते हुए, मैं अल्पकालिक पूर्वानुमान (1 - 12 महीने) के लिए ARIMA को चुनूंगा। लंबी अवधि के लिए, मैं यादृच्छिक वॉक फोरकास्ट पर भरोसा करूंगा। कृपया ध्यान दें कि ARIMA ने बहाव (0,1,0) + बहाव के साथ एक यादृच्छिक चलना मॉडल उठाया, जो विशेष रूप से अल्पावधि में इस प्रकार की समस्याओं में शुद्ध यादृच्छिक चलने वाले मॉडल की तुलना में बहुत अधिक सटीक है। चार्ट के नीचे देखें। यह सटीकता फ़ंक्शन पर आधारित है जैसा कि उपरोक्त कोड में दिखाया गया है।

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

आपके विशिष्ट प्रश्नों के विशिष्ट उत्तर: ARIMA या तंत्रिका जाल में जाने से पहले एक प्रश्न जो मेरे पास था, क्या मुझे डेटा सुचारू करना चाहिए? यदि हाँ, तो क्या उपयोग कर रहा है?

  • नहीं, पूर्वानुमान के तरीके स्वाभाविक रूप से आपके डेटा को फिट मॉडल के लिए सुचारू करते हैं।

डेटा सीज़नसिटी और ट्रेंड दोनों को दर्शाता है।

  • ऊपर दिए गए डेटा में ट्रेंड या सीज़निटी नहीं है। यदि आप यह निर्धारित करते हैं कि डेटा मौसमी और प्रवृत्ति प्रदर्शित करता है, तो एक उपयुक्त विधि चुनें।

सटीकता में सुधार करने के लिए व्यावहारिक सुझाव:

पूर्वानुमान के विभिन्न तरीकों को मिलाएं: - आप सादृश्य , निर्णय पूर्वानुमान या अन्य तकनीकों द्वारा पूर्वानुमान के रूप में गैर-एक्सट्रपलेशन विधियों का उपयोग करने की कोशिश कर सकते हैं और सटीक भविष्यवाणियां प्रदान करने के लिए उन्हें अपने सांख्यिकीय तरीकों के साथ जोड़ सकते हैं। संयोजन के लाभों के लिए यह लेख देखें । मैंने उपरोक्त 5 विधियों के संयोजन की कोशिश की, लेकिन भविष्यवाणी व्यक्तिगत तरीकों के रूप में सटीक नहीं थी, एक संभावित कारण यह है कि व्यक्तिगत पूर्वानुमान समान हैं। जब आप सांख्यिकीय और न्यायिक पूर्वानुमान जैसे विविध तरीकों को जोड़ते हैं तो आप पूर्वानुमान संयोजन के लाभों को प्राप्त करते हैं।

का पता लगाने और Outliers को समझें: - रियल दुनिया डेटा बाहरी कारकों के कारण से भरा है। पहचानें और उचित रूप से समय श्रृंखला में आउटलेर का इलाज करें । इस पोस्ट को पढ़ने की सलाह दें । अपने कॉइल डेटा को देखने में, क्या 2009 से पहले की गिरावट एक बहार है ??

संपादित करें

डेटा कुछ प्रकार के मैक्रो आर्थिक रुझानों का अनुसरण करता प्रतीत होता है। मेरा अनुमान है कि २०० ९ से पहले देखी गई गिरावट का रुझान २०० 2009 - २०० ९ के बीच देखी गई अर्थव्यवस्था में मंदी के बाद आया है और २०० ९ के बाद से उठना शुरू हो रहा है। अगर ऐसा है, तो मैं सभी किसी भी अतिरिक्त तरीकों का उपयोग करने से बचूँगा और इसके बजाय ध्वनि सिद्धांत पर भरोसा करूँगा कि कैसे इन आर्थिक रुझान एक के रूप में इस तरह के व्यवहार करते हैं संदर्भित @GraemeWalsh द्वारा।

उम्मीद है की यह मदद करेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.