异常检测
异常检测应用场景相当广泛,包括了入侵检测,金融诈骗检测,传感器数据监控,医疗诊断和自然数据检测等。异常检测经典算法包括统计建模方法,基于距离计算方法,线性模型和非线性模型等。
我们采用一种基于随机森林的异常检测方法:
- One-pass算法,O(1)均摊时空复杂度。
- 随机森林结构仅构造一次,模型更新仅仅是节点数据分布值的更新。
- 节点存储多个窗口的数据分布信息,能够检测数据分布变化。
- 异常检测和模型更新在同一个代码框架中完成。
语法格式
1
|
SRF_UNSUP(ARRAY[字段1, 字段2, ...], '可选参数列表') |
- 函数输出为[0, 1]区间的DOUBLE值,表示数据的异常打分。
- 字段名必须为一致的数值类型,若字段类型不同,可通过CAST函数转义,例如[a, CAST(b as DOUBLE)]。
- 可选参数列表语法为"key1=value,key2=value2,..."。
参数说明
参数 |
是否必选 |
说明 |
默认值 |
---|---|---|---|
transientThreshold |
否 |
连续transientThreshold个窗口发生数据改变表示发生数据概念迁移。 |
5 |
numTrees |
否 |
随机森林中Tree的数量。 |
15 |
maxLeafCount |
否 |
Tree最大叶子节点数量。 |
15 |
maxTreeHeight |
否 |
Tree最大高度。 |
12 |
seed |
否 |
算法使用的随机种子值。 |
4010 |
numClusters |
否 |
分类数,默认包含异常和非异常两类。 |
2 |
dataViewMode |
否 |
算法学习模式。
|
history |
示例
对于数据流MyTable中的c字段运行异常检测算法,当异常分大于0.8时输出异常。
1 2 3 4 5 6 |
SELECT c, CASE WHEN SRF_UNSUP(ARRAY[c], "numTrees=15,seed=4010") OVER (ORDER BY proctime RANGE BETWEEN INTERVAL '99' SECOND PRECEDING AND CURRENT ROW) > 0.8 THEN 'anomaly' ELSE 'not anomaly' END FROM MyTable |