我建立了一個非常簡單的模型,只有一個時間序列和一個始終為 1 的資料欄位來查找例外。
CREATE OR REPLACE MODEL `mytest.dummy`
OPTIONS(
model_type='arima_plus',
TIME_SERIES_DATA_COL='cnt',
TIME_SERIES_TIMESTAMP_COL='ts',
DATA_FREQUENCY='HOURLY',
DECOMPOSE_TIME_SERIES=TRUE
)
AS
select ts, 1 cnt
from UNNEST(GENERATE_TIMESTAMP_ARRAY('2022-05-01', '2022-05-02', INTERVAL 1 HOUR)) as ts;
除非我使用自定義select查詢來查找例外,否則模型作業正常。即使查詢與用于創建模型的查詢完全相同。
SELECT *
FROM ML.DETECT_ANOMALIES(
MODEL `mytest.dummy`,
STRUCT (0.9 AS anomaly_prob_threshold),
(select ts, 1 cnt
from UNNEST(GENERATE_TIMESTAMP_ARRAY('2022-05-01', '2022-05-02', INTERVAL 1 HOUR)) as ts)
)
結果
| 排 | ts | cnt | is_anomaly | 下限 | 上限 | 例外概率 |
|---|---|---|---|---|---|---|
| 1 | 2022-05-01 00:00:00 UTC | 1.0 | 空值 | 空值 | 空值 | 空值 |
| 2 | 2022-05-01 01:00:00 UTC | 1.0 | 空值 | 空值 | 空值 | 空值 |
| 3 | …… |
有誰知道我需要做什么才能獲得預期的結果is_anomaly = false。
uj5u.com熱心網友回復:
在仔細查看檔案后,我發現例外檢測僅適用于訓練范圍之外 - 至少對于新查詢并且僅在盡可能多的HORIZON情況下(在撰寫本文時默認值為 1.000)。
歷史資料也可以分類,但只有在沒有查詢且引數DECOMPOSE_TIME_SERIES設定為 時才可分類true。
上面的示例如下所示:
CREATE OR REPLACE MODEL `mytest.dummy`
OPTIONS(
model_type='arima_plus',
TIME_SERIES_DATA_COL='cnt',
TIME_SERIES_TIMESTAMP_COL='ts'
)
AS
select ts, 1 cnt
from UNNEST(GENERATE_TIMESTAMP_ARRAY('2022-05-01', '2022-05-02', INTERVAL 1 HOUR)) as ts;
接下來幾天的查詢
SELECT *
FROM ML.DETECT_ANOMALIES(
MODEL `mytest.dummy`,
STRUCT (0.9 AS anomaly_prob_threshold),
(select ts, 1 cnt
from UNNEST(GENERATE_TIMESTAMP_ARRAY('2022-05-03', '2022-05-04', INTERVAL 1 HOUR)) as ts)
)
結果
| 排 | ts | cnt | is_anomaly | 下限 | 上限 | 例外概率 |
|---|---|---|---|---|---|---|
| 1 | 2022-05-03 00:00:00 UTC | 1.0 | 錯誤的 | 1.0 | 1.0 | 0.0 |
| 2 | 2022-05-04 01:00:00 UTC | 1.0 | 錯誤的 | 1.0 | 1.0 | 0.0 |
| 3 | …… |
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/479924.html
上一篇:獲取集群數量(3D)
