Staram się prognozować sprzedaż produktów w automatach. Problem polega na tym, że maszyna jest napełniana w nieregularnych odstępach czasu i przy każdym napełnieniu możemy rejestrować tylko zagregowaną sprzedaż od ostatniego napełnienia maszyny (tj. Nie mamy danych o codziennej sprzedaży). Zasadniczo mamy dane dotyczące zagregowanej sprzedaży w nieregularnych odstępach czasu. Odstępy zwykle wynoszą od 2 dni do 3 tygodni. Oto przykładowe dane dla jednego automatu i jednego produktu:
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
Nasz obecny naiwny algorytm polega na obliczaniu średniej sprzedaży na dzień poprzez podzielenie całkowitej ilości sprzedanej w ciągu ostatnich 90 dni przez 90.
Czy masz pomysł, jak poprawić prognozę sprzedaży na dzień? Muszę przewidzieć, co będzie sprzedawane przy następnej wizycie maszyny. Czy można zastosować algorytm wygładzania wykładniczego ze względu na charakter naszych danych?
Z góry dziękuję!
AKTUALIZACJA: Wielkie dzięki za wszystkie odpowiedzi i komentarze. Pozwólcie, że spróbuję podać nieco więcej kontekstu (uzasadnienie biznesowe pytania - oczywiście bardzo uproszczone). Mamy setki automatów. Każdego dnia musimy decydować, które z nich odwiedzić w celu uzupełnienia. W tym celu staramy się przewidzieć, jaki jest obecny stan maszyn i wybrać „najbardziej opróżnione” 20 maszyn. Dla każdej maszyny i produktu obliczamy średnią sprzedaż na dzień (SPD) przy użyciu naiwnego algorytmu opisanego powyżej. Następnie mnożymy SPD przez liczbę dni od ostatniego napełnienia maszyny, a wynikiem jest przewidywana sprzedana ilość.
źródło
Odpowiedzi:
Skupmy się na problemie biznesowym, opracujmy strategię rozwiązania tego problemu i zacznijmy wdrażać tę strategię w prosty sposób. Później można go poprawić, jeśli wysiłek to uzasadnia.
Problemem biznesu jest maksymalizacja zysków, oczywiście. Odbywa się to poprzez równoważenie kosztów napełniania maszyn z kosztami utraconej sprzedaży. W obecnym składzie koszty ponownego napełniania maszyn są stałe: 20 można uzupełniać każdego dnia. Koszt utraconej sprzedaży zależy zatem od częstotliwości, z jaką maszyny są puste.
Koncepcyjny model statystyczny tego problemu można uzyskać, opracowując sposób oszacowania kosztów dla każdej maszyny na podstawie wcześniejszych danych. oczekiwanodzisiejszy koszt nieobsługiwania maszyny w przybliżeniu równa się szansie, że skończy jej się razy szybkość, z jaką jest używana. Na przykład, jeśli maszyna ma dziś 25% szans na opróżnienie i średnio sprzedaje 4 butelki dziennie, jej oczekiwany koszt wynosi 25% * 4 = 1 butelka utraconej sprzedaży. (Przetłumacz to na dolary, jak chcesz, nie zapominając, że jedna utracona sprzedaż wiąże się z niematerialnymi kosztami: ludzie widzą pustą maszynę, uczą się na niej nie polegać itp. Możesz nawet dostosować ten koszt do lokalizacji maszyny; niejasne maszyny działają przez chwilę pusto, co może wiązać się z niewielkimi kosztami niematerialnymi.) Można założyć, że ponowne napełnienie maszyny natychmiast zresetuje oczekiwaną stratę do zera - rzadkie jest, aby maszyna była opróżniana codziennie (nie chcesz). ..). W miarę upływu czasu,
Prosty model statystyczny wzdłuż tych linii proponuje wahania używać urządzenia pojawiają się losowo. Sugeruje to model Poissona . W szczególności możemy założyć, że maszyna ma dzienną stawkę sprzedaży butelek i że liczba sprzedana w okresie dni ma rozkład Poissona z parametrem . (Inne modele mogą być sformułowane tak, aby obsłużyć możliwości skupień sprzedaży; ten zakłada, że sprzedaż jest indywidualna, przerywana i niezależna od siebie).x θ xθ x θx
W niniejszym przykładzie zaobserwowane czasy trwania wynoszą a odpowiadająca sprzedaż wyniosła . Maksymalizacja prawdopodobieństwa daje : ta maszyna sprzedaje około dwóch butelek dziennie. Historia danych nie jest wystarczająco długa, aby zasugerować, że potrzebny jest bardziej skomplikowany model; jest to odpowiedni opis tego, co zaobserwowano do tej pory.y = ( 4 , 14 , 4 , 16 , 16 , 12 , 7 , 16 , 24 , 48 ) θ = 1,8506x=(7,7,7,13,11,9,8,7,8,10) y=(4,14,4,16,16,12,7,16,24,48) θ^=1.8506
Czerwone kropki pokazują sekwencję sprzedaży; niebieskie kropki są szacunkami opartymi na szacunkowym maksymalnym prawdopodobieństwie typowego wskaźnika sprzedaży.
Uzbrojeni w szacunkową szybkość sprzedaży, możemy dalej obliczyć prawdopodobieństwo, że maszyna może być pusta po upływie dni: wynika ona z uzupełniającej funkcji skumulowanej dystrybucji (CCDF) rozkładu Poissona, ocenianej na podstawie wydajności maszyny (zakładanej mieć 50 na następnym rysunku i przykładach poniżej). Mnożenie przez szacowany współczynnik sprzedaży daje wykres oczekiwanej dziennej straty sprzedaży w funkcji czasu od ostatniego uzupełnienia:t
Oczywiście krzywa ta rośnie najszybciej w pobliżu dni, kiedy maszyna najprawdopodobniej się skończy. To, co dodaje do naszego zrozumienia, polega na pokazaniu, że znaczny wzrost zaczyna się tydzień wcześniej. Inne maszyny o innych stawkach będą miały bardziej stromy lub płytszy wzrost: będą to przydatne informacje.50/1.85=27
Biorąc pod uwagę taki wykres dla każdej maszyny (której wydaje się, że jest ich kilkaset), możesz łatwo zidentyfikować 20 maszyn, które obecnie odczuwają największą oczekiwaną stratę: ich obsługa jest optymalną decyzją biznesową. (Należy pamiętać, że każda maszyna będzie miała własną szacunkową szybkość i będzie w swoim punkcie wzdłuż swojej krzywej, w zależności od tego, kiedy była ostatnio serwisowana). Nikt tak naprawdę nie musi patrzeć na te wykresy: identyfikacja maszyn do obsługi na tej podstawie jest łatwa zautomatyzowane za pomocą prostego programu lub nawet arkusza kalkulacyjnego.
To dopiero początek. Z czasem dodatkowe dane mogą sugerować modyfikacje tego prostego modelu: możesz wziąć pod uwagę weekendy i święta lub inny przewidywany wpływ na sprzedaż; może istnieć cykl tygodniowy lub inne cykle sezonowe; w prognozach mogą pojawić się długoterminowe trendy. Być może warto wyśledzić odległe wartości reprezentujące nieoczekiwane jednorazowe uruchomienia na maszynach i uwzględnić tę możliwość w szacunkach strat itp. Wątpię jednak, że trzeba będzie się bardzo martwić szeregową korelacją sprzedaży: trudno myśleć jakiegokolwiek mechanizmu powodującego taką rzecz.
Och, tak: jak uzyskać oszacowanie ML? Użyłem optymalizatora numerycznego, ale generalnie zbliżysz się po prostu dzieląc całkowitą sprzedaż w ostatnim okresie przez długość okresu. W przypadku tych danych, czyli 163 butelek sprzedawanych od 12.09.2011 do 27.02.2012, okres 87 dni: butelki dziennie. Wystarczająco blisko do i niezwykle prosty w implementacji, dzięki czemu każdy może od razu rozpocząć te obliczenia. (Między innymi R i Excel z łatwością obliczą CCDF Poissona: modelują następnie obliczenia 1,8506θ^=1.87 1.8506
dla programu Excel (
A2
to komórka zawierająca czas od ostatniego uzupełnienia iTheta
jest szacunkową dzienną stawką sprzedaży) orazdla R.)
Bardziej wymyślne modele (które uwzględniają trendy, cykle itp.) Będą musiały wykorzystywać regresję Poissona do swoich oszacowań.
NB Dla miłośników: Celowo unikam dyskusji o niepewnościach w szacowanych stratach. Ich obsługa może znacznie skomplikować obliczenia. Podejrzewam, że bezpośrednie wykorzystanie tych niepewności nie zwiększyłoby wartości decyzji. Przydatna może być jednak świadomość niepewności i ich rozmiarów; które mogą być przedstawione za pomocą pasm błędów na drugim rysunku. Na zakończenie chciałbym jeszcze raz podkreślić charakter tej liczby: drukuje liczby, które mają bezpośrednie i jasne znaczenie biznesowe; mianowicie oczekiwane straty; nie przedstawia bardziej abstrakcyjnych rzeczy, takich jak przedziały ufności wokół , które mogą być interesujące dla statystyk, ale będą po prostu tak dużym hałasem dla decydentów.θ
źródło
Myślę, że zazwyczaj będziesz miał pierwszy krok do przejścia na zwykłe szeregi czasowe. Powiedziałeś, że bierzesz średnio 90 dni. Ponieważ masz dane, które są częstsze, myślę, że rozsądniej jest wykorzystać większość tego, co masz, biorąc dni między każdą obserwacją i dzieląc je przez liczbę przedmiotów sprzedanych w tym okresie (zakładając, że druga kolumna to).
Jako zrzeczenie się jestem całkowitym amatorem, więc chcesz skorzystać z porady eksperta takiego jak IrishStat w sprawie następującego kodu (na przykład powiedział, że ETS jest złym modelem, więc traktuj to tylko jako przykład zabawki), ale z nadzieją że oszczędza to trochę czasu, oto kod R, z którym możesz grać:
Powstały wykres to:
źródło
To, co masz, to „przerywany problem z popytem”. Rozwiązaliśmy ten problem, przeliczając popyt na stopę, dzieląc rzeczywiste zapotrzebowanie przez liczbę dni w odstępie między serwisami. Szybkość tę można następnie modelować jako funkcję przenoszenia, aby przewidzieć szybkość, biorąc pod uwagę przewidywany przedział. Ta przewidywana stawka może być następnie przeliczona na żądanie. Należy dołożyć starań, aby wykryć zmiany strukturalne w częstości za pomocą wykrywania interwencji. Spróbuj googlować „Podejście modelowania przerywanego popytu przy użyciu metodologii funkcji przenoszenia”. Odsuńcie się bardzo od modelowego podejścia Croston lub Exponential Smoothing, ponieważ są one dość niedostateczne.
DODATKOWA ANALIZA:
Kiedy modelowałem Szybkość jako funkcję Interwału, otrzymałem następujące. Korzystając z prognozy INTERWAŁU z wykorzystaniem jej przeszłości, to równanie może następnie przewidzieć szybkość, którą można wykorzystać do przewidywania popytu. Ten rodzaj modelu pozwala na włączenie struktury autoregresyjnej w częstości, a także pozwala na częstości pulsów, przesunięć poziomów i / lub lokalnych trendów czasowych.
# (BOP) WARTOŚĆ BŁĘDU
INTERWAŁ WEJŚCIA SERII X1
WEJŚCIA SERII X2 I ~ P00002 12/03/11 IMPULS
SERIA WEJŚĆ X3 I ~ P00007 12/08/11 IMPULS
WEJŚCIA SERII X4 I ~ P00010 12/11/11 IMPULS
źródło