時系列予測における現実世界のデータの取り扱い

現実世界の時系列データは、時間ステップが欠落していたり、重複していたり、揃っていなかったりするなど、不完全な場合がよくあります。予測および異常検出 ML 関数には、実際のデータを使用して有用な予測を行うモデルをトレーニングするのに役立つ以下の前処理機能が含まれています。

  • イベント頻度を指定して、モデルが自動的に推測する頻度を上書きすることができます。

  • モデルは、欠落しているタイムステップでデータを推測し、タイムステップ内で複数の値を集計できます。各機能または機能の種類ごとに集計方法を指定することも、 ML 関数に自動的に集計を実行させることもできます。

これらの機能により、トレーニングデータに一般的な一貫性の問題がある場合でも、有用なモデルをトレーニングできます。一般的に、データの一貫性が高いほど予測モデルの精度は高くなりますが、このような調整の数が比較的少ない場合、モデルの精度に顕著な影響は及ぼしません。

イベント頻度の指定

モデルトレーニングでは、ヒューリスティックを活用してトレーニングデータ内の時間ステップの頻度を推測しますが、まれに間違った頻度が選択されることがあります。このリスクを回避するため、または誤った推論を修正するために、 CONFIG_OBJECT パラメータ frequency を使用してトレーニングを開始するときに、オプションで必要な頻度を指定できます。このパラメータは、 '1 day' または '2 weeks' に似た形式で期間を指定します。

  • 間隔の指定は文字列のため、シングルクォーテーションで囲む必要があります。

  • サポートされるインターバルは、秒、分、時間、日、週、月、四半期、年です。

  • 完全なインターバル名を使用します。複数形も許容されます(「Second」または「seconds」を使用、「sec」は不可)。

以下の例は、1日の頻度を使用して予測モデルをトレーニングする方法を示しています。

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {'frequency': '1 day'}
);
Copy

イベント頻度を指定しない場合、トレーニングプロセスでは最も近いイベント頻度が推測されます。

欠落している時間ステップの値を入力する

目標値を持たないタイムスタンプでは以下が使用されます。

欠落している特徴値は埋められるのではなく、 NULL 値に置き換えられます。モデルトレーニングではこれらは無視されます。

時間ステップで複数の値を処理する

時間ステップ内に複数のイベントがある場合、前処理によってさまざまな方法でそれらの値を集計できます。たとえば、イベントの頻度が1時間ごとである場合、1時間ごとのリズム外で発生する値を平均して、最も近い標準的な1時間ごとのタイムスタンプの値を生成できます。

以下の表は、使用可能な集約動作をまとめたものです。

値の種類

利用可能な動作

デフォルトの動作

数値

  • MEAN: 平均値

  • MEDIAN: 中間値

  • MODE: 最頻値

  • MIN: 最低値

  • MAX: 最高値

  • SUM: 値の合計

  • FIRST: 最も古い値

  • LAST: 最も新しい値

MEAN

カテゴリ(文字列またはブール値)

  • MODE: 最頻値

  • FIRST: 最も古い値

  • LAST: 最も新しい値

MODE

Tip

販売個数などのカウントデータには SUM メソッドを使用します。MEAN は他のほとんどの数値に適しています。

すべての動作は NULL 値を無視し、補間または集計される期間全体に適用されます。たとえば、1時間ごとの値の SUM は、標準のタイムスタンプを中心とした1時間内の値の合計です。

列のデフォルトの動作をオーバーライドするには、次の2つの方法があります。

  • 値の種類(目標、数値、カテゴリ)別

  • 正確な列名を使用

両方の方法で動作をオーバーライドする場合、列名のオーバーライドが優先されます。

値の種類でオーバーライド

関数の CONFIG_OBJECT パラメータで次のオプションを設定して、特定のタイプの値(カテゴリ、数値、目標)をオーバーライドします。動作は 以前に定義された のとおりです。

オプション

可能な値

aggregation_categorical

MODE, FIRST, LAST

aggregation_numeric

MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST

aggregation_target

MEAN, MEDIAN, MODE, MIN, MAX, SUM, FIRST, LAST

注釈

aggregation_target が指定されていない場合、目標値の集計では、 aggregate_numeric で指定された動作が使用されます(存在する場合)。それ以外の場合は、デフォルトの MEAN が使用されます。

以下の例では、カテゴリおよび数値の特徴量の集計動作を設定する方法を示しています。

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {
    'frequency': '1 day',
    'aggregation_categorical': 'MODE',
    'aggregation_numeric': 'MEDIAN'}
);
Copy

Tip

デフォルトを使用している場合でも、これらの値をすべて指定することを検討してください。そうすれば、ステートメントが何をしているのか理解するためにデフォルトの動作を知る必要がなくなり、後で動作を変更する場合でも、パラメータ名を調べる必要がなくなります。

列名によるオーバーライド

CONFIG_OBJECT の aggregation_column オプションは、動作を列名にマッピングするオブジェクトです。これらの動作は、上記のパラメータを使用して指定された動作をオーバーライドします。

注釈

目標値の集計動作は列名では指定できません。代わりに aggregation_target オプションを使用してください。

提案された変更 たとえば、以下の SQL ステートメントは、 aggregation_column オプションを使用して2つの異なる列の集計動作を指定します。

CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  CONFIG_OBJECT => {
    'frequency': '1 day',
    'aggregation_target': 'MEDIAN',
    'aggregation_column': {
        'temperature': 'MEDIAN',
        'employee_id': 'FIRST'
    }
  }
);
Copy