Vorhersage aus verschiedenen Daten in Python mit dem Zeitreihen-Vorhersage-Tool Facebook Prophet

Dieser Artikel ist [Greg Rafferty](https://towardsdatascience.com/@raffg?source=post_page-----29810eb57e66 -------------------- ---) Dies ist eine japanische Übersetzung von "Prognose in Python mit Facebook Prophet", veröffentlicht von Mr. im November 2019. .. Dieser Artikel wurde mit Genehmigung des ursprünglichen Autors veröffentlicht.

Ich bin Greg Rafferty, ein Datenwissenschaftler in der Bay Area. Der in diesem Projekt verwendete Code befindet sich auch auf meinem github.

In diesem Artikel werde ich Ihnen zeigen, wie Sie mithilfe einer Vorhersagebibliothek namens Facebook Prophet verschiedene Vorhersagen treffen und einige fortgeschrittene Techniken anwenden, um Ihr Fachwissen zur Behandlung von Trendinkonsistenzen einzusetzen. Es gibt viele Prophet-Tutorials im Internet, aber alle Möglichkeiten, das Modell des Propheten zu optimieren und das Wissen der Analysten zu integrieren, damit das Modell die Daten richtig navigiert, sind allzu detailliert. nicht. Dieser Artikel behandelt beide.


https://www.instagram.com/p/BaKEnIPFUq-/

In einem früheren Artikel zur Vorhersage mit Tableau (https://towardsdatascience.com/forecasting-with-python-and-tableau-dd37a218a1e5) wurde ein modifizierter ARIMA-Algorithmus für Passagiere auf kommerziellen Flügen in den USA verwendet. Ich habe die Anzahl vorhergesagt. Während der Ansatz von ARIMA gut zur Vorhersage von Routinedaten und kurzen Zeitrahmen geeignet ist, gibt es einige Fälle, die ARIMA nicht verarbeiten kann, und Facebook-Ingenieure haben Tools entwickelt, die in diesen Fällen verwendet werden können. Prophet baut sein Backend in STAN auf, einer probabilistischen Codierungssprache. Auf diese Weise kann Prophet viele der Vorteile der Bayes-Statistik nutzen, einschließlich Saisonalität, Einbeziehung von Fachwissen und Konfidenzintervallen, die datengesteuerte Risikoabschätzungen hinzufügen.

Hier sehen wir uns drei Datenquellen an, um zu erklären, wie Prophet und seine Vorteile verwendet werden. Wenn Sie es wirklich ausprobieren möchten, installieren Sie zuerst Prophet. Es gibt eine kurze Beschreibung in Facebook-Dokumentation. Der gesamte Code, der zum Erstellen des Modells zum Schreiben dieses Artikels benötigt wird, befindet sich in diesem Notizbuch. Ich werde.


Fluggast

Beginnen wir mit den einfachen. Verwenden Sie dieselben Fluggastdaten wie im vorherigen Artikel (https://towardsdatascience.com/forecasting-with-python-and-tableau-dd37a218a1e5). Der Prophet benötigt Zeitreihendaten mit zwei oder mehr Spalten, dem Zeitstempel ds und dem Wert y. Formatieren Sie die Daten nach dem Laden wie folgt:

passengers = pd.read_csv('data/AirPassengers.csv')df = pd.DataFrame()
df['ds'] = pd.to_datetime(passengers['Month'])
df['y'] = passengers['#Passengers']

In nur wenigen Zeilen kann Prophet ein Vorhersagemodell erstellen, das genauso ausgefeilt ist wie das ARIMA-Modell, das ich zuvor erstellt habe. Hier rufe ich den Propheten an und mache eine 6-Jahres-Prognose (monatliche Häufigkeit, 12 Monate x 6 Jahre):

prophet = Prophet()
prophet.fit(df)
future = prophet.make_future_dataframe(periods=12 * 6, freq='M')
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)

Anzahl der Passagiere von US-amerikanischen kommerziellen Fluggesellschaften (in Einheiten von 1000)

Der Prophet schließt die Originaldaten mit schwarzen Punkten ein und zeigt das Vorhersagemodell mit einer blauen Linie an. Der hellblaue Bereich ist das Konfidenzintervall. Die Funktion add_changepoints_to_plot fügt auch eine rote Linie hinzu. Die vertikal gezeichnete rote gestrichelte Linie zeigt, wo der Prophet die Trendänderung identifiziert hat, und die rote Kurve zeigt den Trend, wobei alle Saisonalitäten entfernt wurden. In diesem Artikel wird dieses Plotformat weiterhin verwendet.

Das war's für den einfachen Fall, und jetzt schauen wir uns einige komplexere Daten an.


Divvy Fahrrad teilen

Divvy ist Chicagos Fahrrad-Sharing-Service. Ich habe zuvor an einem Projekt gearbeitet, bei dem Divvy-Daten analysiert und mit Wetterinformationen aus Weather Underground verknüpft wurden. Ich wusste, dass diese Daten eine starke Saisonalität aufweisen, deshalb habe ich sie ausgewählt, weil ich dachte, sie wären ein großartiges Beispiel für die Demonstration der Fähigkeiten des Propheten.

Divvy-Daten werden nach Fahrt sortiert. Um die Daten für Prophet zu formatieren, summieren Sie zuerst die tägliche Ebene und dann den täglichen Spaltenmodus "Ereignisse" (z. B. Wetterbedingungen: "unklar", "Regen oder Schnee", "sonnig"). Erstellen Sie eine Spalte, die aus bewölkt, stürmisch, unbekannt usw., Anzahl der Verwendungen (Fahrten) und Durchschnittstemperatur besteht.

Nachdem die Daten formatiert wurden, schauen wir uns an, wie oft sie pro Tag verwendet werden:

Daraus können wir ersehen, dass die Daten eine klare Saisonalität aufweisen und die Trends im Laufe der Zeit zunehmen. Wir werden diesen Datensatz verwenden, um zu beschreiben, wie zusätzliche Regressoren hinzugefügt werden, in diesem Fall Wetter und Temperatur. Mal sehen, die Temperatur:

Ähnlich wie in der vorherigen Grafik, jedoch ohne Aufwärtstrend. Diese Ähnlichkeit ist sinnvoll, da an sonnigen und warmen Tagen mehr Menschen Fahrrad fahren und beide Parzellen gleichzeitig auf und ab fahren.

Wenn Sie eine weitere externe erklärende Variable hinzufügen, um eine Prognose zu erstellen, benötigt die von Ihnen hinzugefügte externe Variable Prognoseperiodendaten. Aus diesem Grund habe ich die Daten von Divvy um ein Jahr gekürzt, damit ich dieses Jahr zusammen mit Wetterinformationen vorhersagen kann. Sie können auch sehen, dass der Prophet die amerikanischen Standardfeiertage hinzugefügt hat.

prophet = Prophet()
prophet.add_country_holidays(country_name='US')
prophet.fit(df[d['date'] < pd.to_datetime('2017-01-01')])
future = prophet.make_future_dataframe(periods=365, freq='d')
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Der obige Codeblock erstellt das im Abschnitt Air Passenger beschriebene Trenddiagramm.

Divvy Trend Plot

Und hier ist das Komponentendiagramm:

Divvy-Komponenten-Plot

Das Komponentendiagramm besteht aus drei Abschnitten: Trends, Feiertage und Saisonalität. Die Summe dieser drei Komponenten bildet tatsächlich das gesamte Modell. Trends sind die Daten nach Abzug aller anderen Komponenten. Das Urlaubsdiagramm zeigt die Auswirkungen aller Feiertage im Modell. In Prophet implementierte Feiertage können als unnatürliche Ereignisse betrachtet werden, bei denen der Trend von der Grundlinie abweicht, aber nach dem Ende des Ereignisses zurückkehrt. Externe erklärende Variablen (dazu später mehr) ähneln Feiertagen, da sie dazu führen können, dass der Trend von der Basislinie abweicht, der Trend jedoch nach dem Ereignis unverändert bleibt. In diesem Fall haben alle Feiertage zu einem Rückgang der Passagierzahlen geführt, was auch angesichts der Tatsache, dass viele unserer Benutzer Pendler sind, sinnvoll ist. Wenn wir uns die wöchentliche saisonale Komponente ansehen, können wir sehen, dass die Anzahl der Benutzer während der Woche nahezu konstant ist, an Wochenenden jedoch stark abnimmt. Dies liefert weitere Beweise für die Spekulation, dass die meisten Passagiere Pendler sind. Last but not least ist die Grafik der saisonalen Schwankungen im Laufe des Jahres ziemlich wellig. Diese Diagramme bestehen aus Fourier-Transformationen, die im Wesentlichen Sinuskurven stapeln. Offensichtlich ist der Standardwert in diesem Fall zu flexibel. Um die Kurve zu glätten, erstellen wir jetzt ein Prophetenmodell, um die Saisonalität des Jahres auszuschalten und externe Variablen hinzuzufügen, um sie zu berücksichtigen, jedoch mit weniger Freiheit. Das Modell fügt auch diese Wettervariablen hinzu.

prophet = Prophet(growth='linear',
                  yearly_seasonality=False,
                  weekly_seasonality=True,
                  daily_seasonality=False,
                  holidays=None,
                  seasonality_mode='multiplicative',
                  seasonality_prior_scale=10,
                  holidays_prior_scale=10,
                  changepoint_prior_scale=.05,
                  mcmc_samples=0
                 ).add_seasonality(name='yearly',
                                    period=365.25,
                                    fourier_order=3,
                                    prior_scale=10,
                                    mode='additive')prophet.add_country_holidays(country_name='US')
prophet.add_regressor('temp')
prophet.add_regressor('cloudy')
prophet.add_regressor('not clear')
prophet.add_regressor('rain or snow')
prophet.fit(df[df['ds'] < pd.to_datetime('2017')])
future = prophet.make_future_dataframe(periods=365, freq='D')
future['temp'] = df['temp']
future['cloudy'] = df['cloudy']
future['not clear'] = df['not clear']
future['rain or snow'] = df['rain or snow']
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Die Trenddiagramme waren ziemlich gleich, daher zeige ich Ihnen nur die Komponentendiagramme:

Divvy-Komponentendiagramm mit geglätteten Kurven und zusätzlichen externen Variablen für die jährliche Saisonalität und das Wetter

In dieser Handlung ist das letzte Jahr des Trends nach oben und nicht nach unten wie in der ersten Handlung! Dies kann durch die Tatsache erklärt werden, dass die Durchschnittstemperatur in den Daten des letzten Jahres niedrig war und die Anzahl der Benutzer stärker als erwartet zurückging. Zusätzlich wurde die Jahreskurve geglättet und ein extra_regressors_multiplicative Plot hinzugefügt. Dies zeigt die Auswirkung des Wetters. Die Zunahme / Abnahme der Anzahl der Benutzer ist ebenfalls wie erwartet. Die Anzahl der Benutzer nimmt im Sommer zu und im Winter ab, und viele der Schwankungen lassen sich durch das Wetter erklären. Es gibt noch eine Sache, die ich für die Demonstration bestätigen möchte. Führen Sie das obige Modell erneut aus und fügen Sie diesmal nur die externen Variablen für Regen und Schnee hinzu. Das Komponentendiagramm sieht folgendermaßen aus:

Divvy-Komponenten-Diagramm, das nur die Auswirkungen von Regen und Schnee zeigt

Dies zeigt, dass an regnerischen oder schneereichen Tagen die tägliche Nutzung um etwa 1400 geringer ist als an nicht regnerischen Tagen. Es ist ziemlich interessant, oder?

Schließlich aggregieren wir diesen Datensatz stundenweise, um ein weiteres Komponentendiagramm zu erstellen, die tägliche Saisonalität. Die Handlung sieht folgendermaßen aus:

Divvy-Komponentendiagramm mit täglicher Saisonalität

Wie Mr. Rivers sagt, ist 4 Uhr morgens die schlechteste Zeit, um morgens aufzustehen. Anscheinend sind sich Chicagoer Biker einig. Nach 8 Uhr morgens erreicht der Gipfel den morgendlichen Pendler. Und gegen 18 Uhr kommt der ganze Gipfel der Rückkehrer am Abend. Sie können auch sehen, dass es nach Mitternacht einen kleinen Gipfel gibt. Wahrscheinlich wegen derer, die von der Bar nach Hause zurückkehren. Das sind die Divvy-Daten! Als nächstes gehen wir zu Instagram über.

Instagram

Prophet wurde ursprünglich von Facebook entwickelt, um seine eigenen Daten zu analysieren. Dann ist dieser Datensatz ein großartiger Ort, um Prophet auszuprobieren. Ich habe Instagram nach Konten mit einigen interessanten Trends durchsucht und drei Konten gefunden: @natgeo, @kosh_dp //www.instagram.com/kosh_dp/), @ jamesrodriguez10

National Geographic

https://www.instagram.com/p/B5G_U_IgVKv/

Als ich 2017 an einem Projekt arbeitete, arbeitete ich an einem National Geographic [Instagram-Konto](https: // Ich habe festgestellt, dass es unter www.instagram.com/natgeo/ eine [Anomalie] gibt (https://github.com/raffg/natgeo_instagram_anomaly). Im August 2016 stieg die Anzahl der Likes pro Foto auf mysteriöse Weise plötzlich dramatisch an und kehrte nach Ende August zum Ausgangswert zurück. Ich wollte diesen Anstieg als Ergebnis einer einmonatigen Marketingkampagne modellieren, um die Anzahl der Likes zu erhöhen und um zu sehen, ob ich die Wirksamkeit zukünftiger Marketingkampagnen vorhersagen kann.

Die Anzahl der Likes von National Geographic ist wie folgt. Die Trends nehmen deutlich zu und die Variabilität nimmt mit der Zeit zu. Es gibt viele Ausnahmen mit dramatisch höheren Likes, aber im Spike vom August 2016 waren alle in diesem Monat veröffentlichten Fotos überwiegend mehr Likes als in den Monaten zuvor und danach. Ich habe die Nummer gewonnen.

Ich möchte nicht erraten, warum dies so ist, aber nehmen wir an, dass die Marketingabteilung von National Geographic für dieses Modell, das wir erstellt haben, eine einmonatige Kampagne durchgeführt hat, die speziell darauf abzielt, die Anzahl der Likes zu erhöhen. Schauen wir uns das an. Erstellen Sie zunächst ein Modell, das diese Tatsache ignoriert, und erstellen Sie eine Vergleichsbasis.

Anzahl der Likes pro Foto von National Geographic

Der Prophet scheint durch diese Spitze verwirrt zu sein. Sie können sehen, dass wir versuchen, diese Spitze zur saisonalen Komponente jedes Jahres hinzuzufügen, da die blaue Linie den Anstieg im August jedes Jahres zeigt. Der Prophet möchte dies ein wiederkehrendes Ereignis nennen. Machen wir diesen Monat Urlaub, um dem Propheten mitzuteilen, dass 2016 etwas Besonderes passiert ist, das in anderen Jahren nicht wiederholt wurde:

promo = pd.DataFrame({'holiday': "Promo event",
                      'ds' : pd.to_datetime(['2016-08-01']),
                      'lower_window': 0,
                      'upper_window': 31})
future_promo = pd.DataFrame({'holiday': "Promo event",
                      'ds' : pd.to_datetime(['2020-08-01']),
                      'lower_window': 0,
                      'upper_window': 31})promos_hypothetical = pd.concat([promo, future_promo])

Der Promo-Datenrahmen enthält nur Ereignisse für August 2016, und der promos_hypothetical-Datenrahmen enthält zusätzliche Promotions, von denen National Geographic annimmt, dass sie im August 2020 implementiert werden. Wenn Sie Feiertage hinzufügen, können Sie mit Prophet mehr oder weniger Tage in grundlegende Feiertagsereignisse einbeziehen, z. B. ob der Schwarze Freitag in Thanksgiving oder Heiligabend in Weihnachten enthalten ist. kann auch tun. Dieses Mal habe ich 31 Tage nach "Urlaub" hinzugefügt, um den gesamten Monat in die Veranstaltung einzubeziehen. Unten finden Sie den Code und das neue Trenddiagramm. Beachten Sie, dass wir beim Aufrufen des Prophetenobjekts Feiertage = Promo angegeben haben.

prophet = Prophet(holidays=promo)
prophet.add_country_holidays(country_name='US')
prophet.fit(df)
future = prophet.make_future_dataframe(periods=365, freq='D')
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Anzahl der Likes pro Foto von National Geographic einschließlich Marketingkampagne im August 2016

Es ist wunderbar! Hier zeigt der Prophet, dass dieser lächerliche Anstieg der Likes sicherlich nur 2016 zugenommen hat, nicht jedes Jahr im August. Verwenden wir dieses Modell also erneut unter Verwendung des Datenrahmens promos_hypothetical, um vorherzusagen, was passieren würde, wenn National Geographic 2020 dieselbe Kampagne durchführen würde.

Anzahl der Likes pro National Geographic-Foto unter der Annahme einer Marketingkampagne im Jahr 2020

Mit dieser Methode können Sie vorhersagen, was passiert, wenn Sie ein unnatürliches Ereignis hinzufügen. Beispielsweise kann der diesjährige Produktverkaufsplan ein Modell sein. Fahren wir mit dem nächsten Konto fort.

Anastasia Kosh

https://www.instagram.com/p/BfZG2QCgL37/

Anastasia Kosh ist eine russische Fotografin, die verrückte Selbstporträts auf seinem Instagram und Musikvideos auf YouTube veröffentlicht. Als ich vor einigen Jahren in Moskau lebte, lebten wir in derselben Straße und waren Nachbarn. Zu dieser Zeit hatte ihr Instagram ungefähr 10.000 Follower, aber 2017 verbreiteten sich YouTube-Accounts schnell in Russland, was sie zu einer kleinen Berühmtheit machte, besonders unter Teenagern in Moskau. Ihr Instagram-Account ist exponentiell gewachsen und ihre Follower nähern sich schnell einer Million. Ich dachte, dieses exponentielle Wachstum wäre eine perfekte Herausforderung für den Propheten.

Die zu modellierenden Daten sind:

Dies ist ein typischer Hockey-Zeckentyp und zeigt ein optimistisches Wachstum, aber nur in diesem Fall wäre es wirklich so! Wie die anderen Daten, die wir bisher gesehen haben, liefert die Modellierung mit linearem Wachstum unrealistische Vorhersagen.

Anzahl der Likes pro Foto von Anastasia Kosh, die linear wächst

Diese Kurve setzt sich auf unbestimmte Zeit fort. Aber natürlich gibt es eine Begrenzung für die Anzahl der Instagram-Likes. Theoretisch entspricht dieses Limit der Gesamtzahl der registrierten Konten im Dienst. In Wirklichkeit sehen jedoch nicht alle Berichte die Fotos und sie mögen sie nicht. Hier bietet sich ein wenig Fachwissen als Analyst an. Dieses Mal habe ich beschlossen, dies mit logistischem Wachstum zu modellieren. Dazu müssen Sie dem Propheten die Obergrenze (Prophet nennt es Kappe) und die Untergrenze mitteilen.

cap = 200000
floor = 0
df['cap'] = cap
df['floor'] = floor

Nach meinem Wissen über Instagram und ein wenig Versuch und Irrtum habe ich beschlossen, die Anzahl der Likes auf 200.000 und die Untergrenze auf 0 zu beschränken. Im Propheten können diese Werte als Funktion der Zeit definiert werden und müssen keine Konstanten sein. In diesem Fall benötigen Sie wirklich einen konstanten Wert:

prophet = Prophet(growth='logistic',
                  changepoint_range=0.95,
                  yearly_seasonality=False,
                  weekly_seasonality=False,
                  daily_seasonality=False,
                  seasonality_prior_scale=10,
                  changepoint_prior_scale=.01)
prophet.add_country_holidays(country_name='RU')
prophet.fit(df)
future = prophet.make_future_dataframe(periods=1460, freq='D')
future['cap'] = cap
future['floor'] = floor
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Ich habe dieses Wachstum jetzt als logistisches Wachstum definiert, indem ich die gesamte Saisonalität ausgeschaltet habe (es scheint in dieser Handlung nicht so viel zu sein) und einige weitere Parameter angepasst habe. Da die meisten Anhänger von Anastasia in Russland sind, habe ich auch Russlands Standardfeiertage hinzugefügt. Wenn Sie die .fit-Methode mit df aufrufen, betrachtet Prophet die Kappen- und Bodenspalten von df und erkennt, dass sie im Modell enthalten sein sollten. Fügen Sie zu diesem Zeitpunkt diese Spalten zum Datenrahmen hinzu, wenn Sie den Vorhersagedatenrahmen (zukünftiger Datenrahmen des obigen Codeblocks) erstellen. Dies wird im nächsten Abschnitt noch einmal erläutert. Aber im Moment ist die Trenddarstellung viel realistischer!

Logistisches Wachstum Anastasia Kosh Anzahl der Likes pro Foto

Schauen wir uns das letzte Beispiel an.

James Rodríguez

https://www.instagram.com/p/BySl8I7HOWa/

James Rodríguez ist ein kolumbianischer Fußballspieler, der sowohl bei den Weltmeisterschaften 2014 als auch 2018 großartig gespielt hat. Sein Instagram-Account ist seit seiner Eröffnung stetig gewachsen. Während der Arbeit an Vorherige Analyse während der letzten beiden Weltmeisterschaften seins Ich bemerkte eine schnelle und anhaltende Zunahme der Follower auf meinem Konto. Im Gegensatz zur Verbreitung von National Geographic-Konten, die als Ferienzeit modelliert werden können, ist Rodríguez 'Wachstum nach zwei Turnieren nicht auf den Ausgangswert zurückgekehrt und definiert einen neuen Ausgangswert neu. Dies ist eine radikal andere Bewegung, und die Erfassung dieser Bewegung erfordert einen anderen Modellierungsansatz.

Nachfolgend finden Sie die Anzahl der Likes pro Foto seit Eröffnung des James Rodríguez-Kontos:

Es ist schwierig, dies mit nur den Techniken, die wir bisher in diesem Tutorial verwendet haben, sauber zu modellieren. Die Trendbasislinie stieg bei der 1. Weltmeisterschaft im Sommer 2014 an, bei der 2. Weltmeisterschaft im Sommer 2018 traten Spitzen auf, und die Basislinie hat sich möglicherweise geändert. Der Versuch, dieses Verhalten mit dem Standardmodell zu modellieren, funktioniert nicht.

Anzahl der Likes pro Foto von James Rodríguez

Dies ist jedoch kein schreckliches Modell. Es ist nur so, dass das Verhalten bei diesen beiden Weltmeisterschaften nicht gut modelliert ist. Wenn Sie diese Turniere wie in den obigen Anastasia Kosh-Daten als Feiertage modellieren, werden Sie Verbesserungen im Modell feststellen.

wc_2014 = pd.DataFrame({'holiday': "World Cup 2014",
                      'ds' : pd.to_datetime(['2014-06-12']),
                      'lower_window': 0,
                      'upper_window': 40})
wc_2018 = pd.DataFrame({'holiday': "World Cup 2018",
                      'ds' : pd.to_datetime(['2018-06-14']),
                      'lower_window': 0,
                      'upper_window': 40})world_cup = pd.concat([wc_2014, wc_2018])prophet = Prophet(yearly_seasonality=False,
                  weekly_seasonality=False,
                  daily_seasonality=False,
                  holidays=world_cup,
                  changepoint_prior_scale=.1)
prophet.fit(df)
future = prophet.make_future_dataframe(periods=365, freq='D')
forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Anzahl der Likes pro Foto von James Rodríguez beim Hinzufügen von Feiertagen während der Weltmeisterschaft

Es ist zu spät für das Modell, auf die sich ändernden Trendlinien zu reagieren, insbesondere bei der WM 2014, und ich persönlich mag es noch nicht. Der Trendlinienübergang ist zu glatt. In solchen Fällen können Sie eine externe erklärende Variable hinzufügen, damit der Prophet plötzliche Änderungen berücksichtigt.

In diesem Beispiel definiert jedes Turnier zwei Perioden, vor und nach dem Kongress. Wenn wir auf diese Weise modellieren, gehen wir davon aus, dass es vor dem Turnier eine bestimmte Trendlinie gibt, dass sich die Trendlinie während des Turniers linear ändert und dass auf das Turnier eine andere Trendlinie folgt. .. Ich definiere diese Perioden als 0 oder 1, ein oder aus und lasse den Propheten die Daten trainieren, um ihre Größe zu erfahren.

df['during_world_cup_2014'] = 0
df.loc[(df['ds'] >= pd.to_datetime('2014-05-02')) & (df['ds'] <= pd.to_datetime('2014-08-25')), 'during_world_cup_2014'] = 1
df['after_world_cup_2014'] = 0
df.loc[(df['ds'] >= pd.to_datetime('2014-08-25')), 'after_world_cup_2014'] = 1df['during_world_cup_2018'] = 0
df.loc[(df['ds'] >= pd.to_datetime('2018-06-04')) & (df['ds'] <= pd.to_datetime('2018-07-03')), 'during_world_cup_2018'] = 1
df['after_world_cup_2018'] = 0
df.loc[(df['ds'] >= pd.to_datetime('2018-07-03')), 'after_world_cup_2018'] = 1

Aktualisieren Sie zukünftige Datenrahmen, um "Feiertags" -Ereignisse wie folgt einzuschließen:

prophet = Prophet(yearly_seasonality=False,
                  weekly_seasonality=False,
                  daily_seasonality=False,
                  holidays=world_cup,
                  changepoint_prior_scale=.1)prophet.add_regressor('during_world_cup_2014', mode='additive')
prophet.add_regressor('after_world_cup_2014', mode='additive')
prophet.add_regressor('during_world_cup_2018', mode='additive')
prophet.add_regressor('after_world_cup_2018', mode='additive')prophet.fit(df)
future = prophet.make_future_dataframe(periods=365)future['during_world_cup_2014'] = 0
future.loc[(future['ds'] >= pd.to_datetime('2014-05-02')) & (future['ds'] <= pd.to_datetime('2014-08-25')), 'during_world_cup_2014'] = 1
future['after_world_cup_2014'] = 0
future.loc[(future['ds'] >= pd.to_datetime('2014-08-25')), 'after_world_cup_2014'] = 1future['during_world_cup_2018'] = 0
future.loc[(future['ds'] >= pd.to_datetime('2018-06-04')) & (future['ds'] <= pd.to_datetime('2018-07-03')), 'during_world_cup_2018'] = 1
future['after_world_cup_2018'] = 0
future.loc[(future['ds'] >= pd.to_datetime('2018-07-03')), 'after_world_cup_2018'] = 1forecast = prophet.predict(future)
fig = prophet.plot(forecast)
a = add_changepoints_to_plot(fig.gca(), prophet, forecast)
plt.show()
fig2 = prophet.plot_components(forecast)
plt.show()

Anzahl der Likes pro Foto von James Rodríguez mit externen erklärenden Variablen hinzugefügt

Schau dir diese blaue Linie an. Die rote Linie zeigt nur Trends und ist von den Auswirkungen zusätzlicher externer Variablen und Feiertage ausgeschlossen. Sehen Sie, wie die blaue Trendlinie während der Weltmeisterschaft ansteigt. Genau das lehrt unser Fachwissen! Als Rodríguez sein erstes Tor bei der Weltmeisterschaft erzielte, versammelten sich plötzlich Tausende von Anhängern auf seinem Konto. Sie können die konkrete Wirkung dieser externen erklärenden Variablen anhand des Komponentendiagramms erkennen.

Komponentendiagramm der externen erklärenden Variablen der Weltmeisterschaft von James Rodríguez

Dies zeigt, dass die Weltmeisterschaft von 2013 bis Anfang 2014 keinen Einfluss auf die Anzahl der Likes auf Rodríguez 'Fotos hatte. Während der Weltmeisterschaft 2014 stiegen seine Durchschnittswerte dramatisch, wie im Bild gezeigt, das nach dem Turnier (das er während dieses Events so viele aktive Anhänger bekam) fortgesetzt wurde. Das kann ich erklären). Bei der Weltmeisterschaft 2018 gab es einen ähnlichen Anstieg, jedoch nicht so dramatisch. Es kann gefolgert werden, dass dies wahrscheinlich daran lag, dass zu dieser Zeit nicht mehr viele Fußballfans übrig waren, die ihn nicht kannten.


Vielen Dank, dass Sie diesem Artikel bis zum Ende folgen! Jetzt wissen Sie, wie man Feiertage in Prophet verwendet, wie man lineares und logistisches Wachstum verwendet und wie man externe Regressoren verwendet, um die Vorhersagen des Propheten signifikant zu verbessern. Facebook hat ein unglaublich nützliches Tool namens Prophet entwickelt, das die einst sehr schwierige Aufgabe der probabilistischen Vorhersage in einen einfachen Satz von Parametern verwandelt, die weitgehend abgestimmt werden können. Mögen Ihre Vorhersagen großartig sein!

Übersetzungskooperation

Original Author: Greg Rafferty Thank you for letting us share your knowledge!

Dieser Artikel wurde in Zusammenarbeit mit folgenden Personen veröffentlicht. Danke nochmal. Selektor: Yumika Tomita Übersetzer: siho1 Wirtschaftsprüfer: takujio Herausgeber: siho1

Möchten Sie mit uns einen Artikel schreiben?

In Zusammenarbeit mit mehreren hervorragenden Ingenieuren übersetzen wir hochwertige Artikel aus Übersee ins Japanische und veröffentlichen die Artikel. Bitte kontaktieren Sie uns, wenn Sie mit unseren Aktivitäten einverstanden sind oder wenn Sie daran interessiert sind, qualitativ hochwertige Artikel an viele Menschen zu verbreiten. Bitte senden Sie eine Nachricht mit dem Titel "Wunsch zur Teilnahme" in [Mail](mailto: [email protected]) oder senden Sie eine Nachricht in Twitter. Zum Beispiel können wir die Teile vorstellen, die Ihnen nach der Auswahl helfen können.

Wir freuen uns auf Ihre Meinungen und Eindrücke.

Wie war dieser Artikel? ・ Ich wünschte, ich hätte das getan, ich möchte, dass du mehr tust, ich denke, es wäre besser ・ Diese Art von Ort war gut Wir suchen offene Meinungen wie. Bitte zögern Sie nicht, Ihre Kommentare im Kommentarbereich zu veröffentlichen, da wir Ihr Feedback verwenden werden, um die Qualität zukünftiger Artikel zu verbessern. Wir freuen uns auch über Ihre Kommentare auf Twitter. Wir freuen uns auf Ihre Nachricht.

Recommended Posts

Vorhersage aus verschiedenen Daten in Python mit dem Zeitreihen-Vorhersage-Tool Facebook Prophet
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Empfangen Sie Wörterbuchdaten von Python-Programmen mit AppleScript
[Python] Zeichnen Sie Zeitreihendaten
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Python-Programm, das die Zeitnutzung aus icalendar-Daten aggregiert
Beispiel für das Aggregieren einer großen Menge von Zeitreihendaten mit Python in einer kleinen Speicherumgebung mit einer angemessenen Geschwindigkeit
Einfache Vorhersage von Zeitreihen mit Prophet
[numpy] Erstellen Sie eine sich bewegende Fenstermatrix aus mehrdimensionalen Zeitreihendaten
<Pandas> Umgang mit Zeitreihendaten in der Pivot-Tabelle
Veranschaulichen Sie sofort die vorherrschende Periode in Zeitreihendaten mithilfe der Spektralanalyse
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
[Python] Verschiedene Datenverarbeitung mit Numpy-Array
Scraping von Websites mit JavaScript in Python
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Ich habe ein Passwort-Tool in Python erstellt.
Extrahieren Sie Elemente (mithilfe einer Liste von Indizes) wie NumPy aus einer Python-Liste / einem Python
Extrahieren Sie Perioden, die einem bestimmten Muster entsprechen, aus den qualitativen Daten der Pandas-Zeitreihen
Erstellen Sie eine GIF-Datei mit Pillow in Python
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Anzeigen von Arzneimittelbewertungen mithilfe von Listen in Python
Datenanalyse in Python: Ein Hinweis zu line_profiler
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
Lesen von Zeitreihendaten in PyTorch
Führen Sie Python-Dateien mit Django aus HTML aus
Laden Sie Bilder von der URL mit Pillow in Python 3
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Extrahieren Sie mit Python Daten von einer Webseite
So testen Sie eine Funktion, die die aktuelle Zeit enthält, mit Freezegun in Python
Python2 / numpy> Ersetzen Sie nur eine bestimmte Spalte in einer Datei durch Spaltendaten aus einer anderen Datei> numpy.c_
"Abrufen von Zeitreihendaten von k-db.com mit Python" Memo zur Erstellung der Programmumgebung
Konvertieren Sie die Datumszeitzone (Zeitdifferenz) mit Python (aus Zeichenfolge).
Registrieren Sie gemeinsam Daten im Firestore mithilfe der CSV-Datei in Python
Geben Sie die Zeit ab dem Start des Programms in Python aus
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Bis Sie Daten in eine Tabelle in Python einfügen
Versuchen Sie die Gesichtserkennung in Echtzeit mit einer Webkamera
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
So führen Sie einen Befehl mit einem Unterprozess in Python aus
Generieren Sie Word Cloud aus Testfalldaten mit Python3
Ich habe Bugspots verwendet, ein Tool zur Fehlervorhersage in Quecksilber
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
[Python] Erstellen eines GUI-Tools, das die CSV von Temperaturanstiegsdaten in Excel automatisch verarbeitet
So erstellen Sie eine Instanz einer bestimmten Klasse aus dict mit __new__ () in Python
[Frage] So erhalten Sie die Daten von Textbereichsdaten in Echtzeit mithilfe der Python-Webframework-Flasche