预测函数
本文档主要介绍了预测函数(Predictors)的语法结构、语法说明以及使用示例。
HOLT_WINTERS()
使用Holt-Winters的季节性方法返回N个预测的field value。
HOLT_WINTERS()
可用于:
预测时间什么时候会超过给定的阈值。
将预测值与实际值进行比较,检测数据中的异常。
语法
SELECT HOLT_WINTERS[_WITH-FIT](<function>(<field_key>),<N>,<S>)[INTO_clause] FROM_clause [WHERE_clause] GROUP_BY_clause [ORDER_BY_clause][LIMIT_clause][OFFSET_clause][SLIMIT_clause][SOFFSET_clause]
语法描述
HOLT_WINTERS(function(field_key),N,S)
返回field key对应的N
个季节性调整的预测field value。
N
个预测值出现的时间间隔跟group by time时间间隔相同。如果您的GROUP BY time()
时间间隔是6m
并且N
等于3
,那么您将会得到3个时间间隔为6分钟的预测值。
S
是一个季节性模式参数,并且根据GROUP BY time()
时间间隔限定一个季节性模式的长度。如果您的GROUP BY time()
时间间隔是2m
并且S
等于3
,那么这个季节性模式每六分钟出现一次,也就是每三个数据点。如果您不希望季节性调整您的预测值,请将S
设置为0
或1
。
HOLT_WINTERS_WITH_FIT(function(field_key),N,S)
除了返回field key对应的N
个季节性调整的预测field value,还返回拟合值。
HOLT_WINTERS()
和HOLT_WINTERS_WITH_FIT()
处理以相同的时间间隔出现的数据;嵌套的InfluxQL函数和GROUP BY time()
子句确保Holt-Winters函数能够对常规数据进行操作。
HOLT_WINTERS()
和HOLT_WINTERS_WITH_FIT()
支持数据类型为int64和float64的field value。
示例:预测指定field key的field value
原始数据示例一使用了Chronograf来可视化数据。该示例重点关注NOAA_water_database
数据集的如下数据:
SELECT "water_level" FROM "NOAA_water_database"."autogen"."h2o_feet" WHERE "location"='santa_monica' AND time >='2015-08-22 22:12:00' AND time <='2015-08-28 03:00:00'
步骤一:匹配原始数据的趋势编写一个GROUP BY time()
查询,使得它匹配原始water_level
数据的总体趋势。这里,我们使用了FIRST()
函数:
SELECT FIRST("water_level") FROM "NOAA_water_database"."autogen"."h2o_feet" WHERE "location"='santa_monica'and time >='2015-08-22 22:12:00'and time <='2015-08-28 03:00:00' GROUP BY time(379m,348m)
在GROUP BY time()
子句中,第一个参数(379m
)匹配water_level
数据中每个波峰和波谷之间发生的时间长度,第二个参数(348m
)是一个偏移间隔,它通过改变TSDB For InfluxDB®的默认GROUP BY time()
边界来匹配原始数据的时间范围。
蓝线显示了查询结果:步骤二:确定季节性模式使用步骤一中查询的信息确定数据中的季节性模式。
关注下图中的蓝线,water_level
数据中的模式大约每25小时15分钟重复一次。每个季节有四个数据点,所以4
是季节性模式参数。步骤三:应用HOLT_WINTERS()
函数在查询中加入Holt-Winters函数。这里,我们使用HOLT_WINTERS_WITH_FIT()
来查看拟合值和预测值:
SELECT HOLT_WINTERS_WITH_FIT(FIRST("water_level"),10,4) FROM "NOAA_water_database"."autogen"."h2o_feet" WHERE "location"='santa_monica' AND time >='2015-08-22 22:12:00' AND time <='2015-08-28 03:00:00' GROUP BY time(379m,348m)
在HOLT_WINTERS_WITH_FIT()
函数中,第一个参数(10
)请求10个预测的field value。每个预测的数据点相距379m
,与GROUP BY time()
子句中的第一个参数相同。HOLT_WINTERS_WITH_FIT()
函数中的第二个参数(4
)是我们在上一步骤中确定的季节性模式。
蓝线显示了查询结果:
HOLT_WINTERS()的常见问题
问题一:HOLT_WINTERS()和收到的数据点少于”N”个
在某些情况下,用户可能会收到比参数N
请求的更少的预测数据点。当数学计算不稳定和不能预测更多数据点时,这种情况就会发生。这意味着该数据集不适合使用HOLT_WINTERS()
,或者,季节性调整参数是无效的并且是算法混乱。