時系列分析関数は、インターネットサービスシステムまたはビジネスオペレーションで生成されるメトリックを処理するために使用されます。 メトリックを使用して、将来の傾向を予測し、運用中の異常を特定できます。 Simple Log Serviceは、時系列分析機能を提供します。 このトピックでは、時系列分析関数の構文について説明します。 このトピックでは、関数の使用方法の例。
背景情報
時系列解析関数で使用するサンプルログのフィールドのインデックスを次の図に示します。 詳細については、「インデックスの作成」をご参照ください。
次のコードは、サンプルログを示しています。
{"metric_id":1,"metric_value":90.0,"time_period":"2024-01-01 00:00:00"} {"metric_id":1,"metric_value":92.0,"time_period":"2024-01-01 00:01:00"} {"metric_id":1,"metric_value":93.0,"time_period":"2024-01-01 00:02:00"} {"metric_id":2,"metric_value":85.0,"time_period":"2024-01-01 00:00:00"} {"metric_id":2,"metric_value":87.0,"time_period":"2024-01-01 00:01:00"} {"metric_id":2,"metric_value":89.0,"time_period":"2024-01-01 00:02:00"} {"metric_id":3,"metric_value":96.0,"time_period":"2024-01-01 00:00:00"} {"metric_id":3,"metric_value":97.0,"time_period":"2024-01-01 00:01:00"} {"metric_id":3,"metric_value":98.0,"time_period":"2024-01-01 00:02:00"}
関数
関数 | 構文 | 説明 | 戻り値のデータ型 |
ts_forecast(array(timestamp) time_periods、array(double) metric_values、timestamp data_begin_time、timestamp data_end_time、timestamp prediction_end_time、varchar time_unit、varcharオプション) | 指定した時系列に基づいて、特定の時間範囲での将来的なメトリックの変化を予測し、結果をJSON形式で返します。 | varchar | |
ts_extract_features(array(double) period_unix_time_array、array(double) metric_value_array) | 指定した時系列の特徴を抽出します。 特徴を使用して、機械モデルを識別することができる。 | 配列 (ダブル) | |
ts_extract_features_in_json(array(double) period_unix_time_array、array(double) metric_value_array) | varchar | ||
| 不足している時点でデータを入力します。 | array(array(double)) | |
ts_analyze_cycles(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、end_unixtime、varchar time_unit、varchar fill_option) | 指定した時系列のおおよそのサイクルを分析します。 | varchar |
ts_ 予測関数
ts_forecast関数は、指定した時系列に基づいて特定の時間範囲での将来的なメトリックの変化を予測し、結果をJSON形式で返します。
varchar ts_forecast(array(varchar) time_periods、array(double) metric_values、varchar data_begin_time、varchar data_end_time、timestamp prediction_end_time、varchar time_unit、varcharオプション)
パラメーター | 説明 |
| 時系列内の時間値の配列。 サポートされているパラメーターのデータ型:
|
| 時系列のメトリック値の配列。 この関数は、ゼロ以外のメトリック値を持つデータポイントに焦点を当てます。 不足しているデータを埋めるには、時間範囲を指定する必要があります。 |
| 時系列の時間範囲の開始時刻。 サポートされているパラメーターのデータ型:
|
| 時系列の時間範囲の終了時刻。 サポートされているパラメーターのデータ型:
説明 時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 |
| 予測の終了時間。 終了時間は含まれません。 サポートされているパラメーターのデータ型:
|
| 時系列の時間間隔。 例: |
| データ入力方法と履歴データをエクスポートするかどうかの設定。 このパラメーターはオプションです。
|
例
クエリ文
* | select metric_id, ts_forecast( array_agg(time_period), -- time_period array array_agg(metric_value), -- metric_value array '2024-01-01 00:00:00', -- sample start time (inclusive) '2024-01-01 00:05:00', -- sample end time (exclusive) '2024-01-01 01:00:00', -- prediction end time (exclusive) '1 miute', -- time unit 'avg' ) as forecast_outcome from log where time_period >= '2024-01-01 00:00:00' and time_period < '2024-01-01 00:06:00' group by metric_id
によるグループ
クエリおよび分析の結果
{ "predictions":[ { "timePeriod":1704067200, "prediction":59.2251832913215, "actualValue":"NaN", "upperBoundBy3StdDev":84.66650365159649, "lowerBoundBy3StdDev":33.78386293104651, "isForecast":true }, { "timePeriod":1704067260, "prediction":57.62225491132578, "actualValue":"NaN", "upperBoundBy3StdDev":83.06357527160077, "lowerBoundBy3StdDev":32.18093455105079, "isForecast":true }, ... ], "isHistoryIncluded":false, "errorSummary":{ "meanAbsError":6.359932652686714, "meanAbsPercentageError":0.08384313053350512, "rootMeanSquareError":8.480440120091664, "standardDeviation":8.480440120091664, "meanError":-0.31236100941915534, "sampleSize":10080, "targetMean":97.94062488445213, "targetStdDev":11.186867641715377, "rsquare":0.92532833455449703, "correlation":0.961939880946048 } }
クエリおよび分析結果のパラメーター
パラメーター
説明
予測
予測結果。 値は、複数の構造体で構成される配列です。 各構造体は、特定の時点での予測結果を示します。
data_end_time
およびprediction_end_time
パラメーターは、予測の時間範囲を指定します。 optionsパラメーターにoutputhist=true
を指定した場合、返される配列には履歴データが含まれます。 この場合、出力データの時間範囲は[data_begin_time, prediction_end_time)
となります。次のリストは、各構造体のパラメーターを示しています。
timePeriod
: 予測の時点。prediction
: メトリックの予測値。actualValue
: メトリックの実際の値。 [data_end_time, prediction_end_time) の時間範囲では、実際の値は時間範囲内のメトリックに対して生成されないため、actualValueパラメーターの値は常にNaNです。 optionsパラメーターにoutputhist=true
を指定した場合、predictions
パラメーターに返される配列には、[data_begin_time, data_end_time) の時間範囲内の履歴データが含まれます。 この場合、actualValue
パラメーターの値は、履歴データのメトリックの実際の値です。upperBoundBy3StdDev
およびlowerBoundBy3StdDev
: 予測誤差の3つの標準偏差内にある予測間隔の上限および下限。 予測のためのトレーニングは、予測パラメータの値を中心とする。 ほとんどの場合、3標準偏差区間は99% 信頼区間を表す。 将来収集される実際の値は、予測間隔内に入る確率が99% 。 予測パラメーターとerrorSummary.standardDeviationパラメーターの値に基づいて、カスタム信頼区間を計算することもできます。 たとえば、2つの標準偏差間隔を使用できます。 しかし、間隔が狭い場合、信頼度は低下する。 2標準偏差区間は、95% 信頼区間のみを表す。isForecast
: データポイントの時刻が未来的か履歴的かを指定します。 この関数は、時間をdata_end_time
パラメーターの値と比較して、時間が未来的か履歴的かを判断します。 時間がdata_end_time
パラメーターの値より小さい場合、関数はfalseを返します。これは、時間が履歴であることを示します。 それ以外の場合、関数はtrueを返します。これは、時刻が未来的であることを示します。
isHistoryIncluded
predictions
パラメーターの値に履歴データが含まれるかどうかを指定します。 有効な値:true
false
errorSummary
履歴データに基づいて予測モデルがテストされたときに収集される予測エラー統計の概要。 予測モデルは、履歴データに基づいてテストされます。 メトリック予測では、予測値と実際の値の違いにより、予測エラーが発生します。 履歴データの予測を実行し、関連する統計を収集することで、予測の全体的な精度を評価できます。
meanAbsError
: 予測誤差の平均絶対誤差 (MAE) 。meanAbsPercentageError
: 予測エラーの平均絶対パーセンテージエラー (MAPE) 。rootMeanSquareError
: 予測誤差の平均二乗誤差 (MSE) 。standardDeviation
: 予測誤差の標準偏差。 値は、データポイントが予測の平均からどれだけ逸脱する傾向があるかを示します。meanError
: 予測エラーの平均。sampleSize
: 履歴データサンプルの数。targetMean
: 過去のデータサンプルの平均。targetStdDev
: 過去のデータサンプルの標準偏差。rsquare
: Rの2乗値。 値は、履歴データに基づいてテストされる回帰モデルの予測精度を測定するために使用されるメトリックです。 値は(0,1)
の範囲内になければなりません。 値が1に近いほど、予測精度が高いことを示す。correlation
:rsquare
パラメーターの値の平方根。
ts_extract_features_in_json関数
ts_extract_featuresまたはts_extract_features_in_json関数は、指定した時系列の特徴を抽出します。 特徴を使用して、機械モデルを識別することができる。
array(double) ts_extract_features(array(double) period_unix_time_array, array(double) metric_value_array)
または
varchar ts_extract_features_in_json(array(double) period_unix_time_array, array(double) metric_value_array)
パラメーター | 説明 |
| 時系列内のUNIX時間値の配列。 |
| 時系列のメトリック値の配列。 説明
|
例
例 1
クエリ文
* | select metric_id, ts_extract_features( array_agg(to_unixtime(time_period)), array_agg(metric_value)) as feature_values group by metric_id
によるグループ
クエリおよび分析の結果
feature_values
パラメーターの値は、生成されたフィーチャ値の配列です。metric_id
feature_values
1
[0.123456, ...]
例 2
クエリ文
* | select metric_id, ts_extract_features_in_json( array_agg(to_unixtime(time_period)), array_agg(metric_value)) as feature_values group by metric_id
によるグループ
クエリおよび分析の結果
names
: 特徴ベクトル名の配列。values
: 特徴ベクトル値の配列。
metric_id
feature_values
1
{"values":[1.0、0.0、0.0、0.0、645.0、41685.0、1.0、1.0、0.0、64.5、64.5、10.0、2.8722813232690143] 、"names":["value__variance_larger_than_standard_deviation" 、"value__has_duplicate_max" 、"value_has_duplicate_min" 、"_energy"_values、"_sum"_"value__mean_abs_change" 、"value__mean_change"]
ts_fill_missingまたはts_impute関数
ts_fill_missingまたはts_impute関数は、欠落した時点でデータを埋めます。
array(array(double)) ts_fill_missing(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、double end_unixtime、varchar time_unit、varchar fill_option)
または
array(array(double)) ts_impute(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、double end_unixtime、varchar time_unit、varchar fill_option)
または
array(array(double)) ts_fill_nan(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、double end_unixtime、varchar time_unit、varchar fill_option)
パラメーター | 説明 |
| 時系列内の時間値の配列。 この配列には、double型のUNIX時間値が含まれます。 |
| 時系列のメトリック値の配列。 値はdouble型です。 |
| 時系列の時間範囲の開始時刻。 パラメーターには、double型のUNIX時間値を指定できます。 |
| 時系列の時間範囲の終了時刻。 説明 時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 |
| 時系列の時間間隔。 例: |
fill_option | データ入力方法と履歴データをエクスポートするかどうかの設定。 このパラメーターはオプションです。
|
例
クエリ文
* | select metric_id, ts_fill_missing( array_agg(to_unixtime(time_period)), -- time periods array_agg(metric_value), -- metric values to_unixtime(timestamp '2024-01-01 00:00:00'), -- series begin time to_unixtime(timestamp '2024-01-01 00:05:00'), -- series end time '1 minute', -- series time unit 'value=0' -- fill the missing values with 0 ) as imputed_time_series from log where time_period >= '2024-01-01 00:00:00' and time_period < '2024-01-01 00:05:00' group by metric_id
によるグループ
クエリおよび分析の結果
metric_id
imputed_time_series
1
[[1704038400.0、1704038460.0、1704038520.0、1704038580.0、1704038640.0] 、[60.0、61.0、62.0、63.0、64.0]]
2
[[1704038400.0、1704038460.0、1704038520.0、1704038580.0、1704038640.0] 、[70.0、71.0、72.0、73.0、74.0]]
3
[[1704038400.0、1704038460.0、1704038520.0、1704038580.0、1704038640.0] 、[80.0、81.0、82.0、83.0、84.0]]
ts_analyze_cycles関数
ts_analyze_cycles関数は、指定した時系列のおおよそのサイクルを分析します。
varchar ts_analyze_cycles(array(double) unixtime_periods, array(double) metric_values, double begin_unixtime, end_unixtime, varchar time_unit, varchar fill_option)
パラメーター | 説明 |
| 時系列内の時間値の配列。 この配列には、double型のUNIX時間値が含まれます。 |
| 時系列のメトリック値の配列。 値はdouble型です。 |
| 時系列の時間範囲の開始時刻。 パラメーターには、double型のUNIX時間値を指定できます。 |
| 時系列の時間範囲の終了時刻。 説明 時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 |
| 時系列の時間間隔。 例: |
fill_option | データ入力方法と履歴データをエクスポートするかどうかの設定。
|
例
クエリ文
* | select metric_id, ts_analyze_cycles( array_agg(to_unixtime(time_period)), -- time periods array_agg(metric_value), -- metric values to_unixtime(timestamp '2024-01-01 00:00:00'), -- series begin time to_unixtime(timestamp '2024-01-01 00:05:00'), -- series end time '1 minute', -- series time unit 'value=0' -- fill the missing values with 0 ) as imputed_time_series from log where time_period >= '2024-01-01 00:00:00' and time_period < '2024-01-01 00:05:00' group by metric_id
によるグループ
クエリおよび分析の結果
metric_id
cycle_analysis
1
{"cycleSize":66、"cycleCorrelation":0.9859745299608902、"frequencyWeight":2.8240516697103124E7、"topCycles":[{"cycleSize":66、"cycleCorrelation":0.9859745299608902、"9538762.646349236:" cycleSize "Corcleency" 、" サイズ: "0.9628902341901314:" Corcleency" 。1.5834018306832194E7 },{ "cycleSize":33,"cycleCorrelation":0.9518752073734051,"frequency encyWeight":1.1270983504364485E7}]}
次の表に、クエリおよび分析結果のパラメーターを示します。
パラメーター
説明
cycleSize
最もおおよそのサイクルの長さ。
cycleCorrelation
最も近似的なサイクルの相関。
frequencyWeight
時系列のパワースペクトル解析後のサイクルのスペクトル密度を行う。
topCycles
時系列のマルチサイクル解析に関与するサイクルのデータ。 最初の5サイクルまで戻すことができます。 各サイクルは、
cycleSize
、cycleCorrelation
、およびfrequency
フィールドを含む。