2. Juni 2021

Ist NeuralProphet für die Umsatzprognose besser als Prophet?

Mitwirkende
Keine Artikel gefunden.
Newsletter abonnieren
Diesen Beitrag teilen

In diesem Blogbeitrag vergleichen wir zwei Zeitreihenprognosemodelle für die Vorhersage von Umsatzzahlen im Einzelhandel.

Der erste ist Prophetein Modell, das Facebook vor ein paar Jahren entwickelt hat. Letzten Monat wurde das Codepaket in Version 1.0 auf GitHub veröffentlicht, es ist also ein relativ ausgereiftes Modell im Vergleich zum zweiten Modell, dem NeuralProphet.

Wie der Name schon andeutet, ähnelt NeuralProphet dem Prophet-Modell, aber es wirft ein paar neuronale Netze in den Mix, um die Sache aufzupeppen. Es ist auch nicht Facebook, das das Modell entwickelt.

Was ist Prophet?

Prophet zerlegt eine Zeitreihe in verschiedene Komponenten. Die Komponenten sind alle Funktionen der Zeit. Die wichtigsten davon sind:

  • Tägliche Saisonalität
  • Wöchentliche Saisonalität
  • Jährliche Saisonalität
  • Trend
  • Feiertage und Veranstaltungen

Die Saisonalitäten sind Fourier-Reihen. Die Sinuskurven in den Fourier-Reihen haben Perioden, die der Saisonalität entsprechen. So ist z. B. die Anzahl der Perioden pro Tag bei der täglichen Saisonalität immer eine ganze Zahl. Das Gleiche gilt für die Anzahl der Perioden pro Woche für die wöchentliche Saisonalität.

Die Trendkomponente ist eine stückweise lineare Funktion. Die Parameter für diese Komponente sind die Deltas zwischen den einzelnen Teilen des Trends.

Die letzte Komponente in Prophet modelliert Ereignisse und Feiertage. Sie unterscheiden sich von den Saisonalitäten, weil sie über die Jahre hinweg eine ähnliche Wirkung haben, aber einen anderen Zeitpunkt. Sie werden mit einer Indikatormatrix modelliert, die angibt, wann jedes Ereignis stattfindet, und mit einem Vektor, der die Auswirkungen eines jeden Ereignisses darstellt.

Das Schöne an einem additiven Modell wie diesem ist, dass man es mit neuen Komponenten erweitern kann. Man könnte zum Beispiel einen zusätzlichen linearen Term hinzufügen, um die Auswirkungen einer externen Zeitreihe zu modellieren. (Der schlaue Leser fragt sich nun, warum wir uns auf lineare Regressoren beschränken... *SpannendeVorahnung auf den Abschnitt über NeuralProphet*)

Um z. B. den Absatz von Toilettenpapier zu prognostizieren, könnte man einen externen Regressor hinzufügen, der die Häufigkeit darstellt, mit der das Wort "Lockdown" am Vorabend in den Nachrichten verwendet wurde. 💩

Jetzt müssen wir nur noch die optimalen Parameter für das Modell finden. Das Prophet-Codepaket stützt sich auf Stan und seine Optimierungsmethoden, um das Modell anzupassen. Wer hätte gedacht, dass Stan nicht nur Ihr größter Fan ist, sondern auch eine Programmiersprache für die statistische Modellierung!

Was ist NeuralProphet?

NeuralProphet ist das Ergebnis der Erweiterung des grundlegenden Prophet-Modells um einen zusätzlichen Term, nämlich AR-Netz. Wir kennen Prophet bereits, also schauen wir uns AR-Net an, die Lieblingsmodellierungstechnik der Piraten.

Die Autoren von AR-Net schlagen vor, ein autoregressives Prognosemodell mit einem neuronalen Feedforward-Netzwerk zu lernen. Autoregressive Modelle sind nichts Neues, aber normalerweise verwendet man ein lineares Modell, das mit den kleinsten Quadraten angepasst wird, und keine neuronalen Netze, die mit Backpropagation angepasst werden.

Ein mehrschichtiges neuronales Feedforward-Netzwerk ist natürlich aussagekräftiger als ein lineares Modell, aber es gibt noch einen weiteren Vorteil. AR-Net lässt sich auch viel besser auf größere Datensätze und mehr Eingaben skalieren, wie dieses Diagramm zeigt:

Die Trainingszeit des AR-Netzes steigt nicht exponentiell mit der AR-Reihenfolge.

Neben dem AR-Net verbessert NeuralProphet auch die linearen externen Regressoren von Prophet zu neuronalen Feedforward-Netzwerken, weil tiefer == besser.

Das Hinzufügen neuronaler Netze zu Prophet hat den Nachteil, dass die Anzahl der erlernbaren Parameter drastisch ansteigt. Um dies zu bewältigen, tauscht NeuralProphet das Stan-Backend gegen ein PyTorch-Backend aus und trainiert mit stochastischem Gradientenabstieg.

Genug geredet. Probieren wir beide Modelle in freier Wildbahn aus!

Gegenüberstellung mit wöchentlichen Daten zum elektronischen Handel

Bei ML6 haben wir den Luxus, dass wir tonnenweise großartige (und weniger großartige) Kundendatensätze finden. Für dieses erste Experiment werden wir einen dieser Datensätze verwenden.

Der Datensatz stammt von einem E-Commerce-Unternehmen, das die Verkäufe seiner Produkte vorhersagen möchte , um zu vermeiden, dass die Bestände ausgehen. Im realen Projekt prognostizieren wir 40.000 Artikel auf wöchentlicher Basis, aber hier fassen wir die Artikel pro Kategorie zusammen, um die Dinge für die Kinder im Publikum zu vereinfachen.

Die Kategorien von Interesse sind alle Arten von Kleidung wie T-Shirts, Kapuzenpullis, Leggings und echte Hosen.

Zusammenfassend lässt sich sagen, dass wir die Modelle auf diese Weise bewerten:

  • # Wochen Trainingsdaten: 157
  • # Wochen Testdaten: 9
  • # Kategorien: 16 (Parka, Kapuzenpulli, Jeans, Kleid, Leggings, Crewneck, Kapuzenpulli mit Reißverschluss, Sweatpants, Sweatshirt, leichte Jacken, Bomberjacken, Shirt, Sweat-Jumpsuit, College-Jacken, T-Shirt, T-Shirt langarm)
  • Auswertungsmetrik: sMAPE, wie sie im Prognosewettbewerb M4 verwendet wird (Hinweis: In M5, dem gut benannten Nachfolger von M4, wird die sMAPE-Metrik durch den gewichteten mittleren quadratischen Fehler ersetzt, aber wir wählen hier sMAPE, weil mehr Leute den guten alten sMAPE kennen und verstehen).

Der Unterschied zwischen dem Prophet- und dem NeuralProphet-Modell ist das AR-Net. Wenn wir also das AR-Netz nicht zu NeuralProphet hinzufügen, erwarten wir, dass Prophet und NeuralProphet die gleichen Parameter lernen und die gleiche Leistung erzielen.

Aber das tun sie nicht. Dies sind die Ergebnisse für die Standardmodelle:

Wenn die Differenz positiv ist, hat NeuralProphet besser abgeschnitten als Prophet.

In der letzten Zeile sehen wir, dass Prophet im Durchschnitt 3,9 % besser abschneidet als NeuralProphet.

Da der Unterschied bei T-Shirts am größten ist, wollen wir herausfinden, was bei den Vorhersagen von NeuralProphet falsch läuft.

Prophet:

Prophetenvorhersage für T-Shirt-Verkäufe. Blau sind die Trainingsdaten, orange die Validierungsdaten. (y-Achse ist anonymisiert)

NeuralProphet:

NeuralProphet's Vorhersage für T-Shirt-Verkäufe. Blau sind die Trainingsdaten, orange die Validierungsdaten. (y-Achse ist anonymisiert)

Es scheint, dass NeuralProphet besser zu den Trainingsdaten passt, aber seine Prognose ist schlechter. Das riecht nach Überanpassung.

Wie in den vorherigen Abschnitten erläutert, lernen sowohl Prophet als auch NeuralProphet, eine Zeitreihe zu zerlegen. Lassen Sie uns diese Komponenten aufzeichnen, um weitere Einblicke in die Modelle zu erhalten.

Prophet:

Der Trend und die jährliche Saisonalität, die Prophet für die wöchentlichen T-Shirt-Verkäufe ermittelt hat. (Trend-Y-Achse ist anonymisiert)

Prophet hat einen ganz einfachen Trend entdeckt: Jedes Jahr werden im Frühling die meisten T-Shirts verkauft. Das macht Sinn.

NeuralProphet:

Der Trend und die jährliche Saisonalität, die NeuralProphet für die wöchentlichen T-Shirt-Verkäufe gelernt hat. (Trend-Y-Achse ist anonymisiert)

Die Saisonalität von NeuralProphet sieht der von Prophet sehr ähnlich, aber der Trend ist definitiv falsch und hat sich überholt.

Die Erklärung für diesen Unterschied ist recht einfach.

Obwohl die zugrundeliegende Implementierung des Trendmodells die gleiche ist, verfügt NeuralProphet standardmäßig über keine Regularisierung des Trends.

Prophet legt jedoch einen Laplace-Prior auf die Parameter der Trendfunktion. (Zur Erinnerung: Der Trend war eine stückweise lineare Funktion, bei der die Parameter die Deltas an jedem Änderungspunkt waren).

Der Laplace-Prior ist das Bayes'sche Äquivalent zum Hinzufügen eines L1-Regularisierungsterms(Erklärung). Das bedeutet, dass er die Trend-Deltas dazu zwingt, spärlich zu werden und Änderungspunkte aus der stückweise linearen Funktion entfernt.

Der NeuralProphet-Code ermöglicht es uns, diese L1-Regularisierung hinzuzufügen (obwohl er die Regularisierung ohne ersichtlichen Grund intern skaliert)

Intern skaliert NeuralProphet den Parameter für die Trendregulierung.

Nachdem der Hyperparameter trend_reg auf 100 gesetzt wurde, ist dies die Darstellung der Komponenten von NeuralProphet:

Der Trend und die jährliche Saisonalität, die NeuralProphet für die wöchentlichen T-Shirt-Verkäufe nach der Regularisierung des Trends gelernt hat. (Trend-Y-Achse ist anonymisiert)

Und das ist die Prognose:

NeuralProphets Vorhersage für T-Shirt-Verkäufe nach der Regularisierung. Sie ist besser als ohne die Regularisierung. (y-Achse ist anonymisiert)

Diese Diagramme sind denen von Prophet sehr ähnlich. Und der durchschnittliche Unterschied bei sMAPE ist jetzt auf 0,9 % gesunken.

NeuralProphet schneidet also immer noch schlechter ab als Prophet, aber es hat noch einen letzten Deus ex Machina mit Stelzenbein in petto: AR-Net!

*Antiklimax-Alarm* Seltsamerweise führt das Hinzufügen von AR-Net nicht dazu, dass NeuralProphet besser abschneidet als Prophet. Unabhängig von den AR-Net-Hyperparametern erreicht Prophet immer noch die gleiche Leistung wie sein neuronal ausgestattetes Gegenstück.

Dies ist die Hypothese:

AR-Net versucht, ein Muster in den Abweichungen des Verkaufsvolumens von der Summe aus Saisonalität und Trend zu erkennen. Aber es gibt einfach nicht genug Daten um dies zu tun.

Ja, es gibt also genügend Daten, um eine saisonale Komponente und einen Trend zu erkennen. Aber, nein, es gibt nicht genug Daten, um ein Muster zu erkennen, wie die Zeitreihe von diesen Komponenten abweicht.

Leider können wir keine neuen Datenpunkte erfinden, um diese Hypothese mit diesem Datensatz zu beweisen, also nehmen wir einen neuen (öffentlichen): Iowa Liquor Retail Sales.

Weitere Daten

Der Bundesstaat Iowa kontrolliert die Großhandelskäufe von Spirituosen im gesamten Bundesstaat und veröffentlicht seit 2012 jede Verkaufstransaktion. Wir wissen also, wer was wo gekauft hat, und zwar mit täglicher Granularität:

Ein Ausschnitt aus den Iowa Liquor Retail Sales-Daten in BigQuery.

Wir führen eine minimale Vorverarbeitung durch. Zuerst entfernen wir alle Wochenendverkäufe. (In dieser Diskussion sagt die Iowa Alcoholic Beverages Division, dass es keine geben sollte, also nehmen wir an, dass dies ein Fehler ist.) Dann berechnen wir das Gesamtumsatzvolumen pro Tag in Dollar für den gesamten Bundesstaat. Dies wird unsere Zeitreihe sein:

SELECT date, SUM(sale_dollars) AS sale_dollarsFROM `bigquery-public-data.iowa_liquor_sales.sales`WHERE EXTRACT(DAYOFWEEK FROM date) NOT IN (1,7)GROUP BY dateORDER BY date

Der vorherige Datensatz hatte 157 Trainingsdatenpunkte. Da dieser Datensatz 8 Jahre (ohne Wochenenden) umfasst , haben wir über 2200 Datenpunkte. Wir können also die Anzahl der Datenpunkte in den Trainingsdaten von 0 bis 2200 variieren und die Leistungen von Prophet und NeuralProphet für jede Datensatzgröße vergleichen.

Für jede Datensatzgröße müssen die Modelle das Verkaufsvolumen 30 Tage im Voraus vorhersagen. Die Leistung wird wiederum als sMAPE gemessen.

Diesmal können wir auch den Zirkus der Hyperparameter-Einstellung überspringen. Wir müssen nur die Eingabedimensionen für AR-Net auswählen und auf 30 einstellen. Das bedeutet, dass AR-Net die Verkaufsdaten des letzten Monats nutzen kann, um nach Hinweisen auf die Zukunft zu suchen.

Das ist das Ergebnis:

Leistungsvergleich zwischen Prophet und NeuralProphet. Wenn die Kurve positiv ist, gewinnt NeuralProphet.

Das Diagramm scheint unsere Hypothese zu bestätigen! Wir brauchten nur mehr Daten, damit das AR-Net etwas Nützliches lernen konnte.

Schlussfolgerungen

  • Durch das Hinzufügen neuronaler Netze verliert NeuralProphet etwas von der Einfachheit und Intuitivität, die Prophet bietet. Außerdem gibt es mehr Hyperparameter, die eingestellt werden müssen.
  • Wir haben keine externen Regressoren hinzugefügt. Das könnte die Prognosen noch weiter verbessern.
  • Fazit der Schlussfolgerung: NeuralProphet liefert bessere Umsatzprognosen als Prophet, wenn man genügend Datenpunkte hat.

NeuralProphet übertrifft Prophet, wenn Sie genügend Daten haben.

Verwandte Beiträge

Alle anzeigen
Keine Ergebnisse gefunden.
Es gibt keine Ergebnisse mit diesen Kriterien. Versuchen Sie, Ihre Suche zu ändern.
Großes Sprachmodell
Stiftung Modelle
Unternehmen
Unser Team
Strukturierte Daten
Chat GPT
Nachhaltigkeit
Stimme und Ton
Front-End-Entwicklung
Schutz und Sicherheit von Daten
Verantwortungsvolle/ethische KI
Infrastruktur
Hardware und Sensoren
MLOps
Generative KI
Verarbeitung natürlicher Sprache
Computer Vision