पूर्वानुमान: कैसे पता लगाने के लिए?

नीचे दिया गया लेख मेरी पुस्तक डेटा साइंस फॉर सप्लाई चैन फोरकास्ट का एक उद्धरण है, जो यहां उपलब्ध है। आप मेरे अन्य लेख यहाँ पा सकते हैं:

  • कैसे पता लगाने के लिए
  • आपूर्ति श्रृंखला पूर्वानुमान के लिए मशीन लर्निंग
  • आंतरायिक पूर्वानुमान के लिए क्रॉस्टन पूर्वानुमान
  • पूर्वानुमान KPI: RMSE, MAE, MAPE और पूर्वाग्रह
"मैं आज इस तरह की सामग्री (...) को परिभाषित करने का और प्रयास नहीं करूंगा, और शायद मैं ऐसा करने में बुद्धिमानी से कभी सफल नहीं हो सकता। लेकिन मुझे पता है कि जब मैं इसे देखूंगा।
कुम्हार स्टीवर्ट

1964 में, पॉटर स्टीवर्ट संयुक्त राज्य के सुप्रीम कोर्ट के न्यायधीश थे। वह आउटलेयर के बारे में चर्चा नहीं कर रहा था लेकिन क्या फिल्म द लवर्स थी या अश्लील नहीं थी।

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

ये आउटलेर्स आधुनिक आपूर्ति श्रृंखलाओं में हर समय बाहर रहते हैं। वे ज्यादातर दो मुख्य कारणों से होते हैं:

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

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

इस लेख में, हम इन आउटलेर्स को स्पॉट करने के लिए साढ़े तीन विचारों पर चर्चा करेंगे और उन्हें उचित स्तर पर वापस लाएंगे।

आइडिया # 1 - Winsorization

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

यह पहली तकनीक केवल हमारी ऐतिहासिक माँग के शीर्ष / नीचे x% मानों को xth प्रतिशतक की सीमा तक घटा देगी।

xth प्रतिशतक एक मान है जिसके नीचे एक समूह में टिप्पणियों का x% गिर जाएगा। उदाहरण के लिए, किसी उत्पाद के लिए 99% मांग का अवलोकन उसके 99 वें प्रतिशत से कम होगा।

बस एक निश्चित प्रतिशत तक मांग को कम करने की इस तकनीक को विनराइजेशन कहा जाता है। नाम चार्ल्स पी। विंसोर से आता है, जो कि XXth सदी की पहली छमाही से एक सांख्यिकीविद है।

यदि हम ऊपर के दो डमी डेटासेट पर 1 और 99 वें प्रतिशताइल को देखते हैं, तो हमें यही प्राप्त होता है:

इस तालिका में हम देखते हैं कि दोनों डेटासेट में सभी निम्न मान 4.4 तक बढ़ जाएंगे। आप नीचे दिए गए आंकड़े पर देख सकते हैं कि यह हमारे डेटासेट का एक हिस्सा काटता है। उच्च मानों को डेटासेट पर 16.6 से घटाकर आउटलेयर (आंकड़ा 10.1 देखें) और नीचे के डेटासेट के लिए 70.9 तक घटाया जाएगा (आंकड़ा 10.2 देखें)।

आपने देखा होगा कि विनराइजेशन ने हमें 4 या 5 जैसे गोल परिणाम नहीं दिए, लेकिन इसके बदले हमें यह 4.4 मिला। दरअसल, जैसा कि हमारे पास सटीक मान नहीं है, जो डेटासेट को 99% तक काट देता है, हम दो निकटतम मूल्यों के आधार पर एक रैखिक सन्निकटन करते हैं। यह है कि हमें गोल संख्याओं के बजाय ये संख्याएं कैसे मिलीं।

तो, क्या हम इस तकनीक से खुश हैं?
नहीं, हम नहीं।
- हमने आउटलेर के बिना एक डेटासेट पर नकली आउटलेर को देखा है।
- बाहरी लोगों के साथ डेटासेट पर, हमने बाहरी रूप से पर्याप्त रूप से कम नहीं किया है (यह 100 से 70.9 तक चला गया)।

बेशक, कोई व्यक्ति डेटासेट # 2 पर आगे की कमी को कम करने के लिए वाइनरीकरण की उच्च सीमा को 99% से 95% तक कम करने का प्रस्ताव कर सकता है, लेकिन दुर्भाग्य से यह भी डेटासेट # 1 पर प्रभाव डालेगा। यह एक अच्छा उपाय नहीं है। कोई इस निचली सीमा को हटाने का प्रस्ताव भी दे सकता है ताकि हम अपनी मांग को 4.4 तक न बढ़ा सकें। लेकिन, क्या होगा अगर हमारे पास लापता मांग के साथ अवधि है? क्या हमें इनको भी साफ नहीं करना चाहिए?

यह स्वयं करो
Excel आप आसानी से सूत्र = PERCENTILE.INC (श्रेणी, सीमा) का उपयोग करके Excel में कक्षों की श्रेणी के विभिन्न प्रतिशत प्राप्त कर सकते हैं। बेशक आपको ऊपरी सीमा के लिए एक बार (0.95–0.99 के मान के साथ) और एक बार निचली सीमा के लिए (0.01-0.05 के आसपास के मूल्य के साथ) इस सूत्र का उपयोग करना होगा।
अजगर हम आसानी से NumPy के लिए पायथन में हमारे डेटासेट को जीत सकते हैं। हम np.percentile (सरणी, प्रतिशतक) फ़ंक्शन के लिए किसी सरणी धन्यवाद के विभिन्न प्रतिशत की गणना कर सकते हैं।

आयात एनपीपी के रूप में सुन्न
high_limit = np.percentile (सरणी, 99)
लोअर_लिमिट = np.percentile (सरणी, 1)

ध्यान दें कि प्रतिशतक फ़ंक्शन 0 और 100 के बीच के मान के रूप में व्यक्त प्रतिशत को लेता है और एक्सेल की तरह अनुपात (यानी 0 और 1 के बीच का मूल्य) नहीं है।

फिर हम फ़ंक्शन np.clip (सरणी, न्यूनतम, अधिकतम) के लिए इन निम्न और उच्च सीमाओं के लिए सरणी को काट सकते हैं:

सरणी = np.clip (सरणी, a_min = lower_limit, a_max = high_limit)

आइडिया # 2 मानक विचलन

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

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

जहां n हमारे पास मांग टिप्पणियों की मात्रा है।

यदि हम मानते हैं कि हमारा डेटा सामान्य रूप से ऐतिहासिक माध्य के आसपास वितरित किया गया है, तो हम दो थ्रेसहोल्ड के बीच होने की मांग की संभावना की गणना कर सकते हैं। यहां शामिल सटीक गणित लेख के दायरे से परे हैं, और दुर्भाग्य से अधिक बार सामान्यता की धारणा का कड़ाई से सम्मान नहीं किया जाता है। ये दोनों थ्रेसहोल्ड डिमांड एवरेज (μ) पर दोनों दिशाओं में x गुणा मानक विचलन (directions) के प्रसार पर केंद्रित होंगे। अधिक अराजक मांग (यानी बड़ा है), व्यापक सीमाएं।

उदाहरण के लिए, हमारे पास रेंज में होने की 98% संभावना है: मांग औसत +/- 2.33 गुना मानक विचलन (जैसा कि ऊपर चित्र में है)। ताकि यदि हम उच्च और निम्न दोनों मूल्यों के शीर्ष 1% को हटाना चाहते हैं, तो हम मांग को μ +/- 2.33 to तक सीमित कर देंगे।

ध्यान दें कि इसका मतलब है कि हमारे पास μ + 2.33 + से कम होने की 99% संभावना है। और एक 99% संभावना μ - 2.33 2. से अधिक है।

अगर हमने इसे अपने उदाहरण डेटासेट पर लागू किया (पहले दो तालिकाओं को देखें), तो हमें ये सीमाएँ मिलेंगी:

आइए देखें कि विजेताओं की सीमा की तुलना में ये नई सामान्य सीमाएं कैसे व्यवहार करती हैं।

यह पहले से ही परिणामों के मुकाबले बहुत बेहतर है, जो हमें जीत के साथ मिला है:
- आउटलेयर के बिना डेटासेट पर (चित्र 10.4 देखें), हम किसी भी मांग के अवलोकन में परिवर्तन नहीं करते हैं (बिल्कुल सही! - जैसा हम चाहते हैं)।
- एकमुश्त के साथ डेटासेट पर, हम निम्न-मांग वाले बिंदुओं को नहीं बदलते हैं, लेकिन केवल वास्तविक रूपरेखा (चित्र 10.5 देखें)।

फिर भी, भले ही हम विनर्साइजेशन (70.9) की तुलना में अधिक प्रबंधनीय राशि (47.9) को कम कर देते हैं, यह अभी तक पर्याप्त नहीं हो सकता है।

तो, क्या अब हम खुश हैं?
अभी तक नहीं है।

जैसा कि आपको याद होगा, हमने त्रुटि को ऐतिहासिक अर्थ के आसपास माना। यह एक फ्लैट मांग के साथ एक उत्पाद के लिए ठीक है, लेकिन वास्तविक सीमा तब पैदा होगी जब आपके पास प्रवृत्ति या मौसमी के साथ एक उत्पाद होगा। उदाहरण के लिए, नीचे दी गई मौसमी तालिका पर, उच्चतम (या निम्नतम) अंक अब वे आउटलेर नहीं हैं जिन्हें आप निकालना चाहते हैं।

आप नीचे दिए गए आंकड़े पर इस मौसमी मांग पर जीतना और सामान्यीकरण कैसे काम कर सकते हैं।

यह केवल समझ में नहीं आता है: दोनों तकनीकें आउटकम के रूप में मौसम की चोटियों को झंडी दिखाती हैं और वे वास्तविक आउटलाइन को छोड़ देते हैं जो Y2 M11 है।

हम अपनी अगली तकनीक से इसका समाधान करेंगे।

यह स्वयं करो
एक्सेल आप सूत्र = STDEV.P (रेंज) के लिए धन्यवाद कोशिकाओं की एक श्रेणी के मानक विचलन की गणना कर सकते हैं। हमेशा की तरह, आप माध्य धन्यवाद = AVERAGE (श्रेणी) के लिए गणना कर सकते हैं। एक बार जब आपके पास ये दोनों होते हैं, तो आप उच्च और निम्न सीमाओं की गणना कर सकते हैं = NORM.INV (प्रतिशतक, माध्य, stdev) के लिए धन्यवाद। आमतौर पर, आप चाहते हैं कि उच्च प्रतिशतता लगभग 0.99 और निम्न 0.01 के आसपास होगी।
पायथन आप एक सरणी-जैसे (जैसे कि एक सूची, डेटाफ़्रेम आदि) के लिए या विधि (.std) के माध्यम से सीधे डेटाफ़्रेम के लिए np.std (सरणी) के माध्यम से मानक विचलन की गणना कर सकते हैं। ताकि अगर आपके पास एक DataFrame df हो तो आप बस टाइप कर सकते हैं:

m = df.mean ()
s = df.std ()

हम फिर एक बार सामान्य संभावनाओं की गणना करने के लिए SciPy लाइब्रेरी का उपयोग करेंगे। इसके बाद हम अपनी सीमा पर इसे लागू करने के लिए अपने DataFrame पर .clip विधि का उपयोग करेंगे।

scipy.stats से आयात मानदंड
# प्रत्येक मांग के अवलोकन की संभावनाओं को सुनिश्चित करें
प्रिंट (norm.cdf (df.values, m, s)। सराउंड (2))
limit_high = norm.ppf (0.99, m, s)
limit_low = norm.ppf (0.01, m, s)
df = df.clip (निचला = limit_low, ऊपरी = limit_high)

आइडिया # 3 मानक विचलन त्रुटि

दूसरा विचार हमें आउटलेयर करने का था, प्रत्येक अवलोकन की मांग के मुकाबले की तुलना करना था। हमने देखा कि इसका कोई मतलब नहीं है अगर हमारे पास एक प्रवृत्ति या एक मौसमीता है जो अवलोकन और ऐतिहासिक अर्थ के बीच का अंतर प्रासंगिक नहीं है।

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

चलिए हम ऊपर दिए गए मौसमी उदाहरण को वापस लेते हैं। हम ऐतिहासिक मांग की तुलना एक साधारण (लेकिन मौसमी) पूर्वानुमान से करेंगे जिसके लिए हमारे पास है।

यदि हम इस तरह के पूर्वानुमान के लिए हमारे पास मौजूद त्रुटि की गणना करते हैं (जो कि केवल ऐतिहासिक मांग का एक औसत है), तो हम 0.4 की औसत त्रुटि और 3.2 का मानक विचलन प्राप्त करेंगे (यह निश्चित रूप से हमारे द्वारा की गई त्रुटि से काफी प्रभावित होता है) Y2 M11)। यदि हमने इस माध्यम से 99% विश्वास अंतराल लिया, तो हम पूर्वानुमान त्रुटियों को -0.4 +/- 2.33 x 3.2 = -8,7 में सिकोड़ लेंगे। आप नीचे दिए गए आंकड़े पर देख सकते हैं कि पूर्वानुमान के चारों ओर की ये सीमाएं मौसमी मांग के अनुसार कैसे पूरी तरह से फिट होती हैं।

अब हम Y2 M11 से अपनी बाहरी स्थिति को ठीक कर सकते हैं। मांग 19 थी लेकिन इस अवधि के लिए पूर्वानुमान 5 था। अधिकतम स्वीकार्य मूल्य तब 5 + 7 = 12. है इसका मतलब यह है कि हम इस नए मूल्य (12) द्वारा Y2 M11 (19) के बाहरी हिस्से को बदल सकते हैं।

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

इस विधि की ठीक ट्यूनिंग आपको एक सीमा के रूप में कितने मानक विचलन लेना चाहिए? है - बेशक - आप प्रयोग करने के लिए छोड़ दिया ...

यह स्वयं करो
पाइथन यदि आपके पास पूर्वानुमान के रूप में एक कॉलम के साथ एक पांडास डेटाफ़्रेम है और दूसरा मांग के रूप में (हमारे घातीय चौरसाई मॉडल से विशिष्ट आउटपुट), हम इस कोड का उपयोग कर सकते हैं:

df ["त्रुटि"] = df ["पूर्वानुमान"] - df ["मांग"]
m = df ["त्रुटि"]। माध्य ()
s = df ["त्रुटि"]। std ()
scipy.stats से आयात मानदंड
limit_high = norm.ppf (0.99, m, s) + df ["पूर्वानुमान"]
limit_low = norm.ppf (0.01, m, s) + df ["पूर्वानुमान"]
df ["अपडेट"] = df ["डिमांड"]। क्लिप (निचला = limit_low, ऊपरी = limit_high)
प्रिंट (DF)

अतिरिक्त प्रयास की जरूरत है!

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

  1. ऐतिहासिक माँग के विरुद्ध पहले पूर्वानुमान लगाएँ।
  2. त्रुटि, त्रुटि माध्य और त्रुटि मानक विचलन की गणना करें
  3. कम और ऊपरी स्वीकार्य थ्रेसहोल्ड (त्रुटि माध्य और मानक विचलन के आधार पर) की गणना करें।
  4. पहले बताए अनुसार आउटलेर्स को पहचानें।
  5. त्रुटि माध्य और मानक विचलन को फिर से गणना करें, लेकिन आउटलेर्स को छोड़कर।
  6. इन नए मूल्यों के आधार पर निचले और ऊपरी स्वीकार्य थ्रेसहोल्ड को अपडेट करें।
  7. नई सीमा के आधार पर बाह्य मानों को अपडेट करें।

यदि हम ऊपर से अपने मौसमी उदाहरण को वापस लेते हैं, तो शुरू में हमारे पास पूर्वानुमान त्रुटि 0.4 और मानक विचलन 3.22 था। यदि हम Y2 M11 बिंदु को हटाते हैं, तो हमें -0.1 का एक त्रुटि अर्थ और 2.3 का मानक विचलन प्राप्त होता है। इसका मतलब है कि अब पूर्वानुमान के आसपास थ्रेसहोल्ड -5.3,5.2 हैं। Y2 M11 में हमारी बाहरी स्थिति तब 10 (हमारी पिछली तकनीक के साथ 12 के बजाय) अपडेट की जाएगी।

यह स्वयं करो
हम अपने पिछले विचार से अपना कोड वापस ले लेंगे और त्रुटि माध्य और मानक विचलन मानों को अद्यतन करने के लिए एक नया चरण जोड़ेंगे।

df ["त्रुटि"] = df ["पूर्वानुमान"] - df ["मांग"]
m = df ["त्रुटि"]। माध्य ()
s = df ["त्रुटि"]। std ()
scipy.stats से आयात मानदंड
प्रोब = norm.cdf (df ["त्रुटि"], m, s)
outliers = (prob> 0.99) | (प्रो <0.01)
एम 2 = डीएफ ["त्रुटि"] [~ आउटलेयर] ।मीन ()
s2 = df ["त्रुटि"] [~ आउटलेयर] .std ()
limit_high = norm.ppf (0.99, m2, s2) + df ["पूर्वानुमान"]
limit_low = norm.ppf (0.01, m2, s2) + df ["पूर्वानुमान"]
df ["अपडेट"] = df ["डिमांड"]। क्लिप (निचला = limit_low, ऊपरी = limit_high)
प्रिंट (DF)

लेखक के बारे में

निकोलस वांडेपुत एक आपूर्ति श्रृंखला डेटा वैज्ञानिक है जो मांग पूर्वानुमान और इन्वेंट्री ऑप्टिमाइज़ेशन में विशेष है।
2016 में, उन्होंने अपनी कंसल्टेंसी कंपनी SupChains (www.supchains.com) की स्थापना की; दो साल बाद, उन्होंने SKU Science (www.skuscience.com) की आपूर्ति श्रृंखला प्रबंधन के लिए एक स्मार्ट ऑनलाइन मंच की सह-स्थापना की।
यदि आप पूर्वानुमान और मशीन सीखने में रुचि रखते हैं, तो आप आपूर्ति श्रृंखला पूर्वानुमान के लिए उसकी पुस्तक डेटा साइंस खरीद सकते हैं