2012-08-07 13 views
8

मेरे पास इसी अवधि के कुछ डेटा सेट हैं। यह उस दिन लोगों की एक प्रस्तुति है, अवधि लगभग एक वर्ष है। डेटा नियमित अंतराल में एकत्र नहीं किया गया है, यह काफी यादृच्छिक है: प्रत्येक वर्ष के लिए 15-30 प्रविष्टियां, 5 अलग-अलग वर्षों से। graph ग्राफ़ matplotlib के साथ किए गए:पिछली तारीख से भविष्यवाणी: मूल्य डेटा

ग्राफ प्रत्येक वर्ष के लिए डेटा से तैयार इस तरह मोटे तौर पर लग रहा है। मेरे पास datetime.datetime, int प्रारूप में डेटा है।

क्या किसी भी समझदार तरीके से, भविष्य में चीजें कैसे निकलती हैं, भविष्यवाणी करना संभव है? मेरा मूल विचार सभी पिछली घटनाओं से औसत गिनना था और भविष्यवाणी करना था कि यह होगा। हालांकि, वर्तमान वर्ष से किसी भी डेटा को ध्यान में नहीं रखा जाता है (यदि यह हर समय औसत से अधिक है, तो अनुमान शायद थोड़ा अधिक होना चाहिए)।

डेटा सेट और आंकड़ों का मेरा ज्ञान सीमित है, इसलिए हर अंतर्दृष्टि सहायक है।

मेरा लक्ष्य सबसे पहले प्रोटोटाइप समाधान बनाना होगा, यह जानने के लिए कि क्या मेरा डेटा पर्याप्त है और (संभावित) सत्यापन के बाद, मैं एक और परिष्कृत दृष्टिकोण का प्रयास करूंगा।

संपादित करें: दुर्भाग्यवश मुझे कभी प्राप्त उत्तरों का प्रयास करने का मौका नहीं मिला! मैं अभी भी उत्सुक हूं हालांकि अगर उस तरह का डेटा पर्याप्त होगा और अगर मुझे कभी मौका मिलता है तो इसे ध्यान में रखेगा। सभी उत्तरों के लिए धन्यवाद।

+2

इस सवाल वास्तव में कोड के बारे में नहीं है, गणित के बारे में अधिक, आप कैसे इस अर्थ में भविष्यवाणी परिभाषित करते हैं? और इस प्रकार के वक्र/ग्राफ पर गणितीय तरीका क्या है? मुझे नहीं लगता कि यह इस प्रश्न के लिए सही जगह है। –

+1

@Inbar मुझे पता है कि यह कोड सेक्शन को पूरी तरह से फिट नहीं करता है, लेकिन यह एकमात्र कोण है जिसे मैं इस से प्राप्त कर रहा हूं। मुझे विश्वास है कि यहां लोगों को समाधान के लिए दिशा देने के लिए पर्याप्त विशेषज्ञता है। – schme

+0

यह प्रश्न http://stats.stackexchange.com/ –

उत्तर

4

भविष्यवाणी कठिन है। आप polynomial extrapolation को आजमा सकते हैं - लेकिन अनुमान गलती बढ़ जाएगी क्योंकि आप "ज्ञात" क्षेत्र से आगे निकलते हैं।

एक और संभावित समाधान machine learning एल्गोरिदम का उपयोग करने का प्रयास कर रहा है, लेकिन इसके लिए आपको बहुत सारे डेटा एकत्र करने की आवश्यकता है।

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

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

आप अनुमान लगा सकते हैं कि यह विधि cross validation का उपयोग कर कितनी सटीक है।


इसी के साथ

कहा - इस समस्या को आम तौर पर प्रवृत्ति का पता लगाने के रूप में जाना जाता है, और वर्तमान में अनुसंधान के क्षेत्र में एक गर्म क्षेत्र है, इसलिए there is no silver bullet है।

+0

पर बेहतर फिट होगा क्या मशीन सीखने के लिए वास्तव में बहुत सारे डेटा की आवश्यकता है? मेरा मतलब है, रैखिक प्रतिगमन जैसी चीजों के लिए, यह नहीं हो सकता है (मैंने केवल थोड़ा ही किया है, इसलिए मैं मूल रूप से पूछ रहा हूं) – darkphoenix

+0

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

+2

पाइथन के लिए, scikits.learn है, मुझे विश्वास है कि आप नारंगी भी उपयोग कर सकते हैं। दोनों numpy पर निर्भर करते हैं। – darkphoenix

12

आपके मामले में, डेटा तेज़ी से बदल रहा है, और आपके पास नए डेटा के तत्काल अवलोकन हैं। Holt-winter घातीय चिकनाई का उपयोग करके एक त्वरित भविष्यवाणी लागू की जा सकती है।

अद्यतन समीकरण:

enter image description here

m_t डेटा आपके पास, उदाहरण के लिए, हर बार t पर लोगों की संख्या है। v_t पहला व्युत्पन्न है, यानी m की प्रवृत्ति। alpha और beta दो क्षय पैरामीटर हैं।शीर्ष पर tilde के साथ परिवर्तनीय अनुमानित मान को दर्शाता है। विकिपीडिया पेज पर एल्गोरिदम के विवरण देखें।

चूंकि आप python का उपयोग करते हैं, इसलिए मैं आपको डेटा के साथ मदद करने के लिए कुछ उदाहरण कोड दिखा सकता हूं। Btw, मैं कुछ सिंथेटिक डेटा के रूप में नीचे का उपयोग करें:

data_t = range(15) 
data_y = [5,6,15,20,21,22,26,42,45,60,55,58,55,50,49] 

data_t से ऊपर समय 0 पर शुरू लगातार डेटा बिंदुओं का एक दृश्य है, data_y प्रत्येक प्रस्तुति पर लोगों की मनाई गई संख्या का अनुक्रम है।

डेटा नीचे जैसा दिखता है (मैंने इसे आपके डेटा के करीब बनाने की कोशिश की)।

enter image description here

एल्गोरिथ्म के लिए कोड सरल है।

def holt_alg(h, y_last, y_pred, T_pred, alpha, beta): 
    pred_y_new = alpha * y_last + (1-alpha) * (y_pred + T_pred * h) 
    pred_T_new = beta * (pred_y_new - y_pred)/h + (1-beta)*T_pred 
    return (pred_y_new, pred_T_new) 

def smoothing(t, y, alpha, beta): 
    # initialization using the first two observations 
    pred_y = y[1] 
    pred_T = (y[1] - y[0])/(t[1]-t[0]) 
    y_hat = [y[0], y[1]] 
    # next unit time point 
    t.append(t[-1]+1) 
    for i in range(2, len(t)): 
     h = t[i] - t[i-1] 
     pred_y, pred_T = holt_alg(h, y[i-1], pred_y, pred_T, alpha, beta) 
     y_hat.append(pred_y) 
    return y_hat 

ठीक है, अब चलो हमारे भविष्यवक्ता फोन और टिप्पणियों के खिलाफ भविष्यवाणी परिणाम साजिश करते हैं:

import matplotlib.pyplot as plt 
plt.plot(data_t, data_y, 'x-') 
plt.hold(True) 

pred_y = smoothing(data_t, data_y, alpha=.8, beta=.5) 
plt.plot(data_t[:len(pred_y)], pred_y, 'rx-') 
plt.show() 

लाल हर बार बिंदु पर भविष्यवाणी परिणाम दिखाता है। मैंने alpha को 0.8 होने के लिए सेट किया है, ताकि सबसे हालिया अवलोकन अगले भविष्यवाणी को बहुत प्रभावित कर सके। यदि आप इतिहास डेटा अधिक वजन देना चाहते हैं, तो बस पैरामीटर alpha और beta के साथ खेलें। यह भी ध्यान दें, t=15 पर लाल रेखा पर सही डेटा बिंदु आखिरी भविष्यवाणी है, जिस पर हमारे पास अभी तक कोई अवलोकन नहीं है।

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

enter image description here

संबंधित मुद्दे