すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:時系列分析関数

最終更新日:Oct 21, 2024

時系列分析関数は、インターネットサービスシステムまたはビジネスオペレーションで生成されるメトリックを処理するために使用されます。 メトリックを使用して、将来の傾向を予測し、運用中の異常を特定できます。 Simple Log Serviceは、時系列分析機能を提供します。 このトピックでは、時系列分析関数の構文について説明します。 このトピックでは、関数の使用方法の例。

背景情報

  • 時系列解析関数で使用するサンプルログのフィールドのインデックスを次の図に示します。 詳細については、「インデックスの作成」をご参照ください。

    image

  • 次のコードは、サンプルログを示しています。

    {"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関数

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_in_json関数

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

ts_fill_missingまたはts_impute関数

  • ts_fill_missing(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、end_unixtime、varchar time_unit、varchar fill_option)

  • ts_impute(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、end_unixtime、varchar time_unit、varchar fill_option)

  • ts_fill_nan(array(double) unixtime_periods、array(double) metric_values、double begin_unixtime、end_unixtime、varchar time_unit、varchar fill_option)

不足している時点でデータを入力します。

array(array(double))

ts_analyze_cycles関数

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オプション)

パラメーター

説明

time_periods

時系列内の時間値の配列。

サポートされているパラメーターのデータ型:

  • timestampタイプ。

  • varcharタイプ。 例: 2024-01-01 10:00:00

  • ダブルタイプ。 double型のUNIX時刻値を指定する必要があります。

metric_values

時系列のメトリック値の配列。 この関数は、ゼロ以外のメトリック値を持つデータポイントに焦点を当てます。 不足しているデータを埋めるには、時間範囲を指定する必要があります。

data_begin_time

時系列の時間範囲の開始時刻。

サポートされているパラメーターのデータ型:

  • timestampタイプ。

  • varcharタイプ。 例: 2024-01-01 10:00:00

  • ダブルタイプ。 double型のUNIX時刻値を指定する必要があります。

data_end_time

時系列の時間範囲の終了時刻。

サポートされているパラメーターのデータ型:

  • timestampタイプ。

  • varcharタイプ。 例: 2024-01-01 10:00:00

  • ダブルタイプ。 double型のUNIX時刻値を指定する必要があります。

説明

時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 data_begin_timeパラメーターで指定された開始時刻は含まれますが、data_end_timeパラメーターで指定された終了時刻は含まれません。

prediction_end_time

予測の終了時間。 終了時間は含まれません。

サポートされているパラメーターのデータ型:

  1. timestampタイプ。

  2. ダブルタイプ。 double型のUNIX時刻値を指定する必要があります。

time_unit

時系列の時間間隔。 例: 10秒1分1時間1日1週間1ヶ月、および1年

オプション

データ入力方法と履歴データをエクスポートするかどうかの設定。 このパラメーターはオプションです。

  • データ入力方法:

    • value

    • 平均

    • 中央値

    • min

    • max

    • local-interpolation

  • 履歴データをエクスポートするかどうか:

    • true

    • false

  • サンプル設定:

    • fillnan=value:0,outputhist=false: 0を使用して不足しているデータを埋め、履歴データをエクスポートしません。

    • fillnan=mean,outputhist=false: 平均値を使用して不足しているデータを埋め、履歴データはエクスポートしません。

    • fillnan=local-interpolation,outputhist=false: ローカル補間法を使用して不足しているデータを埋め、履歴データはエクスポートしません。

  • クエリ文

    * | 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)

パラメーター

説明

period_unix_time_配列

時系列内のUNIX時間値の配列。

metric_value_配列

時系列のメトリック値の配列。

説明

period_unix_time_arrayパラメーターとmetric_value_arrayパラメーターは、同じ時系列を記述するために使用されます。

例 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)

パラメーター

説明

unixtime_periods

時系列内の時間値の配列。 この配列には、double型のUNIX時間値が含まれます。

metric_values

時系列のメトリック値の配列。 値はdouble型です。

begin_unixtime

時系列の時間範囲の開始時刻。 パラメーターには、double型のUNIX時間値を指定できます。

end_unixtime

時系列の時間範囲の終了時刻。

説明

時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 begin_unixtimeパラメーターで指定された開始時刻は含まれますが、end_unixtimeパラメーターで指定された終了時刻は含まれません。

time_unit

時系列の時間間隔。 例: 10秒1分1時間1日1週間1ヶ月、および1年

fill_option

データ入力方法と履歴データをエクスポートするかどうかの設定。 このパラメーターはオプションです。

  • データ入力方法:

    • value

    • 平均

    • 中央値

    • min

    • max

    • local-interpolation

  • 履歴データをエクスポートするかどうか:

    • true

    • false

  • サンプル設定:

    • fillnan=value:0,outputhist=false: 0を使用して不足しているデータを埋め、履歴データをエクスポートしません。

    • fillnan=mean,outputhist=false: 平均値を使用して不足しているデータを埋め、履歴データはエクスポートしません。

    • fillnan=local-interpolation,outputhist=false: ローカル補間法を使用して不足しているデータを埋め、履歴データはエクスポートしません。

  • クエリ文

    * | 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)

パラメーター

説明

unixtime_periods

時系列内の時間値の配列。 この配列には、double型のUNIX時間値が含まれます。

metric_values

時系列のメトリック値の配列。 値はdouble型です。

begin_unixtime

時系列の時間範囲の開始時刻。 パラメーターには、double型のUNIX時間値を指定できます。

end_unixtime

時系列の時間範囲の終了時刻。

説明

時系列に指定する時間範囲は、左から閉じた、右から開いた間隔です。 begin_unixtimeパラメーターで指定された開始時刻は含まれますが、end_unixtimeパラメーターで指定された終了時刻は含まれません。

time_unit

時系列の時間間隔。 例: 10秒1分1時間1日1週間1ヶ月、および1年

fill_option

データ入力方法と履歴データをエクスポートするかどうかの設定。

  • データ入力方法:

    • value

    • 平均

    • 中央値

    • min

    • max

    • local-interpolation

  • 履歴データをエクスポートするかどうか:

    • true

    • false

  • サンプル設定:

    • fillnan=value:0,outputhist=false: 0を使用して不足しているデータを埋め、履歴データをエクスポートしません。

    • fillnan=mean,outputhist=false: 平均値を使用して不足しているデータを埋め、履歴データはエクスポートしません。

    • fillnan=local-interpolation,outputhist=false: ローカル補間法を使用して不足しているデータを埋め、履歴データはエクスポートしません。

  • クエリ文

    * | 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サイクルまで戻すことができます。 各サイクルは、cycleSizecycleCorrelation、およびfrequencyフィールドを含む。