series_periods_detect()

時系列に存在する最も重要な期間を検索します。

構文

series_periods_detect(シリーズ,, min_period, max_periodnum_periods)

構文規則について詳しく知る。

パラメーター

名前 必須 説明
シリーズ dynamic ✔️ 数値の配列。通常は、 make-series 演算子または make_list 演算子の結果の出力です。
min_period real ✔️ 検索対象の最小期間。
max_period real ✔️ 検索する最大期間。
num_periods long ✔️ 必要な期間の最大数。 この数値は、出力の動的配列の長さになります。

重要

  • このアルゴリズムでは、少なくとも 4 つのポイントと、系列の長さの最大で半分とを含む期間を検出できます。
  • min_periodを少し下に設定し、時系列で見つける期間を少し上にmax_periodします。 たとえば、1 時間ごとに集計された信号があって、日単位と週単位の両方の期間 (それぞれ、24 時間と 168 時間) を探す場合、min_period=0.8*24, max_period=1.2*168 を設定し、これらの期間の前後に 20% のマージンを残すことができます。
  • 入力時系列は規則的でなければなりません。 つまり、定数ビンに集約されるということです。このことは、make-series を使用して作成された場合は、常に当てはまります。 そうでない場合、出力は意味のないものになります。

戻り値

関数は、次の 2 つの列を含むテーブルを出力します。

  • periods: 検出された期間をビン サイズの単位で、スコア順に並べた動的配列。
  • scores: 0 から 1 までの値を含む動的配列。 各配列では、period 配列のそれぞれの位置にある期間の重要度を測定します。

次のクエリでは、1 日に 2 回集計される、アプリケーションのトラフィックの 1 か月のスナップショットを埋め込みます。 ビンのサイズは 12 時間です。

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| render linechart

系列期間。

この系列に対して series_periods_detect() を実行すると、週単位の期間 (14 ポイント分の長さ) になります。

print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y  
| project series_periods_detect(y, 0.0, 50.0, 2)

出力

series_periods_detect_y_periods series_periods_detect_y_periods_scores
[14.0, 0.0] [0.84, 0.0]

Note

サンプリングが粗すぎるため (12 時間のビン サイズ)、グラフにも表示される日単位の期間は見つかりませんでした。したがって、2 ビンの日単位の期間は、アルゴリズムで必要な最小期間サイズの 4 ポイントを下回っています。