预测与异常检测函数

预测与异常检测函数通过预测时序曲线、寻找预测曲线和实际曲线之间误差的Ksigma与分位数等特性进行异常检测。

函数列表

函数

说明

ts_predicate_simple

利用默认参数对时序数据进行建模,并进行简单的时序预测和异常点的检测。

ts_predicate_ar

使用自回归模型对时序数据进行建模,并进行简单的时序预测和异常点的检测。

ts_predicate_arma

使用移动自回归模型对时序数据进行建模,并进行简单的时序预测和异常点检测。

ts_predicate_arima

使用带有差分的移动自回归模型对时序数据进行建模,并进行简单的时序预测和异常点检测。

ts_regression_predict

针对具有周期性、趋势性的单时序序列,进行准确的预测。

使用场景:计量数据的预测、网络流量的预测、财务数据的预测、以及具有一定规律的不同业务数据的预测。

ts_anomaly_filter

针对批量曲线进行时序异常检测后,可以按照用户定义的异常模式来过滤异常检测的结果,帮助用户快速找出异常的实例曲线。

ts_predicate_simple

函数格式:

select ts_predicate_simple(x, y, nPred, isSmooth) 

参数说明如下:

参数

说明

取值

x

时间列,从小到大排列。

格式为Unixtime时间戳,单位为秒。

y

数值列,对应某时刻的数据。

-

nPred

预测未来的点的数量。

long类型,取值大于等于1。

isSmooth

是否需要对原始数据做滤波操作。

bool类型,默认为true表示对原始数据做滤波操作。

示例:

  • 查询分析

    * | select ts_predicate_simple(stamp, value, 6) from (select ("__time__" - ("__time__" % 60)) as stamp, avg(v) as value from log GROUP BY stamp order by stamp)
  • 输出结果输出结果

显示项如下:

显示项

说明

横轴

unixtime

数据的Unixtime时间戳,单位为秒。

纵轴

src

原始数据。

predict

预测的数据。

upper

预测的上界。当前置信度为0.85,不可修改。

lower

预测的下界。当前置信度为0.85,不可修改。

anomaly_prob

该点为异常点的概率,范围为0~1。

ts_predicate_ar

函数格式:

select ts_predicate_ar(x, y, p, nPred, isSmooth) 

参数说明如下:

参数

说明

取值

x

时间列,从小到大排列。

格式为Unixtime时间戳,单位为秒。

y

数值列,对应某时刻的数据。

-

p

自回归模型的阶数。

long类型,取值范围为2~8。

nPred

预测未来的点的数量。

long类型,取值范围为1~5*p

isSmooth

是否需要对原始数据做滤波操作。

bool类型,默认为true表示对原始数据做滤波操作。

查询分析示例:

* | select ts_predicate_ar(stamp, value, 3, 4) from (select ("__time__" - ("__time__" % 60)) as stamp, avg(v) as value from log GROUP BY stamp order by stamp)
说明

输出结果与ts_predicate_simple函数相似,具体请参见ts_predicate_simple函数的输出结果。

ts_predicate_arma

函数格式:

select ts_predicate_arma(x, y, p, q, nPred, isSmooth) 

参数说明如下:

参数

说明

取值

x

时间列,从小到大排列。

格式为Unixtime时间戳,单位为秒。

y

数值列,对应某时刻的数据。

-

p

自回归模型的阶数。

long类型,取值范围为2~100。

q

移动平均模型的阶数。

long类型,取值范围为2~8。

nPred

预测未来的点的数量。

long类型,取值范围为1~5*p

isSmooth

是否需要对原始数据做滤波操作。

bool类型,默认为true表示对原始数据做滤波操作。

查询分析示例:

* | select ts_predicate_arma(stamp, value, 3, 2, 4) from (select ("__time__" - ("__time__" % 60)) as stamp, avg(v) as value from log GROUP BY stamp order by stamp) 
说明

输出结果与ts_predicate_simple函数相似,具体请参见ts_predicate_simple函数的输出结果。

ts_predicate_arima

函数格式:

select ts_predicate_arima(x, y, p, d, q, nPred, isSmooth) 

参数说明如下:

参数

说明

取值

x

时间列,从小到大排列。

格式为Unixtime时间戳,单位为秒。

y

数值列,对应某时刻的数据。

-

p

自回归模型的阶数。

long类型,取值范围为2~8。

d

差分模型的阶数。

long类型,取值范围为1~3。

q

移动平均模型的阶数。

long类型,取值范围为2~8。

nPred

预测未来的点的数量。

long类型,取值范围为1~5*p

isSmooth

是否需要对原始数据做滤波操作。

bool类型,默认为true表示对原始数据做滤波操作。

查询分析示例:

* | select ts_predicate_arima(stamp, value, 3, 1, 2, 4) from (select ("__time__" - ("__time__" % 60)) as stamp, avg(v) as value from log GROUP BY stamp order by stamp)
说明

输出结果与ts_predicate_simple函数相似,具体请参见ts_predicate_simple函数的输出结果。

ts_regression_predict

函数格式:

select ts_regression_predict(x, y, nPred, algotype,processType)

参数说明如下:

参数

说明

取值

x

时间列,从小到大排列。

格式为Unixtime时间戳,单位为秒。

y

数值列,对应某时刻的数据。

-

nPred

预测未来的点的数量。

long类型,取值范围为1~500。

algotype

针对的预测的算法类型。

取值包括:

  • origin:使用GBRT(Gradient Boosted Regression Tree)算法进行预测。

  • forest:使用STL序列分解的结果,将分解得到的趋势序列使用GBRT算法进行预测,再将分解出来的序列按照加法模型进行求和后返回。

  • linear:使用STL序列分解的结果,将分解得到趋势序列使用Linear Regression算法进行预测,再将分解出来的序列按照加法模型进行求和后返回。

processType

数据对应的预处理流程。

取值包括:

  • 0:不进行任何额外的数据预处理。

  • 1:对数据去除异常后再进行预测处理。

示例:

  • 查询分析

    * and h : nu2h05202.nu8 and m: NET |  select ts_regression_predict(stamp, value, 200, 'origin') from (select ("__time__" - ("__time__" % 60)) as stamp, avg(v) as value from log group by stamp order by stamp)
  • 输出结果输出结果

显示项如下:

显示项

说明

横轴

unixtime

数据的Unixtime时间戳,单位为秒。

纵轴

src

原始数据。

predict

预测数据。

ts_anomaly_filter

函数格式:

select ts_anomaly_filter(lineName, ts, ds, preds, probs, nWatch, anomalyType)

参数说明如下:

参数

说明

取值

lineName

varchar类型,表示每条曲线的名称。

-

ts

曲线的时间序列,表示当前这条曲线的时间信息。array(double)类型,由小到大排列。

-

ds

曲线的实际值序列,表示当前这条曲线的数值信息。array(double)类型,长度与ts相同。

-

preds

曲线的预测值序列,表示当前这条曲线的预测值。array(double)类型,长度与ts相同。

-

probs

曲线的异常检测序列,表示当前这条曲线的异常检测结果。array(double)类型,长度与ts相同。

-

nWatch

long类型,表示当前曲线中最近观测的实际值的数量,长度必须小于实际的曲线长度。

-

anomalyType

long类型,表示要过滤的异常类型的种类。

取值包括:

  • 0:表示关注全部异常。

  • 1:表示关注上升沿异常。

  • -1:表示下降沿异常。

示例:

  • 查询分析

    * | select res.name, res.ts, res.ds, res.preds, res.probs 
         from ( 
             select ts_anomaly_filter(name, ts, ds, preds, probs, cast(5 as bigint), cast(1 as bigint)) as res 
           from (
             select name, res[1] as ts, res[2] as ds, res[3] as preds, res[4] as uppers, res[5] as lowers, res[6] as probs 
         from (
             select name, array_transpose(ts_predicate_ar(stamp, value, 10)) as res 
             from (
               select name, stamp, value from log where name like '%asg-%') group by name)) );
  • 输出结果

    | name                     | ts                                                   | ds          | preds     | probs       |
    | ------------------------ | ---------------------------------------------------- | ----------- | --------- | ----------- |
    | asg-bp1hylzdi2wx7civ0ivk | [1.5513696E9, 1.5513732E9, 1.5513768E9, 1.5513804E9] | [1,2,3,NaN] | [1,2,3,4] | [0,0,1,NaN] |