अनियमित अंतराल पर एकत्रित डेटा के आधार पर पूर्वानुमान कैसे लगाया जाए?


10

मैं वेंडिंग मशीन में उत्पादों की बिक्री का पूर्वानुमान लगाने की कोशिश कर रहा हूं। समस्या यह है कि मशीन अनियमित अंतराल पर भरी हुई है और प्रत्येक भराव पर हम मशीन के अंतिम भरण (यानी हमारे पास दैनिक बिक्री डेटा नहीं है) के बाद से एकत्र बिक्री को रिकॉर्ड कर सकते हैं। इसलिए मूल रूप से हमारे पास अनियमित अंतराल पर एकत्रित बिक्री के लिए डेटा है। अंतराल आमतौर पर 2 दिन और 3 सप्ताह के बीच होते हैं। यहाँ एक वेंडिंग मशीन और एक उत्पाद के लिए उदाहरण डेटा है:

27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2

हमारा वर्तमान भोला एल्गोरिथ्म पिछले 90 दिनों के दौरान बेची गई कुल मात्रा को 90 से विभाजित करके प्रति दिन औसत बिक्री की गणना करना है।

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

अग्रिम में धन्यवाद!

अद्यतन: सभी उत्तर और टिप्पणियों के लिए बहुत बहुत धन्यवाद। मुझे थोड़ा और संदर्भ देने की कोशिश करें (प्रश्न के पीछे व्यापारिक मामला - बहुत ही सरलीकृत)। हमारे पास सैकड़ों वेंडिंग मशीनें हैं। हर दिन हमें यह तय करना होगा कि उनमें से कौन सी 20 रिफिल के लिए जाएं। ऐसा करने के लिए हम यह अनुमान लगाने की कोशिश कर रहे हैं कि मशीनों की वर्तमान स्थिति क्या है और "खाली" 20 मशीनों का चयन करें। प्रत्येक मशीन और उत्पाद के लिए हम प्रति दिन औसत बिक्री की गणना कर रहे हैं (एसपीडी) ऊपर वर्णित भोले एल्गोरिथ्म का उपयोग करके। फिर हम मशीन के अंतिम भरण के बाद से दिनों की संख्या से एसपीडी को गुणा करते हैं और परिणाम बेची गई अनुमानित मात्रा है।


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

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

@IvanDimitrov: आपके डेटा में वास्तव में स्तंभ दो क्या है?
काइल ब्रांट

@KyleBrandt कॉलम दो, वेंडिंग मशीन की अंतिम यात्रा के बाद से बिकने वाली बोतलों की संख्या है। तो शीर्ष पंक्ति पर संख्या 48 का मतलब है कि 48 बोतलें 17/02 और 27/02 के बीच बेची गईं
इवान दिमित्रोव

जवाबों:


11

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

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

इस समस्या के लिए एक वैचारिक सांख्यिकीय मॉडल पिछले आंकड़ों के आधार पर मशीनों के प्रत्येक के लिए लागत का अनुमान लगाने के लिए किसी तरह तैयार करके प्राप्त किया जा सकता है। अपेक्षितआज एक मशीन की सर्विसिंग नहीं करने की लागत लगभग उस मौके के बराबर है जो इसे इस्तेमाल किए जाने की दर के बराबर है। उदाहरण के लिए, यदि किसी मशीन के आज खाली होने की 25% संभावना है और औसतन प्रति दिन 4 बोतलें बिकती हैं, तो इसकी अपेक्षित लागत खोई बिक्री में 25% * 4 = 1 बोतल के बराबर हो जाती है। (अनुवाद करें कि डॉलर में जैसा कि आप भूल जाएंगे कि एक खोई हुई बिक्री अमूर्त लागतों को नहीं भूलती है: लोग एक खाली मशीन देखते हैं, वे इस पर भरोसा नहीं करना सीखते हैं, आदि आप मशीन के स्थान के अनुसार भी इस लागत को समायोजित कर सकते हैं; कुछ अस्पष्ट हो सकता है; मशीनें कुछ समय के लिए खाली हो जाती हैं, इससे कुछ अमूर्त खर्च हो सकते हैं।) यह मानना ​​उचित है कि मशीन को फिर से भरना तुरंत शून्य पर अपेक्षित नुकसान को रीसेट कर देगा - यह दुर्लभ होना चाहिए कि हर दिन एक मशीन खाली हो जाएगी (आप चाहें नहीं। ..)। जैसे समय बीतता जाता है,

θxθx

x=(7,7,7,13,11,9,8,7,8,10)y=(4,14,4,16,16,12,7,16,24,48)θ^=1.8506

वास्तविक बनाम फिट

लाल डॉट्स बिक्री का क्रम दिखाते हैं; ब्लू डॉट्स विशिष्ट बिक्री दर के अधिकतम संभावना अनुमान के आधार पर अनुमान हैं।

t

समय के साथ नुकसान

50/1.85=27

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

यह सिर्फ शुरुआत है। समय के साथ, अतिरिक्त डेटा इस सरल मॉडल में संशोधन का सुझाव दे सकता है: आप सप्ताहांत और छुट्टियों या बिक्री पर अन्य प्रत्याशित प्रभावों के लिए जिम्मेदार हो सकते हैं; एक साप्ताहिक चक्र या अन्य मौसमी चक्र हो सकते हैं; पूर्वानुमान में शामिल करने के लिए दीर्घकालिक रुझान हो सकते हैं। आप मशीनों पर अप्रत्याशित एक बार चलने वाले प्रतिनिधित्व वाले मूल्यों को ट्रैक करना चाहते हैं और नुकसान के अनुमानों में इस संभावना को शामिल कर सकते हैं, आदि, मुझे संदेह है, हालांकि, बिक्री के सीरियल सहसंबंध के बारे में बहुत चिंता करना आवश्यक होगा: यह सोचना मुश्किल है किसी भी तंत्र के कारण ऐसी बात करना।

θ^=1.871.8506

1-POISSON(50, Theta * A2, TRUE)

एक्सेल के लिए ( A2अंतिम रीफिल के बाद से एक सेल Thetaहै और अनुमानित दैनिक बिक्री दर है) और

1 - ppois(50, lambda = (x * theta))

आर। के लिए)

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

θ


1
मेरे लिए यह धारणा कि बिक्री / घटनाएँ एक-दूसरे से स्वतंत्र हैं, अतार्किक प्रतीत होती हैं क्योंकि ये उसी नैकिन पर समय के साथ मापी जाती हैं। आपका दृष्टिकोण ऑटो-कॉरेल्टेड बिक्री डेटा के साथ कैसे व्यवहार करेगा जो स्तर में बदलाव हो सकता है? बस उत्सुक ?
आयरिशस्टैट

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

4

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

अस्वीकरण के रूप में मैं एक कुल शौकिया हूं, इसलिए आप निम्नलिखित कोड पर आयरिशस्टैट जैसे विशेषज्ञ की सलाह लेना चाहते हैं (उदाहरण के लिए, उन्होंने कहा कि ईटीएस एक खराब मॉडल है, इसलिए इसे केवल एक खिलौना उदाहरण के रूप में देखें), लेकिन उम्मीद में यह आपको कुछ समय बचाता है, यहाँ कुछ R कोड है जिसे आप खेल सकते हैं:

library("xts")
library("forecast")

x = read.table(text="27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2")

#Convert the data into an XTS object which works with irregular time series 
x.xts = xts(x[,2], as.POSIXct(x[,1], format="%d/%m/%Y"))

#Conver to a daily rate by taking the observed data and dividing it by 
#the number of days between observations
daily_rate <- lag(x.xts) / diff(index(x.xts))

#Generate a daily time series for the dates
dummy_dates <- seq(from=index(x.xts)[1], to=tail(index(x.xts), 1), by="day")

#Combine daily series with observered daily rate
m.xts <- merge(daily_rate, dummy_dates)

#Interpolate the daily sales -- kind of evil because we "invent" data
m.xts.interpolate <- na.approx(m.xts)

#Convert to regular time series
m.ts <- ts(m.xts.interpolate, freq=365, start=c(2011, 336))
#Clean up dimnames in case of stl forecast (just an R thing when converting from dataframes)
dim(m.ts) <- NULL

#Fit TS to an ETS model (Rudely ignoring IrishStat's advice that it is a bad model, but this is just an example)
fit <- ets(m.ts)

#Forecast and Plot
plot(forecast(fit, h=30))

परिणामी साजिश है:

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


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

2
@ इरिस्टटैट: हां, मेरे पास भी मेरे कोड में एक टिप्पणी है जो इस तथ्य की ओर इशारा करती है कि आपने कहा था कि यह एक बुरा मॉडल था, मैंने सोचा कि कुछ आर कोड प्रयोग करने के लिए एक आधार देकर लोगों की मदद कर सकते हैं।
काइल ब्रांट

1

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

अतिरिक्त विश्लेषण:

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

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) ERROR VALUE मूल्य

 Differencing                  1                                            
1CONSTANT                          .295       .840E-01   .0246     3.51

INPUT SERIES X1 INTERVAL

 Differencing                  1                                            
2Omega (input) -Factor #  1    0   .685E-01   .346E-01   .1193     1.98

INPUT SERIES X2 I ~ P00002 12/03/11 PULSE

 Differencing                  1                                            
3Omega (input) -Factor #  2    0   1.43       .168       .0010     8.52

INPUT SERIES X3 I ~ P00007 12/08/11 पल्स

 Differencing                  1                                            
4Omega (input) -Factor #  3    0  -.935       .168       .0051    -5.57

INPUT SERIES X4 I ~ P00010 12/11/11 पल्स

 Differencing                  1                                            
5Omega (input) -Factor #  4    0   1.37       .260       .0062     5.27

1
मुझे लगता है कि इस सवाल को थोड़ा गलत समझा जाता है: उनके पास रुक-रुक कर मांग नहीं है , उन्होंने लगातार मांग का पालन किया है , और वह जाहिरा तौर पर प्रति दिन निरंतर अंतर्निहित मांग मानकर खुश हैं। वास्तव में ट्रांसफर फंक्शन अप्रोच मोटे तौर पर ऐसा लगता है कि वह यहां कोशिश कर रहा है, जिसमें एक रैखिकता धारणा, 90 दिन की खिड़की, और कोई सहसंयोजक नहीं है। एफडब्ल्यूआईडब्ल्यू पिछले पढ़ने के बाद से (बहिर्जात) दिनों के खिलाफ मांग को प्रति दिन लगभग 2.2 आइटम मांगता है, लेकिन इस अनुमान के आसपास उच्च अनिश्चितता है।
संयुक्ताक्षरी

@ConjugatePrior वह वास्तविक मांग को प्रतिदिन नहीं देख सकता है और इस प्रकार अनन्त अंतराल पर नमूने दे सकता है, जो वास्तव में रुक-रुक कर मांग की समस्या के समतुल्य है। उसकी "दर" को 12/16 पर 3 अपवादों (दालों) के साथ एक यादृच्छिक चलने के रूप में जाना जा सकता है; 2 / 02, 2/27। हमारे विचार में इंटरवल के एक फंक्शन के रूप में रेट को मॉडल करना है, फिर इंटरवल की भविष्यवाणी करें और फिर मांग की भविष्यवाणी करें। आप इंटरवल के एक फंक्शन के रूप में डिमांड करते दिखाई देते हैं, जो साधारण औसत दर प्राप्त करता है, जो इस मामले में गंभीर या प्रतिकूल है 3 विषम डेटा बिंदुओं से प्रभावित है और ऑटोरेग्रेसिव संरचना को प्रतिबिंबित नहीं करता है।
आयरिशस्टैट

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

@ConjugatePrior अंतराल के एक समारोह के रूप में दर से पता चला है कि यह दर पिछली दरों पर बहुत अधिक निर्भर थी और तीन "असामान्य दरों" से भी प्रभावित हुई थी। किसी स्तर की शिफ्ट की पहचान नहीं की गई। मुझे जो कहना चाहिए था, वह यह था कि बिना किसी स्थिर दर के बेतरतीब ढंग से चलना इस प्रकार कोई अचूक चलन नहीं था।
आयरिशस्टैट

1
@IrishStat उत्तर के लिए बहुत बहुत धन्यवाद। मैं एक ट्रांसफर फ़ंक्शन का उपयोग करके आंतरायिक मांग के बारे में पढ़ूंगा। एक छोटा सुधार: हमें इंटरवल की भविष्यवाणी नहीं करनी है। हमें यह तय करना होगा कि दर की भविष्यवाणी के आधार पर मशीन का दौरा कब किया जाए। उदाहरण के लिए एक व्यावसायिक नियम "मशीन पर जाएँ जब वह 60% खाली हो"
इवान दिमित्रोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.