Bonjour. Recherche future Je suis Sugato du Brésil.
Je ne sais pas quel nombre brasser aujourd'hui, mais j'aimerais écrire sur la prévision des données chronologiques.
Il y a une image selon laquelle la prédiction des données de séries chronologiques n'est fondamentalement pas aussi utilisable, mais j'aimerais voir combien c'est et si elle peut être utilisée dans la pratique.
Les détails que j'ai essayés sont les suivants
** Obtenez des abonnés quotidiens sur Twitter ** ~~ Cet astringent ~~ Faites de votre mieux avec l'API
** Essayez de prédire le nombre d'abonnés sur votre Twitter ** (1) Prédite par le modèle SARIMA ・ [Combinaison du modèle de réseau neuronal avec le modèle ARIMA de séries chronologiques saisonnières] https://www.sciencedirect.com/science/article/pii/S004016250000113X ・ [Analyse des données de séries temporelles avec SARIMA (prédiction du nombre PV)] https://www.kumilog.net/entry/sarima-pv @xkumiyu
(2) Prédite par le modèle du Prophète ・ [Officiel du Prophète] https://facebook.github.io/prophet/docs/quick_start.html ・ [Bibliothèque d'analyse de séries temporelles Traduction du document officiel Prophet 1 (présentation et fonctionnalités)] https://qiita.com/japanesebonobo/items/96868e58d4da42d36807 @japanesebonobo
Prédire le nombre de followers, qui diminue de jour en jour sans tweeter, rend mon cœur encore plus profond. Pour conclure d'abord, le nombre d'adeptes diminuera, et il n'y a aucune perspective d'augmentation.
Les données quotidiennes du nombre d'abonnés ressemblent à ceci. Je ne supporte pas de le voir. (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
Séparez les données d'entraînement et les données de test. Peu importe que ce soit des pandas ou des engourdis, mais pour le moment ・ 2018/09/06 ~ 2019/12/10 Données originales ・ 2018/09/06 ~ 2019/11/30 données d'apprentissage ・ Données de test du 01/12/2019 au 10/12/2019
Confirmer la stabilité des données par le test ADF. ・ [Statsmodels.tsa.stattools.adfuller] http://www.statsmodels.org/dev/generated/statsmodels.tsa.stattools.adfuller.html ・ [Hypothèse nulle, niveau de signification] http://www.gen-info.osaka-u.ac.jp/MEPHAS/express/express11.html
res = sm.tsa.stattools.adfuller(df.follower)
Le résultat de sortie est le suivant
p-value = 0.9774
⇨p-value > 0.05
Par conséquent, on ne peut pas dire qu'il a de la stabilité. Afin d'avoir la constance, la différence est prise et la saisonnalité est supprimée.
predict.py
data = [Scatter(x=df.index, y=df.follower.diff())]
Puis enlèvement saisonnier.
predict.py
data = [Scatter(x=df.index, y=df.follower-res.seasonal)]
Cela effectuera à nouveau le test ADF.
p-value = 1.109e-25
⇨p-value < 0.05
En conséquence, nous avons pu traiter les données chronologiques avec régularité.
Dans le cas du modèle SARIMA, créer un modèle de chaque donnée
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()
Faites-le avec. order = (p, d, q) est un paramètre du modèle ARIMA season_order = (sp, sd, sq, s) est un paramètre saisonnier
Voir ↓ ・ [Statsmodels.tsa.statespace.sarimax.SARIMAX] https://www.statsmodels.org/dev/generated/statsmodels.tsa.statespace.sarimax.SARIMAX.html ・ [Analyse des données de séries temporelles avec SARIMA (prédiction du nombre PV)] https://www.kumilog.net/entry/sarima-pv @xkumiyu
Ensuite, créez un modèle Prophet.
Prophet construira un modèle simplement en saisissant les données d'entraînement. Il se rend compte "Je ne sais pas ce que je fais, mais j'ai fait quelque chose qui semble prévisible." À partir d'aujourd'hui, je peux devenir data scientist avec un copier-coller de 2 secondes.
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(',', '')))
#Le nom de la colonne est'ds','y'Doit être défini sur
data = data.rename(columns={'date': 'ds', 'follower': 'y'})
model = Prophet()
model.fit(data)
・ Modèle SARIMA
Prédiction des données de test appliquées au modèle SARIMA
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
・ Modèle de prophète
Prédiction des données de test appliquées au modèle Prophet
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
Je suis seul alors je vais essayer de comploter
[Vue d'ensemble]
[Partie prédiction]
[Vue partielle agrandie attendue]
Examinons les données de prévision pour le lendemain du dernier jour des données d'entraînement.
date, follower
#Données réelles
2019-12-01, 38003.000000
# SARIMA
2019-12-01, 38002.878685
# Prophet
2019-12-01, 37958.337506
Comme vous pouvez le voir dans la [Vue agrandie de la partie prédite], les prédictions pour le jour suivant des données d'entraînement sont presque les mêmes dans les données SARIMA. La prédiction de la prochaine fois des données d'apprentissage semble convenir.
Le Prophète était honnêtement subtil.
Je pensais que cela fonctionnerait de façon inattendue si j'apprenais jusqu'au 09/12/2019 et que je mettais la valeur prévue du 10/12/2019, alors je vais l'essayer.
Résultats ci-dessous
date, follower
#Données réelles
2019-12-10, 37861.000000
# SARIMA
2019-12-10 37868.158032
Ça fait du bien. Après tout, s'il s'agit d'une prédiction pour un seul jour, il semble qu'une précision relativement bonne d'un niveau pratique en ressortira.
Comme je le dis à plusieurs reprises, Prophet était honnêtement subtil.
Prophet est pratique, mais il manque de praticité. Avec le modèle SARIMA, j'ai senti que la prédiction des données chronologiques ne pouvait pas être utilisée en un jour. Je voulais comparer un peu plus de modèles à la fois. À la prochaine.
De plus, le nombre d'abonnés diminuera.
Recommended Posts