LSTM - ANN Dynamische Preisgestaltung im Haushaltswareneinzelhandel

Es ist kein Geheimnis, dass Methoden des maschinellen Lernens überall in verschiedene Geschäftsbereiche vordrangen und neue Geschäftsprozesse optimierten, verbesserten und sogar schufen. Einer der wichtigen Bereiche ist das Problem der Festlegung des Warenpreises. Hier hilft das MO mit genügend Daten dabei, das zu tun, was zuvor schwer zu erreichen war - die Multi-Faktor-Nachfragekurve aus den Daten wiederherzustellen. Dank der wiederhergestellten Nachfragekurve konnten dynamische Preissysteme aufgebaut werden, die eine Optimierung der Preise je nach Zweck der Preisgestaltung ermöglichen - um Umsatz oder Gewinn zu steigern. Dieser Artikel ist eine Zusammenstellung meiner Dissertation, in der das dynamische Preismodell LSTM-ANN für 4 Wochen für eine der Waren des Haushaltswarenhändlers entwickelt und in der Praxis getestet wurde.

Ich möchte sofort darauf hinweisen, dass ich in diesem Artikel nicht den Namen des Unternehmens offenlegen werde, in dem die Studie durchgeführt wurde (dies ist jedoch eines der Unternehmen aus der Liste in den Räumlichkeiten), sondern einfach den Namen "Einzelhändler".

Hintergrund


Auf dem Einzelhandelsmarkt für Haushaltswaren gibt es einen Preisführer, Leroy Merlin. Das Verkaufsvolumen dieses Netzwerks ermöglicht es ihnen, eine Mindestpreisstrategie für die gesamte Produktpalette beizubehalten, was zu einem Preisdruck auf andere Marktteilnehmer führt.

Umsatz und Gewinn der wichtigsten Einzelhändler in St. Petersburg zum 31. Dezember 2017

Bild

In dieser Hinsicht verfolgt der Einzelhändler einen anderen Preisansatz:

  • Der Preis wird auf den niedrigsten der Wettbewerber festgelegt.
  • Preisbeschränkung von unten: Kaufpreis + Mindestprämie, die die ungefähren Kosten pro Wareneinheit widerspiegelt.

Dieser Ansatz ist eine Kombination aus der kostspieligen Preismethode und der Preisgestaltung der Wettbewerber. Es ist jedoch nicht perfekt - es berücksichtigt nicht direkt die Verbrauchernachfrage.

Aufgrund der Tatsache, dass das dynamische Preismodell viele Faktoren (Nachfrage, Saisonalität, Werbeaktionen, Preise der Wettbewerber) berücksichtigt und es Ihnen auch ermöglicht, den vorgeschlagenen Preis einzuschränken (z. B. von unten nach unten abdeckenden Kosten), wird dieses System möglicherweise alle Einseitigkeit und Unbedenklichkeit beseitigen Nachteile anderer Preismethoden.

Daten


Für die Studie lieferte das Unternehmen Daten von Januar 2015 bis Juli 2017 (920 Tage / 131 Wochen). Diese Daten enthalten:

  • Tagesverkauf, einschließlich Wochenenden, für 470 Produkte (16 Produktgruppen);
  • Werbetage im Laden;
  • Tage, an denen Rabatte auf Waren gewährt wurden;
  • Preise für jedes der 470 Produkte;
  • Tägliche Daten zur Anzahl der Kontrollen im gesamten Netzwerk in St. Petersburg;
  • Preise der Hauptkonkurrenten für die meisten der 470 Produkte (Daten wurden einmal pro Woche aufgenommen).

Zusätzlich zu diesen Daten habe ich auch Kalender-Dummy-Variablen hinzugefügt:

  • Jahreszeit (Herbst / Winter / Sommer / Frühling);
  • Monat
  • Viertel;
  • Wochentag;
  • Feiertage;

Auch Wettervariablen:

  • Niederschlag - Dummy;
  • Temperatur
  • Die Abweichung der Temperatur vom Durchschnitt der Saison.

Bei der direkten Analyse des täglichen Warenverkaufs stellte ich Folgendes fest:
Nur etwa 30% der Waren wurden ständig verkauft, alle anderen Waren wurden entweder später als 2015 zum Verkauf angeboten oder früher als 2017 aus dem Verkauf genommen, was zu einer erheblichen Einschränkung der Auswahl von Waren für Forschungs- und Preisexperimente führte. Dies führt uns auch zu der Tatsache, dass es aufgrund des ständigen Warenwechsels in der Linie des Geschäfts schwierig wird, ein integriertes Rohstoffpreissystem zu schaffen. Es gibt jedoch einige Möglichkeiten, um dieses Problem zu umgehen, auf das später eingegangen wird.

Preissystem


Um ein System von Preisempfehlungen für die Waren für den nächsten Zeitraum auf der Grundlage eines Modells aufzubauen, das die Nachfrage vorhersagt, habe ich das folgende Schema entwickelt:

Bild

Nachdem wir das Modell anhand der Daten trainiert haben, erhalten wir ein Modell, das die Multi-Faktor-Nachfragekurve wiederherstellt, indem wir dem Input verschiedene Warenpreise liefern. In Abhängigkeit von diesem Preis erhalten wir den geschätzten Umsatz. So können wir eine Preisoptimierung durchführen, um das gewünschte Ergebnis zu erzielen - den erwarteten Umsatz oder den erwarteten Gewinn maximieren. Es bleibt nur ein Modell zu trainieren, das den Umsatz gut vorhersagen kann.

Was hat nicht geklappt
Nachdem ich eines der Produkte für die Forschung ausgewählt hatte, verwendete ich XGBoost, bevor ich direkt zum LSTM-Modell überging.

Ich habe dies in der Erwartung getan, dass XGBoost mir hilft, viele unnötige Faktoren zu verwerfen (dies geschieht automatisch), und die verbleibenden sollten für LSTM-Modelle verwendet werden. Ich habe diesen Ansatz bewusst gewählt, weil ich, um unnötige Fragen zur Verteidigung der Dissertation zu vermeiden, eine starke und gleichzeitig einfache Rechtfertigung der Wahl der Faktoren für das Modell einerseits und andererseits eine Vereinfachung der Entwicklung erhalten wollte. Außerdem erhielt ich ein fertiges, grobes Modell, an dem verschiedene Ideen in der Studie schnell getestet werden konnten. Und nachdem Sie ein endgültiges Verständnis dafür erhalten haben, was funktionieren wird und was nicht, erstellen Sie das endgültige LSTM-Modell.

Um das Prognoseproblem zu verstehen, gebe ich einen täglichen Verkaufsplan für das erste ausgewählte Produkt an:

Bild

Die gesamte Zeitreihe der Verkäufe in der Grafik wurde in durchschnittliche Verkäufe für den Zeitraum unterteilt, um nicht die tatsächlichen Werte preiszugeben, sondern das Erscheinungsbild beizubehalten.

Im Allgemeinen viel Lärm, während es ausgeprägte Bursts gibt - dies ist die Durchführung von Werbeaktionen auf Netzwerkebene.

Da es für mich die erste Erfahrung beim Erstellen von Modellen für maschinelles Lernen war, musste ich ziemlich viel Zeit mit verschiedenen Artikeln und Dokumentationen verbringen, damit letztendlich etwas für mich klappte.

Eine erste Liste von Faktoren, die vermutlich den Umsatz beeinflussen:

  • Daten zum täglichen Verkauf anderer Waren dieser Gruppe, zum Gesamtumsatz in der Gruppe in Stücken und zur Anzahl der Schecks für alle Geschäfte in St. Petersburg mit Verzögerungen 1, 2, 3, 7, 14, 21, 28;
  • Angaben zu Preisen anderer Waren der Gruppe;
  • Das Verhältnis des Preises des untersuchten Produkts zu den Preisen anderer Waren aus der Gruppe;
  • Der niedrigste Preis unter allen Wettbewerbern (die Daten wurden einmal pro Woche erhoben, und ich ging davon aus, dass diese Preise für die nächste Woche gültig sein werden);
  • Das Verhältnis des Preises des untersuchten Produkts zum niedrigsten Preis der Wettbewerber;
  • Verkaufsverzögerungen nach Gruppen (in Stücken);
  • Einfacher Durchschnitt und RSI basierend auf Verkaufsverzögerungen von Waren der Gruppe, Gesamtverkäufen in der Gruppe und Anzahl der Schecks.

Insgesamt 380 Faktoren. (2,42 Beobachtungen pro Faktor). Daher war das Problem, unwesentliche Faktoren abzuschneiden, sehr hoch. XGBoost half jedoch dabei, dies zu bewältigen, und reduzierte die Anzahl der Faktoren signifikant auf 23 (40 Beobachtungen pro Faktor).

Das beste Ergebnis, das ich mit der Gier-Suche erzielen konnte, ist wie folgt:

Bild
R ^ 2-adj = 0,4 an der Testprobe

Die Daten wurden ohne Mischen in Trainings- und Testproben unterteilt (da dies eine Zeitreihe ist). Als Metrik habe ich den Indikator R ^ 2 bewusst angepasst, da die Präsentation der Endergebnisse der Arbeit vor der Kommission stattfinden musste, inkl. Es bestand aus Wirtschaftsvertretern und wurde daher als das bekannteste und am einfachsten zu verstehende verwendet.

Die endgültigen Ergebnisse schmälerten meinen Glauben an den Erfolg, da das Ergebnis von R ^ 2-adj 0,4 nur bedeutete, dass das Vorhersagesystem die Nachfrage am nächsten Tag nicht gut vorhersagen konnte und die Empfehlung für den Preis sich nicht wesentlich vom "Finger am Himmel" -System unterscheiden würde.

Außerdem habe ich mich entschlossen zu prüfen, wie effektiv die Verwendung von XGBoost für die Vorhersage des täglichen Umsatzes einer Warengruppe (in Witzen) und für die Vorhersage der Anzahl der Schecks im Allgemeinen über das Netzwerk sein wird.

Umsatz nach Produktgruppen:

Bild
R ^ 2-adj = 0,71

Schecks:

Bild
R ^ 2-adj = 0,86

Ich denke, der Grund, warum die Verkaufsdaten für ein bestimmtes Produkt nicht vorhergesagt werden konnten, geht aus den dargestellten Grafiken hervor - Rauschen. Der individuelle Verkauf von Waren erwies sich als zu anfällig für Zufälle, so dass die Methode zur Erstellung einer Regression nicht effektiv war. Gleichzeitig haben wir durch die Aggregation der Daten den Einfluss der Zufälligkeit beseitigt und gute Vorhersagefähigkeiten erhalten.

Um endlich sicherzustellen, dass die Vorhersage der Nachfrage für einen Tag im Voraus sinnlos ist, habe ich das SARIMAX-Modell (Statistikmodellpaket für Python) für den täglichen Verkauf verwendet:

Bild

Bild

Tatsächlich unterscheiden sich die Ergebnisse in keiner Weise von denen, die mit XGBoost erhalten wurden, was darauf hindeutet, dass die Verwendung eines komplexen Modells in diesem Fall nicht gerechtfertigt ist.

Gleichzeitig möchte ich auch darauf hinweisen, dass weder XGBoost- noch SARIMAX-Wetterfaktoren signifikant waren.

Das endgültige Modell bauen


Die Lösung für das Problem der Vorhersagequalität bestand darin, Daten auf wöchentlicher Ebene zu aggregieren. Dies ermöglichte es uns, den Einfluss von Zufallsfaktoren zu reduzieren, reduzierte jedoch die Menge der beobachteten Daten signifikant: Wenn es 920 tägliche Daten gab, nur 131 wöchentliche Daten. Die Situation verschlechterte sich, weil die Anzahl der Faktoren nahezu unverändert blieb (Dummies für die Wochentage wurden ausgeschlossen), aber die Anzahl der Beobachtungen der Zielvariablen stark abgenommen.

Darüber hinaus wurde meine Aufgabe durch die Tatsache erschwert, dass das Unternehmen zu diesem Zeitpunkt beschloss, das Produkt zu ändern, das das Experiment unter Verwendung des Modells anwenden soll, sodass ich ein Modell von Grund auf neu entwickeln musste.

Der Warenwechsel erfolgte bei Waren mit ausgeprägter Saisonalität:

Bild

Aufgrund der Umstellung auf Wochenverkäufe stellte sich eine logische Frage: Ist es angemessen, das LSTM-Modell überhaupt mit einer so geringen Datenmenge zu verwenden? Ich habe mich entschlossen, dies in der Praxis herauszufinden und vor allem die Anzahl der Faktoren zu reduzieren (auch wenn dies ein potenzieller Schaden bei der Reduzierung wichtiger Informationen war). Ich warf alle Faktoren aus, die auf der Grundlage von Verkaufsverzögerungen (Durchschnitt, RSI), Wetterfaktoren berechnet wurden (bei den täglichen Daten spielte das Wetter keine Rolle, und die Übertragung auf das wöchentliche Niveau verlor umso mehr an Sinn). Danach habe ich traditionell XGBoost verwendet, um andere unbedeutende Faktoren abzuschneiden. Später habe ich zusätzlich mehrere weitere Faktoren basierend auf dem LSTM-Modell unterteilt, indem ich die Faktoren einfach einzeln ausgeschlossen, das Modell erneut trainiert und die Ergebnisse verglichen habe.

Die endgültige Liste der Faktoren lautet wie folgt:

  • Das Verhältnis des Preises pro Kilogramm des untersuchten Produkts und des Primers CERESIT ST 17 10 l.;
  • Das Verhältnis des Preises des untersuchten Produkts und des Produkts und der Grundierung CERESIT ST 17 10 l;
  • Das Verhältnis des Preises des untersuchten Produkts und des Primers EURO PRIMER 3 l;
  • Das Verhältnis des Preises des untersuchten Produkts und des Mindestpreises der Wettbewerber;
  • Dummy-Variablen für drei Werbeaktionen auf Netzwerkebene;
  • Dummy-Variablen der Frühlings-, Sommer- und Herbstsaison;
  • Protokolliert 1 - 5 wöchentliche Verkäufe des untersuchten Produkts.

Nur 15 Faktoren (9 Beobachtungen pro Faktor).

Das endgültige LSTM-Modell wurde unter Verwendung von Keras geschrieben, enthielt 2 verborgene Schichten (25 bzw. 20 Neuronen) und der Aktivator war ein Sigmoid.

Der Code für das endgültige LSTM-Modell mit Keras:

model = Sequential() model.add(LSTM(25, return_sequences=True, input_shape=(1, trainX.shape[2]))) model.add(LSTM(20)) model.add(Dense(1, activation='sigmoid')) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=40, batch_size=1, verbose=2) model.save('LSTM_W.h5') 

Ergebnis:

Bild

Bild

Die Qualität der Vorhersage auf der Testprobe sah durch die Metrik ziemlich überzeugend aus, erreichte jedoch meiner Meinung nach immer noch nicht das Ideal, da Bursts in einzelnen Wochen trotz der ziemlich genauen Bestimmung des durchschnittlichen Umsatzniveaus erheblich von "abweichen konnten." durchschnittliches Umsatzniveau, das an einzelnen Tagen eine starke Abweichung der Umsatzprognose von der Realität ergab (bis zu 50%). Trotzdem habe ich dieses Modell direkt für das Experiment in der Praxis verwendet.

Interessant ist auch, wie die wiederhergestellte Nachfragekurve preislich aussieht. Zu diesem Zweck habe ich das Modell über die Preisspanne geführt und basierend auf den prognostizierten Verkäufen eine Nachfragekurve erstellt:

Bild

Ein Experiment


Jede Woche lieferte das Netzwerk Verkaufsdaten für die Vorwoche in St. Petersburg sowie Preise von Wettbewerbern. Basierend auf diesen Daten habe ich eine Preisoptimierung durchgeführt, um die erwarteten Gewinne zu maximieren, sagte der Preis, den das Netzwerk für die nächste Woche festlegen sollte, was es auch tat. Dies dauerte 4 Wochen (die Laufzeit wurde mit dem Händler vereinbart).

Die Gewinnmaximierung wurde mit Einschränkungen durchgeführt: Der Mindestpreis war der Kaufpreis + Fix. Aufpreis wurde der Höchstpreis durch den Preis der Grundierung desselben Herstellers nur in einer 10l Packung begrenzt.

Die experimentellen Ergebnisse sind in den folgenden Tabellen dargestellt (alle Zahlen werden durch einen bestimmten Wert geteilt, um die absoluten Werte nicht preiszugeben):

Umsatzprognose:

Bild

Gewinnprognose:

Bild

Um die Auswirkungen des neuen Preissystems auf den Umsatz zu bewerten, habe ich den Umsatz für denselben Zeitraum nur für die Vorjahre verglichen.

4 Wochen Zusammenfassung Ergebnisse:

Bild

Als Ergebnis erhalten wir ein zweifaches Bild: völlig unrealistische Umsatzprognosen, aber gleichzeitig rein positive Ergebnisse für Wirtschaftsindikatoren (sowohl in Bezug auf Gewinn als auch Umsatz).

Die Erklärung ist meiner Meinung nach, dass in diesem Fall das Modell, das den Umsatz falsch vorhersagte, dennoch die richtige Idee hatte - die Preiselastizität für dieses Produkt lag unter 1, was bedeutet, dass der Preis erhöht werden könnte. ohne Angst vor einem Umsatzrückgang, den wir gesehen haben (der Absatz in Einheiten blieb in etwa auf dem Niveau des Vorjahres und des Vorjahres).

Vergessen Sie jedoch nicht, dass 4 Wochen ein kurzfristiger Zeitraum sind und das Experiment nur an einem Produkt durchgeführt wurde. Langfristig führt eine Überbewertung der Waren in einem Geschäft in der Regel zu einem Umsatzrückgang für das gesamte Geschäft. Um meine Vermutung darüber zu bestätigen, habe ich mich mit XGBoost entschlossen, zu prüfen, ob die Verbraucher über ein „Gedächtnis“ für die Preise früherer Perioden verfügen (wenn es in der Vergangenheit „insgesamt“ teurer war als die Wettbewerber, geht der Verbraucher zu den Wettbewerbern). Das heißt, ob das durchschnittliche Preisniveau für die Gruppe in den letzten 1, 3 und 6 Monaten für den Verkauf nach Produktgruppen angegeben wird.

Bild

In der Tat wurde die Vermutung bestätigt: Auf die eine oder andere Weise beeinflusst das durchschnittliche Preisniveau für frühere Perioden den Umsatz in der aktuellen Periode. Dies bedeutet, dass es nicht ausreicht, in der aktuellen Periode eine Preisoptimierung für ein einzelnes Produkt durchzuführen - es ist auch notwendig, das allgemeine Preisniveau langfristig zu berücksichtigen. Dies führt im Allgemeinen zu einer Situation, in der Taktiken (Gewinnmaximierung jetzt) ​​Strategien widersprechen (Überleben im Wettbewerb). Dies ist jedoch bereits besser den Vermarktern überlassen.

Angesichts der Ergebnisse und Erfahrungen könnte ein auf einer Umsatzprognose basierendes Preissystem meiner Meinung nach am besten so aussehen:

  1. Um einen Schritt weiter von der Produktpalette zu gehen, müssen Sie eine Clusteranalyse durchführen und bedingte Schraubendreher nach Ähnlichkeit und Umsatzprognose gruppieren und den Preis nicht für einen einzelnen Schraubendreher, sondern für diese Untergruppe festlegen, damit das Problem des ständigen Entfernens und Hinzufügens von Produktnomenklaturen vermieden wird.
  2. Preisoptimierung im Komplex durchführen - nicht nur für einzelne Warengruppen, sondern auch unter Berücksichtigung langfristiger Effekte. Zu diesem Zweck können Sie das Modell verwenden, das den Umsatz als Ganzes über das Netzwerk vorhersagt. Glücklicherweise hat es sich selbst bei täglichen Verkäufen als beeindruckend genau herausgestellt.

Zusammenfassend möchte ich sagen, dass es für mich als nicht erfahrene Person in der Entwicklung im Allgemeinen und in den Methoden von MO im Besonderen schwierig war, jedoch alles als machbar herauszustellen. Es war auch interessant, selbst zu überprüfen, wie diese Methoden in der Realität anwendbar sind. Nachdem ich schon viele Artikel gelesen hatte, brannten meine Augen vor der Tatsache, dass ich versuchen würde, alles selbst zu tun, und ich war in der Erwartung, dass ich hervorragende Ergebnisse erzielen würde. Die Praxis erwies sich als hart - eine kleine Anzahl von Waren mit einer langen Verkaufsgeschichte, verrauschten täglichen Daten, fehlenden Vorhersagen bei den Verkaufsmengen und der Verwendung komplexer Modelle ist nicht immer gerechtfertigt. Trotzdem habe ich ein unvergessliches Erlebnis und gelernt, was es bedeutet, Analytik in die Praxis umzusetzen.

→ Basierend auf der geleisteten Arbeit habe ich ein Projekt in meinem Repository vorbereitet

Im Repository finden Sie einen Datensatz, der auf der Grundlage von Abhängigkeiten aus realen Daten generiert wurde, sowie ein Python-Skript, mit dem Sie ein virtuelles Experiment mit diesen generierten Daten durchführen können. So können Sie Ihr Glück versuchen und das Modell entsprechend Ihrem Gewinn überholen und den Preis für das Produkt festlegen. Sie müssen lediglich das Skript herunterladen und ausführen.

Ich hoffe, meine Erfahrung wird dazu beitragen, die Grenzen des Einsatzes von MO-Methoden zu bestimmen, und zeigt, dass Geduld und Ausdauer Ergebnisse erzielen können, auch wenn Sie in keinem Bereich ein Profi sind.

Source: https://habr.com/ru/post/de421429/


All Articles