Wie Sie die richtigen Visualisierungen auswählen und sie in Streamlit implementieren, um Ihre Prognosemodelle besser zu debuggen
TL; DR
Bei Prognosemodellen ist es oft am besten, kontinuierlich zu iterieren, indem man einige data-Quellen hinzufügt, das Feature-Engineering verbessert, die Modellparameter verfeinert... Meistens sind Data-Wissenschaftler auf nur einen KPI festgelegt (d.h. RMSE, Vorhersage-Genauigkeit...). Hinter diesen KPIs verbergen sich oft viel mehr Informationen, die analysiert werden müssen, um die Vorhersage zu verbessern. Die Entwicklung eines geeigneten Visualisierungstools ist ein großartiges Mittel, um tief in das Modellverhalten einzutauchen, schnell Schwachstellen Ihres Modells zu erkennen und so effizient an Genauigkeit zu gewinnen.
In diesem Artikel werden die Schlüsselfragen entwickelt, die man sich bei der Bewertung eines Prognosemodells stellen sollte. Anschließend werden die wichtigsten Visualisierungen zur Beantwortung dieser Fragen vorgestellt und schließlich wird eine schnelle Implementierung im Rahmen eines einheitlichen Tools zur Erfassung all dieser Visualisierungen mit Streamlit vorgeschlagen.
Kontext
Dieser Artikel fasst zusammen, was wir bei der Entwicklung eines einheitlichen Visualisierungstools gelernt haben, das Data-Wissenschaftler, Softwareingenieure, Product Owner und Demand Planner (Geschäftsexperten) bei der Entwicklung von Sell-in-Prognosemodellen für mehr als 10 Geschäftsbereiche in einem Lebensmittel- und Getränkeunternehmen unterstützt. Unsere Modelle erstellten Prognosen auf der Ebene Tag x Lager x Produkt für die kommenden 14 Wochen. Diese wurden mit Hilfe von Boosting-Methoden entwickelt und berücksichtigen Produktmerkmale, historische Verkäufe, Ereignisse und Werbeaktionen data.
Die wichtigsten Fragen, die Sie sich bei der Bewertung eines Prognosemodells stellen sollten
1. Ist das Modell im Vergleich zur Basislinie gut?
Der Zugriff auf aktuelle Vorhersagen (z.B. Prognosen des Bedarfsplaners) im selben Bereich ist sehr hilfreich. Es ermöglicht ein gutes Verständnis des Geschäftsverhaltens für einen bestimmten Zeitraum, ein Produkt oder einen Standort. Je mehr Sie das Unternehmen befragen, desto mehr Einblicke erhalten Sie und desto mehr können Sie die richtigen Funktionen implementieren.
2. Verfolgung von Über- oder Unterprognosen und Rückgang der Vorhersagegenauigkeit
Die wichtigsten Fragen sind: Erfasse ich den globalen Trend? Erfasst das Modell bekannte wiederkehrende Ereignisse wie Feiertage, Lagerschließungen, Schulferien? Gibt es Einbußen bei der Genauigkeit in bestimmten Zeiträumen?
Warum ist das wichtig?
Das Erkennen solcher Ereignisse ist ein guter Weg, um effizient genauere Vorhersagen zu treffen. Diese sind den Nachfrageplanern oft gut bekannt und lassen sich recht einfach in Ihr Modell implementieren, wenn Sie über die entsprechenden Informationen verfügen. In vielen unserer Geschäftsbereiche wurden zum Beispiel einige Produkte für Schulessen verkauft. Die Einführung und Vorbereitung eines Merkmals, das die Schulferien repräsentiert, führte zu einer großen Steigerung unserer Genauigkeit für diese speziellen Zeiträume.
3. Umgang mit Produktbesonderheiten
Ist meine Leistung bei meinen Produktmarken/-familien homogen? Gibt es weitere Unterscheidungen zwischen meinen Produkten (Produkte, die nur in Aktionszeiträumen verkauft werden, Bestseller vs. Produkte mit geringem Volumen, Produkte )?
Warum ist das wichtig?
Diese Fragen helfen Ihnen, das Geschäft genauer zu verstehen. Zum Beispiel führen Aufteilungsmodelle, die auf der Bedeutung der Produkte in Bezug auf das Volumen basieren, oft zu einer Steigerung der Leistung. Die Nachfrage nach regulären Produkten unterscheidet sich nämlich stark von der Nachfrage nach Aktionsprodukten oder weniger verbreiteten Produkten, die stark mit Aktionszeiträumen korreliert sein können oder ein sehr spärliches Verkaufsprofil aufweisen. In den meisten unserer Fälle haben wir unterschiedliche Modelle trainiert, um diese verschiedenen Arten von Produkten zu berücksichtigen.
4. Werden die konstitutiven Effekte korrekt berücksichtigt?
Erfasst das Modell die Auswirkungen von Werbeaktionen korrekt? Gibt es Kannibalisierungseffekte? Passt sich das Modell gut an exogene Phänomene (z.B. Streiks) an?
Warum ist das wichtig?
Bitte lesen Sie den vorherigen Artikel unserer Prognoseserie, um sich mit der Aktion data zu beschäftigen: 5 Tipps zur besseren Berücksichtigung von Werbeaktionen data
Wie Sie Ihr Prognosemodell analysieren: von Makro-KPIs bis hin zur Auswertung in einem bestimmten Bereich
Was sind die wichtigsten Visualisierungen?
Um Ihr Bewertungstool zu erstellen, müssen Sie zwei Elemente kombinieren:

Der Filterteil muss es ermöglichen, nach mehreren Achsen zu filtern: Zeitraum der Analyse, Standorte (Einzelhändler, Lager ...), Produkte (eine Reihe von Produkten) und schließlich Produktkategorien.
Wir empfehlen mindestens die 4 folgenden Visualisierungen:
Wie können Sie mit Streamlit ein Dashboard für Ihr Prognosestudio erstellen?
Streamlit ist eine Open-Source-Python-Bibliothek, mit der Sie in wenigen Minuten gemeinsam nutzbare Web-Apps erstellen können und die in der Data Science-Community immer mehr an Beliebtheit gewinnt. In diesem Artikel werden wir nicht das Tool vorstellen, da es bereits viele Artikel zu diesem Thema gibt, sondern wir konzentrieren uns auf die einfache Implementierung einer Visualisierung.
Die Entscheidung, Streamlit für diese Art von Projekt zu verwenden, wurde durch mehrere Voraussetzungen motiviert:
1. Globale Struktur Ihres Dashboards für Prognosen
Bevor Sie sich mit der Implementierung befassen, müssen Sie zunächst die Teile Ihrer Anwendung zeichnen, um ein Dashboard zu erstellen.
Um Ihre Implementierung sauber zu halten, können Sie Ihren Code in mehrere Teile aufteilen:
| ├── config.py | ||
| ├── Vorhersagestudio | ||
| │ ├── Prognose-Analyse | ||
| │ │ └── fig_forecast_analysis.py | ||
| │ └── Seiten | ||
| │ └── forecast_analysis.py | ||
|
Auf der Hauptseite wird die globale Struktur Ihrer App eingerichtet, d.h. das globale Layout Ihrer App: in unserem Fall ein breites Layout und eine Seitenleiste, die den Namen Ihrer App und die verfügbaren Seiten anzeigt.
| importieren streamlit als st | |
| von prognose_studio.Seiten importieren Prognose_Analyse | |
| SEITEN = | |
| def Seite_schreiben(Seite): | |
| Seite.Schreiben Sie() | |
| def Haupt(): | |
| st.Seitenleiste.Titel("Prognosestudio") | |
| Auswahl = st.Seitenleiste.Auswahlfeld("", Liste(SEITEN.Tasten())) | |
| Seite = SEITEN[Auswahl] | |
| Seite_schreiben(Seite) | |
| wenn __name__ == "__main__": | |
| st.set_page_config(Layout="breit") | |
| Haupt() |
Die Konfigurationsdatei, in der wir die Farben und verschiedenen Konfigurationen für alle Ihre Plotly-Figuren sammeln.
| X_AXIS_TEMPLATE = Diktat(showline=Wahr, | |
| Gitter anzeigen=Falsch, | |
| Etikett anzeigen=Wahr, | |
| linecolor=“grau”, | |
| Linienstärke=2, | |
| Zecken=“draußen”, | |
| tickfont=Diktat(Familie=“Arial”, Größe=12, Farbe=“rgb(82, 82, 82)”)) | |
| Y_AXIS_TEMPLATE = Diktat(showline=Wahr, | |
| Gitter anzeigen=Wahr, | |
| linecolor=“grau”, | |
| gridcolor=“hellgrau”) | |
| LEGENDE = Diktat(Orientierung=“h”, yanchor=“unten”, y=1.02, xanchor=“richtig”, x=1) | |
| COLORDISCRETE = [“#002244”, “#ff0066”, “#66cccc”, “#ff9933”, “#337788”, | |
| “#429e79”, “#474747”, “#f7d126”, “#ee5eab”, “#b8b8b8”] |
2.Gebäude “Entwicklung der Visualisierung der Vorhersagegenauigkeit”
Zunächst werden wir unsere Plotly-Zahlen in einem Skript zusammenfassen:
| importieren Pandas als pd | |
| von tippen. importieren Liste | |
| importieren plottig.graph_objects als go | |
| von Konfiguration importieren COLORDISCRETE, LEGENDE, X_AXIS_TEMPLATE, Y_AXIS_TEMPLATE | |
| def fig_evolution_of_fa(prognosen_pro_ziel_datum: pd.DataFrame, | |
| Ereignisse: Liste = Keine) -> go.Abbildung: | |
| “””Abbildung, die die Entwicklung der Vorhersagegenauigkeit darstellt | |
| über die Backtest-Periode | |
| Parameter | |
| ---- | |
| vorhersagen_pro_Ziel_datum : pd.DataFrame | |
| Vorhersage dataset mit mindestens 3 Spalten : | |
| - target_date‘ : das Datum, für das Sie die Prognose erstellen | |
| - forecast_accuracy‘ : Ihr Genauigkeits-KPI | |
| - week_nb‘ : Wochen-ID (von 0 bis 52) | |
| - (optional) ‘demand_planner_forecast_accuracy’ : Ihre Basisprognose | |
| Primärschlüssel : ‘ziel_datum’ | |
| Ereignisse : Liste, optional | |
| eine Liste von Datumspaaren, die Zeiträume darstellen, standardmäßig Keine | |
| “”” | |
| fig_fa_score = go.Abbildung() | |
| fig_fa_score.add_trace( | |
| go.Streuung( | |
| Name=“Modellvorhersage-Genauigkeit”, | |
| x=prognosen_pro_ziel_datum[‘ziel_datum’], | |
| y=prognosen_pro_ziel_datum[‘prognose_genauigkeit’], | |
| Hovertext=prognosen_pro_ziel_datum[‘woche_nb’], | |
| markierung_farbe=COLORDISCRETE[0])) | |
| # Wenn Sie eine Basislinie haben, können Sie eine zusätzliche Spalte zu Ihrer | |
| # datasetzen, um sie in einem Liniendiagramm anzuzeigen | |
| wenn ‘Nachfrage_Planer_Vorhersage_Genauigkeit’.’ in prognosen_pro_ziel_datum.Spalten: | |
| fig_fa_score.add_trace( | |
| go.Streuung( | |
| Name=“Prognosegenauigkeit von Bedarfsplanern”, | |
| x=prognosen_pro_ziel_datum[‘ziel_datum’], | |
| y=prognosen_pro_ziel_datum[‘Nachfrage_Planer_Vorhersage_Genauigkeit’.’], | |
| Hovertext=prognosen_pro_ziel_datum[‘woche_nb’], | |
| markierung_farbe=COLORDISCRETE[2])) | |
| fig_fa_score.update_xaxes(Reichweite=(min(prognosen_pro_ziel_datum[‘ziel_datum’]), | |
| max(prognosen_pro_ziel_datum[‘ziel_datum’]))) | |
| fig_fa_score.update_traces(Modus=‘Linien+Markierungen’, Linie_Form=‘spline’) | |
| fig_fa_score.aktualisieren_layout( | |
| xaxis_title=“Zieldatum”, | |
| yaxis_title=“FA Score”, | |
| plot_bgcolor=‘weiß’, | |
| Legende=LEGENDE, | |
| xAchse=X_AXIS_TEMPLATE, | |
| yAchse=Y_AXIS_TEMPLATE) | |
| wenn Ereignisse: | |
| fig_fa_score.aktualisieren_layout( | |
| Formen=[get_vertical_filled_area(Segment[0], Segment[1], ‘rgb(102, 204, 204)’) | |
| für Segment in Ereignisse]) | |
| return fig_fa_score | |
| def get_vertical_filled_area(starten: Schwimmer, Ende: Schwimmer, Farbe: str = “blau”) -> Diktat: | |
| “””Liefert ein vertikales Formdiktat, mit dem Sie Ereignisse auf Figuren hervorheben können.””” | |
| return Diktat(Typ=“rekt”, | |
| xref=“x”, | |
| yref=“Papier”, | |
| x0=starten, | |
| y0=0, | |
| x1=Ende, | |
| y1=1, | |
| fillcolor=Farbe, | |
| Ebene=“unten”, | |
| zeilen_breite=0, | |
| Opazität=0.5) |
Schließlich werden wir unsere Seite für die Prognoseanalyse implementieren, die unser dataset lädt, unsere Zahlen auf verschiedene Spalten verteilt, ...
| importieren Pandas als pd | |
| importieren streamlit als st | |
| von prognose_studio.Prognose_Analyse.abbildung_vorhersage_analyse importieren fig_evolution_of_fa | |
| def Schreiben Sie() -> Keine: | |
| st.Titel(‘Vorhersage-Analyse’) | |
| df = pd.lesen_csv(‘Ihr_dataset.csv’) | |
| # Sie können hier einige benutzerdefinierte Ereignisse zur Anzeige laden | |
| # ex : events = [(‘2019-07-01’, ‘2019-09-01’), (‘2020-07-01’, ‘2020-09-01’)] | |
| Ereignisse = Keine | |
| evo_cont1, evo_cont2 = st.beta_spalten(2) | |
| evo_cont1.Zwischenüberschrift(‘Entwicklung der Vorhersage-Genauigkeit’) | |
| fig_evo_fa = fig_evolution_of_fa(df, Ereignisse) | |
| evo_cont1.plolty_fig(fig_evo_fa) | |
| wenn __name__ == “__main__”: | |
| Schreiben Sie() |
Tadam ! Hier ist unsere App :

Werfen wir einen Blick auf die vorgestellte Abbildung. Im Hinblick auf die zuvor besprochenen Punkte sind hier die wichtigsten Punkte unserer Abbildung:
Fazit:
Sobald Sie Ihr Visualisierungstool erstellt haben, ist es an der Zeit, es einzusetzen. Hier finden Sie eine großartige Ressource, um Ihre App zu teilen: Wie können Sie Ihre Streamlit-App in GCP bereitstellen und sichern?
Vielen Dank für die Lektüre und zögern Sie nicht, uns bei Fragen zu kontaktieren. Mehr über unsere Projekte finden Sie auf unserer Website Blog.

BLOG







