L'analyse des séries chronologiques traite des données des séries chronologiques. Données de séries chronologiques Des données qui changent avec le temps.
En particulier
Etc. peut être considéré comme des données de séries chronologiques.
L'analyse des séries chronologiques prévoit les ventes de l'entreprise et les ventes de produits De plus, il s'agit d'une technologie d'analyse très importante en entreprise, comme la prévision du nombre de visiteurs.
Apprenez à analyser les données de séries chronologiques à l'aide des StatsModels de Python. Enfin, nous traiterons du modèle SARIMA.
Le but ultime est comme ça.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np
#Chargement et organisation des données
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
index = pd.date_range("1980-01-31","1995-07-31",freq="M")
sales_sparkling.index=index
del sales_sparkling["Month"]
#Coupe du modèle
SARIMA_sparkring_sales = sm.tsa.statespace.SARIMAX(sales_sparkling,order=(0,0, 0),seasonal_order=(0, 1, 1, 12)).fit()
#Substituer les données de prédiction pour pred
pred = SARIMA_sparkring_sales.predict("1994-7-31","1997-12-31")
#Visualisation des données pread et des données de séries chronologiques originales
plt.plot(sales_sparkling)
plt.plot(pred,color="r")
plt.show()
La première étape de l'analyse des séries chronologiques consiste à visualiser les données des séries chronologiques. Vous pouvez voir différentes choses en visualisant les données.
Utilisation de matplotlib de Python J'ai essayé de montrer la concentration de dioxyde de carbone de l'observatoire du Mauna Loa à Hawaï avec un graphique en ligne brisée.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
#Lire les données(Utiliser les données de test StatsModels)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Déterminez le titre du graphique
plt.title("Mauna Loa Weekly Atmospheric CO2 Data")
#Nommer l'axe des x et l'axe des y du graphique
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv")
#La période de l'axe des x va de 1995 à 2000, et l'axe des y est la valeur de 355 à 375, et les données sont représentées par un graphique en traits pointillés.
plt.plot(co2_tsdata2)
plt.xlim("1995", "2000")
plt.ylim(355, 375)
plt.show()
Pour les données de séries chronologiques
Il existe trois modèles: (1) tendance, (2) fluctuation périodique et (3) fluctuation irrégulière.
Les tendances représentent les tendances à long terme des données. On dit que les données chronologiques dans lesquelles la valeur des données augmente ou diminue avec le temps ont une «tendance». Si la valeur augmente, il y a une tendance positive, si elle diminue, il y a une tendance négative.
Pour les données avec des fluctuations périodiques, la valeur des données se répète en hausse et en baisse avec le temps. En particulier, les fluctuations périodiques sur une année sont appelées fluctuations saisonnières.
Une fluctuation irrégulière signifie que la valeur des données fluctue indépendamment du passage du temps.
Qu'est-ce que la modélisation de données chronologiques? Il fait référence à la formulation de données chronologiques sous une forme ou une autre.
Être en mesure d'expliquer les différentes caractéristiques des données chronologiques Construisez un modèle et faites diverses prédictions basées sur ce modèle de série chronologique Le but de cette analyse de séries chronologiques est d'analyser les relations mutuelles.
En observant les données de séries chronologiques réelles, nous pouvons voir que ces trois modèles sont combinés.
Les données de la série chronologique elles-mêmes qui ne font rien
Cela s'appelle la série originale.
Le but de l'analyse des séries chronologiques est d'explorer la nature de cette série originale. Nous construirons un modèle en clarifiant diverses caractéristiques de la série originale. Ensuite, sur la base de ce modèle, nous prédisons les données et clarifions les relations entre les données de la série chronologique.
Cependant, l'analyse des séries chronologiques traite rarement de la série originale elle-même. En fait, nous traitons les données des séries chronologiques en une nouvelle série et les analysons pour créer un modèle.
à partir de maintenant
Je vais le faire en traitant les données.
De nombreuses données de séries chronologiques présentent de grandes fluctuations de valeur. C'est la transformation logarithmique qui atténue ces fluctuations dans les données.
Effectuons en fait une conversion logarithmique des données. Ici pour la conversion logarithmique
Numpy np.log()Est utilisé.
np.log()Comment utiliser np.log(Type de trame de données Pandas)Etc
Spécifiez un argument et utilisez-le.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np
#Lire les données(Utiliser les données de test StatsModels)
macrodata = sm.datasets.macrodata.load_pandas().data
macrodata.index = pd.Index(sm.tsa.datetools.dates_from_range("1959q1","2009q3"))
#La valeur du PIB réel des États-Unis avant la conversion logarithmique est affichée à partir des données lues.
print(macrodata.realgdp.head())
#Convertissez la colonne prototype en série logarithmique.
macrodata_realgdp_log = np.log(macrodata.realgdp)
#La valeur après la conversion logarithmique est affichée.
print(macrodata_realgdp_log.head())
Lors de l'analyse des données de séries chronologiques, nous traitons souvent la différence de valeur par rapport à la fois précédente.
Prendre la différence par rapport à la valeur précédente de cette manière s'appelle prendre la différence. La série après avoir pris la différence de cette manière s'appelle la série de différences.
En effectuant cette conversion, la tendance de la série originale peut être supprimée. (Qu'est-ce qu'une tendance? S'agit-il d'une tendance à la hausse dans une perspective large? At-il tendance à se stabiliser? Est-ce une tendance à la baisse? )
J'expliquerai la série originale plus tard en supprimant la tendance Processus constant (propriété selon laquelle la valeur de la série chronologique ne change pas dans le temps dans son ensemble) Cela peut être une conversion importante.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np
#Lire les données(Utiliser les données de test StatsModels)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Faites la différence dans les données
co2_tsdata2_diff = co2_tsdata2.diff()
plt.subplot(2,1,1)
plt.title("Mauna Loa Weekly Atmospheric CO2 Data")
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv")
plt.plot(co2_tsdata2)
plt.subplot(2,1,2)
plt.title("Mauna Loa Weekly Atmospheric CO2 Data DIFF")
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv DIFF")
plt.plot(co2_tsdata2_diff)
plt.subplots_adjust(wspace=0, hspace=1.0)
plt.show()
Jetons un coup d'œil aux données sur les changements de concentration de dioxyde de carbone à l'observatoire du Mauna Loa.
De cette façon, il est possible de faire des fluctuations périodiques dans un cycle d'un an.
J'ai dit que c'était saisonnier.
Cependant, dans ce graphique linéaire, ce modèle de variation saisonnière fait obstacle. La tendance des données de séries chronologiques est difficile à comprendre.
Rechercher des tendances dans les données non saisonnières à partir de ces données saisonnières Les fluctuations saisonnières sont souvent supprimées de la série originale et les données dont les fluctuations saisonnières ont été supprimées sont
C'est ce qu'on appelle une série désaisonnalisée.
Modèles de statistiques
tsa.seasonal_decompose()En utilisant
Tendances de la série originale, fluctuations saisonnières, fluctuations irrégulières(Erreur résiduelle)Il peut être divisé en.
Du résultat
Ovserved(Premier)Est la série originale
Trend (Seconde)Est un composant de tendance
Seasonal(Le troisième)Est saisonnier
Residual(Quatrième)Est le résidu
Représente.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from numpy import nan as na
import numpy as np
#Lire les données(Utiliser les données de test StatsModels)
co2_tsdata = sm.datasets.co2.load_pandas().data
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Ajuster et produire la série originale de façon saisonnière en la divisant en tendances, fluctuations saisonnières et résidus.
fig = sm.tsa.seasonal_decompose(co2_tsdata2, freq=52).plot()
plt.show()
De là, j'utiliserai un peu de mathématiques. Concentrons-nous sur ce que chaque valeur signifie.
Les données sont également décrites à l'aide de statistiques de base dans l'analyse de séries chronologiques.
Supposons que de telles données soient observées. À ce moment, par exemple, les données du troisième jour
Il est exprimé comme.
La statistique la plus élémentaire est ce que l'on appelle la moyenne attendue.
Il est exprimé sous forme de et montre la valeur moyenne de la valeur des données de la série chronologique. Au fait
Qu'est-ce que E?(Valeur attendue)Est une abréviation pour.
Trouvons la valeur moyenne des données.
La valeur moyenne est np.mean()Vous pouvez le trouver sur.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np
#Lire les données(Utiliser les données de test StatsModels)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Trouvez la valeur moyenne des données
np.mean(co2_tsdata2)
L'une des statistiques qui montre à quel point les données de la série chronologique varient de la valeur attendue Il est distribué. La dispersion utilise les valeurs attendues
Il est exprimé comme.
Et la racine carrée de la variance s'appelle l'écart type.
Il est représenté par. Aussi, en particulier en finance, cet écart type Cela s'appelle la volatilité. L'écart type est une mesure importante du risque en finance.
Ensuite, je présenterai les statistiques et l'auto-covariance propres aux données de séries chronologiques. L'auto-co-distribution est la co-distribution entre différents points temporels dans les mêmes données chronologiques. L'auto-covariance séparée par k points dans le temps est appelée auto-covariation d'ordre k.
Il est exprimé comme. De plus, ce que nous voyons en fonction de k est cette auto-covariance. C'est ce qu'on appelle une fonction d'auto-co-distribution.
Il est possible de comparer cette auto-covariance entre différentes valeurs. Il s’appelle le coefficient d’autocorrélation.
Il est exprimé comme. Semblable à l'auto-covariance, ce coefficient d'autocorrélation est considéré comme une fonction de k. C'est ce qu'on appelle une fonction d'autocorrélation. Et un graphique de cette fonction d'autocorrélation
Cela s'appelle un cholérogramme.
Le coefficient d'autocorrélation est simplement une valeur qui montre à quel point il est similaire aux valeurs passées.
Nous afficherons et visualiserons le coefficient d'autocorrélation introduit.
Coefficient d'autocorrélation(ACF:Autocorrelation Function)Est
sm.tsa.stattools.acf()
Le premier argument est la donnée
Le deuxième argument est nlags(Par défaut 40, facultatif)Demandé
Le graphique est
sm.graphics.tsa.plot_acf()
Le premier argument est la donnée
Le deuxième argument est les décalages, ce qui vous permet de calculer et de créer des graphiques.
Dans le cas des données quotidiennes, le décalage peut être décalé de un et l'autocorrélation peut être confirmée. Vous pouvez voir comment la valeur d'il y a un jour affecte aujourd'hui.
Le nombre d'étapes des données décalées est appelé décalage. Le décalage du coefficient d'autocorrélation 0 est toujours égal à 1. Le décalage 0 ne décale pas les données En effet, il existe une corrélation entre les mêmes valeurs. Ceci est une ligne directrice pour la force et la faiblesse du coefficient (d'auto) corrélation.
À titre d'exemple, le coefficient d'autocorrélation des données de concentration de dioxyde de carbone du Mauna Loa est
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np
#Lire les données(Utiliser les données de test StatsModels)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Gestion des valeurs manquantes
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Trouvez le coefficient d'autocorrélation des données
co2_tsdata2_acf = sm.tsa.stattools.acf(co2_tsdata2, nlags=40)
print(co2_tsdata2_acf)
#Coefficient d'autocorrélation(ACF)Créer un graphique de
sm.graphics.tsa.plot_acf(co2_tsdata2,lags=40)
plt.show()
Recommended Posts