系列差分集約
系列差分は、時系列の値を異なる時間遅延または期間で自分自身から引く技術です。例えば、データポイント f(x) = f(xt) - f(xt-n) のように、ここで n は使用される期間です。
期間が1の場合、時間の正規化がない導関数に相当します:それは単に1つの点から次の点への変化です。単一の期間は、定数の線形トレンドを除去するのに役立ちます。
単一の期間は、データを定常系列に変換するのにも役立ちます。この例では、ダウ・ジョーンズが約250日間プロットされています。生データは定常ではなく、いくつかの技術で使用するのが難しくなります。
最初の差分を計算することで、データのトレンドを除去します(例:定数の線形トレンドを除去)。データが定常系列になることがわかります(例:最初の差分はゼロの周りにランダムに分布し、パターンや挙動を示さないようです)。この変換は、データセットがランダムウォークに従っていることを明らかにします;値は前の値 +/- ランダムな量です。この洞察により、さらなる分析のためのツールを選択することができます。
図11. ダウ・ジョーンズがプロットされ、最初の差分で定常化された
より大きな期間は、季節的/周期的な挙動を除去するために使用できます。この例では、レミングの集団が正弦波 + 定数の線形トレンド + ランダムノイズで合成生成されました。正弦波の周期は30日です。
最初の差分は定数トレンドを除去し、正弦波だけが残ります。次に、30番目の差分が最初の差分に適用され、周期的な挙動を除去し、他の分析に適した定常系列が残ります。
図12. レミングデータがプロットされ、1stおよび30thの差分で定常化された
構文
serial_diff
集約は、単独でこのように見えます:
Js
{
"serial_diff": {
"buckets_path": "the_sum",
"lag": 7
}
}
パラメータ名 | 説明 | 必須 | デフォルト値 |
---|---|---|---|
buckets_path |
関心のあるメトリックへのパス(詳細については buckets_path 構文 を参照) |
必須 | |
lag |
現在の値から引く履歴バケット。例えば、7の遅延は現在の値から 7バケット前の値を引きます。正の非ゼロ整数でなければなりません |
オプション | 1 |
gap_policy |
データにギャップがある場合に何が起こるべきかを決定します。 | オプション | insert_zeros |
format |
出力値のための DecimalFormat パターン。指定された場合、フォーマットされた値は集約のvalue_as_string プロパティに返されます |
オプション | null |
serial_diff
集約は histogram
または date_histogram
集約の内部に埋め込む必要があります:
Python
resp = client.search(
size=0,
aggs={
"my_date_histo": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
},
"aggs": {
"the_sum": {
"sum": {
"field": "lemmings"
}
},
"thirtieth_difference": {
"serial_diff": {
"buckets_path": "the_sum",
"lag": 30
}
}
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
size: 0,
aggregations: {
my_date_histo: {
date_histogram: {
field: 'timestamp',
calendar_interval: 'day'
},
aggregations: {
the_sum: {
sum: {
field: 'lemmings'
}
},
thirtieth_difference: {
serial_diff: {
buckets_path: 'the_sum',
lag: 30
}
}
}
}
}
}
)
puts response
Js
const response = await client.search({
size: 0,
aggs: {
my_date_histo: {
date_histogram: {
field: "timestamp",
calendar_interval: "day",
},
aggs: {
the_sum: {
sum: {
field: "lemmings",
},
},
thirtieth_difference: {
serial_diff: {
buckets_path: "the_sum",
lag: 30,
},
},
},
},
},
});
console.log(response);
コンソール
POST /_search
{
"size": 0,
"aggs": {
"my_date_histo": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
},
"aggs": {
"the_sum": {
"sum": {
"field": "lemmings"
}
},
"thirtieth_difference": {
"serial_diff": {
"buckets_path": "the_sum",
"lag" : 30
}
}
}
}
}
}
“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
構文 を参照)。