系列差分集約

系列差分は、時系列の値を異なる時間遅延または期間で自分自身から引く技術です。例えば、データポイント f(x) = f(xt) - f(xt-n) のように、ここで n は使用される期間です。

期間が1の場合、時間の正規化がない導関数に相当します:それは単に1つの点から次の点への変化です。単一の期間は、定数の線形トレンドを除去するのに役立ちます。

単一の期間は、データを定常系列に変換するのにも役立ちます。この例では、ダウ・ジョーンズが約250日間プロットされています。生データは定常ではなく、いくつかの技術で使用するのが難しくなります。

最初の差分を計算することで、データのトレンドを除去します(例:定数の線形トレンドを除去)。データが定常系列になることがわかります(例:最初の差分はゼロの周りにランダムに分布し、パターンや挙動を示さないようです)。この変換は、データセットがランダムウォークに従っていることを明らかにします;値は前の値 +/- ランダムな量です。この洞察により、さらなる分析のためのツールを選択することができます。

dow

図11. ダウ・ジョーンズがプロットされ、最初の差分で定常化された

より大きな期間は、季節的/周期的な挙動を除去するために使用できます。この例では、レミングの集団が正弦波 + 定数の線形トレンド + ランダムノイズで合成生成されました。正弦波の周期は30日です。

最初の差分は定数トレンドを除去し、正弦波だけが残ります。次に、30番目の差分が最初の差分に適用され、周期的な挙動を除去し、他の分析に適した定常系列が残ります。

lemmings

図12. レミングデータがプロットされ、1stおよび30thの差分で定常化された

構文

serial_diff 集約は、単独でこのように見えます:

Js

  1. {
  2. "serial_diff": {
  3. "buckets_path": "the_sum",
  4. "lag": 7
  5. }
  6. }


表77. serial_diff パラメータ

パラメータ名 説明 必須 デフォルト値
buckets_path 関心のあるメトリックへのパス(詳細については buckets_path 構文 を参照) 必須
lag 現在の値から引く履歴バケット。例えば、7の遅延は現在の値から
7バケット前の値を引きます。正の非ゼロ整数でなければなりません
オプション 1
gap_policy データにギャップがある場合に何が起こるべきかを決定します。 オプション insert_zeros
format 出力値のための DecimalFormat パターン。指定された場合、フォーマットされた値は集約の
value_as_string プロパティに返されます
オプション null

serial_diff 集約は histogram または date_histogram 集約の内部に埋め込む必要があります:

Python

  1. resp = client.search(
  2. size=0,
  3. aggs={
  4. "my_date_histo": {
  5. "date_histogram": {
  6. "field": "timestamp",
  7. "calendar_interval": "day"
  8. },
  9. "aggs": {
  10. "the_sum": {
  11. "sum": {
  12. "field": "lemmings"
  13. }
  14. },
  15. "thirtieth_difference": {
  16. "serial_diff": {
  17. "buckets_path": "the_sum",
  18. "lag": 30
  19. }
  20. }
  21. }
  22. }
  23. },
  24. )
  25. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. size: 0,
  4. aggregations: {
  5. my_date_histo: {
  6. date_histogram: {
  7. field: 'timestamp',
  8. calendar_interval: 'day'
  9. },
  10. aggregations: {
  11. the_sum: {
  12. sum: {
  13. field: 'lemmings'
  14. }
  15. },
  16. thirtieth_difference: {
  17. serial_diff: {
  18. buckets_path: 'the_sum',
  19. lag: 30
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
  26. )
  27. puts response

Js

  1. const response = await client.search({
  2. size: 0,
  3. aggs: {
  4. my_date_histo: {
  5. date_histogram: {
  6. field: "timestamp",
  7. calendar_interval: "day",
  8. },
  9. aggs: {
  10. the_sum: {
  11. sum: {
  12. field: "lemmings",
  13. },
  14. },
  15. thirtieth_difference: {
  16. serial_diff: {
  17. buckets_path: "the_sum",
  18. lag: 30,
  19. },
  20. },
  21. },
  22. },
  23. },
  24. });
  25. console.log(response);

コンソール

  1. POST /_search
  2. {
  3. "size": 0,
  4. "aggs": {
  5. "my_date_histo": {
  6. "date_histogram": {
  7. "field": "timestamp",
  8. "calendar_interval": "day"
  9. },
  10. "aggs": {
  11. "the_sum": {
  12. "sum": {
  13. "field": "lemmings"
  14. }
  15. },
  16. "thirtieth_difference": {
  17. "serial_diff": {
  18. "buckets_path": "the_sum",
  19. "lag" : 30
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
“timestamp” フィールドに基づいて、1日間隔で “my_date_histo” という名前の date_histogram が構築されます
フィールドの合計を計算するために sum メトリックが使用されます。これは任意のメトリック(合計、最小、最大など)である可能性があります
最後に、”the_sum” メトリックを入力として使用する serial_diff 集約を指定します。

系列差分は、最初にフィールドに対して histogram または date_histogram を指定することによって構築されます。その後、オプションで、ヒストグラム内に sum のような通常のメトリックを追加できます。最後に、serial_diff がヒストグラム内に埋め込まれます。buckets_path パラメータは、ヒストグラム内の兄弟メトリックの1つを指すために使用されます(buckets_path 構文の説明については buckets_path 構文 を参照)。