Wie kann anhand aggregierter Daten über unregelmäßige Intervalle prognostiziert werden?

10

Ich versuche, den Verkauf von Produkten in Verkaufsautomaten vorherzusagen. Das Problem ist, dass die Maschine in unregelmäßigen Abständen gefüllt wird und wir bei jeder Befüllung nur die aggregierten Verkäufe seit der letzten Befüllung der Maschine erfassen können (dh wir haben keine täglichen Verkaufsdaten). Grundsätzlich haben wir also Daten für aggregierte Verkäufe in unregelmäßigen Abständen. Die Intervalle liegen normalerweise zwischen 2 Tagen und 3 Wochen. Hier sind Beispieldaten für einen Automaten und ein Produkt:

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

Unser derzeitiger naiver Algorithmus besteht darin, den durchschnittlichen Umsatz pro Tag zu berechnen, indem die in den letzten 90 Tagen verkaufte Gesamtmenge durch 90 geteilt wird.

Haben Sie eine Idee, wie Sie die Umsatzprognose pro Tag verbessern können? Ich muss vorhersagen, was beim nächsten Besuch der Maschine verkauft wird. Ist es aufgrund der Art unserer Daten möglich, einen exponentiellen Glättungsalgorithmus zu verwenden?

Danke im Voraus!

UPDATE: Vielen Dank für alle Antworten und Kommentare. Lassen Sie mich versuchen, etwas mehr Kontext zu geben (der Business Case hinter der Frage - natürlich sehr vereinfacht). Wir haben Hunderte von Verkaufsautomaten. Jeden Tag müssen wir entscheiden, welche 20 von ihnen zum Nachfüllen besucht werden sollen. Zu diesem Zweck versuchen wir, den aktuellen Status der Maschinen vorherzusagen und die "leersten" 20 Maschinen auszuwählen. Für jede Maschine und jedes Produkt berechnen wir den durchschnittlichen Umsatz pro Tag (SPD) unter Verwendung des oben beschriebenen naiven Algorithmus. Dann multiplizieren wir die SPD mit der Anzahl der Tage seit der letzten Befüllung der Maschine und das Ergebnis ist die vorhergesagte verkaufte Menge.

Ivan Dimitrov
quelle
Ich denke, das ist eine interessante Frage. Meine Antwort auf Ihre genaue Frage und Ihren Datensatz lautet: Ist das wichtig? und: mehr Daten erhalten. Ich denke auch, dass es nützlich ist zu wissen, wie groß die Kapazität für den Automaten ist.
Adam
@Adam Die Kapazität für dieses Produkt beträgt 50 Flaschen. Vielleicht ist meine Beschreibung des Problems nicht klar genug. Ich werde versuchen, es ein wenig zu bearbeiten, um mehr Kontext zu geben. Grundsätzlich suche ich nach Ideen zur Lösung des allgemeinen Problems und bin für alle bisherigen Kommentare sehr dankbar. Der spezifische Datensatz wird nur als Beispiel angegeben, wie die Daten aussehen. Für andere Verkaufsautomaten kann ich Daten für einen viel längeren Zeitraum bereitstellen.
Ivan Dimitrov
@IvanDimitrov: Was genau ist Spalte zwei in Ihren Daten?
Kyle Brandt
@KyleBrandt Spalte zwei ist die Anzahl der Flaschen, die seit dem letzten Besuch des Automaten verkauft wurden. Die Nummer 48 in der obersten Reihe bedeutet also, dass zwischen dem 17.02. Und dem 27.02. 48 Flaschen verkauft wurden
Ivan Dimitrov

Antworten:

11

Konzentrieren wir uns auf das Geschäftsproblem, entwickeln eine Strategie, um es anzugehen, und beginnen mit der Implementierung dieser Strategie auf einfache Weise. Später kann es verbessert werden, wenn der Aufwand dies rechtfertigt.

Das Geschäftsproblem besteht natürlich darin, die Gewinne zu maximieren. Dies geschieht hier, indem die Kosten für Nachfüllmaschinen gegen die Kosten für Umsatzverluste abgewogen werden. In der aktuellen Formulierung sind die Kosten für das Nachfüllen der Maschinen festgelegt: 20 können täglich nachgefüllt werden. Die Kosten für Umsatzverluste hängen daher von der Häufigkeit ab, mit der Maschinen leer sind.

Ein konzeptionelles statistisches Modell für dieses Problem kann erhalten werden, indem eine Möglichkeit entwickelt wird, die Kosten für jede der Maschinen basierend auf vorherigen Daten zu schätzen. Das erwarteteDie Kosten für die Nichtwartung einer Maschine entsprechen heute ungefähr der Wahrscheinlichkeit, dass sie erschöpft ist, mal der Rate, mit der sie verwendet wird. Wenn beispielsweise eine Maschine heute eine 25% ige Chance hat, leer zu sein, und durchschnittlich 4 Flaschen pro Tag verkauft, entsprechen die erwarteten Kosten 25% * 4 = 1 Flasche Umsatzverlust. (Übersetzen Sie das in Dollar, wie Sie wollen, und vergessen Sie nicht, dass ein verlorener Verkauf immaterielle Kosten verursacht: Die Leute sehen eine leere Maschine, sie lernen, sich nicht darauf zu verlassen usw. Sie können diese Kosten sogar an den Standort einer Maschine anpassen; Maschinen, die für eine Weile leer laufen, können nur wenige immaterielle Kosten verursachen.) Man kann davon ausgehen, dass durch das Nachfüllen einer Maschine der erwartete Verlust sofort auf Null zurückgesetzt wird - es sollte selten vorkommen, dass eine Maschine jeden Tag geleert wird (nicht gewünscht). ..). Mit der Zeit

θ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

Tatsächlich gegen fit

Die roten Punkte zeigen die Reihenfolge der Verkäufe; Die blauen Punkte sind Schätzungen, die auf der Maximum-Likelihood-Schätzung der typischen Verkaufsrate basieren.

t

Verlust im Laufe der Zeit

50/1.85=27

Anhand eines solchen Diagramms für jede Maschine (von denen es anscheinend ein paar Hundert gibt) können Sie leicht die 20 Maschinen identifizieren, bei denen derzeit der größte erwartete Verlust zu verzeichnen ist: Die Wartung dieser Maschinen ist die optimale Geschäftsentscheidung. (Beachten Sie, dass jede Maschine ihre eigene geschätzte Rate hat und sich an ihrem eigenen Punkt entlang ihrer Kurve befindet, abhängig davon, wann sie zuletzt gewartet wurde.) Niemand muss sich diese Diagramme ansehen: Die Identifizierung der Maschinen, die auf dieser Basis gewartet werden sollen, ist einfach automatisiert mit einem einfachen Programm oder sogar mit einer Tabelle.

Dies ist nur der Anfang. Im Laufe der Zeit können zusätzliche Daten Änderungen an diesem einfachen Modell vorschlagen: Sie können Wochenenden und Feiertage oder andere erwartete Einflüsse auf den Umsatz berücksichtigen; es kann einen wöchentlichen Zyklus oder andere saisonale Zyklen geben; Es kann langfristige Trends geben, die in die Prognosen einbezogen werden müssen. Vielleicht möchten Sie abweichende Werte verfolgen, die unerwartete einmalige Läufe auf den Maschinen darstellen, und diese Möglichkeit in die Verlustschätzungen usw. einbeziehen. Ich bezweifle jedoch, dass es notwendig sein wird, sich über die serielle Korrelation von Verkäufen Gedanken zu machen: Es ist schwer zu denken von irgendeinem Mechanismus, um so etwas zu verursachen.

θ^=1.871.8506

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

für Excel ( A2ist eine Zelle, die die Zeit seit dem letzten Nachfüllen enthält und Thetadie geschätzte tägliche Verkaufsrate ist) und

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

für R.)

Die schickeren Modelle (die Trends, Zyklen usw. enthalten) müssen die Poisson-Regression für ihre Schätzungen verwenden.

θ

whuber
quelle
1
Für mich erscheint die Annahme, dass Verkäufe / Ereignisse unabhängig voneinander sind, unlogisch, da es sich um Messungen handelt, die im Laufe der Zeit an derselben Nachine durchgeführt wurden. Wie würde Ihr Ansatz mit automatisch korrelierten Verkaufsdaten umgehen, bei denen sich das Niveau möglicherweise geändert hat? Nur neugierig ?
IrishStat
1
Ich glaube, ich habe einen Weg zur Bewertung und zum Umgang mit wahrscheinlichen Formen der "Autokorrelation" skizziert. Sie würden sich in einer herkömmlichen Zeitreihenanalyse nicht als solche manifestieren, selbst wenn regelmäßig verteilte Daten verfügbar wären. Die zeitliche Korrelation würde sich aus der Korrelation externer Faktoren wie wöchentlicher oder saisonaler Zyklen ergeben. Eine interessante Form würde sich aus der zeitlichen Häufung von Einkäufen ergeben (z. B. kurz nach dem Mittagessen oder am Wochenende). "Netto-Pegeländerungen" können bei Bedarf durch Trendanpassung behandelt werden, aber die einfache Verwendung eines laufenden Mittelwerts würde dies automatisch erledigen.
whuber
4

Ich denke, Sie werden normalerweise den ersten Schritt der Konvertierung in eine reguläre Zeitreihe haben. Sie sagten, Sie nehmen durchschnittlich 90 Tage. Da Sie Daten haben, die häufiger vorkommen, ist es meiner Meinung nach sinnvoller, das Beste aus Ihren Daten herauszuholen, indem Sie die Tage zwischen den einzelnen Beobachtungen durch die Anzahl der für diesen Zeitraum verkauften Artikel dividieren (vorausgesetzt, dies ist Ihre zweite Spalte ist).

Als Haftungsausschluss bin ich ein totaler Amateur, daher möchten Sie den Rat eines Experten wie IrishStat bezüglich des folgenden Codes einholen (er sagte beispielsweise, ETS sei ein schlechtes Modell, behandeln Sie dies also nur als Spielzeugbeispiel), aber in der Hoffnung Damit Sie Zeit sparen, finden Sie hier einen R-Code, mit dem Sie spielen können:

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))

Das resultierende Diagramm ist:

Geben Sie hier die Bildbeschreibung ein

Kyle Brandt
quelle
Haben Sie meine Antwort gelesen? "Wir haben dieses Problem gelöst, indem wir die Nachfrage in eine Rate umgerechnet haben, indem wir die tatsächliche Nachfrage durch die Anzahl der Tage im Intervall zwischen den Wartungsarbeiten dividiert haben." Anstatt ein Modell wie Sie anzunehmen, habe ich ein nützliches Modell identifiziert. Ihre Prognosen sind explosiv, da sie den jüngsten "anomalen Raten" glauben, anstatt sie anzupassen.
IrishStat
2
@IrishStat: Ja, ich habe sogar einen Kommentar in meinem Code, der darauf hinweist, dass Sie sagten, es sei ein schlechtes Modell. Ich dachte nur, dass ein R-Code den Menschen helfen könnte, indem er eine Basis zum Experimentieren gibt.
Kyle Brandt
1

Was Sie haben, ist ein "Problem der intermittierenden Nachfrage". Wir haben dieses Problem gelöst, indem wir die Nachfrage in eine Rate umgerechnet haben, indem wir die tatsächliche Nachfrage durch die Anzahl der Tage im Intervall zwischen den Wartungsarbeiten dividiert haben. Diese Rate kann dann als Übertragungsfunktion modelliert werden, um eine Rate vorherzusagen, wenn die Vorhersage des Intervalls gegeben ist. Diese vorhergesagte Rate kann dann in eine Nachfrage umgewandelt werden. Es sollte darauf geachtet werden, strukturelle Verschiebungen der Rate über die Interventionserkennung zu erkennen. Versuchen Sie, "Ansatz zur Modellierung intermittierender Anforderungen mithilfe einer Übertragungsfunktionsmethode" zu googeln. Machen Sie sich keine Gedanken über die modellhaften mutmaßlichen Ansätze von Croston oder Exponential Smoothing, da diese recht mangelhaft sind.

ZUSÄTZLICHE ANALYSE:

Als ich Rate als Funktion des Intervalls modellierte, erhielt ich Folgendes. Unter Verwendung einer Vorhersage von INTERVALL unter Verwendung dieser Gleichung kann diese Gleichung dann die Rate vorhersagen, die zur Vorhersage der Nachfrage verwendet werden kann. Diese Art von Modell ermöglicht die Einbeziehung einer autoregressiven Struktur in der Rate sowie die Berücksichtigung von Impulsen, Pegelverschiebungen und / oder lokalen Zeittrends in der Rate.

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) FEHLERWERT WERT

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

EINGANGSREIHE X1 INTERVALL

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

EINGANGSSERIE X2 I ~ P00002 12/03/11 PULS

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

EINGANGSSERIE X3 I ~ P00007 12/08/11 PULSE

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

EINGANGSSERIE X4 I ~ P00010 11.12.11 PULS

 Differencing                  1                                            
5Omega (input) -Factor #  4    0   1.37       .260       .0062     5.27
IrishStat
quelle
1
Ich denke, dies missversteht die Frage leicht: Er hat keine intermittierende Nachfrage, er hat die Nachfrage zeitweise beobachtet , und er ist anscheinend glücklich, eine konstante zugrunde liegende Nachfrage pro Tag anzunehmen. Tatsächlich scheint der Übertragungsfunktionsansatz im Großen und Ganzen derjenige zu sein, den er hier versucht, allerdings mit einer Linearitätsannahme, einem 90-Tage-Fenster und ohne Kovariaten. Die rückläufige Nachfrage des FWIW gegenüber den (exogenen) Tagen seit der letzten Lesung ergibt etwa 2,2 geforderte Artikel pro Tag, aber eine hohe Unsicherheit in Bezug auf diese Schätzung.
Conjugateprior
@ConjugatePrior Er kann den tatsächlichen Bedarf pro Tag und die Proben nicht in seltenen Abständen beobachten und entspricht somit de facto einem intermittierenden Bedarfsproblem. Seine "Rate" kann als zufälliger Spaziergang mit 3 Ausnahmen (Impulsen) am 16.12., 2 charakterisiert werden / 02; 2/27. Unsere Idee hier ist es, die Rate als Funktion des Intervalls zu modellieren, dann das Intervall vorherzusagen und dann die Nachfrage vorherzusagen. Sie scheinen die Nachfrage als Funktion des Intervalls modelliert zu haben, um die einfache Durchschnittsrate zu erhalten, die in diesem Fall stark / nachteilig ist bewirkt durch die 3 anomolen Datenpunkte & spiegelt nicht die autoregressive Struktur wider.
IrishStat
2
Sicherlich kann es kein zufälliger Spaziergang sein, da die Verkäufe nur steigen oder gleich bleiben können (äquivalente Aktien können nur fallen oder auf dem gleichen Niveau bleiben) - so etwas wie ein Erneuerungsprozess. Ich bin mir auch nicht sicher, wie Sie herausgefunden haben, dass genau 3 Punkte Ausreißer sind. (Übrigens ist die von mir vorgeschlagene 'Analyse' nur eine verallgemeinerte Version seiner eigenen, mit einer nicht nachhaltigen Linearitätsannahme, so dass ich persönlich nicht damit zufrieden wäre.)
Konjugatprior
@ConjugatePrior Die Rate als Funktion des Intervalls zeigte, dass die Rate stark von früheren Raten abhängig war und auch von drei "ungewöhnlichen Raten" beeinflusst wurde. Es wurden keine Pegelverschiebungen festgestellt. Was ich hätte sagen sollen war, dass die Rate ein zufälliger Spaziergang ohne Konstante war, daher ist kein Trend erkennbar.
IrishStat
1
@IrishStat Vielen Dank für die Antwort. Ich werde über die intermittierende Nachfrage mit einer Übertragungsfunktion lesen. Eine kleine Korrektur: Wir müssen das INTERVALL nicht vorhersagen. Wir müssen entscheiden, wann wir die Maschine besuchen möchten, basierend auf der Vorhersage der Rate. Zum Beispiel könnte eine Geschäftsregel lauten: "Besuchen Sie die Maschine, wenn sie zu 60% leer ist"
Ivan Dimitrov,