统计学算法
- k-sigma[1]: 即 68–95–99.7 rule。k值默认为 3,即序列均值的 3 倍标准差范围为边界,超过边界的是异常值。KSigma 要求数据整体上服从正态分布,如果一个点偏离均值 K 倍标准差,则该点被视为异常点。
| 参数 | 说明 | 是否必选 | 默认值 |
|---|---|---|---|
| k | 标准差倍数 | 选填 | 3 |
--- 指定调用的算法为ksigma,参数 k 为 2
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, "algo=ksigma,k=2")
- IQR[2]:Interquartile range(IQR),四分位距是一种衡量变异性的方法。四分位数将一个按等级排序的数据集划分为四个相等的部分。即 Q1(第 1 个四分位数)、Q2(第 2 个四分位数)和 Q3(第 3 个四分位数)。 ,对于 , 是正常值,范围之外的是异常值。无输入参数。
--- 指定调用的算法为 iqr,无参数
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, "algo=iqr")
- Grubbs[3]: Grubbs' test,即最大标准残差测试。Grubbs 通常用作检验最大值、最小值偏离均值的程度是否为异常,要求单变量数据集遵循近似标准正态分布。非正态分布数据集不能使用该方法。无输入参数。
--- 指定调用的算法为 grubbs,无参数
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, "algo=grubbs")
- ECOD:Empirical Cumulative Distribution-based Outlier Detection,基于经验累积分布的离群点检测算法。该算法根据数据点在各个特征经验累积分布中的尾部概率计算离群程度,尾部概率越小,表示数据点越异常。ECOD 不要求数据服从特定的参数分布,支持多变量数据。参数
contamination用于指定预期异常点比例,默认值为0.1。
--- 使用 ECOD 进行多变量异常检测
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, foo.i64, "algo=ecod,contamination=0.1")
- COPOD:Copula-Based Outlier Detection,基于 Copula 的离群点检测算法。该算法根据各个特征的经验累积分布构造联合分布,并利用数据点在联合分布中的尾部概率计算离群程度。COPOD 不需要预先假设数据的具体分布,适用于多变量数据。参数
contamination用于指定预期异常点比例,默认值为0.1。
--- 使用 COPOD 进行多变量异常检测
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, foo.i64, "algo=copod,contamination=0.1")
- PCA:Principal Component Analysis,基于主成分分析的离群点检测算法。该算法将数据投影到主成分空间,并根据数据点偏离主成分空间的程度计算离群分数。PCA 适用于正常数据具有较明显低维线性结构的场景。参数
contamination用于指定预期异常点比例,默认值为0.1;参数n_components用于指定主成分数量;参数standardization用于控制是否对输入特征进行标准化,默认值为1。
| 参数 | 说明 | 是否必选 | 默认值 |
|---|---|---|---|
| contamination | 预期异常点比例,取值范围为 (0, 0.5] | 否 | 0.1 |
| n_components | PCA 使用的主成分数量,必须大于 0 | 否 | 全部主成分 |
| standardization | 是否对输入特征进行标准化,1 表示启用,0 表示禁用 | 否 | 1 |
--- 使用 PCA 进行多变量异常检测
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, foo.i64, "algo=pca,contamination=0.1,n_components=2")
- SHESD[4]:带有季节性的 ESD 检测算法。ESD 可以检测时间序列数据的多异常点。需要指定异常检测方向('pos' / 'neg' / 'both'),异常值比例的上界max_anoms,最差的情况是至多 49.9%。数据集的异常比例一般不超过 5%
| 参数 | 说明 | 是否必选 | 默认值 |
|---|---|---|---|
| direction | 异常检测方向类型 ('pos' / 'neg' / 'both') | 否 | "both" |
| max_anoms | 异常值比例 | 否 | 0.05 |
| period | 一个周期包含的数据点 | 否 | 0 |
--- 指定调用的算法为 shesd,参数 direction 为 both,异常值比例 5%
SELECT _WSTART, COUNT(*)
FROM foo
ANOMALY_WINDOW(foo.i32, "algo=shesd,direction=both,max_anoms=0.05")
后续待添加异常检测算法
- Gaussian Process Regression
基于变点检测的异常检测算法
- CUSUM (Cumulative Sum Control Chart)
- PELT (Pruned Exact Linear Time)
参考文献
- https://en.wikipedia.org/wiki/68–95–99.7 rule
- https://en.wikipedia.org/wiki/Interquartile_range
- Adikaram, K. K. L. B.; Hussein, M. A.; Effenberger, M.; Becker, T. (2015-01-14). "Data Transformation Technique to Improve the Outlier Detection Power of Grubbs's Test for Data Expected to Follow Linear Relation". Journal of Applied Mathematics. 2015: 1–9. doi:10.1155/2015/708948.
- Hochenbaum, O. S. Vallis, and A. Kejariwal. 2017. Automatic Anomaly Detection in the Cloud Via Statistical Learning..








