適用対象:
Databricks SQL
Important
この機能は ベータ版です。 使用するには、ワークスペース管理者がプレビューページから予測AI機能をオンにする必要があります。 Manage Azure Databricks プレビューを参照してください。
ai_detect_anomalies() は時系列データにおける異常値を識別するテーブル値関数です。 各値の前の履歴を使って期待値と予測区間を推定し、その後異常スコアを割り当てます。
必要条件
- ProまたはServerless SQLウェアハウス。 この機能はクラシックSQLウェアハウスでは利用できません。
- Predictive AI Functionsプレビューでワークスペースを登録してください。 Manage Azure Databricks プレビューを参照してください。
Syntax
ai_detect_anomalies(
observed,
time_col,
value_col
[, group_col]
[, anomaly_threshold]
[, covariate_col]
[, holiday_region]
[, only_last_n]
[, smoothing]
)
引数
-
observedは時系列データを含むテーブル値入力です。 -
time_colobservedの列に記載されたDATEまたはTIMESTAMP列を命名するSTRINGです。 タイムスタンプは各時系列内で一意でなければなりません。 -
value_colは解析する数値列の名前を付けるSTRINGです。 呼び出しごとに1つの値列を分析できます。 -
group_col(オプション)は、別々の時系列を示す命名列STRINGまたはARRAY<STRING>の列です。 各グループは独立して分析されます。 省略すると、入力全体は1つの時間系列として扱われます。 -
anomaly_threshold(オプション)は0から1の間のDOUBLEで、値が異常としてフラグを立てられるタイミングを制御します。 行の異常は、そのanomaly_scoreがこの閾値より大きい場合です。 既定値は0.95です。 値が低いほど異常が増え、値が高いほど異常が少ないのが示されます。 -
covariate_col(オプション)は、価格、プロモーション、天候などの時系列を説明するのに役立つ数値や文字列の列名を付ける、番号や文字列の列名を付けるSTRINGまたはARRAY<STRING>です。 -
holiday_region(オプション)は国コードを含む国コードを含むSTRING'US'。 指定された場合、この関数は期待値にホリデーの影響を考慮します。 -
only_last_n(任意)は、返却された行と得点された行を制限しつつ、過去の行は歴史的文脈として保持します。 1から8,192までの整数を指定して各系列の最新の行数のみを解析するか、DATEまたはTIMESTAMPのカットオフを指定してその値以降の行を解析します。 スコア範囲を制限することで、関数が異なる予報ウィンドウで予測を減らせるため、異常スコアが変わる可能性があります。 この議論は省略してシリーズ全体を分析してください。 -
smoothing(任意)は、異常間の短い間隔が同じ異常エピソードに含まれるかどうかを制御します。TRUEすると、フラグ付けされた異常の間に最大3行の隙間が異常として表示されます。 これにより断片的な異常エピソードを減らすことができますが、隙間内の正常値をフラグ付けすることもあります。 平滑化はis_anomalyだけを変えますが、期待値、境界、異常スコアは変わりません。 既定値はTRUEです。
返品
この関数は入力時間、グループ、値の各列を返し、その後に以下の列を返します。
| Column | タイプ | Description |
|---|---|---|
expected |
DOUBLE |
前の履歴に基づく期待値。 |
lower_bound |
DOUBLE |
予測区間の下限です。 |
upper_bound |
DOUBLE |
予測区間の上限。 |
anomaly_score |
DOUBLE |
観測値が予測値とどれだけ大きく異なるかを示す0から1までのスコアです。 |
is_anomaly |
BOOLEAN |
anomaly_thresholdやsmoothingに基づく、その騒動が異常かどうか。 |
各時系列の最初の8行は歴史的背景を提供します。 これらの行では、 expected、 lower_bound、 upper_bound、 anomaly_score が NULL、 is_anomaly が FALSEです。
例示
以下の例は、注入されたスパイクを持つ時系列を生成し、その異常を特定します。
WITH observed AS (
SELECT
date_add(DATE '2026-01-01', CAST(id AS INT)) AS ds,
CASE
WHEN id = 45 THEN 200.0
ELSE 100.0 + 5.0 * sin(id / 3.0)
END AS metric
FROM range(60)
)
SELECT *
FROM ai_detect_anomalies(
TABLE(observed),
time_col => 'ds',
value_col => 'metric'
)
ORDER BY ds
以下の例は各デバイスを独立して分析し、温度と米国の祝日を考慮し、各デバイスシリーズから最新の100行のみを返します。
SELECT *
FROM ai_detect_anomalies(
TABLE(device_metrics),
time_col => 'event_time',
value_col => 'metric',
group_col => 'device_id',
anomaly_threshold => 0.98,
covariate_col => 'temperature',
holiday_region => 'US',
only_last_n => 100,
smoothing => FALSE
)
ORDER BY device_id, event_time
制限事項
ベータ期間中に適用される制限は以下の通りです:
- 各時系列は最大8,192行の入力行を含めます。 より長い系列のクエリは失敗します。
- 各時系列は少なくとも1つの有限の観測値を含む必要があります。
- タイムスタンプは各時系列内で一意でなければなりません。
- 呼び出しごとに1つの値列を分析できます。
- エラーメッセージはPython UDTFエンジンを通じて配信され、Pythonのトレースバック情報を含むことができます。 トレースバックの末尾には実際のエラーメッセージが含まれています。