時系列の構成要素と定常性
トレンド、季節性、ノイズ、定常性を検定するADF検定、定常性を実現する差分化について学習します。
「時系列の構成要素と定常性」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
時系列とは
時系列とは、日次の売上や1時間ごとの気温のように、時間順にインデックス付けされたデータです。観測値には順序があり、相関していることも多いため、特別な手法が必要です。通常の表形式データのように行を単純にシャッフルすることはできません。
3つの構成要素
古典的な見方では、時系列を次の要素に分解します。
- トレンド:長期的な上昇または下降の動きです。
- 季節性:一定の周期(週次、年次など)で繰り返されるパターンです。
- 残差:トレンドと季節性を取り除いた後に残るランダムなノイズです。
加法モデルと乗法モデル
加法モデルでは、y = trend + seasonality + residualと表します。季節変動の大きさが一定の場合に使用します。
乗法モデルでは、y = trend * seasonality * residualと表します。季節変動がトレンドに合わせて大きくなる場合に使用します。
seasonal_decompose
statsmodelsを使うと、時系列を構成要素に自動的に分解できます。
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(series, model="additive", period=12)
result.trend
result.seasonal
result.resid分解結果の可視化
結果をプロットすると、各構成要素が積み重ねて表示されます。これにより、トレンドと季節性を簡単に確認でき、予測手法を選びやすくなります。
import matplotlib.pyplot as plt
result.plot()
plt.tight_layout()
plt.show()定常性とは
時系列が定常であるとは、統計的性質(平均、分散、自己相関)が時間の経過に対して一定であることです。ARIMAのような多くの古典的モデルは定常性を仮定するため、確認して必要に応じて定常化することが重要な最初のステップになります。
定常性が重要な理由
時間の経過とともに平均が変化したり分散が急激に増大したりすると、初期のデータで適合したモデルは後のデータに対して汎化できません。トレンドを取り除き、分散を安定させることで、時系列を一貫した方法で予測しやすくなります。
ADF検定
Augmented Dickey-Fuller(ADF)検定は、定常性を確認する検定です。帰無仮説は「非定常(単位根を持つ)」です。p値が0.05未満であれば帰無仮説を棄却し、その時系列を定常とみなせます。
from statsmodels.tsa.stattools import adfuller
stat, pvalue, *_ = adfuller(series)
print("p-value:", pvalue)
# pvalue < 0.05 -> stationary差分による定常化
差分では、各値から直前の値を引き、トレンドを取り除きます。1階差分で通常は線形トレンドに対応できます。必要であれば、さらに差分を取ります。
diff1 = series.diff().dropna() # first difference
diff2 = series.diff().diff().dropna() # second difference差分後の確認
差分を取った時系列に対してADF検定を再度実行します。p値が0.05未満になれば定常化できたことになり、差分次数dを記録します。このdはそのままARIMAに使用します。
stat, pvalue, *_ = adfuller(series.diff().dropna())
print("p-value after differencing:", pvalue)その他の安定化変換
時間の経過とともに分散が大きくなる場合は、差分を取る前にlog変換またはBox-Cox変換を適用して分散を安定させます。log変換と差分を組み合わせることで、現実に多く見られる乗法的成長を示す時系列にも対応できます。
import numpy as np
log_series = np.log(series)
stationary = log_series.diff().dropna()確認テスト
定常性についての理解度をテストします。
まとめ
seasonal_decomposeを使って時系列をトレンド、季節性、残差に分解し、加法モデルと乗法モデルについて学び、ADF検定で定常性を確認し、差分(次数d)によって時系列を定常化する方法を学びました。次はARIMAとSARIMAです。
よくある質問
「時系列の構成要素と定常性」レッスンは無料ですか?
はい。「時系列の構成要素と定常性」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「時系列の構成要素と定常性」で何を学びますか?
トレンド、季節性、ノイズ、定常性を検定するADF検定、定常性を実現する差分化について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「時系列の構成要素と定常性」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 時系列の構成要素と定常性
- ARIMAとSARIMAモデル
- 自動予測のためのProphet
- 時系列予測のためのLSTM