時空間キューブの各場所で、[変化ポイントの検出 (Change Point Detection)] ツールは時系列の統計的特性が変化したときの時間ステップを特定します。 ツールでは、連続変数の平均値または標準偏差の変化、カウント変数の平均値の変化を検出することができます。 各場所の変化ポイントの数はツールによって判断するか、すべての場所で使用する変化ポイントの数を定義することができます。
変化ポイントは、各時系列をセグメントに分割し、各セグメントの値の平均値または標準偏差が類似した値になるようにします。 変化ポイントは、新しい各セグメントの最初の時間ステップとして定義されるため、変化ポイントの数はセグメントの数よりも常に 1 つ少なくなります。
変化ポイントのタイプ
これらのタイプの変化をツールで検出できます。 以下の各画像では、時系列が青いライン チャートで表示されており、変化ポイントにオレンジの垂直ラインがあります。
- [平均シフト] - 分析変数の平均値のシフトを検出します。 データ値が正規分布に沿っており、すべての時間ステップで標準偏差が同じものと見なされます。 平均値は各セグメント内、および各変化ポイントの新しい値に対する変化で一定です。
- 使用例 - 短期間で 1 日の最高気温が上昇した場合の熱波を検出する。
- [標準偏差] - 分析変数の標準偏差の変化を検出します。 データ値が正規分布に沿っており、すべての時間ステップで平均値が同じものと見なされます。 標準偏差は各セグメント内、および各変化ポイントの新しい値に対する変化で一定です。
- 使用例 - 重要な気象現象を示す可能性がある、風速の変動の変化を検出する。
- [カウント] - カウントを表す分析変数の平均値の変化を検出します。 各変化ポイントで新しい値に変化する平均値がある各セグメント内で、ポアソン分布に従うものとしてデータ値は仮定されます。
- 使用例 - 1 日当たりのインフルエンザ患者数の変化を検出し、毎年のインフルエンザ シーズンの始まりと終わりを予測する。
ツールの出力
ツールの主な出力は、入力時空間キューブの各場所の 1 つのフィーチャを持つフィーチャクラスです。 それぞれの位置で検出された変化ポイントの数に基づいて、5 つのクラスでレイヤーが描画されます。
出力フィーチャには次のフィールドが含まれます。
- [変化ポイントの数] (NUM_CPTS) - 位置で検出された変化ポイントの数。
- [最初の変化ポイントの日付] (FIRST_CHPT) - 位置の最初の変化ポイントの日付。 変化ポイントが検出されなかった場合、値は Null になります。
- [最後の変化ポイントの日付] (LAST_CHPT) - 位置の最後の変化ポイントの日付。 変化ポイントが検出されなかった場合、値は Null になります。 変化ポイントが 1 つ検出された場合、値は最初の変化ポイントと同じ日付になります。
出力フィーチャのレイヤー時間は最初の変化ポイントの日付に基づいているため、時間スライダーを使って、この日付に基づいて位置をフィルタリングできます。 レイヤー時間は、レイヤー プロパティで最後の変化ポイントの日付に変更できます。 たとえば、異なる場所で最初または最後の変化ポイントが発生する様子を時系列でアニメーションにして視覚化することで、複数の場所の一時的なパターンを特定するのにこれを使用できます。
時系列ポップアップ チャート
[マップ操作] ナビゲーション ツールを使用してマップ上のいずれかのフィーチャをクリックすると、ライン チャートが [ポップアップ] ウィンドウに表示されます。 このチャートでは、場所の時系列の青いライン チャートが表示されており、変化ポイントが大きめの赤いドットで示されています。
[平均シフト] および [カウント] 変化タイプでは、各セグメントの平均値がある場所に水平の赤いラインが描画されます。
[標準偏差] 変化タイプの場合、時系列全体のグローバル平均値がある場所に赤い実線が描画されます。 セグメントごとに、標準偏差の 2 つ上、およびピンクの陰影処理が施されたグローバル平均の下のバンドの間に赤い破線が描画されます。 変化ポイントで標準偏差が変化すると、これらのバンドが広くなったり狭くなったりします。 グローバル標準偏差の 2 つ上、およびグローバル平均の下にグレーの破線が描画されます。 これにより、時系列全体の標準偏差よりも、あるセグメントの標準偏差の方が大きいのか小さいのかがわかります。
チャートの任意のエレメントにマウス ポインターを合わせることで、値に関する詳細情報を取得できます。
注意:
出力フィーチャがシェープファイル (*.shp) として保存された場合、ポップアップ チャートは作成されません。
ジオプロセシング メッセージ
このツールは、ツールの実行に関する情報を含む複数のメッセージを提供します。 これらのメッセージはいくつかのセクションに分かれています。
[入力時空間キューブの詳細] セクションは、時間ステップの間隔、時間ステップの数、位置の数、および時空間ビンの数に関する情報と共に、入力時空間キューブのプロパティを表示します。 この 1 番目に表示されるプロパティは、キューブがどのように作成されたかによって決まるため、キューブごとに情報が変わります。
[重要な日付] セクションには、すべての場所のなかで一番最初と一番最後の変化ポイントの日付、および変化ポイントが最も多い日付が表示されます。 これを使用して、複数の場所に変化をもたらした大きな変化が発生した日付を特定できます。 変化の規模が同じ場合、最も早い日付が表示されます。
[時間ステップあたりの変化ポイントの数の概要] セクションには、時間ステップごとの変化ポイント数の最小、最大、平均、中央値、標準偏差が表示されます。 これによって、すべての場所の時系列にわたって変化ポイントの頻度を調べることができます。 頻度が高すぎるか低すぎる場合、[検出感度] パラメーターの値を調整して変化ポイントの頻度を増減できます。
時空間キューブを 3D で視覚化
入力時空間キューブは分析結果で更新され、[表示テーマ] パラメーターの [時系列の変化ポイント] オプションを指定した [時空間キューブを 3D で視覚化 (Visualize Space Time Cube in 3D)] ツールで、結果を 3D シーンで表示するのに使用できます。 出力には、時空間キューブの時間ステップごとに 1 つのフィーチャが含まれます。 変化ポイントとして検出された時間ステップには [変化ポイント] ラベルが付与されます。一方、変化ポイントとして検出されなかった時間ステップには [変化ポイントでない] ラベルが付与され、ライト グレーで表示されます。
時間ステップの時間、場所、ID に関する情報フィールドが、検出された変化ポイントに関する以下のフィールドとともに含まれます。
- [変化ポイント インジケーター] (CHPT_IND) - 時間ステップが変化ポイントとして検出された場合は 1、変化ポイントとして検出されなかった場合は 0 の値がフィールドに含まれます。
- [現在の平均] (MEAN_CUR) - 時間ステップを含むセグメントの平均値。 このフィールドは平均シフト変化タイプでのみ作成されます。
- [前の平均] (MEAN_BEF) - 前の時間ステップを含むセグメントの平均値。 [現在の平均] と [前の平均] の値は時間ステップが変化ポイントではない場合は等しくなり、時間ステップが変化ポイントである場合は異なります (前の値が別のセグメントにあるため)。 これにより、変化ポイントの前後のセグメントの平均値を比較できます。 このフィールドは平均シフト変化タイプでのみ作成されます。
- [現在の標準偏差] (STDEV_CUR) - 時間ステップを含むセグメントの標準偏差。 このフィールドは標準偏差変化タイプでのみ作成されます。
- [前の標準偏差] (STDEV_BEF) - 前の時間ステップを含むセグメントの標準偏差。 [現在の標準偏差] と [前の標準偏差] の値は時間ステップが変化ポイントではない場合は等しくなり、時間ステップが変化ポイントである場合は異なります。 このフィールドは標準偏差変化タイプでのみ作成されます。
- [カウントの現在の平均] (MEAN_CUR) - 時間ステップを含むセグメントのカウントの平均値。 このフィールドはカウント変化タイプでのみ作成されます。
- [カウントの前の平均] (MEAN_BEF) - 前の時間ステップを含むセグメントのカウントの平均値。 [カウントの現在の平均] と [カウントの前の平均] の値は時間ステップが変化ポイントではない場合は等しくなり、時間ステップが変化ポイントである場合は異なります。 このフィールドはカウント変化タイプでのみ作成されます。
注意:
[時空間キューブを 2D で視覚化 (Visualize Space Time Cube in 2D)] ツールの [時系列の変化ポイント] 表示テーマは、変化ポイント検出の必須出力フィーチャクラスを再作成します。
変化ポイントの検出方法
変化ポイント検出の目標は、データの平均値か標準偏差がある値から別の値に変化した時の時間ステップを見つけることです。 この問題は、それぞれの値の平均値か標準偏差が類似しているセグメントに時系列が分割される、時系列のセグメンテーションの問題と同じです。 時系列に最適なセグメンテーション (変化ポイントのセット) を特定するには、異なる候補セグメンテーションの有効性を計測、比較できる必要があります。 各セグメンテーションのセグメンテーション コストを計算することでこの比較を行い、最もコストが低いセグメンテーションが最適となります。
セグメンテーションの各セグメントの個別のコストを追加することでセグメンテーション コストを計算します。ここで、各セグメントのコストは変化タイプによって決定した尤度関数に基づきます (各変化タイプの分布仮定については「変化ポイントのタイプ」をご参照ください)。 直感的には、セグメントが変化タイプの仮定分布に従うほど尤度が上がり、セグメンテーションのコストが低くなります。
たとえば、以下の画像には時間ステップが 150 個ある時系列が表示されています。すべての値は標準偏差が 1 に等しい正規分布から生成されました。 最初の 50 個の時間ステップの平均は 0 です。中間の 50 個の時間ステップでは平均が 10 に上がり、最後の 50 個の時間ステップでは平均が 0 に再び下がります。 変化ポイントは新しい各新規セグメントの最初の時間ステップとして定義されているため、この時系列では、平均がシフトした場合の真の変化ポイントは時間ステップ 51 と 101 です。 各セグメントのヒストグラムを見ると、各セグメントがほぼ同じ標準偏差で正規分布に従っているように見えますが、平均値が異なるため、このセグメンテーションは平均シフト変化タイプの仮定に沿っているようです。 これは、このセグメンテーションの尤度が高く、最終的なセグメンテーション コストが低いことを示しています。 この正しいセグメンテーションでは、平均シフトを検出する際のセグメンテーション コストが 401.39 になります。 この値そのものは解釈が難しいですが、他の候補のセグメンテーションのコストと比較できます。
以下の画像は、時間ステップ 31 と 121 が変化ポイントとして検出されている間違ったセグメンテーションを示しています。 真ん中のセグメントは正規分布しているようには見えず、最初と最後のセグメントよりも標準偏差がかなり大きくなっています。 つまり、セグメントのデータ値が平均シフト変化タイプの分布仮定を下回っている可能性は低いため、セグメンテーションのコストは高くなるはずです。 実際、このセグメンテーションのコストは 2596.24 で、正しいセグメンテーションのコストよりもはるかに大きくなっています。 これらの変化ポイントがこの時系列には最適ではないことがここからわかります。
実際の 2 つの変化ポイントに加えて、不要な変化ポイントが追加されたと仮定します。 以下の画像では、時間ステップ 51、101、131 が変化ポイントとして特定されています。 最後の変化ポイントは不要ですが、セグメント ヒストグラムはほぼ均等な標準偏差で正規分布しているように見えることから、尤度が高く、セグメンテーション コストが低いことがわかります。 このセグメンテーションのコストは 401.27 で、これは実際のセグメンテーションのコスト (401.39) よりも若干低くなっています。 新しいパラメーター (今回のケースでは新しい変化ポイント) を追加しても尤度は下がらないため、本来のセグメンテーションよりも不要な変化ポイントがあるセグメンテーションの方がセグメンテーション コストが低くなります。 変化ポイントとして追加されない場合に比べて、モデルからデータへの調整の改善が極めて限定されるため、変化ポイントを追加してもコストがわずかしか下がりません。
変化ポイントの数に制約が適用されていない場合、変化ポイントを追加するほどセグメンテーション コストは常に下がっていきます。 すべての時間ステップが変化ポイントとして検出されないようにするには、[方法] パラメーターを使用して 2 種類ある制約のいずれかを適用する必要があります。
[定義済みの変化ポイントの数 (SegNeigh)] オプションでは、[変化ポイントの数] パラメーターを使用して、検出する変化ポイントの数を指定できます。 このオプションでは Segment Neighborhood (SegNeigh, Auger 1989) アルゴリズムを使って、指定した数の変化ポイントがあるすべての候補セグメンテーションのなかから最もコストが低いセグメンテーションを見つけます。
[変化ポイント数の自動検出 (PELT)] オプションでは、Pruned Exact Linear Time (PELT, Killick 2012) アルゴリズムを使用して変化ポイントの数と位置を予測します。 このアルゴリズムでは、各セグメントのコストにペナルティ値を追加し、ペナルティがかけられたコスト (セグメンテーション コスト + ペナルティ) がすべての候補セグメンテーションのなかで最も小さいセグメンテーションを見つけることで、各変化ポイントの追加に対してペナルティをかけます。 時間ステップが変化ポイントとして検出されるようにするには、追加されるペナルティ値以上にセグメンテーション コストを減らす必要があるという特徴が PELT にはあります。 コストの削減幅が追加されたペナルティを下回る場合、ペナルティが課されたコストが上がり、時間ステップは変化ポイントとして検出されません。
ペナルティ値の選択は PELT の結果にとって非常に重要です。 ペナルティが低すぎると大量の偽の変化ポイントが検出され、ペナルティが高すぎると真の変化ポイントを検出できません。 PELT で使用されるペナルティ値は [検出感度] パラメーターの値で決まります。 感度は 0 ~ 1 の数値で指定し、感度が高いほど、低いペナルティ値を使ってより多くの変化ポイントが検出されます。 ペナルティ値は次の式を使用して感度から決定されます。ここで、n は時系列にある時間ステップの数です。
感度値が最も高い 1 になっている場合、ベイズ情報量基準 (BIC) が最小化されます。 ペナルティ値は時間ステップの数にのみ左右されるため、時空間キューブのすべての場所で同じペナルティ値を使用します。
PELT と SegNeigh はいずれも厳密な再帰アルゴリズムであるため、ペナルティ値か変化ポイント数が固定されている場合、全体で最もセグメンテーション コストが低いセグメンテーションを常に返します。 入力時空間キューブのすべての場所でアルゴリズムが個別に実行されます。
PELT と SegNeigh にはある共通点があります。両方の方法で同じ数の変化ポイントを検出した場合、どちらも同じ時間ステップを変化ポイントとして検出します。 たとえば、PELT を実行してある場所で 6 個の変化ポイントを検出するペナルティ値を使用し、次に SegNeigh を実行して 6 個の変化ポイントを検出するように指定した場合、どちらの方法でも変化ポイントと同じ時間ステップが検出されます。
ベスト プラクティスおよび制限
ツールのパラメーターとオプションを選択する際には複数の注意事項があります。
- 変化ポイントの検出方法にはオンラインとオフラインがあり、このツールではオフライン検出を実行します。 オフライン方法では既存の時系列に開始と終了があると見なされ、その目標は過去にさかのぼって変化が発生したタイミングを特定することです。 一方、オンライン方法では、新しい値が利用可能になるたびに更新されるデータを定期的にチェックします。 オンライン検出方法の目標は、変化が発生してからできるだけ短い時間で新しい変化をリアルタイムに検出することです。 オンライン方法とオフライン方法ではアルゴリズム、ユースケース、データに関する前提が大きく異なります。
- トレンドがなく、変化が 1 つの時間ステップで発生するデータでこのツールは最も威力を発揮します。 トレンドがある時系列の場合、一定して変化する平均値が原因で、多くの時間ステップが変化ポイントとして検出される場合があります。 同様に、変化がもっと緩やかで、値が完全に変化するまでに複数の時間ステップを要する場合、移行中のすべての時間ステップが変化ポイントとして検出される場合があります。 これらのケースでは、[検出感度] パラメーターで低い値を使用することをおすすめします。
- 変化ポイントの検出は時系列外れ値の検出と似ていますが、重要な違いがあります。 変化ポイントの検出では、あるモデルが新しいモデルに変化したときの時間ステップを特定し (平均値の変化など)、外れ値の検出では 1 つのモデルから大きく逸脱している時間ステップを特定します。 前者が持続的な変化を示すのに対して、後者は短期間の偏差を示します。
カウントを表す分析変数の場合、カウントの平均値の変化を検出するには、多くの場合、[変化タイプ] パラメーターの [カウント] オプションが最も適しています。 ただし、[平均シフト] オプションも、カウント データに対して同等以上の良い結果をもたらす場合があります。 これは、カウント変化タイプのモデルが、セグメントの分散がセグメントの平均値に等しいポアソン分布に各セグメントの値が従うことを前提としているためです。 一方、平均シフト変化タイプでは、各セグメントの値が正規分布することを前提としているため、平均値は値の分散よりも大きくなったり小さくなったりします。
ポアソン分布では、ほとんどのカウントが平均値の平方根の 2 倍以内に収まります。 たとえば、平均値が 100 のポアソン分布の場合、約 95% のカウントが 80 〜 120 に分布します (2 * sqrt(100) = 20)。 平均値が 1,000,000 のポアソン分布の場合、ほとんどのカウントは 998,000 〜 1,002,000 に分布します (1,000,000 の平方根は 1,000 のため)。 平均値が 1,000,000 のような大きな値の場合、カウントの分布範囲は比較的狭く、ほとんどのカウントが平均値の 0.2% 以内に収まります。 一方、平均値が 100 のような小さな値の場合、平均値から最大 20% の変動が生じます。 平均値と比較して、ポアソン分布で想定されるよりもカウントの値が変動する場合、多くの時間ステップが変化ポイントとして検出される可能性があります。 これは、カウントが大きい場合には顕著です。 この場合、平均シフトを検出することをお勧めします。
- すべての変化タイプについて、最初の時間ステップが変化ポイントとして検出されることはありません。 これは、2 番目のセグメントから、新しい各セグメントの先頭を変化ポイントがマークするためです。 最初の時間ステップは常に最初のセグメントにあるため、これが変化ポイントになることはありません。
- [方法] パラメーターの [定義済みの変化ポイントの数 (SegNeigh)] オプションでは、最適セグメンテーションが一意にならない場合があります。 複数のセグメンテーションでセグメンテーション コストが同じ場合、最新の最適変化ポイントが返されます。 たとえば、ある場所で時系列の値がすべて等しい場合、すべてのセグメンテーションで尤度とコストが同じになります。 この場合、3 つの変化ポイントが要求されると、最後の 3 つの時間ステップがその場所の変化ポイントとして検出されます。
- 平均シフトを検出するには、平均シフト (変化ポイント) がある場所の時間ステップを事前に把握することなく、平均付近のデータの分散を評価する必要があります。 従来の分散式は未知の変化する平均の存在によってバイアスがかかるため、次の堅牢な分散式を使用します。
この式の評価が 0 になる場合、平均値にはシフトがないことを前提に分散が評価されます。
参考資料
変化ポイントの検出の詳細については、次の資料をご参照ください。
- Auger, I. E. and Lawrence, C. E. (1989). "Algorithms for the optimal identification of segment neighborhoods."Bulletin of Mathematical Biology. 51(1):39-54. https://doi.org/10.1007/BF02458835
- Killick, R., Fearnhead, P., and Eckley, I.A. (2012). "Optimal Detection of Changepoints With a Linear Computational Cost." Journal of the American Statistical Association. 107. 1590-1598. https://dx.doi.org/10.1080/01621459.2012.737745
- Killick, R. and Eckley, I.A. (2014). "changepoint: An R Package for Changepoint Analysis." Journal of Statistical Software. https://dx.doi.org/10.18637/jss.v058.i03