時系列モデル: ガイド
金融市場の傾向を予測したい場合でも、電力消費量を予測したい場合でも、時間はモデルで考慮する必要がある重要な要素です。 たとえば、電力消費のピークが何時であるかを予測することは興味深いでしょう。 これは、価格や発電量を調整するのに役立つ可能性があります。
時系列を入力します。 時系列とは、時間順に並べられた一連のデータ ポイントです。 時系列では、時間は独立変数であることが多く、目的は通常、将来の予測を行うことです。
ただし、時系列を扱う場合には他の側面も関係します。
この投稿では、時系列のさまざまな特性と、それらをモデル化して可能な限り正確な予測を得る方法を紹介します。
非公式には、自己相関は、観測間の時間差の関数としての観測間の類似性です。
上は自己相関プロットの例です。 よく見ると、最初の値と 24 番目の値に高い自己相関があることがわかります。 同様に、12 番目と 36 番目の観測値には高い相関があります。 これは、24 単位時間ごとに非常に類似した値が見つかることを意味します。
プロットが正弦関数のように見えることに注目してください。 これが季節感のヒントです、上のプロットで期間を見つけると、その値がわかります。これは 24 時間になります。
データ サイエンスの詳細リカレント ニューラル ネットワークのガイド: RNN および LSTM ネットワークを理解する
季節性とは、周期的な変動を指します。 たとえば、電力消費量は日中は高く、夜間は低くなります。また、オンライン販売はクリスマスの間に増加し、その後再び減少します。
上記からもわかるように、毎日には季節性があります。 毎日、夕方に向けてピークが見られ、最低点は毎日の始まりと終わりです。
正弦波形状の場合、自己相関プロットから季節性を導出することもできることに注意してください。 期間を見るだけで季節の長さがわかります。
定常性は時系列の重要な特性です。 時系列の統計的特性が時間の経過とともに変化しない場合、その時系列は定常であると言われます。 言い換えれば、平均と分散は一定であり、共分散は時間に依存しません。
同じプロットを見ると、上記のプロセスが静止していることがわかります。 平均と分散は時間の経過とともに変化しません。
多くの場合、株価は定常的なプロセスではありません。 成長傾向が見られるか、時間の経過とともにそのボラティリティが増加する可能性があります (分散が変化していることを意味します)。
理想的には、モデリング用に定常時系列が必要です。 もちろん、すべてが静止しているわけではありませんが、さまざまな変換を行って静止させることができます。
上のプロットのタイトルが「ディッキー・フラー」であることに気づいたかもしれません。 これは、時系列が定常かどうかを判断するために実行する統計テストです。
技術的な詳細には触れませんが、ディッキー・フラー検定では帰無仮説を検定して単位根が存在するかどうかを判断します。
そうである場合、p > 0 となり、プロセスは定常ではありません。
それ以外の場合、p = 0、帰無仮説は棄却され、プロセスは定常であると見なされます。
たとえば、以下のプロセスは静止していません。 平均値が時間の経過とともに一定ではないことに注目してください。
予測を行うために時系列をモデル化する方法は数多くあります。 最も一般的な方法は次のとおりです。
移動平均モデルは、おそらく時系列モデリングに対する最も素朴なアプローチです。 このモデルは、次の観測値が過去のすべての観測値の平均であると単純に述べています。
このモデルはシンプルですが、驚くほど効果的であり、良い出発点となります。
それ以外の場合は、移動平均を使用して、データ内の興味深い傾向を特定できます。 移動平均モデルを適用するウィンドウを定義して、時系列を平滑化し、さまざまな傾向を強調できます。
上のプロットでは、移動平均モデルを 24 時間ウィンドウに適用しました。 緑色の線は時系列を平滑化しており、24 時間に 2 つのピークがあることがわかります。
もちろん、ウィンドウが長ければ長いほど、トレンドはより滑らかになります。 以下は、小さなウィンドウでの移動平均の例です。
指数平滑化では、移動平均と同様のロジックが使用されますが、今回は、異なる減少する重みが各観測値に割り当てられます。 言い換えれば、現在から遠ざかるにつれて、観察の重要性は低くなります。
数学的には、指数平滑法は次のように表されます。
ここで、アルファは平滑化係数です 0 から 1 までの値を取ります。 これは、以前の観測での重みの減少速度を決定します。
上のプロットから、濃い青の線は平滑化係数 0.3 を使用した時系列の指数平滑化を表し、オレンジ色の線は平滑化係数 0.05 を使用します。
ご覧のとおり、平滑化係数が小さいほど、時系列はより滑らかになります。 平滑化係数がゼロに近づくと、移動平均モデルに近づくため、これは当然のことです。
二重指数平滑法は、時系列に傾向がある場合に使用されます。 その場合、指数平滑法を 2 回再帰的に使用するだけのこの手法を使用します。
数学的に:
ここで、ベータはトレンド平滑化係数であり、0 から 1 までの値を取ります。
以下では、アルファとベータのさまざまな値が時系列の形状にどのような影響を与えるかを示しています。
この方法は、季節平滑化係数を追加することで二重指数平滑法を拡張します。 もちろん、これは時系列に季節性があることに気付いた場合に役立ちます。
数学的には、三重指数平滑法は次のように表されます。
ここで、ガンマは季節平滑化係数、L は季節の長さです。
データ サイエンスの詳細 K 最近傍 (KNN) アルゴリズムを理解する
SARIMA は実際には、非定常特性と季節性を示す時系列を表現できる複雑なモデルを作成する単純なモデルの組み合わせです。
まず、自己回帰モデル、AR(p)。 これは基本的に時系列自体への回帰です。 ここでは、現在の値が以前の値に多少の遅れを持って依存していると仮定します。 パラメータ p を受け取ります。これは最大ラグを表します。 それを見つけるために、偏自己相関プロットを調べて、ほとんどのラグが有意でなくなるまでのラグを特定します。
以下の例では、p4つになります。
次に、移動平均モデル MA(q) を追加します。 これにはパラメータ q が必要ですこれは、自己相関プロット上で他のラグが重要でなくなる最大のラグを表します。
以下、q4つになります。
その後、積分次数 I(d) を追加します。 パラメータ dは、系列を静止させるために必要な差の数を表します。
最後に、最後のコンポーネントである季節性 S(P, D, Q, s) を追加します。ここで s単純に季節の長さです。 このコンポーネントにはパラメータ P および Q が必要ですこれは p および q と同じですが、季節成分を対象としています。 最後に、Dは、系列から季節性を除去するために必要な差異の数を表す季節積分の次数です。
すべてを組み合わせると、SARIMA (p, d, q)(P, D, Q, s) が得られます。モデル。
主な要点は次のとおりです。SARIMA を使用してモデリングする前に、時系列に変換を適用して、季節性や非定常的な動作を除去する必要があります。
それは私たちの頭を包み込むたくさんの理論でした。 上で説明したテクニックを最初のプロジェクトに適用してみましょう。
特定の企業の株価を予測してみます。 現在、株価を予測することは事実上不可能です。 ただし、楽しい演習であることに変わりはなく、学んだことを実践する良い方法になります。
ニュー・ジャーマニー・ファンド(GF)の過去の株価を使用して、今後 5 営業日の終値を予測してみます。 (データセットとノートブックと一緒にコーディングできます。)
まず、分析全体で役立ついくつかのライブラリをインポートします。 また、平均平均パーセンテージ エラー (MAPE) を定義する必要があります。これがエラー メトリックになるためです。
次に、データ セットと最初の 10 エントリをインポートします。次のものが得られます。
ご覧のとおり、新ドイツ基金 (GF) とは異なる銘柄に関するエントリがいくつかあります。 また、日中情報に関するエントリもありますが、必要なのは 1 日の終わり (EOD) 情報のみです。
まず、不要なエントリを削除します。
次に、株式の終値のみに注目したいので、不要な列を削除します。
データセットをプレビューすると、次のように表示されます。
これで、探索的なデータ分析の準備が整いました。
データセットの全期間にわたって終値をプロットします。
次のものを取得できるはずです:
これが定常的なプロセスではないことは明らかであり、何らかの季節性があるかどうかを判断するのは困難です。
移動平均モデルを使用して時系列を平滑化しましょう。 そのために、指定された時間枠にわたって移動平均モデルを実行し、結果の平滑化された曲線をプロットするヘルパー関数を利用します。
5 日間の時間枠を使用すると、次の結果が得られます。
実際の曲線に近すぎるため、傾向がほとんどわかりません。 前月、前四半期ごとに平滑化して結果を比較してみましょう。
トレンドを見つけやすくなりました。 30 日と 90 日のトレンドが最後に下降曲線を示していることに注目してください。 これは、翌日には株価が下がる可能性があることを意味する可能性があります。
さて、指数平滑法を使ってみましょうより良い傾向を拾えるかどうかを確認します。
ここでは、平滑化係数の値として 0.05 と 0.3 を使用します。 他の値を自由に試して、結果を確認してください。
ご覧のとおり、アルファ値 0.05 は、上昇傾向と下降傾向のほとんどを拾いながら曲線を滑らかにします。
さて、二重指数平滑法を使ってみましょう。
そして、次のものが得られます。
繰り返しになりますが、より見栄えの良い曲線を得るために、さまざまなアルファとベータの組み合わせを試してください。
前に概説したように、モデル化するには系列を定常プロセスに変換する必要があります。 したがって、Dickey-Fuller テストを適用して、定常プロセスかどうかを確認してみましょう。
君は見るべきだ:
ディッキー・フラー検定によれば、時系列は当然のことながら非定常です。 また、自己相関プロットを見ると、非常に高いことがわかり、明確な季節性がないように見えます。
高い自己相関を取り除き、プロセスを定常化するために、最初の差分 (コード ブロックの 23 行目) を取得しましょう。単純に 1 日の遅れを設けて時系列自体を減算すると、次のようになります。
シリーズが固定されたので、モデリングを開始できます。
ここで、SARIMA の場合、最初にいくつかのパラメーターと他のパラメーターの値の範囲を定義して、p、q、d、P、Q、D、s のすべての可能な組み合わせのリストを生成する必要があります。
さて、上のコードセルには 625 の異なる組み合わせがあります。 それぞれの組み合わせを試し、それぞれで SARIMA をトレーニングして、最高のパフォーマンスを発揮するモデルを見つけます。 コンピューターの処理能力によっては、これに時間がかかる場合があります。
これが完了すると、最適なモデルの概要が出力され、次のように表示されます。
最終的に、次の 5 営業日の終値を予測し、モデルの平均絶対パーセント誤差 (MAPE) を評価できます。
この場合、MAPE は 0.79% となり、非常に良好です。
データ サイエンスの詳細 C-Means クラスタリングの説明
ここで、予測と実際のデータを比較するために、Yahoo Finance から財務データを取得して DataFrame を作成できます。
次に、実際の終値からどれだけ離れているかを確認するプロットを作成します。
私たちの予測は少し外れているようです。 実際、予測価格は基本的に横ばいであり、これはモデルのパフォーマンスがおそらく良くないことを意味します。
繰り返しますが、これは私たちの手順によるものではなく、株価の予測が本質的に不可能であるという事実によるものです。
最初のプロジェクトから、SARIMA を使用してモデル化する前に、時系列を定常化する手順全体を学びました。 これは、多くの手動調整を伴う、長くて退屈なプロセスです。
さて、FacebookのProphetを紹介しましょう。 これは、Python と R の両方で利用できる予測ツールです。このツールを使用すると、専門家と非専門家の両方が最小限の労力で高品質の予測を作成できます。
タイトルがすべてを物語っています。大気質の予測に Prophet を使用します。完全なノートブックとデータ セットとともにコーディングできます。
いつものように、いくつかの便利なライブラリをインポートすることから始めます。 次に、最初の 5 行を出力します。
ご覧のとおり、データセットにはさまざまなガスの濃度に関する情報が含まれています。 それらは毎日、毎時記録されました。
データ セットをもう少し詳しく調査すると、値 -200 のインスタンスがいくつかあることがわかります。 もちろん、負の濃度では意味がありません。そのため、モデリングの前にデータをクリーンアップする必要があります。
したがって、データをクリーンアップする必要があります。
ここでは、日付列を解析して「日付」に変換することから始めます。
次に、すべての測定値を浮動小数点数に変換します。
その後、各測定値の平均を取得して、日ごとにデータを集計します。
この時点では、削除する必要のある NaN がまだいくつかあります。 したがって、NaN が 8 個を超える列を削除します。 こうすることで、多くのデータを失うことなく、NaN 値を含む行を削除できます。
最後に、分析する傾向がよりスムーズになるため、データを週ごとに集計します。
各化学物質の傾向をプロットできます。 ここではNOxの場合を示します。
窒素酸化物は、反応してスモッグや酸性雨を形成したり、微粒子や地上オゾンの形成を引き起こすため、非常に有害です。 これらは健康に悪影響を与えるため、NOx の濃度は大気の質の重要な特徴となります。
データ サイエンスの詳細知っておくべき予測分析ツールのトップ 10
NOx 濃度のモデル化のみに焦点を当てます。 したがって、他の無関係な列をすべて削除します。
次に、Prophet をインポートします。
Prophet では、日付列の名前を ds にし、feature 列の名前を y にする必要があるため、適切な変更を加えます。
この時点で、データは次のようになります。
次に、トレーニング セットを定義します。 そのために、予測と検証のために最後の 30 エントリを保持します。 その後、Prophet を初期化し、モデルをデータに適合させて、予測を行うだけです。
次の内容が表示されるはずです。
ここで、yhat は予測を表し、yhat_ lower と yhat_upper はそれぞれ予測の下限と上限を表します。 Prophet を使用すると、予測を簡単にプロットでき、次の結果が得られます。
ご覧のとおり、Prophet は単純に下向きの直線を使用して、将来の NOx 濃度を予測しました。
次に、時系列に季節性などの興味深い特徴があるかどうかを確認できます。
ここで、Prophet は季節性のない下降傾向のみを特定しました。
平均絶対パーセント誤差 (MAPE) と平均絶対誤差 (MAE) を計算してモデルのパフォーマンスを評価すると、MAPE は 13.86 パーセント、MAE は 109.32 で、それほど悪くないことがわかります。 モデルを微調整していないことに注意してください。
最後に、予測を上限と下限とともにプロットします。
これで、時系列を確実に分析およびモデル化する方法を学び、その知識を 2 つの異なるプロジェクトに適用しました。
、。