4.6 KiB
4.6 KiB
title | description |
---|---|
预测算法 | 预测算法 |
时序数据预测处理以持续一个时间段的时序数据作为输入,预测接下来一个连续时间区间内时间序列数据趋势。用户可以指定输出的(预测)时间序列数据点的数量,因此其输出的结果行数不确定。为此,TDengine 使用新 SQL 函数 FORECAST
提供时序数据预测服务。基础数据(用于预测的历史时间序列数据)是该函数的输入,预测结果是该函数的输出。用户可以通过 FORECAST
函数调用 Anode 提供的预测算法提供的服务。
在后续章节中,使用时序数据表foo
作为示例,介绍预测和异常检测算法的使用方式,foo
表的模式如下:
列名称 | 类型 | 说明 |
---|---|---|
ts | timestamp | 主时间戳列 |
i32 | int32 | 4字节整数,设备测量值 metric |
taos> select * from foo;
ts | k |
========================================
2020-01-01 00:00:12.681 | 13 |
2020-01-01 00:00:13.727 | 14 |
2020-01-01 00:00:14.378 | 8 |
2020-01-01 00:00:15.774 | 10 |
2020-01-01 00:00:16.170 | 16 |
2020-01-01 00:00:17.558 | 26 |
2020-01-01 00:00:18.938 | 32 |
2020-01-01 00:00:19.308 | 27 |
语法
FORECAST(column_expr, option_expr)
option_expr: {"
algo=expr1
[,wncheck=1|0]
[,conf=conf_val]
[,every=every_val]
[,rows=rows_val]
[,start=start_ts_val]
[,expr2]
"}
column_expr
:预测的时序数据列。与异常检测相同,只支持数值类型列输入。options
:异常检测函数的参数,使用规则与 anomaly_window 相同。预测支持conf
,every
,rows
,start
,rows
几个控制参数,其含义如下:
参数说明
参数 | 含义 | 默认值 |
---|---|---|
algo | 预测分析使用的算法 | holtwinters |
wncheck | 白噪声(white noise data)检查 | 默认值为 1,0 表示不进行检查 |
conf | 预测数据的置信区间范围 ,取值范围 [0, 100] | 95 |
every | 预测数据的采样间隔 | 输入数据的采样间隔 |
start | 预测结果的开始时间戳 | 输入数据最后一个时间戳加上一个采样间隔时间区间 |
rows | 预测结果的记录数 | 10 |
- 预测查询结果新增三个伪列,具体如下:
_FROWTS
:预测结果的时间戳、_FLOW
:置信区间下界、_FHIGH
:置信区间上界, 对于没有置信区间的预测算法,其置信区间同预测结果 - 更改参数
START
:返回预测结果的起始时间,改变起始时间不会影响返回的预测数值,只影响起始时间。 EVERY
:可以与输入数据的采样频率不同。采样频率只能低于或等于输入数据采样频率,不能高于输入数据的采样频率。- 对于某些不需要计算置信区间的算法,即使指定了置信区间,返回的结果中其上下界退化成为一个点。
示例
--- 使用 arima 算法进行预测,预测结果是 10 条记录(默认值),数据进行白噪声检查,默认置信区间 95%.
SELECT _flow, _fhigh, _frowts, FORECAST(i32, "algo=arima")
FROM foo;
--- 使用 arima 算法进行预测,输入数据的是周期数据,每 10 个采样点是一个周期,返回置信区间是95%的上下边界,同时忽略白噪声检查
SELECT _flow, _fhigh, _frowts, FORECAST(i32, "algo=arima,alpha=95,period=10,wncheck=0")
FROM foo;
taos> select _flow, _fhigh, _frowts, forecast(i32) from foo;
_flow | _fhigh | _frowts | forecast(i32) |
========================================================================================
10.5286684 | 41.8038254 | 2020-01-01 00:01:35.000 | 26 |
-21.9861946 | 83.3938904 | 2020-01-01 00:01:36.000 | 30 |
-78.5686035 | 144.6729126 | 2020-01-01 00:01:37.000 | 33 |
-154.9797363 | 230.3057709 | 2020-01-01 00:01:38.000 | 37 |
-253.9852905 | 337.6083984 | 2020-01-01 00:01:39.000 | 41 |
-375.7857971 | 466.4594727 | 2020-01-01 00:01:40.000 | 45 |
-514.8043823 | 622.4426270 | 2020-01-01 00:01:41.000 | 53 |
-680.6343994 | 796.2861328 | 2020-01-01 00:01:42.000 | 57 |
-868.4956665 | 992.8603516 | 2020-01-01 00:01:43.000 | 62 |
-1076.1566162 | 1214.4498291 | 2020-01-01 00:01:44.000 | 69 |