[PYTHON] Vergleich der Vorhersage von Zeitreihendaten zwischen dem SARIMA-Modell und dem Prophet-Modell

Hallo. Zukunftssuche Ich bin Sugato aus Brasilien.

Ich weiß nicht, welche Zahl ich heute brauen soll, aber ich möchte über die Vorhersage von Zeitreihendaten schreiben.

1. Zuallererst

Es gibt ein Bild, dass die Vorhersage von Zeitreihendaten grundsätzlich nicht so brauchbar ist, aber ich würde gerne sehen, wie viel es ist und ob es in der Praxis verwendet werden kann.

Die Einzelheiten, die ich ausprobiert habe, sind wie folgt

** Holen Sie sich tägliche Follower auf Twitter ** ~~ Das Adstringens ~~ Gib dein Bestes mit API

** Versuchen Sie, die Anzahl der Follower auf Ihrem Twitter vorherzusagen ** (1) Vorausgesagt durch das SARIMA-Modell ・ [Kombination eines neuronalen Netzwerkmodells mit einem ARIMA-Modell für saisonale Zeitreihen] https://www.sciencedirect.com/science/article/pii/S004016250000113X ・ [Analyse von Zeitreihendaten mit SARIMA (Vorhersage der PV-Zahl)] https://www.kumilog.net/entry/sarima-pv @xkumiyu

(2) Vorausgesagt vom Prophetenmodell ・ [Prophet Official] https://facebook.github.io/prophet/docs/quick_start.html ・ [Zeitreihenanalysebibliothek Prophet offizielle Dokumentübersetzung 1 (Übersicht & Funktionen)] https://qiita.com/japanesebonobo/items/96868e58d4da42d36807 @japanesebonobo

Inhalt dieser Zeit

Die Vorhersage der Anzahl der Follower, die von Tag zu Tag abnimmt, ohne zu twittern, macht mein Herz noch tiefer. Zunächst einmal wird die Anzahl der Follower sinken, und es besteht keine Aussicht auf eine Zunahme.

2. Umwelt

3. Vorbereitung

Die täglichen Follower-Count-Daten sehen folgendermaßen aus. Ich kann es nicht ertragen, es zu sehen. (Https://twitter.com/Ndtn_/) http://web.sfc.wide.ad.jp/~nadechin/follower.csv

date        follower
2018/9/6	39.569
2018/9/7	39.57
2018/9/8	39.573
   .           .
   .           .
   .           .
2019/12/10	37.861

4. Verarbeitung von Zeitreihendaten

Trainingsdaten und Testdaten trennen. Es ist egal, ob es Pandas oder Numpy ist, aber vorerst ・ 2018/09/06 ~ 2019/12/10 Originaldaten ・ 2018/09/06 ~ 2019/11/30 Lerndaten 01 Testdaten 2019/12/01 ~ 2019/12/10

Bestätigen Sie die Stabilität der Daten durch einen ADF-Test. ・ [Statsmodels.tsa.stattools.adfuller] http://www.statsmodels.org/dev/generated/statsmodels.tsa.stattools.adfuller.html ・ [Nullhypothese, Signifikanzniveau] http://www.gen-info.osaka-u.ac.jp/MEPHAS/express/express11.html

res = sm.tsa.stattools.adfuller(df.follower)


Das Ausgabeergebnis ist wie folgt

p-value = 0.9774


⇨p-value  >  0.05

Daher kann nicht gesagt werden, dass es stabil ist. Um Konstanz zu haben, wird die Differenz genommen und die Saisonalität entfernt.

predict.py


data = [Scatter(x=df.index, y=df.follower.diff())]

Dann saisonale Entfernung.

predict.py


data = [Scatter(x=df.index, y=df.follower-res.seasonal)]

Dadurch wird der ADF-Test erneut durchgeführt.

p-value = 1.109e-25


⇨p-value  <  0.05

Dadurch konnten wir Zeitreihendaten stetig verarbeiten.

5. Vorhersage von Zeitreihendaten

Erstellen Sie im Fall des SARIMA-Modells ein Modell für alle Daten

predict.py


# coding:utf-8
from statsmodels.tsa.statespace.sarimax import SARIMAX

model = SARIMAX(
    train,
    order=(p, d, q),
    seasonal_order=(sa, sd, sq, s),
    enforce_stationarity=False,
    enforce_invertibility=False)
result = model.fit()

Mach es mit. order = (p, d, q) ist ein Parameter des ARIMA-Modells saisonale_Ordnung = (sp, sd, sq, s) ist ein saisonaler Parameter

Siehe ↓ ・ [Statsmodels.tsa.statespace.sarimax.SARIMAX] https://www.statsmodels.org/dev/generated/statsmodels.tsa.statespace.sarimax.SARIMAX.html ・ [Analyse von Zeitreihendaten mit SARIMA (Vorhersage der PV-Zahl)] https://www.kumilog.net/entry/sarima-pv @xkumiyu

Erstellen Sie als Nächstes ein Prophetenmodell.

Der Prophet wird ein Modell erstellen, indem er einfach die Trainingsdaten eingibt. Es wird klar: "Ich weiß nicht, was ich tue, aber ich habe etwas getan, das vorhersehbar zu sein scheint." Ab heute kann ich mit einem 2-Sekunden-Kopieren und Einfügen Datenwissenschaftler werden.

predict.py


# coding:utf-8
import pandad as pd
import numpy as np
from fbprophet import Prophet

data = pd.read_csv('follower.csv')
data.follower= data.follower.apply(lambda x: int(x.replace(',', '')))
#Der Spaltenname lautet'ds','y'Muss eingestellt sein auf
data = data.rename(columns={'date': 'ds', 'follower': 'y'})
model = Prophet()
model.fit(data)

6. Vorhersage von Zeitreihendaten

・ SARIMA-Modell

Vorhersage der auf das SARIMA-Modell angewendeten Testdaten

2019-12-01  38002.878685
2019-12-02  38001.204647
2019-12-03  37998.080676
2019-12-04  37988.324131
2019-12-05  37981.134367
2019-12-06  37974.569498
2019-12-07  37966.333432
2019-12-08  37958.270232
2019-12-09  37956.258566
2019-12-10  37952.875398

・ Prophetenmodell

Vorhersage der auf das Prophetenmodell angewendeten Testdaten

2019-12-01  37958.337506
2019-12-02  37959.963661
2019-12-03  37957.304699
2019-12-04  37943.272430
2019-12-05  37934.533210
2019-12-06  37920.537811
2019-12-07  37908.529618
2019-12-08  37905.819057
2019-12-09  37907.445213
2019-12-10  37904.786251

Ich bin einsam, also werde ich versuchen zu planen

[Überblick] Figure_11.png

[Vorhersage Teil] Figure_12.png

[Erwartete teilweise vergrößerte Ansicht] Figure_13.png

7. Was ich gefunden habe

Schauen wir uns die Prognosedaten für den Tag nach dem letzten Tag der Trainingsdaten an.

date, follower

#Echte Daten
2019-12-01, 38003.000000

# SARIMA
2019-12-01, 38002.878685

# Prophet
2019-12-01, 37958.337506

Wie Sie aus der [erweiterten Ansicht des vorhergesagten Teils] sehen können, sind die Vorhersagen für den nächsten Tag der Trainingsdaten in den SARIMA-Daten nahezu identisch. Die Vorhersage des nächsten Zeitpunkts der Trainingsdaten scheint geeignet zu sein.

Der Prophet war ehrlich subtil.

7. Machen wir eine eintägige intensive Vorhersage

Ich dachte, dass es unerwartet funktionieren würde, wenn ich bis 2019/12/09 lernen und den vorhergesagten Wert von 2019/12/10 herausgeben würde, also werde ich es versuchen.

Ergebnisse unten Figure_15.png

date, follower

#Echte Daten
2019-12-10, 37861.000000

# SARIMA
2019-12-10  37868.158032

Es fühlt sich gut an. Wenn es sich um eine Vorhersage für nur einen Tag handelt, scheint sich eine relativ gute Genauigkeit auf praktischem Niveau zu ergeben.

Wie ich oft sagte, war der Prophet ehrlich subtil.

Zusammenfassung

Der Prophet ist bequem, aber es fehlt ihm die Praktikabilität. Mit dem SARIMA-Modell hatte ich das Gefühl, dass die Vorhersage von Zeitreihendaten nicht an einem Tag verwendet werden kann. Ich wollte ein bisschen mehr Modelle auf einmal vergleichen. Bis zum nächsten Mal.

Außerdem nimmt die Anzahl der Follower ab.

Recommended Posts

Vergleich der Vorhersage von Zeitreihendaten zwischen dem SARIMA-Modell und dem Prophet-Modell
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Über Zeitreihendaten und Übertraining
Differenzierung von Zeitreihendaten (diskret)
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
OpenFOAM-Zeitreihendaten lesen und Daten einstellen
Leistungsfähigkeit von Vorhersagemethoden in der Zeitreihendatenanalyse Halboptimierung (SARIMA) [Memo]
Erfassung von Zeitreihendaten (täglich) von Aktienkursen
[Python] Konvertierungsnotiz zwischen Zeitdaten und numerischen Daten
Zeigen Sie Details zu Zeitreihendaten mit Remotte an
Abnormalitätserkennung von Zeitreihendaten durch LSTM (Keras)
[Neueste Methode] Visualisierung von Zeitreihendaten und Extraktion häufiger Muster mithilfe des Pan-Matrix-Profils
"Zeitreihenanalyse von Wirtschafts- und Finanzdaten messen" Das Problem am Ende des Kapitels mit Python lösen
Zeichnen Sie Zeitreihendaten in Python mit Pandas und Matplotlib
Eine Geschichte über das Clustering von Zeitreihendaten des Austauschs
[Python] Zeichnen Sie Zeitreihendaten
Vergleich von Apex und Lamvery
Beim Zeichnen von Zeitreihendaten und Abrufen von matplotlib OverflowError
Zusammenfassung der Unterschiede zwischen Python und PHP (Vergleichstabelle der Hauptelemente)
Berechnung der Zeitreihen-Kundenbindung
Djangos MVT-Beziehung zwischen Modell und Modul
Einfache Vorhersage von Zeitreihen mit Prophet
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Geschwindigkeitsvergleich zwischen CPython und PyPy
[Für Anfänger] Skript innerhalb von 10 Zeilen (5. Resample von Zeitreihendaten mit Pandas)
Zeichnen Sie die CSV von Zeitreihendaten mit einem Unixtime-Wert in Python (matplotlib).
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen