Ich bin eine M2-Person mit Schwerpunkt CS. Normalerweise konzentriere ich mich auf die Bildverarbeitung, aber da ich die Möglichkeit hatte, zukünftige Datums- und Zeitreihendaten zu verarbeiten, werde ich sie als Memorandum belassen. Ich hoffe, es wird als Referenz für diejenigen dienen, die Zeitreihendaten verarbeiten möchten. ** Ich lasse Formeln weg, also denke ich, es ist für diejenigen, die ein Gefühl dafür bekommen wollen **. Wenn Sie Fehler haben, teilen Sie uns dies bitte mit.
Zeitreihendaten sind ** "eine Sammlung von Ergebnissen, die in regelmäßigen Abständen gemessen werden" **. Neben Informationen zu Temperaturänderungen, Niederschlag und Filialverkäufen enthält dieses Bild Informationen zur gemessenen Zeit als Satz.
--AR + MA-Prozess, entsprechend der stärkeren Eigenschaft ――Daher nehmen sowohl die Autokorrelation als auch die partielle Autokorrelation mit der Größe der Verzögerung ab.
――Der Unterschied zu ARIMA besteht darin, ob die Saisonalität berücksichtigt werden soll.
――Wie stark beeinflusst der vergangene Wert die aktuellen Daten?
--Autokorrelation durch Entfernen des Einflusses der Zeit vom Autokorrelationskoeffizienten
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({'Produkt A.' : np.random.randint(100, size=365),
'Produkt B.' : np.random.randint(100, size=365)},
index=idx)
df
'''
Produkt A Produkt 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
'''
#Datenerfassung für ein bestimmtes Datum
df.loc['2020-2-3']
'''
Produkt A 51
Produkt B 46
Name: 2020-02-03 00:00:00, dtype: int64
'''
#Datenerfassung durch Slicing
df.loc[:'2020-1-4']
'''
Produkt A Produkt 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']
'''
Produkt A Produkt 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']
'''
### ``Alle Daten für Januar anzeigen(Kürzung)
'''
#Holen Sie sich den Monat
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)
'''
Dieses Mal werden wir den Datensatz "Air Passengers" verwenden, der für Zeitreihendaten bekannt ist.
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))
Da der Wert vom Taple zurückgegeben wird, ist das erste Element der P-Wert. Die Nullhypothese kann verworfen werden, wenn der P-Wert 0,05 oder weniger beträgt.
#Originale Daten
sm.tsa.adfuller(data)[1]
0.991880243437641
#Protokollkonvertierung
ldata = np.log(data)
sm.tsa.adfuller(ldata)[1]
0.42236677477039125
#Protokollkonvertierung+Bodenunterschied
sm.tsa.adfuller(ldata.diff().dropna())[1]
0.0711205481508595
Stellen Sie die Parameter mit order
und saisonal_order
ein.
Lernen Sie das Modell mit fit ()
.
Prognosen außerhalb des Lernbereichs sind "prognostiziert ()"
Die Vorhersage von Punkten, die Trainingsdaten enthalten, ist "pred ()"
Die Parametereinstellung sollte im Round-Robin-Verfahren berechnet werden.
(Sie können das beste Modell für eine Funktion ohne Statistikmodelle nicht finden?)
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')
Informationen, bei denen es sich wahrscheinlich um eine Merkmalsmenge in Zeitreihen handelt
#Einfache Tabellenerstellung
df = pd.DataFrame(np.arange(6).reshape(6, 1),columns=['values'])
#Unterschied
df['diff_1'] = df['values'].diff(1)
#Unterschied für 2 mal
df['diff_2'] = df['values'].diff(2)
#Verschieben Sie einfach den Wert
df['shift'] = df['values'].shift(1)
#Änderungsrate
df['ch'] = df['values'].pct_change(1)
#Gleitender Durchschnitt mit Fensterfunktion
df['rolling_mean'] = df['values'].rolling(2).mean()
df['rolling_max'] = df['values'].rolling(2).max()
--Features können mit einer Bibliothek namens "tsfresh" erstellt werden --Sie können mit sklearns "TimeSeries Split" einen Lebenslauf erstellen ――Da das Modell des maschinellen Lernsystems ein stetiger Prozess ist, ist es nicht besser, ein statistisches Modell zu verwenden?
Es ist einfach, aber ich habe die Zeitreihen zusammengefasst. Besorgniserregend ist, ob ein maschinelles Lernmodell oder ein statistisches Modell angewendet werden soll. Persönlich bin ich der Meinung, dass das statistische Modell dadurch besser ist (nicht diese Daten, aber ...).
Recommended Posts