Lesen Sie unseren Artikel über

.

Dieser Leitfaden hilft Ihnen dabei, herauszufinden, ob Prophet für Ihr Prognoseprojekt geeignet ist oder nicht, indem er Ihnen eine kritische Meinung auf der Grundlage einer echten Projektlinse gibt. Wir haben es in 3 Hauptbereichen getestet: Feature Engineering und Modellierung, Interpretierbarkeit und Wartung.

Wir haben Prophet in einem realen Projekt auf 3 Hauptaspekte hin getestet: Funktionsentwicklung, Interpretierbarkeit und Verwendung in Produktion und Wartung. Hier sind unsere Schlussfolgerungen:

Feature Engineering und Modellierung:

  • Ein nativer Umgang mit Trend- und Saisonalitätsmerkmalen, der Prophet zu einem guten Basismodell macht, wenn die Zeitreihe Geschäftszyklen folgt.
  • Wenn Ihr Signal jedoch verrauscht ist, kann die Feinabstimmung der Leistung des Modells mühsam sein.

Interpretierbarkeit:

  • Dank der Aufteilung der Prognose in zeitliche Komponenten sind die Entscheidungen des Modells leicht zu interpretieren
  • Dennoch ist es nicht präzise genug, um die Auswirkungen eines externen Ereignisses zu messen.

Stabilität der Ergebnisse / Pflege:

  • Prophet liefert ein interpretierbares Modell mit guter Leistung in sehr kurzer Zeit
  • Wenn Sie jedoch Wert auf Stabilität und Vorhersagegenauigkeit legen, sollten Sie eine andere Art von Algorithmus verwenden, z. B. baumbasierte Modelle.

Einführung

Kürzlich, ein Artikel wies darauf hin, dass Facebook Prophet bei einigen Randfällen eine schlechte Leistung zeigte. In der Tat ist dieses Paket so beliebt, dass es als DAS Tool für jeden Anwendungsfall von Prognosen angesehen wird. Dies löste eine Debatte in der Community aus und sogar sein Schöpfer reagierte.
Es gibt viel Literatur darüber, wie man mit Prophet eine einzelne Prognose erstellen kann. Aber es fehlt an empirischem Feedback dazu, wie es sich in der Produktion verhält, wenn Sie täglich Prognosen erstellen müssen. Wir haben dieses Tool 6 Monate lang in einem echten Unternehmensprojekt getestet und erprobt. Hier sind einige Erkenntnisse.

Wir haben Prophet zur Vorhersage von Anrufen in Callcenter für eines der größten Telekommunikationsunternehmen in Europa, um die Qualität des Kundendienstes zu optimieren.

Wir haben die GLADS-Rahmen um unseren data-Ansatz zu entwerfen:

  • Ziel: Anzahl der eingehenden Anrufe
  • GranularitätTag / geografische Zone / Qualifikationsniveau des Agenten (z. B. technische Unterstützung per Mobiltelefon).
  • Horizont: 5 Monate (M+5)
  • Frequenz: tägliche Auffrischung
  • SKU: Agentenfähigkeiten

Eine wichtige Einschränkung war die Notwendigkeit, dass Interpretierbarkeit der Ergebnisse. Unsere Vorhersagen werden nämlich von menschlichen Planern genutzt, deren Ziel es ist, eine SLA (X% der Anrufe müssen in einem bestimmten Zeitraum beantwortet werden) aufrechtzuerhalten und gleichzeitig die Kosten zu minimieren. Ihre Arbeit besteht aus 3 Missionen:

  • Analysieren Sie und das Verständnis der wichtigsten Treiber für Anrufe und deren Entwicklung
  • Vorhersage Anrufvolumen mit Hilfe ihrer Geschäftskenntnisse

  • Zuweisung von — Anpassung des Angebots an Callcenter-Agenten entsprechend der Nachfragevorhersage.

Haupt Treiber anrufen unterscheiden sich je nach SKUs. Zu den Treibern für kommerzielle Unterstützung gehören zum Beispiel:

  • Anzahl der Kunden
  • Marketingveranstaltungen und Kampagnenbeschneidung
  • Niveau der Servicequalität (Schneeballeffekt)
  • Feiertage

Unsere Zeitreihen weisen starke saisonale Schwankungen auf und folgen den Wirtschaftszyklen. Sie sind nicht stationär. In diesem Fall ist Prophet eine geeignete Wahl. Wir haben uns entschieden, ihn sowie andere ML-Algorithmen zu testen häufig für diese Aufgabe verwendet.

Image

Feature Engineering und Modellierung

Prophet hat viele unbestreitbare Vorteile, die für ein geschäftsorientiertes Prognoseprojekt besonders nützlich sind und die seine Beliebtheit voll und ganz rechtfertigen.

Einer von ihnen ist sein Benutzerfreundlichkeit. Nur ein paar Zeilen Code und fast kein Feature Engineering sind erforderlich, um eine gute Ausgangsbasis zu haben. Wenn Sie mehr darüber erfahren möchten, wie es funktioniert und wie Sie es verwenden können, lesen Sie dieser Twitter-Thread von seinem Schöpfer, sowie dieser ausgezeichnete Blogbeitrag (mit Code).

Zeitfunktionen, wie Trend und Saisonalität werden nativ erstellt - ohne gleitende Mittelwerte, Verzögerungen und andere komplizierte Merkmale, die für baumbasierte Modelle des maschinellen Lernens (ML) erforderlich sind.

Allerdings kann es ziemlich mühsam sein, eine Feinabstimmung vorzunehmen, wenn mehrere Ereignisse das Signal stören.

Trend

Ein großer Vorteil im Vergleich zu autoregressiven Modellen (z.B. ARIMA) ist, dass Prophet erfordert keine stationären Zeitreihen: eine Trendkomponente wird nativ erzeugt.

Aus diesen Gründen, Prophet funktioniert recht gut für mittelfristige Vorhersagen (wir haben es mit dem Horizont M+5 versucht), obwohl das Konfidenzintervall recht groß ist.

Trend kann korrekt geschätzt werden ohne jegliche externe data (z.B. die Anzahl der Kunden). Das ist ziemlich mächtig, denn wenn Sie den Eingang von Anrufen vorhersagen, wissen Sie nicht, wie viele Kunden Sie in 5 Monaten haben werden, also können Sie diese Funktion nicht nutzen.
Diese Grafik zeigt zum Beispiel die Anzahl der Glasfaser-Internet-Kunden (FIO) im Laufe der Zeit (ein wachsender Markt für unser Telekommunikationsunternehmen), verglichen mit der Trendkomponente, die Prophet über das Anrufvolumen ermittelt hat. Es besteht eine starke Korrelation (Pearson-Koeffizient: 0,988) zwischen dem Anrufvolumen und der Anzahl der Kunden. Also das Modell lernt den Trend gut kennen, und nur aus der Zeitserie selbst.

Image

Wir haben einige Tipps und Tricks herausgefunden, wie Sie den Trend zu einem echten Vorteil für Ihre Prophet-basierten Prognosen machen können.

Trend: Achten Sie auf Ihre Wechselpunkte

Eine der Stärken von Prophet ist auch eine Schwäche für die Stabilität der Ergebnisse und der Leistung: Die Trendkomponente erklärt tendenziell den größten Teil der Vorhersage — um 90% für unsere Fallstudie. Wenn der Trend also nicht gut geschätzt wird, sinkt die Leistung dramatisch und Sie können über 20 MAPE-Punkte verlieren, wenn Sie zu viel oder zu wenig über die Zeit vorhersagen. Sie haben mehrere Parameter, mit denen Prophet den Trend anpassen kann, einschließlich der Parameter "changepoint_prior_scale" und "changepoint_range".

Der richtige changepoint_prior_scale-Wert ist entscheidend, denn dieser Parameter bestimmt die Flexibilität des Trends. Je höher er ist, desto flexibler ist der Trend. Unsere Strategie besteht darin, diesen Parameter in einem Raster mit diesen Werten (in einer logarithmischen Skala) zu suchen: [0.001, 0.01, 0.1, 0.5]. Relativ kleine Werte führen im Allgemeinen zu einer besseren Verallgemeinerung.

Trend: Machen Sie das Beste aus dem neuesten data

Image

Nächster wichtiger Punkt: Prophet berücksichtigt standardmäßignur der erste 80% der Geschichte zu den Trend angleichen durch die Angabe von 25 potenziellen Änderungspunkten. Wir haben festgestellt, dass eine Erhöhung dieses Wertes von 80% durch Änderung des Parameters changepoint_range die Leistung verbessert. Dabei werden auch die neuesten data berücksichtigt, die in unserem Fall wichtiger sind, um die Höhe der Anrufe zu erklären. In diesem Diagramm können Sie beispielsweise sehen, dass 2021 data wichtig ist, weil es einen abnehmenden Trend aufweist. Wir haben uns dafür entschieden, die gesamte Trainingsmenge mit Ausnahme der letzten 7 Tage zu berücksichtigen, anstatt 80%.

Trend: Bereinigen Sie Ihre Ausreißer

Eine weitere Sache, die Sie beachten sollten, ist die Empfindlichkeit gegenüber Ausreißern. Die offizielle Dokumentation empfiehlt, sie zu entfernen: “Prophet ist in der Lage, Ausreißer in der Historie zu behandeln, aber nur, indem er sie mit Trendänderungen anpasst”.

Image

Saisonalitäten

Komponenten der Saisonalität, wie z.B. täglich und jährlich, werden mit Fourier-Reihen geschätzt. Da unsere Zeitreihen starke saisonale Konjunkturzyklen aufweisen, haben wir festgestellt, dass Prophet recht gut funktioniert.

Aber wenn wir ein wenig in die Tiefe gehen, stellen wir fest, dass die wöchentliche Modellierung der Saisonalität ist begrenzt. Unsere Zeitreihe wies an Samstagen im Vergleich zum Rest der Woche sehr niedrige Werte auf (und keine Werte an Sonntagen). Wir haben viel Zeit und Mühe investiert, um unsere Vorhersagen für diesen Wochentag zu verbessern.

Schließlich mussten wir eine Abhilfe schaffen: Stapeln zweier Modelle, darunter unser Prophet-Modell und ein statistisches Modell die Vorhersagen auf der Grundlage der durchschnittlichen Gewichtung der Wochentage in den letzten 6 Wochen zu berechnen. Und das, obwohl ich versucht habe, alle Parameter der wöchentlichen Saisonalität von Prophet zu ändern.

Unser Verständnis: Bei einer 7-Tage-Saisonalität (6 in unserem Fall ohne Sonntage) ist eine Erhöhung der Fourier-Ordnung nicht sehr nützlich, da das Intervall zwischen 0 und 2pi nur in wenige Segmente (6 oder 7) unterteilt ist. Und eine niedrige Fourier-Ordnung bedeutet, dass er kann extreme Werte und schnelle Veränderungen nicht berücksichtigen in der Saisonalität, wie die Samstage im obigen Beispiel.

Einige andere Tricks zur Feinabstimmung der Saisonalität:

  • Passt besser zu einem multiplikativen Modus
  • Saisonale Besonderheiten hinzufügen
  • Fourriers Bestellung ändern

Ereignisse und zusätzliche Regressoren

Für Ereignisse und Extra-Regressoren auch Prophet kann praktisch sein.

Sie können fügen Sie Extra-Regressoren, entweder kontinuierlich oder kategorisch, indem Sie dem Modell eine weitere Zeitreihe (Werte und Daten) mit der Option add_regressor Methode. Ereignisse werden als kategorische Regressoren verwaltet (Wert ist entweder 0 - das Ereignis findet an diesem Tag oder zu dieser Stunde nicht statt - oder 1 - das Ereignis findet statt).

Das Hinzufügen neuer Ereignisse ist ganz einfach: Sie müssen Prophet lediglich einen data-Frame zur Verfügung stellen, der die Daten und Namen der Ereignisse enthält.
Das hat bei Feiertagen, Ferien und anderen Ereignissen sehr gut funktioniert. Und es neigt dazu bessere Ergebnisse liefern als die baumbasierten Modelle.

Darüber hinaus verwendet Prophet das Python Urlaub Paket, damit Sie nur die ID des Landes (USA oder FRA) verwenden können, um verwandte Feiertage als Funktion hinzuzufügen.

Image

Wie bei vielen anderen Algorithmen zur Vorhersage von Zeitreihen ist es oft schwer zu wissen, ob ein wiederkehrendes Ereignis bereits in der Saisonalität des Propheten enthalten ist oder ob es manuell markiert werden muss, um dem Algorithmus zu helfen. Ein einfaches Beispiel ist die Zeit zwischen Weihnachten und Neujahr: derselbe Zeitraum, ungefähr derselbe Effekt, jedes Jahr. Ein kniffliges Beispiel sind die französischen Frühlingsferien. In Frankreich gibt es um den April herum zweiwöchige Schulferien, deren Daten sich von Jahr zu Jahr verschieben und die nach geografischen Gebieten aufgeteilt sind (nicht ganz Frankreich macht zur gleichen Zeit Ferien).

Während die jährliche Saisonalität in diesem Zeitraum gering ist, wirkt sich das Ereignis “Frühlingsferien” positiv auf die Vorhersage des Anrufvolumens aus. Und das Modell schneidet bei diesem Ereignis besser ab. Die Auswirkung dieses Ereignisses steht also nicht im Einklang mit anderen Feiertagen und der beobachteten Saisonalität, aber es gibt eine Auswirkung auf das Modelltraining und die Vorhersagen, die die Leistung verbessert... Sollten wir es hinzufügen oder nicht?
Wir beobachteten ähnliche Probleme mit verschiedenen Feiertagen die sich jedes Jahr verschieben, und wir mussten manchmal Prophet mit einem statistischen Modell überlagern, um die Auswirkungen der Feiertage besser zu erfassen. Wir haben jedoch keine konsistente Lösung zu bieten.

Feature-Kreuze sind zeitaufwändig und oft übertechnisiert

Da Prophet ein grob lineares Modell in die Art und Weise, wie es mit Extra-Features und Ereignissen umgeht, ist Feature Cross nicht automatisch. Das bedeutet, dass Prophet nicht ableiten kann, dass eine Kombination von Werten verschiedener Merkmale zu einer exponentiell höheren oder niedrigeren Auswirkung auf die Vorhersage führt, während dies etwas ist, was baumbasierte Algorithmen und Deep Learning sehr gut ableiten können.

Beispiel: Nehmen wir an, Sie haben eine Auswirkung auf Ihre Zeitserie am Geschäftstag + 1 nach einem Feiertag (HBD+1). Dann versehen Sie Prophet mit einem Ereignis “HBD+1” wird es ermöglichen, diesen Effekt besser zu berücksichtigen. Aber hier hängen die Auswirkungen weitgehend davon ab, ob der Tag HBD+1 auf einen Montag, Samstag usw. fällt. Und sie ist weder linear noch multiplikativ. Daher müssen Sie alle Funktionen hinzufügen “HBD+1_monday”, “HBD+1_Dienstag”,…

Wenn Sie Merkmale kreuzen, wächst ihre Zahl exponentiell, und das wird Sie beide kosten Zeit zur Berechnung, ein Verlust an Interpretierbarkeit und wahrscheinlich ein Leistungsabfallwenn Sie zu viele dieser Funktionen hinzufügen.

Interpretierbarkeit

Einer der wichtigsten Vorteile von Prophet gegenüber anderen Modellen ist seine Interpretierbarkeit.

Image

Die native Zerlegung der Prognose in Trend-, Saison-, Ereignis- und Extra-Regressor-Komponenten ist für Low-Tech-Profile sinnvoll.

Image

Prophet ist ein additives Modell : Die Summe der einzelnen Komponenten entspricht der Vorhersage. Die Bedeutung jeder Komponente wird ausgedrückt direkt in der Zieleinheit(im Gegensatz zu SHAP-Werte). Und es bietet sowohl lokale als auch globale Erklärbarkeit.

Folglich ist es wirklich einfache Darstellung der Vorhersage / Auswirkung der einzelnen Komponenten auf die Prognose. Wenn Sie sich für einen multiplikativen Modus entscheiden, bei dem jede Komponente als Prozentsatz des Trends ausgedrückt wird, haben Sie etwas mehr zu tun, aber die Darstellung bleibt sehr einfach.

Leider sind all diese Komponenten liefern nur etwa 10% der Vorhersage, die übrigen 90% wird im Trend vorhergesagt... die fast unerklärlich ist. Ihre Aufgabe wird es sein, zu versuchen, den Trend mit Hilfe von externen Regressoren zu erklären, die Sie nicht als Merkmale für Prophet verwenden können, wie z.B. das Wachstum des Kundenstamms, die Kontaktraten und die Veränderungen im Kundenverhalten für unsere Fallstudie. Dazu benötigen Sie die tatsächlichen Werte, die mit jedem dieser Merkmale verknüpft sind. Daher ist es nur möglich, Ihren Trend zu analysieren, wenn Sie auf die Vorhersagen aus der Vergangenheit zurückblicken.

Leistung und Wartungsfreundlichkeit in der Produktion

Leistung

Prophet hat sehr schnell eine gute Leistung, im Vergleich zur Entwicklungszeit. Mit anderen Worten, es bietet schnell eine gute Ausgangsbasis, denn Sie müssen keine Zeitfunktionen erstellen.

Prophet ermöglicht die Prognose von Zeitreihen mit fast kein Feature Engineering und eine gutes Leistungsniveau, in Rekordzeit.

Es trainiert schnell: Es dauert weniger als 1 Minute pro Modell, mit Kreuzvalidierung, auf einem data Set mit ~3 Jahren data auf einem Macbook Air mit M1 Chip und 8 Go Speicher.

Wenn in der Produktion neue data eintreffen, müssen Sie Ihr Modell neu anpassen. Eine Möglichkeit, das Training zu beschleunigen, ist der Warmstart der Anpassung mit den Modellparametern des früheren Modells. Sie können diese Funktion auch nutzen, um den Prozess der Kreuzvalidierung zu beschleunigen. Lesen Sie den Abschnitt “Aktualisieren von angepassten Modellen”.” zur Dokumentation um weiter zu gehen.

Prophet benötigt mindestens zwei Jahre des data, um die jährliche Saisonalität zu berechnen, aber wir empfehlen mit mindestens 3 Jahren Erfahrung in der Vergangenheit data um gute Leistungen zu erzielen.

Wir erreichten eine Leistung von ~15% MAPE nach ein paar Iterationen. Die Feinabstimmung der Ergebnisse war jedoch recht schwierig und es war schwer, diese Obergrenze zu erreichen. Wir mussten einige benutzerdefinierte Korrekturen für die Ausgabe entwickeln, um einen MAPE von ~10% zu erreichen.

In unserem Projekt haben Prophet und XGboost ähnliche Leistungskennzahlen in den Horizonten M+1 und M+2. Allerdings verschlechtert sich die Leistung in M+3 und M+4 bei Prophet tendenziell stärker als bei XGboost. Das liegt daran, dass der Trend nicht korrekt geschätzt wurde. Während sich dies nicht auf kurzfristige Vorhersagen auswirkt, werden langfristige Vorhersagen stark von der Trendrichtung beeinflusst, da sie im Laufe der Zeit zunimmt oder abnimmt, was zu Über- oder Untervorhersagen führt. Die Verwendung eines anderen Ansatzes für langfristige Prognosen ist wahrscheinlich sicherer.

Interessant, manchmal kann das Hinzufügen von mehr historischen data kontraproduktiv sein und zu einem Rückgang der Vorhersagegenauigkeit führen. Prophet erlaubt es nicht, mehr Gewicht auf die jüngsten Beobachtungen zu legen, so dass mehr data zu einer Abnahme der Vorhersagegenauigkeit führen kann.
Hier wäre der Tipp, Experimente mit mehreren Längen des historischen data durchzuführen und diejenige auszuwählen, die die besseren Ergebnisse liefert.

Stabilität der Ergebnisse

Trotz einiger unbestreitbarer Vorteile ist Prophet kein Plug-and-Play-Modell. Es erfordert einige Zeit für die Feinabstimmung, um die Leistung zu steigern. Einige Schwächen machen es schwer, sich auf seine Stabilität in der Produktion zu verlassen.
Um festzustellen, wie oft wir das Modell neu trainieren müssen, haben wir 2 Strategien verglichen. Wir haben Prognosen für verschiedene Monate erstellt und die Ergebnisse gemessen:

  • Feinabstimmung der Hyperparameter des Modells jeden Monat (mit einer Rastersuche + einer zeitlichen Kreuzvalidierung zur Auswahl der besten Kombination)
  • Verwenden Sie die gleichen Hyperparameter für alle Prognosen

Ein erneutes Training des Modells jeden Monat führte zu besseren Ergebnissen. Zusammenfassend lässt sich sagen, dass trotz der zeitlichen Kreuzvalidierung die Hyperparameter im Laufe der Zeit nicht stabil waren. Bei XGboost müssen Sie eine solche Umschulung nicht häufig durchführen. Diese Ergebnisse sind jedoch mit Vorsicht zu genießen, da die Volumina zu dem Zeitpunkt, als wir diesen Benchmark durchführten, durch die COVID-Krise beeinträchtigt wurden. Auch hier war unsere Intuition zur Erklärung des Ergebnisses, dass der Trend schwer richtig einzuschätzen ist.

Skalierbarkeit

Einer der Nachteile dieses univariaten Modells ist, dass Sie ein Modell pro SKU, im Vergleich zu baumbasierten Ansätzen, bei denen Sie das gleiche Modell für viele Produkte verwenden können.

Normalerweise führt das zu besseren Leistungen, wie Pierre-Yves Mousset feststellte an seinem Projekt. Viele Modelle zu haben, kann jedoch eine technische Herausforderung und ein Alptraum für die Wartung sein.

Fazit

Die Benutzerfreundlichkeit des Propheten macht es zu einem sehr guten Basismodell, wenn Ihre Zeitreihe leicht in einfache zeitliche Komponenten zerlegt werden kann. Wenn Ihr Signal jedoch verrauscht ist, kann die Feinabstimmung der Leistung des Modells mühsam sein.

Dank der nativen Aufschlüsselung der Prognose in Zeitkomponenten sind die Entscheidungen des Modells leicht zu interpretieren. Dennoch ist es nicht präzise genug, um die Auswirkungen eines externen Ereignisses zu messen, da Sie nie wissen, ob die Auswirkungen des Ereignisses bereits in den nativen Zeitkomponenten berücksichtigt sind.

Wenn Ihre Zeitreihe einigen Konjunkturzyklen folgt, können Sie schnell eine sehr ordentliche Leistung erzielen, ohne intensive Funktionsentwicklung. Die Trendkomponente wird jedoch nicht immer gut geschätzt, was zu erheblichen Leistungsabweichungen führen kann. Aus diesem Grund kann dieses Modell eine sorgfältige Überwachung und häufige menschliche Eingriffe erfordern.

Wenn Sie eine gewisse Erklärbarkeit bieten und einfach und schnell ein anständiges Modell erstellen möchten, ist Prophet eine Option, die Sie in Betracht ziehen sollten. Wenn Sie jedoch Wert auf Stabilität und Prognosegenauigkeit legen, sollten Sie eine andere Art von Algorithmus in Betracht ziehen, z. B. baumbasierte Modelle, Umlaufbahn oder DeepAR.

Mittel Blog von Artefact.

Dieser Artikel wurde ursprünglich veröffentlicht auf Medium.com.
Folgen Sie uns auf unserem Medium Blog !