Dieser Leitfaden soll Ihnen helfen herauszufinden, ob Prophet für Ihr Prognoseprojekt geeignet ist oder nicht, indem er Ihnen eine kritische Meinung auf der Grundlage eines realen Projekts vermittelt. Wir haben Prophet in drei Hauptbereichen getestet: Feature Engineering und Modellierung, Interpretierbarkeit und Wartung.
Wir haben Prophet in einem realen Projekt auf 3 Hauptaspekte hin getestet: Funktionsentwicklung, Interpretierbarkeit und Einsatz in Produktion und Wartung. Hier sind unsere Schlussfolgerungen:
Entwicklung und Modellierung von Merkmalen:
Interpretierbarkeit:
Stabilität der Ergebnisse / Wartung:
Einführung
Kürzlich wurde in einem Artikel darauf hingewiesen, dass Facebook Prophet in einigen Randfällen schlecht abschneidet. In der Tat ist dieses Paket so beliebt, dass es als DAS Tool für jeden Prognoseanwendungsfall angesehen wird. Dies löste eine Debatte in der Community aus, und sogar der Erfinder reagierte.
Es gibt viel Literatur darüber, wie man mit Prophet eine Einzelprognose erstellen kann. Aber es fehlt an empirischem Feedback darüber, wie es sich in der Produktion verhält, wenn man täglich Prognosen erstellen muss. Wir haben dieses Tool 6 Monate lang in einem echten Unternehmensprojekt getestet und erprobt. Hier sind einige Erkenntnisse.
Wir haben Prophet zur Vorhersage des Anrufaufkommens in Call-Centern eines der größten Telekommunikationsunternehmen in Europa eingesetzt, um die Qualität des Kundendienstes zu optimieren.
Wir haben den GLADS-Rahmen angewandt, um unseren Ansatz data zu entwerfen:
Eine wichtige Bedingung war die Notwendigkeit der 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) einzuhalten und gleichzeitig die Kosten zu minimieren. Ihre Arbeit besteht aus 3 Missionen:
Die Hauptanforderungstreiber unterscheiden sich je nach SKU. Zu den Treibern für die kommerzielle Unterstützung gehören zum Beispiel:
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 dafür entschieden, es zu testen, ebenso wie andere ML-Algorithmen, die häufig für diese Aufgabe verwendet werden.
Konstruktion und Modellierung von Merkmalen
Prophet hat viele unbestreitbare Vorteile, die für ein geschäftsorientiertes Vorhersageprojekt besonders nützlich sind und die seine Beliebtheit voll und ganz rechtfertigen.
Einer davon ist seine Benutzerfreundlichkeit. Es sind nur wenige Codezeilen und fast kein Feature-Engineering erforderlich, um eine gute Basislinie zu haben. Um mehr darüber zu erfahren, wie es funktioniert und wie man es verwendet, lesen Sie diesen Twitter-Thread des Erfinders sowie diesen hervorragenden Blogbeitrag (mit Code).
Zeitmerkmale wie Trend und Saisonalität werden nativ erstellt - ohne rollierende Mittelwerte, Verzögerungen und andere schwierige Merkmale, die von baumbasierten Modellen für maschinelles Lernen (ML) benötigt werden.
Allerdings kann die Feinabstimmung recht mühsam sein, wenn mehrere Ereignisse das Signal stören.
Trend
Ein großer Vorteil im Vergleich zu autoregressiven Modellen (z.B. ARIMA) ist, dass Prophet keine stationären Zeitreihen benötigt: eine Trendkomponente wird von Haus aus erzeugt.
Aus diesen Gründen funktioniert Prophet recht gut für mittelfristige Vorhersagen (wir haben es für den Horizont M+5 ausprobiert), auch wenn das Konfidenzintervall recht groß ist.
Der Trend kann ohne externe data (z. B. die Anzahl der Kunden) korrekt geschätzt werden. Das ist ziemlich leistungsfähig, denn wenn Sie die Anrufeingänge vorhersagen, wissen Sie nicht, wie viele Kunden Sie in 5 Monaten haben werden, so dass Sie diese Funktion nicht nutzen können.
Dieses Diagramm zeigt zum Beispiel die Anzahl der Glasfaser-Internet-Kunden (FIO) im Laufe der Zeit (ein wachsender Markt für unser Telekommunikationsunternehmen) im Vergleich zur Trendkomponente, die Prophet aus dem Anrufvolumen gelernt hat. Es besteht eine starke Korrelation (Pearson-Koeffizient: 0,988) zwischen dem Anrufvolumen und der Anzahl der Kunden. Das Modell lernt den Trend also gut, und zwar nur aus der Zeitreihe selbst.
Wir haben einige Tipps und Tricks ermittelt, 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 gleichzeitig eine Schwäche für die Stabilität der Ergebnisse und die Leistung: Die Trendkomponente erklärt in der Regel den größten Teil der Vorhersage - in unserer Fallstudie etwa 90 %. Wenn also der Trend nicht gut geschätzt wird, sinkt die Leistung dramatisch und man kann über 20 MAPE-Punkte verlieren, wenn man im Laufe der Zeit zu viel oder zu wenig vorhersagt. Es gibt mehrere Parameter, mit denen Prophet den Trend anpassen kann, darunter die Parameter "changepoint_prior_scale" und "changepoint_range".
Es ist wichtig, den richtigen Wert für changepoint_prior_scale zu finden, 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 den folgenden 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: Das Beste aus dem Neuesten machen data
Nächster Punkt: Prophet berücksichtigt standardmäßig nurdie ersten 80 % des Verlaufs , um den Trend durch die Angabe von 25 potenziellen Änderungspunkten zu approximieren. Wir haben festgestellt, dass eine Erhöhung dieses Wertes von 80 % durch Änderung des Parameters changepoint_range die Leistung verbessert. Dadurch werden auch die letzten data berücksichtigt, die in unserem Fall wichtiger sind, um das Niveau der Aufrufe zu erklären. In diesem Schaubild sehen Sie beispielsweise, dass das Jahr 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 anstelle von 80 % zu berücksichtigen.
Trend: Bereinigen Sie Ihre Ausreißer
Ein weiterer Punkt, der zu beachten ist, ist die Empfindlichkeit gegenüber Ausreißern. In der offiziellen Dokumentation wird empfohlen, diese zu entfernen: "Prophet ist in der Lage, mit Ausreißern in der Historie umzugehen, aber nur, indem es sie mit Trendänderungen anpasst".
Saisonale Besonderheiten
Saisonale Komponenten, wie tägliche und jährliche, werden mit Fourier-Reihen geschätzt. Da unsere Zeitreihen starke saisonale Konjunkturzyklen aufweisen, haben wir festgestellt, dass Prophet recht gut funktioniert.
Wenn wir jedoch etwas tiefer eintauchen, stellen wir fest, dass die Modellierung der wöchentlichen Saisonalität begrenzt ist. 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.
Letztendlich mussten wir uns behelfen, indem wir zwei Modelle übereinander legten, nämlich unser Prophet-Modell und ein statistisches Modell, das Vorhersagen auf der Grundlage der durchschnittlichen Gewichtung der Wochentage in den letzten sechs Wochen berechnet. Und das, obwohl wir versucht haben, 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 sie Extremwerte und schnelle Änderungen der Saisonalität, wie die Samstage im obigen Beispiel, nicht abbilden kann.
Einige andere Tricks zur Feinabstimmung der Saisonalität:
Ereignisse und zusätzliche Regressoren
Auch für Veranstaltungen und Extrarückkehrer kann Prophet praktisch sein.
Sie können zusätzliche Regressoren hinzufügen, entweder kontinuierlich oder kategorisch, indem Sie dem Modell mit der Methode add_regressor eine weitere Zeitreihe (Werte und Daten) hinzufügen. Ereignisse werden als kategorische Regressoren verwaltet (der 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 einfach: Sie müssen Prophet nur einen Datenrahmen mit den Daten und Namen der Ereignisse zur Verfügung stellen.
Das hat bei Feiertagen, Ferien und anderen Ereignissen recht gut funktioniert. Und es liefert tendenziell bessere Ergebnisse als die baumbasierten Modelle.
Darüber hinaus verwendet Prophet die Python Feiertage Paket, damit Sie nur die ID des Landes (USA oder FRA) verwenden müssen, um entsprechende Feiertage als Funktion hinzuzufügen.
Wie bei vielen anderen Algorithmen zur Vorhersage von Zeitreihen ist es oft schwierig zu erkennen, ob ein wiederkehrendes Ereignis bereits in der Prophet-Saisonalität enthalten ist oder ob es manuell markiert werden muss, um dem Algorithmus zu helfen. Ein einfaches Beispiel ist die Zeit zwischen Weihnachten und Neujahr: jedes Jahr derselbe Zeitraum, ungefähr derselbe Effekt. Ein schwieriges 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 von uns 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 haben ähnliche Probleme mit verschiedenen Feiertagen beobachtet, die sich jedes Jahr verschieben, und manchmal mussten wir Prophet mit einem statistischen Modell kombinieren, um die Auswirkungen der Feiertage besser zu erfassen. Wir haben jedoch keine einheitliche Lösung anzubieten.
Feature-Kreuze sind zeitaufwändig und oft übertechnisiert
Da Prophet in der Art und Weise, wie es mit zusätzlichen Merkmalen und Ereignissen um geht, ein annähernd lineares Modell ist , erfolgt die Kreuzung von Merkmalen 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, wohingegen 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). Wenn Sie dann Prophet mit einem Ereignis "HBD+1" versehen, kann es diesen Effekt besser abbilden. Aber hier hängt die Auswirkung weitgehend davon ab, ob der Tag HBD+1 auf einen Montag, Samstag usw. fällt. Und er ist weder linear noch multiplikativ. Daher müssen Sie alle Merkmale "HBD+1_monday", "HBD+1_tuesday",... hinzufügen.
Beim Kreuzen von Merkmalen wächst ihre Anzahl exponentiell, und es kostet Sie sowohl Zeit, sie zu berechnen, als auch einen Verlust an Interpretierbarkeit und wahrscheinlich einen Leistungsabfall, wennSie zu viele dieser Merkmale hinzufügen.
Interpretierbarkeit
Einer der Hauptvorteile von Prophet gegenüber anderen Modellen ist seine Interpretierbarkeit.
Die systemeigene Zerlegung der Vorhersage in Trend-, Saisonalitäts-, Ereignis- und Extra-Regressor-Komponenten ist für Low-Tech-Profile sinnvoll.
Prophet ist ein additives Modell: Die Summe der einzelnen Komponenten entspricht der Vorhersage. Die Bedeutung jeder Komponente wird direkt in der Zieleinheit ausgedrückt (im Gegensatz zu SHAP-Werten). Und es bietet sowohl lokale als auch globale Erklärbarkeit.
Folglich ist es sehr einfach, die Vorhersage bzw. die Auswirkung der einzelnen Komponenten auf die Prognose darzustellen. 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 ist weiterhin sehr einfach.
Leider liefern all diese Komponenten nur etwa 10 % der Vorhersage, die restlichen 90 % werden durch den Trend vorhergesagt... der fast unerklärlich ist. Ihre Aufgabe wird es sein, den Trend mit Hilfe externer 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 in unserer Fallstudie. Dazu benötigen Sie die tatsächlichen Werte, die mit jedem dieser Merkmale verbunden sind: Daher ist es nur möglich, Ihren Trend zu analysieren, wenn Sie auf die in der Vergangenheit gemachten Vorhersagen zurückblicken.
Leistung und Wartungsfreundlichkeit in der Produktion
Performance
Prophet hat sehr schnell eine gute Leistung, verglichen mit der Entwicklungszeit. Mit anderen Worten, es bietet eine gute Basis schnell, wie Sie nicht haben, um Zeit Features Handwerk.
Prophet ermöglicht die Vorhersage von Zeitreihen in Rekordzeit, fast ohne Feature Engineering und mit einem guten Leistungsniveau.
Es trainiert schnell: es braucht weniger als 1 Minute pro Modell, mit Kreuzvalidierung, auf einem Datensatz 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 Kreuzvalidierungsprozess zu beschleunigen. Weitere Informationen finden Sie im Abschnitt "Aktualisieren von angepassten Modellen" in der Dokumentation.
Prophet benötigt mindestens zwei Jahre data , um die jährliche Saisonalität zu berechnen, aber wir empfehlen, mindestens 3 Jahre historischer data zu haben, um gute Ergebnisse zu erzielen.
Nach ein paar Iterationen erreichten wir eine Leistung von ~15% MAPE. Die Feinabstimmung der Ergebnisse war jedoch eine ziemliche Herausforderung , und es war schwierig, diese Obergrenze zu erreichen. Wir mussten einige benutzerdefinierte Korrekturen an der 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. Die Leistungen in M+3 und M+4 verschlechtern sich jedoch bei Prophet im Vergleich zu XGboost stärker. 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.
Interessanterweise kann das Hinzufügen weiterer historischer Daten data manchmal kontraproduktiv sein und zu einem Rückgang der Prognosegenauigkeit führen. Prophet erlaubt es nicht, mehr Gewicht auf die jüngsten Beobachtungen zu legen, so dass mehr data zu einer Verringerung der Vorhersagegenauigkeit führen kann.
Hier wäre der Tipp, Experimente mit verschiedenen Längen der 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 schwierig, sich auf seine Stabilität in der Produktion zu verlassen.
Um zu beurteilen, 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:
Ein erneutes Training des Modells in jedem 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 muss man solche Umschulungen 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 waren. 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 benötigen, im Gegensatz zu baumbasierten Ansätzen, bei denen Sie das gleiche Modell für viele Produkte verwenden können.
Normalerweise führt dies zu besseren Leistungen, wie Pierre-Yves Mousset bei seinem Projekt feststellte. Viele Modelle zu haben, kann jedoch eine technische Herausforderung und ein Alptraum für die Wartung sein.
Schlussfolgerung
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 Aufteilung 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 man nie weiß, ob die Auswirkungen des Ereignisses bereits in den nativen Zeitkomponenten berücksichtigt sind.
Wenn Ihre Zeitreihe einigen Konjunkturzyklen folgt, können Sie ohne intensives Feature-Engineering schnell eine sehr ordentliche Leistung erzielen. 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 ein gewisses Maß an Erklärbarkeit bieten und einfach und schnell ein vernünftiges Modell erstellen möchten, ist Prophet eine empfehlenswerte Option. Wenn Sie jedoch Wert auf Stabilität und Vorhersagegenauigkeit legen, sollten Sie eine andere Art von Algorithmus in Betracht ziehen, z. B. baumbasierte Modelle, Orbit oder DeepAR.