TATECHATLAS
◎ हिन्दी
गणित और मॉडल

भविष्य की जानकारी लीक किए बिना समय-श्रृंखला के पूर्वानुमान का मूल्यांकन करें

डेटा को समय के क्रम में बाँटें और उसे तैयार करने वाले चरण केवल पुराने प्रशिक्षण डेटा से सीखें।

इस पृष्ठ पर

पूर्वानुमान की जाँच में पहले के अवलोकनों पर मॉडल प्रशिक्षित करें और बाद के अवलोकनों पर उसका मूल्यांकन करें। यादृच्छिक विभाजन से मॉडल को ऐसी जानकारी मिल सकती है जो वास्तविक पूर्वानुमान करते समय उपलब्ध नहीं होती।

पहले वास्तविक पूर्वानुमान का समय तय करें

मानें कि दुकान रविवार शाम को अगले सात दिनों की माँग बताती है। मूल्यांकन वही समय दोहराए: अगले सप्ताह की बिक्री और रविवार के बाद प्रकाशित जानकारी inputs नहीं हो सकती। Random split पुराने और नए रिकॉर्ड मिला सकता है और मॉडल वास्तविक उपयोग से बेहतर दिख सकता है।

Forecast origin, horizon और हर input कब उपलब्ध होता है, लिखें। Calendar पहले ज्ञात हो सकता है; मापा तापमान या बाद में संशोधित बिक्री नहीं। मौसम चाहिए तो उस समय उपलब्ध weather forecast लें, बाद का observation नहीं।

पूर्वानुमान की अवधि स्पष्ट रखें

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

from sklearn.model_selection import TimeSeriesSplit

observations = list(range(12))
splitter = TimeSeriesSplit(n_splits=3, test_size=2, gap=1)
for train, test in splitter.split(observations):
    print(train.tolist(), test.tolist())

समय के अनुसार विभाजन का ठोस उदाहरण

ऊपर के छोटे उदाहरण में 12 क्रमबद्ध observations, दो-दो observations की तीन evaluation windows और एक पंक्ति का gap है। पहले training positions 0–4 और evaluation 6–7 हैं; फिर 0–6 तथा 8–9; अंत में 0–8 तथा 10–11।

Gap चुना exclusion interval है, leakage का सार्वभौमिक इलाज नहीं। प्रकाशन में देरी या overlapping target windows के अनुसार चुनें। TimeSeriesSplit पंक्तियाँ गिनता है, इसलिए दो पंक्तियाँ दो दिन जरूरी नहीं। समय का क्रम, duplicates, missing periods और समान अंतर जाँचें।

समय से जुड़ी धारणाएँ जाँचें

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

Split के बाहर भी leakage खोजें

Scaling, imputation और feature selection हर fold के training भाग पर ही fit करें। उसी fitted transformation को अगले test भाग पर लागू करें। Pipeline learned preprocessing जोड़ती है, लेकिन पहले से भविष्य रखने वाला feature ठीक नहीं करती।

दिन t की बिक्री के लिए trailing mean में पिछले observations ही हों, जैसे shift(1).rolling(7).mean()। Centered window भविष्य शामिल कर सकती है। पूरे सप्ताह का forecast एक साथ बनाते समय उसके शुरुआती दिनों की वास्तविक बिक्री भी अज्ञात है; उसे आगे के दिनों में ज्ञात input न बनाएं।

Tuning से पहले सरल baseline लें

काम के अनुसार baseline चुनें: अंतिम ज्ञात मान या पिछले seasonal cycle का समान समय। Model के समान origins और horizon पर errors निकालें। नीचे के उदाहरण में actual 100, 110, 90 और हर prediction 100 होने से MAE लगभग 6.67 है, लक्ष्य की इकाइयों में।

Horizon और अवधि के अनुसार errors देखें; एक औसत अधिक माँग वाले दिनों की खराब गुणवत्ता छिपा सकता है। Zero के पास percentage metrics समस्याजनक हैं। अंतिम अवधि model selection से अलग रखें और डेटा बनने की स्थितियाँ बदलें तो फिर मूल्यांकन करें।

actual = [100, 110, 90]
predicted = [100, 100, 100]
mae = sum(abs(a - p) for a, p in zip(actual, predicted)) / len(actual)
print(round(mae, 2))

क्या जाँचें

  • डेटा को समय के क्रम में बाँटें।
  • डेटा तैयार करने के चरण हर प्रशिक्षण विभाजन के भीतर फिट करें।
  • पूर्वानुमान के समय फीचर की उपलब्धता जाँचें।

इस उदाहरण में अवलोकन समय के क्रम में रखे गए हैं। TimeSeriesSplit पंक्तियों की स्थिति का उपयोग करता है; तुलना योग्य समयावधियों के लिए समान अंतराल की जाँच करें।

स्रोत

  1. scikit-learn: TimeSeriesSplit ↗
  2. scikit-learn: common pitfalls ↗
  3. pandas: time series ↗
  4. pandas: rolling windows ↗
ऊपर जाएँ ↑