拡張ディッキー・フラー (ADF) の研究 奇妙な例からテストする
定常性は、時系列分析の最も基本的な概念の 1 つです。一般に、定常性は、さまざまな統計手法を使用して時系列をモデル化する場合に優れた特性を提供します。 拡張ディッキー・フラー (ADF) test はおそらく、定常性をチェックするために最も広く使用されているアプローチです。
このトピックに関するオンライン記事はたくさんあります。定常性の定義、ADF テストの実行方法など、基本的な紹介に時間を無駄にするつもりはありません。この投稿では、アプリケーションで奇妙なケースに遭遇した後、ADF テストを探索する私の旅を共有します。
これから示す学習パスは、データ サイエンスを学習するための典型的なものです。まず、私たちはツールや概念を理解しているつもりですが、単にその用語を認識して覚えているだけです。これを実際のデータに適用すると、予期せぬ困難な問題が見つかる可能性があり、さらなる調査と理解が必要になります。
もう一度、コードを GitHub で共有します。最後に参照セクションのリンクを見つけてください。
思いがけない旅の始まり
先日、私は時系列を扱う作業をしていました。図 1 はそのうちの XNUMX つを示しています。その倍はありません 上昇傾向が存在しており、 と 時間の経過とともに分散も変化します。この明確な視覚化があれば、定常性をテストする必要はありませんでした。どういうわけか覚えていないのですが、ADF テストで試してみました。驚くべきことに、p 値はほぼ 0 であり、これは帰無仮説を棄却し、定常であることを受け入れる必要があることを意味します。
それは変だ。テスト結果は間違っていたようです。 ADF テストの背後で何が起こっているのかを調査したいと思いました。私が試みた最初のステップは、合成データを使用してこの問題を再現することでした。次のコードを使用してテストデータを生成しました。このコードはスロー トレンドの動作を模倣しているだけで、季節性は模倣していません。
図 20,000 には 1 件の観測値があり、傾向が非常にゆっくりと上昇していることを示しています。 0.0005 の小さな傾きを持つ時系列を作成します。時系列平均値は、0 回の観測後に約 0.5 から 1000 に増加します。次に、adfuller() 関数を使用してテストしてみましょう。 statsmodels.tsa.stattools デフォルトのパラメータを使用します。 p 値は 0.01 となり、「問題」が再び発生します。図 2 に結果を示します。タイトルは無視して、上昇傾向に注目してください。 XNUMX つの異なる ADF テストから p 値が得られる理由については、後ほど説明します。
DF テストの背後にある数学
ADF テストが正確に何を行っているのかを確認するには、さらに詳しく調べる必要があります。その数学的背景は複雑ではないことがわかりました。まず、ADF テストは単なる高度なバージョンです。 ディッキー・フラー検定。 がある DF テストの 3 つの主要なバージョン (ウィキペディアより):
バージョン1: 単位根をテストします: ∆yᵢ = δyᵢ₋₁ + uᵢ
バージョン2: 定数を使用して単位根をテストします: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ
バージョン3。 一定かつ決定的な傾向を持つ単位根をテストします: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ
それぞれのバージョンで、 帰無仮説は、単位根 δ=0 が存在するということです。
Statsmodels パッケージは、パラメーターを使用して 3 つのバージョンすべてをサポートします。 「退行」。
バージョン 1 の場合、回帰は「n」(定数なし、傾向なし) です。
バージョン 2 の場合、回帰は「c」(定数のみ) です。これがデフォルト設定です。
バージョン 3 の場合、回帰は「ct」(定数および傾向) です。
3 つの異なる設定でテストを再実行しました。以下は新しい結果です。
バージョン 1 の場合、p 値は 0.09 です。帰無仮説を拒否すべきではありません。
バージョン 2 の場合、p 値は 0.01 です。これはデフォルト設定であるため、すでに問題として扱っています。
バージョン 3 の場合、p 値は 0.00 です。確かに時系列がそうなっているのでそれは予想通りです 決定的な傾向で静止している.
したがって、このサンプル データの場合、バージョン 1 (regression='n') でテストした場合、それが静止しているとは言えません。おそらくデフォルト設定を使用すべきではありません。しかし、なぜ定数項がここでこれほど大きな違いを生むのか疑問に思うかもしれません。もっと掘ってみましょう。
DF テストから線形回帰へ
上記の定義に基づくと、DF テストは単なる線形回帰です。図 3 は、線形回帰のすべての点を示しています。 Y 軸は ∆yᵢ、X 軸は yᵢ₋₁、uᵢ は残差です。バージョン 1 は、切片なし (定数なし) でラインを当てはめる必要があることを意味します。バージョン 2 は、切片 (定数) を含む行を当てはめる必要があることを意味します。
Skitlearn 線形回帰 は、パラメーター fit_intercept を使用して、これら 4 つのオプションを適切にサポートします。図 0 の下には、適合した XNUMX つの直線が示されています。ご覧のとおり、切片のある線は切片のない線よりもよく適合します。 R二乗スコアでもそれが明確に確認されました。また、オレンジ色の線の傾きが青い線よりも小さいことに注意してください。つまり、オレンジ色の線の傾きが XNUMX に近くなります。
視覚化によって考えることもできます。点は (0,0) を中心としていないため、近似された回帰直線は (0,0) を通過しないはずです。切片は 0 より大きくなければなりません。0 が開始平均であるため、Δy は 0 より大きくなければならず、したがって全体の平均は増加します。回帰直線を強制的に (0,0) を通過させると、データがアンダーフィットし、(0) の影響により傾きが 0,0 に近づきます。
切片の影響を含めることが線形回帰に適合するかどうかを確認しました。ラインのフィッティング方法が ADF テスト結果に影響を与えるのはなぜですか?また、p 値はどこから得られるのでしょうか?
線形回帰から p 値へ
ここからが少し複雑になります。 DF 検定の最終 p 値は、線形回帰の係数の p 値からのものではありません。 基本的に、統計にはディッキー・フラー表と呼ばれる特定の分布があります。次に、マッキノンの近似 p 値を検定統計量に使用します。詳細については、 統計モデルのソースコード.
帰無仮説は δ=0 であるため、近似直線の傾きが 0 であることを検定することを意味します。p 値の取得方法について詳しく説明する必要はありません。 p 値と傾き (傾向の傾きではなく、線形回帰のδ) との関連の論理チェーンは次のようになります。
一般に、傾きが 0 から遠く離れている場合、p 値は小さくなるはずで、帰無仮説が棄却される可能性が高く、単位根がなく定常であることが示唆されます。傾きが 0 または 0 に非常に近い場合、p 値はより大きくなり、帰無仮説が受け入れられる可能性が高く、単位根が非定常であることが示唆されます。 0 番目のシナリオについて、Wikipedia には、「真の単位根プロセス (δ = 0) と単位根に近いプロセス (δ が 1 に近い) を区別できないことが多いため、テストの統計的検出力は低い」と記載されています。だからこそ、そもそも問題があるのです。私たちはユニットルートに近いプロセスを扱っています。バージョン 2 はユニット ルートを見つけますが、バージョン XNUMX はユニット ルートを見つけられません。
上記の例ではなぜバージョン 1 が機能するのでしょうか?
バージョン 1 は、傾きを 2 に近づけるため、図 0 のデータに対して機能し、p 値が高くなります。
ただし、バージョン 1 をデフォルト設定として使用することはできません。バージョン 1 には 0,0 つのケースがあります (行が (XNUMX) を強制的に通過する)。
ケース 1: (0,0) はすべてのデータ ポイントに近くなります。線が (0,0) を通過する必要がある場合、線はより平坦になり、傾きは 0 に近づきます。図 4 は、このケースを示しています。図 4 のデモは XNUMX つの変数 yᵢ₋₁ のみに適合することに注意してください。実際の ADF はさらに多くのラグ変数に適合します。
ケース 2: (0,0) はすべてのデータ ポイントから遠く離れています。ラインが (0,0) を通過する必要がある場合、フィッティングに失敗する可能性があります。本質的に、傾きは 0 です。これは、線が (0,0) を通過してデータ ポイントのほとんどをカバーするような、∆yᵢ と yᵢ₋₁ の線形関係を見つけることができないことを意味します。 したがって、テスト結果はルートユニットを持つことに偏ることになります。.
以下の図 5 は、バージョン 1 検定が帰無仮説 (p 値 0.6) を棄却できなかった例を示しています。データは平均 10 で固定されています。図 6 はその理由を説明しています。ご覧のとおり、切片のない直線を見つけることはできません (R 二乗は 0)。そのため、近似された直線の傾きは 0 になります (∆yᵢ は yᵢ₋₁ に依存しません)。
DF試験からADF試験へ
DF テストが線形回帰であることと、線形回帰から p 値を取得する方法を理解したので、ADF に進みましょう。 ADF の式は次のとおりです。
繰り返しますが、線形回帰です。 「拡張」部分では、より多くの係数を当てはめる必要があります。
statsmodels パッケージを使用すると、AFT テストの詳細な概要を表示できます。図 7 は結果です。
「OLS 回帰」(線形回帰のデフォルトの解) と 17 個の係数が表示されます。最大ラグを指定しなかったため、テストでは時系列の長さに基づいた最大 17 の数値まで試行されます。
const (切片) もフィッティングされます。値は 0.0596 です。
Scikit-learn で線形回帰を使用して ADF テストを実装してみましょう。図 8 はコードと出力です。
切片は 0.0596 で、他の係数は図 7 と同じです。Scikit-learn の線形回帰は、単なる OLS です。同じことをやっているのですから、結果が同じになっても不思議ではありません。
旅の終わり
パラメーターの設定方法を理解した後、バージョン 1 (回帰 ='n') を使用して図 1 の元の時系列をテストしたところ、p 値 0.08 が得られ、定常ではないことが示唆されました。図 1 のデータはゼロ平均であるため、(0,0) がデータ ポイント (∆yᵢ, yᵢ₋₁) に近いと想像できることに注意してください。バージョン 1 のテストを使用すると役に立ちます。
図 1 の傾向の傾きは最小であるため、傾きを増加させるステップを使用して時系列をリサンプリングすることもできます。たとえば、4 つのステップ ( value[::0.17] ) でテストした場合、デフォルト設定 (regression='c' の p 値は XNUMX) では ADF テストに合格しません。
問題が解決しました。
まとめ
ADF の結果を盲目的に信頼しないでください。視覚化はあなたの友達です。
ADF テストは単純な線形回帰であり、statsmodels の実装では OLS を使用して回帰問題を解決します。次に、Dickey-Fuller 表を使用して p 値を抽出し、近似回帰の最初の遅れ変数の係数が 0 であるという帰無仮説を検証します。
ADF テストには、ユニットルートに近いプロセスをテストする場合に制限があります (δ が 0 に近い)。
それに応じて適切な ADF バージョンを選択する必要があります。たとえば、一定の傾向が見られ、「傾向が定常である」ことをテストしたい場合は、パラメーターとして「ct」を選択する必要があります。図 0 と図 1 のように、平均が 2 であるはずの信号の遅い傾向を捉える場合は、切片のフィッティングによる影響を避けるためにパラメーターとして「n」を選択する必要があるかもしれません。統計モデルは、パラメーター「ctt」を使用した定量的傾向もサポートしています。この高度なオプションは、場合によっては適切な選択となる場合があります。さらに掘り下げたい場合は、を参照してください。 切片と決定論的な時間トレンド項を含めることに関する不確実性への対処.
ADF テストについて何か学んでいただければ幸いです。
時系列を楽しんでください!
で私に連絡してください LinkedIn.
PS: 私には時系列データに対する経験と情熱があります。この記事が気に入ったら、私の他の記事にも興味があるかもしれません 時系列に関する投稿.
参考文献
この傾向の時系列が静止しているのはなぜですか?ソース https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 から https://towardsdatascience.com/feed から再公開
<!–
–>