Je suis un M2 spécialisé en CS. Je me concentre généralement sur le traitement d'images, mais comme j'ai eu l'occasion de gérer les futures données de date et de série chronologique, je vais le laisser sous forme de mémorandum. J'espère qu'il servira de référence à ceux qui souhaitent traiter des données chronologiques. ** J'omets des formules, donc je pense que c'est pour ceux qui veulent en avoir une idée **. De plus, si vous avez des erreurs, veuillez nous en informer.
Les données chronologiques sont ** «un ensemble de résultats mesurés à intervalles réguliers» **. En plus des informations sur les changements de température, les précipitations et les ventes en magasin, il s'agit d'une image qui contient des informations sur le temps mesuré sous forme d'ensemble.
――La différence avec ARIMA est de savoir s'il faut tenir compte de la saisonnalité? --En plus de ARIMA (p, d, q) dans le sens de la série chronologique, ARIMA (P, D, Q) dans le sens de la différence saisonnière, et la période s
--Les données sont créées en ajoutant les valeurs.
―― Dans quelle mesure la valeur passée affecte-t-elle les données actuelles?
--Autocorrélation obtenue en supprimant l'influence du temps du coefficient d'autocorrélation
import numpy as np
import pandas as pd
pd.date_range('2020-1-1', freq='D', periods=3)
'''
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03'], dtype='datetime64[ns]', freq='D')
'''
df = pd.Series(np.arange(3))
df.index = pd.date_range('2020-1-1', freq='D', periods=3)
df
'''
2020-01-01 0
2020-01-02 1
2020-01-03 2
Freq: D, dtype: int64
'''
idx = pd.date_range('2020-1-1',freq='D',periods=365)
df = pd.DataFrame({'- En utilisant l'autocorrélation partielle, vous pouvez examiner la relation entre aujourd'hui et il y a 2 jours, en excluant l'effet d'il y a 1 jour - Analyse de retard + autocorrélation Produit de traitement de date A' : np.random.randint(100, size=365),
'Produit B' : np.random.randint(100, size=365)},
index=idx)
df
'''
Produit A Produit B
2020-01-01 99 23
2020-01-02 73 98
2020-01-03 86 85
2020-01-04 44 37
2020-01-05 67 63
... ... ...
2020-12-26 23 25
2020-12-27 91 35
2020-12-28 3 23
2020-12-29 92 47
2020-12-30 55 84
365 rows × 2 columns
'''
#Acquisition de données pour une date précise
df.loc['2020-2-3']
'''
Produit A 51
Produit B 46
Name: 2020-02-03 00:00:00, dtype: int64
'''
#Acquisition de données par découpage
df.loc[:'2020-1-4']
'''
Produit A Produit B
2020-01-01 99 23
2020-01-02 73 98
2020-01-03 86 85
2020-01-04 44 37
'''
df.loc['2020-1-4':'2020-1-7']
'''
Produit A Produit B
2020-01-04 44 37
2020-01-05 67 63
2020-01-06 6 94
2020-01-07 47 11
'''
df.loc['2020-1']
'''
### ``Afficher toutes les données pour janvier(réduction)
'''
#Obtenez le mois
df.index.month
'''
Int64Index([ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
...
12, 12, 12, 12, 12, 12, 12, 12, 12, 12],
dtype='int64', length=365)
'''
Cette fois, nous utiliserons l'ensemble de données des «passagers aériens», qui est célèbre pour ses séries chronologiques.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('AirPassengers.csv', index_col=0, parse_dates=[0])
plt.plot(data)
import statsmodels.api as sm
res = sm.tsa.seasonal_decompose(data)
fig = res.plot()
fig, axes = plt.subplots(1,2, figsize=(15,5))
sm.tsa.graphics.plot_acf(data, ax=axes[0])
sm.tsa.graphics.plot_pacf(data, ax=axes[1])
plt.figure(figsize=(15,5))
plt.plot(data.diff(1))
Puisque la valeur est retournée par le taple, le premier élément de celle-ci est la valeur P. L'hypothèse nulle peut être rejetée si la valeur P est inférieure ou égale à 0,05.
#données brutes
sm.tsa.adfuller(data)[1]
0.991880243437641
#Conversion de journal
ldata = np.log(data)
sm.tsa.adfuller(ldata)[1]
0.42236677477039125
#Conversion de journal+Différence de sol
sm.tsa.adfuller(ldata.diff().dropna())[1]
0.0711205481508595
Définissez les paramètres avec ʻorder et
season_order. Apprenez le modèle avec
fit ()`.
Les prévisions en dehors de la plage d'apprentissage sont «prévisions ()»
La prédiction des points contenant des données d'entraînement est «predict ()»
Le réglage des paramètres doit être calculé à tour de rôle.
(Vous ne trouvez pas le meilleur modèle pour une fonction sans statsmodels?)
model = sm.tsa.SARIMAX(ldata, order=(1,1,1),seasonal_order=(0,1,2,12))
res_model = model.fit()
pred = res_model.forecast(36)
plt.plot(ldata, label='Original')
plt.plot(pred, label='Pred')
Informations susceptibles d'être une quantité de caractéristiques dans les séries chronologiques
#Création de table facile
df = pd.DataFrame(np.arange(6).reshape(6, 1),columns=['values'])
#Différence
df['diff_1'] = df['values'].diff(1)
#Différence pour 2 fois
df['diff_2'] = df['values'].diff(2)
#Changez simplement la valeur
df['shift'] = df['values'].shift(1)
#Taux de changement
df['ch'] = df['values'].pct_change(1)
#Moyenne mobile avec fonction fenêtre
df['rolling_mean'] = df['values'].rolling(2).mean()
df['rolling_max'] = df['values'].rolling(2).max()
tsfresh
TimeSeries Split
de sklearn
―― Étant donné que le modèle du système d'apprentissage automatique est en cours de processus régulier, n'est-il pas préférable d'utiliser un modèle statistique?C'est facile, mais j'ai résumé la série chronologique. Ce qui est inquiétant, c'est d'adopter un modèle d'apprentissage automatique ou un modèle statistique. Personnellement, j'estime que le modèle statistique est meilleur en conséquence (pas ces données, mais ...).
Recommended Posts