पूर्वानुमान सटीकता की गणना


9

हम समय श्रृंखला डेटा के पूर्वानुमान के लिए एसटीएल (आर कार्यान्वयन) का उपयोग कर रहे हैं।

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

अब हम पहचानने की कोशिश कर रहे हैं कि इस समस्या को हल करने के लिए सबसे अच्छा तरीका क्या है? किसी भी मदद के संकेत की सराहना की जाएगी।

मैंने मापन सटीकता पूर्वानुमान प्रश्न को देखा , लेकिन ऐसा लगता है कि यह वास्तविक मूल्यों के साथ सटीकता की गणना करने के बजाय मॉडल की तुलना करने से संबंधित है।

मैंने आर में सटीकता समारोह के कार्यान्वयन को देखा , लेकिन दो प्रश्नों के साथ भ्रमित:

1) क्या यह वास्तविक डेटा बनाम पूर्वानुमान डेटा पर काम करेगा, क्योंकि अधिकांश ट्यूटोरियल "टेस्ट डेटा" बनाम "पूर्वानुमान डेटा" के रूप में कह रहे हैं

2) ऐसा लगता है कि सटीकता समारोह में विचलन का% के बजाय मूल्यों की सरणी है।


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

1
असिंचित के लिए, एसटीएल क्या है?
छायाकार

@EngrStudent: "आपको इसे ठीक करने के लिए अपनी त्रुटि समझनी चाहिए" - इस कथन में स्वयं हमारे पास दो भाग हैं। मैं पहले खंड के लिए संभावित दृष्टिकोणों का पता लगाने की कोशिश कर रहा हूं। कार्यप्रणाली मैं लेने मेरे लिए भाग 2. रणनीतियों उठा में मदद मिलेगी
कोष है

1
मतलब यह नहीं है कि एक प्रणाली कैसे व्यवहार करती है। मानक विचलन समान नहीं है कि कोई प्रणाली कैसे व्यवहार करती है। दो उपायों को मापने के लिए सारांश हैं व्यवहार प्रणाली। त्रुटि सटीकता नहीं है। त्रुटि अनिश्चित नहीं है। उन दो उपायों का मतलब है और मानक विचलन के अनुरूप त्रुटि के लिए सारांश आँकड़े हैं। जैसे सिस्टम व्यवहार के उपायों के कई अनन्तता हैं, वैसे ही त्रुटि व्यवहार के उपायों के भी कई अनन्तताएँ हैं। तुम्हारा रूबरिक क्या है? आप त्रुटि के बारे में सोचने का एक अच्छा तरीका कैसे मापेंगे?
इंग्रिडडेंट

1
@ नंबरी - "बुद्धिमान" की दुनिया में आपका स्वागत है। ज्ञान की शुरुआत यह जानना है कि आप कुछ नहीं जानते हैं - एक छात्र होने के लिए। मैं हमेशा खुद को सीखने की कोशिश करता हूं, और सच बोलने वाले किसी भी व्यक्ति से सही होने की कोशिश करता हूं। यदि आप यूरेका टूल के साथ खेलते हैं, और "लक्ष्य अभिव्यक्ति" के हर सामान्य रूप और प्रत्येक "एरर मेट्रिक" दोनों के लिए उपयुक्त सैंपल डेटा पर प्रयास करते हैं, तो आप इस गहरी गहरी बात को जानना शुरू कर देंगे। मेरे पास अच्छा जवाब नहीं है। L'Hospital (उर्फ L'Hopital) ने 1696 में पहली सबसे कम वर्ग अभिव्यक्ति का सूत्रपात किया। एक अच्छी शुरुआत उपयोग मामला है - जहां मन आता है। वह क्या है?
20

जवाबों:


13

पूर्वानुमान सटीकता को मापने के कई अलग-अलग तरीके हैं, और accuracy()आर पैकेज के लिए पूर्वानुमान पैकेज से फ़ंक्शन उनमें से कई आउटपुट करता है। "विचलन के%" के बारे में आपकी टिप्पणी से ऐसा लगता है कि आप मीन एब्सोल्यूट प्रतिशत त्रुटि का उपयोग करना चाहते हैं, जो कि प्रदान किए गए उपायों में से एक है accuracy()। पूर्वानुमान सटीकता के सबसे सामान्य उपायों की यहां चर्चा की गई है । आप यह सोचना पसंद कर सकते हैं कि क्या MAPE आपकी समस्या के लिए सबसे उपयुक्त उपाय है, या अन्य उपायों में से एक बेहतर है।

accuracy()समारोह वास्तविक आंकड़ों पर काम करता है। "परीक्षण डेटा" वे डेटा हैं जिनका उपयोग पूर्वानुमानों के निर्माण के लिए नहीं किया गया था। कभी-कभी वे उपलब्ध होते हैं, लेकिन पूर्वानुमान के गणना (प्रशिक्षण और परीक्षण सेटों में डेटा का शास्त्रीय विभाजन) के लिए उपयोग नहीं किया जाता है। अन्य स्थितियों में, सभी उपलब्ध डेटा का उपयोग पूर्वानुमान की गणना करने के लिए किया जाता है, और तब तक आपको इंतजार करना पड़ता है जब तक कि परीक्षण डेटा के रूप में उपयोग करने के लिए कुछ भविष्य के अवलोकन उपलब्ध न हों।

तो अगर fपूर्वानुमान xका एक वेक्टर है और एक ही समय के अनुरूप टिप्पणियों का एक वेक्टर है, तो

accuracy(f,x)

जो चाहोगे, करोगे।


"प्रतिशत त्रुटियों के आधार पर मापों में अनंत या अपरिभाषित होने का नुकसान होता है यदि ब्याज की अवधि में किसी भी i के लिए y = 0, और किसी भी यी के शून्य के करीब होने पर चरम मान हो।" मुझे लगता है कि यह मेरे मामले में जारी किया जाएगा, क्योंकि बहुत सारे मामले ज़ीरो हो सकते हैं। मैं सोच रहा हूं कि एमएई की गणना करें और परिणाम संख्या को "प्रतिशत" में बदल दें। क्या इस का कोई मतलब निकलता है?
कोसा

किसी तरह मेरा शुक्रिया अदा किया, वास्तव में आपके समय के लिए धन्यवाद डॉ। Hyndman!
कोसा सेप

2

सबसे पहले, आइए स्पष्ट करें कि सटीकता और सटीकता की अवधारणाएं क्या हैं। सटीकता आमतौर पर पूर्वाग्रह से जुड़ी होती है, अर्थात वास्तविक से पूर्वानुमान का व्यवस्थित विचलन। परिशुद्धता आमतौर पर पूर्वानुमान त्रुटियों के विचरण से जुड़ी होती है। कुछ इस तरह:सीसीयूआरसीy=()-y बनाम पीआरसीमैंरोंमैंn=वीआर[-y]। तो, जब आप अपने पोस्ट में "सटीकता" का उल्लेख करते हैं, तो भेद के बारे में पता था?

दूसरा, पूर्वानुमान गुणवत्ता के एकीकृत उपाय हैं, जैसे कि एसएफ=1nΣमैं=1n(मैं-yमैं)2, कहाँ पे मैं तथा yमैंपूर्वानुमान और वास्तविक हैं। इस उपाय के लिए आंकड़े हैं, जैसे पैरामीटर कसना के लिए चाउ परीक्षण।


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

@ नंबरी, अगर आपको "विचलन की संख्या" की आवश्यकता है, तो आप विचलन की संख्या का उपयोग क्यों नहीं करते हैं? भविष्यवाणियों पर एक लूप बनाएं, वास्तविक मूल्यों के साथ उनकी तुलना करें और उन मामलों की संख्या की गणना करें जिनमें भविष्यवाणियां वास्तविक मूल्यों से भिन्न होती हैं।
रोमन

2

मैं आर में यह कर रहा हूँ यहाँ मेरा डेटा इन-सैंपल और आउट-सैंपल डेटा दोनों के लिए मेरा कोड है:

#accuracy testing for out-of-sample sample#

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
N<-head(M,-horiz)
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)

#Run your forecasting method#
##My forecasting method is arima##

N<-#data#
N<-ts(N,deltat=deltaT,start=startY)
N<-tail(N,horiz)
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY) #where Arimab is the ARIMA model and fArimab<-forecast(Arimab, h=horiz*2, simulate= TRUE, fan=TRUE)
N<-log(N)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA out sample")

#Accuracy testing for the in sample

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)
#run your forecasting method#
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY)
N<-exp(Nu)
fitted<-exp(fitted)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA in sample")

उम्मीद है इससे कुछ मदद मिली होगी। अगर आप मेरा पूरा कोड चाहते हैं तो मैं इसे चलाने के लिए इस्तेमाल कर रहा हूं क्योंकि यह बहुत बुनियादी है


1

संक्षिप्त उत्तर: अपनी भविष्यवाणियों की गुणवत्ता का मूल्यांकन करने के लिए, ठीक उसी माप का उपयोग करें जो आपने अपने मॉडल के प्रशिक्षण (फिटिंग) में उपयोग किया था।

लंबे उत्तर:

अपने पूर्वानुमानों की सटीकता के लिए एक उपाय चुनने के लिए, आपको यह जानने की आवश्यकता है कि आप भविष्यवाणियों की व्याख्या कैसे करते हैं। दूसरे शब्दों में, आप वास्तव में "पूर्वानुमान" के रूप में क्या देते हैं? क्या इसका मतलब मूल्य है? माध्य? सबसे संभावित मूल्य? इस प्रश्न का उत्तर विशिष्ट रूप से पूर्वानुमान सटीकता के माप की पहचान करेगा। यदि आप अनुमान लगाते हैं, तो आपको पूर्वानुमान सटीकता के माप के रूप में मूल माध्य वर्ग विचलन का उपयोग करना होगा। यदि आप औसत दर्जे का अनुमान लगाते हैं तो आपको सटीकता के माप के रूप में निरपेक्ष विचलन का उपयोग करना होगा।

मैं इस बिंदु पर थोड़ा विस्तार करूंगा। आइए हम मान लें कि आप कल के लिए भविष्यवाणी / पूर्वानुमान करते हैं। आइए हम यह भी मान लें कि किसी भी मूल्य के लिए जिसे आप कल देख सकते हैं, आपके पास अवलोकन किए जाने की एक समान संभावना है। उदाहरण के लिए आप जानते हैं कि आप 1 को प्रायिकता 0.03, 2 को प्रायिकता 0.07, 3 को प्रायिकता 0.11, और इसी तरह से देख सकते हैं। तो, आपके पास विभिन्न मूल्यों पर संभावनाओं का वितरण है। इस वितरण के बाद आप विभिन्न गुणों की गणना कर सकते हैं और उन्हें अपने "पूर्वानुमान" के रूप में दे सकते हैं। आप माध्य की गणना कर सकते हैं और इसे कल के लिए भविष्यवाणी के रूप में दे सकते हैं। वैकल्पिक रूप से आप अपनी भविष्यवाणी के रूप में माध्यिका का उपयोग कर सकते हैं। आप सबसे संभावित मूल्य भी पा सकते हैं और इसे कल के लिए अपनी भविष्यवाणी के रूप में दे सकते हैं।

यदि आप माध्य मान को भविष्यवाणी के रूप में उपयोग करते हैं, तो "मेरी भविष्यवाणी की सटीकता को कैसे मापें" के सवाल से "मतलब के लिए सटीकता की माप क्या है" द्वारा प्रतिस्थापित किया जाना है और उत्तर है "मूल माध्य वर्ग विचलन वास्तविक मूल्य और भविष्यवाणी "। यदि आप भविष्यवाणियों के रूप में माध्य का उपयोग करते हैं, तो आपको औसत निरपेक्ष विचलन का उपयोग करना होगा।

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

जोड़ा

मैं एक बात पर जोर देना चाहूंगा। जैसा कि मैंने ऊपर उल्लेख किया है कि "फिट" और "भविष्यवाणी" में सटीकता के समान माप रखना महत्वपूर्ण है। इसके अलावा, मैं यह कहना चाहूंगा कि आप अपने उपायों को चुनने में बिल्कुल स्वतंत्र हैं। कोई "बेहतर" या "बदतर" उपाय नहीं हैं। उपाय को आपके (या आपके ग्राहक) द्वारा आपकी भविष्यवाणियों का उपयोग करने के तरीके से निर्धारित किया जाना चाहिए। उदाहरण के लिए एक सटीक मिलान होना बहुत महत्वपूर्ण (आप या आपके ग्राहक के लिए) हो सकता है और यदि आपके पास नहीं है, तो वास्तविक या अनुमानित मूल्यों के बीच अंतर बड़ा या छोटा होने पर यह कोई भूमिका नहीं निभाता है। अन्य मामलों में यह अंतर एक भूमिका निभाता है। 1 का अंतर 2 के अंतर से बेहतर है। कुछ मामलों में 2 का अंतर 1 के अंतर से 2 गुना खराब है। अन्य मामलों में 2 के बराबर अंतर 1 के अंतर के मुकाबले 100 गुना बदतर है। आप विदेशी मामलों की भी कल्पना कर सकते हैं जिसमें आपको एक मूल्य उत्पन्न करने की आवश्यकता होती है जो टिप्पणियों से भिन्न होती है। इसलिए, आपके द्वारा उत्पन्न की जाने वाली संख्याओं की गुणवत्ता को मापें जो आप चाहते हैं, जो आपको चाहिए। जो महत्वपूर्ण है, वही माप का उपयोग प्रशिक्षण (फिट) और भविष्यवाणियों के मूल्यांकन में करना है।


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

मुझे पता है कि MAPE एक ऐसा सिद्धांत है जिसे मैं चाहता हूं, लेकिन मेरे डेटा सेट में यह दुर्भाग्यपूर्ण मामला है जहां श्रृंखला में वास्तविक मान बहुत बार शून्य हो सकते हैं।
कोसा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.