egads是雅虎开源的可扩展异常检测系统, 地址:https://github.com/yahoo/egads

tsmm模型

  • DoubleExponentialSmoothingModel

    双指数平滑 - 也称为Holt指数平滑 - 改进了常见的简单指数平滑模型,考虑了数据中含有有趋势因素的情况。

  • MovingAverageModel

    移动平均预测模型基于人工构建的时间序列,其中给定时间段的值由该值的平均值和某些前后时间段的值代替。

  • MultipleLinearRegressionModel

    多变量线性回归模型

  • NaiveForecastingModel

    朴素预测模型是移动平均预测模型的一个特例,即当 平滑周期数为1时的特例。

  • OlympicModel

    去掉一个最高分,去掉一个最低分,然后计算最近k周的数据的平均数,作为当前的预测值。

  • PolynomialRegressionModel

    单变量多项式回归模型

  • RegressionModel

    单变量线性回归模型

  • SimpleExponentialSmoothingModel

    简单指数平滑回归模型

  • SpectralSmoother

    基于输入时间序列’Hankel矩阵的奇异值分解(SVD)实现平滑技术

  • TripleExponentialSmoothingModel

    三指数平滑,也称为Winters方法, 是双指数平滑模型的改进,考虑了数据中含有季节性和周期性

  • WeightedMovingAverageModel

    加权移动平均模型,由当前周期和上个周期的数据做的加权平均值做为当前的预测值

adm模型

评价指标

时序的几种特征

  • Periodicity (frequency)

    Periodicity is very important for determining the seasonality.

  • Trend

    Exists if there is a long-term change in the mean level Seasonality Exists when a time series is influenced by seasonal factors, such as month of the year or day of the week

  • Auto-correlation

    Represents long-range dependence.

  • Non-linearity

    A non-linear time-series contains complex dynamics that are usually not represented by linear models.

  • Skewness

    Measures symmetry, or more precisely, the lack of symmetry.

  • Kurtosis

    Measures if the data are peaked or flat, relative to a normal distribution.

  • Hurst

    A measure of long-term memory of time series.

  • Lyapunov Exponent

    A measure of the rate of divergence of nearby trajectories.

如何选择模型

基于时序数据的特征来选择模型,比将时序数据在各个模型上交叉测试要快的多。 by:6.2.1

当时序是强趋势性特征时,各个模型的表现

当时序是强趋势性+强季节性特征时,各个模型的表现

如何评价异常检测模型

召回率和准确率的定义

一个数据库有500个文档,其中有50个文档符合定义。系统检索到75个文档,但是实际其中只有45个符合定义。则:
召回率R=45/50=90%
准确率P=45/75=60%

一个评价异常检测adm算法的指标

$$F-Score = \frac{precision * recall}{precision + recall}$$

F-Score越大,则检测的效果越好。

该图展示了EGADS中CP(不知道是啥,论文里没写), extremeLowDensity和KSigmaModel这三种adm模型,但其实谁也没比谁好。

过滤

  1. 将各种模型跑出来的所有的异常点,(所有模型太多了,挑4个左右吧)。
    WeightedMovingAverageModel是在8个tsmm模型里比较出来,对我们业务数据来说12小时长的时序数据,是拟合最好的模型。

  2. 经过6个adm模型的运行对比,DBScanModel, ExtremeLowDensityModel, kSigma这三个模型较为灵敏,能够检测出绝大多数异常, 准确率各不相同。

  • DBScan, LowDensity和 kSigma 召回率较高
  • kSigma 准确率低,有误检
  • kerneldensity, Naive,Simple召回率低

利用adaboost算法来识别出真正的异常点

收集训练集,
样本为:((业务数据类型, 进一个小时监控数据), 标记-1或1)

设计弱分类器:

  • 按业务数据类型分类
  • 按近一小时数据的均值 > n
  • 按近一小时数据的均值 > m

  • 近10分钟数据方差 > x
  • 近10分钟数据方差 > y

要有一个库,已标记,和未标记

  1. 可以根据业务数据类型,批量标记
  2. 可以选择不标记指定的业务数据类型

    如何自己实现adaboost

    1
    2

    https://www.ibm.com/developerworks/cn/analytics/library/machine-learning-hands-on6-adaboost/index.html

用标准差跟均值的距离来判断 (目前线上使用的是类似这种方法)

其中有几种tsmm的解释
https://jiroujuan.wordpress.com/