EDADS系统包含了众多的时序模型和异常检测模型,这些模型的处理会输入很多参数,若仅使用默认的参数,那么时序模型预测的准确率将无法提高,异常检测模型的误报率也无法降低,甚至针对某些时间序列这些模型将无法使用。

若想有效地使用EGADS系统,那么必须了解EGADS系统的核心算法思想,并据此调优模型参数,来提高异常检测的准确率、降低误报率。

笔者通过阅读EDADS系统的TimeSeries模型和AnomalyDetection模型的源码,整理了模型的处理流程和常用算法的核心思想。如本文有理解错误之处,欢迎大家随时拍砖指正。

1. TSM时序模型

1.1 时序模型处理流程

时序模型接口主要包含的方法:train()predict(),其类结构如下图所示。时序模型的主要处理流程:

  • 先调用train方法训练出模型
  • 在调用predict方法,得到时间序列的预测值

时序模型的实现类都遵循以上的处理流程。

1.2 OlympicModel算法核心思想

OlympicModel 是时序数据的季节性模型,该算法的核心思想:某个数据点的预测值是历史n个同期数据的平滑平均值。特别适用于预测有周期的,甚至是嵌套周期的曲线。这里举例说明下什么是嵌套周期,例如:某个数据集每周的波动曲线相似,并且周一至周五是一类波动曲线,周六和周日是一类波动曲线。面对嵌套周期的波动曲线,仅以固定间隔作为周期的预测算法的效果不太理想。

OlympicModel模型的数据结构:

  • data存储观察值,底层的数据结构是ArrayList

  • model存储期望值,底层的数据结构是ArrayList

OlympicModel模型训练的核心思想:

  1. 将data的第一个最小周期的数据作为期望值存入model
  2. 对于data剩余的数据点,计算出期望值后存入model
    1. 整个处理流程:针对每层嵌套周期(共w层),每个偏移量(共j个),计算出当前时间点、漂移到下一个时间点、漂移到上一个时间点的期望值,在这些期望值(w*j*3)中选择一个与真实值偏差最小的,作为该时间点的期望值。

      1. 期望值计算:找出历史同期的所有数据点,去掉可能的异常点(最大值和最小值),剩余数据点的平均值就是该时间点的期望值。
  3. 计算出预测值model与真实值data的所有误差指标(误差指标用于AutoForecastModel筛选出哪个模型更优)

2. ADM异常检测模型

2.1 异常检测模型处理流程

异常检测模型的接口主要包含的方法:tune()detect(),其类结构如下图所示。异常检测模型的主要处理流程:

  • 先调用tune方法,根据训练数据调教出异常检测模型的阈值参数
  • 在调用detect方法,检测出异常值

异常检测模型的实现类都遵循以上的处理流程。

2.2 ExtremeLowDensityModel 算法核心思想

ExtremeLowDensityModel是基于密度的异常检测模型,其算法思想类似于聚类算法。输入的数据序列为预测值与真实值的差值的绝对值,然后把数据序列按照从大到小排序,在使用聚类算法把数据序列划分为两类:异常点簇和正常点簇,其临界值为异常点簇的最小值。这里聚类算法使用的距离公式为:3*正常点集合的标准差

ExtremeLowDensityModel模型输入的数据结构:

  1. 观察值序列,长度为n, 底层的数据结构是ArrayList
  2. 预测值序列,长度为n, 底层的数据结构是ArrayList

ExtremeLowDensityModel模型自适应阈值算法的核心思想:

  1. 计算出观测值和预测值的全部误差指标

    1. 对于每个时间点t,计算出对应观察值和预测值的所有误差指标,误差指标有5个:mae(绝对误差)、smape、mape、mase、mapee.
    2. 将误差指标组合成一个map,其中key表示误差指标,value表示误差指标对应的n个误差值
  2. 对于每项误差指标,使用基于密度分布的方式计算出灵敏度,将灵敏度作为该项误差指标的阈值
    1. 从误差指标map中获取指定的误差指标对应的n个误差值
    2. 根据n个误差值,使用基于密度分布的方式计算出灵敏度(核心算法)
      1. 把n个误差值,按照从大到小进行排序
      2. 初始化一个簇,把第一个数据点移入初始化簇
      3. 计算出剩余n-1个点的标准差*3作为簇间最大距离的阈值
      4. 判断下个数据点与初始化簇的中心点距离是否小于簇间最大距离的阈值
      5. 若小于,则从剩余数据点中移除下个数据点,加入到初始簇中,并重新计算初始化簇的中心点,重新计算剩余数据点的簇间最大阈值,并返回到步骤4
      6. 若大于,则停止迭代,此时会把全部数据点划分为两个簇
      7. 如果初始化簇的数据点个数占比其他簇的数据点个数,超过某个比例(0.05),那么认为不能做异常检测,返回正无穷大;否则把初始化簇和其他簇分割开的临界点的值,作为灵敏度并返回
    3. 将误差指标和灵敏度保存到map,该map则保存了各个误差指标的阈值

ExtremeLowDensityModel模型检测异常算法的核心思想:

  1. 将各项误差指标(5个)的阈值存入数组
  2. 计算出每个时间点t对应的真实值与期望值的各项误差指标值(5个)
  3. 若待检测点处于检测窗口,且待检测点的任一误差指标值超过了对应的阈值,则待检测点为异常点

2.3 KSigmaModel 算法核心思想

假设预测值与真实值的误差值序列符合正态分布,那么可以使用KSigmaModel模型做异常检测,其阈值计算规则为:均值 + 3*标准差。若某时刻t的数据点超过该阈值,则认为该时刻对应的数据点异常。

KSigmaModel模型输入的数据结构:

  1. 观察值序列,长度为n, 底层的数据结构是ArrayList
  2. 预测值序列,长度为n, 底层的数据结构是ArrayList

KSigmaModel模型调教阈值算法的核心思想:

  1. 计算观测值相比预测值全部的误差指标

    1. 对于每个时间点t,计算出对应观察值和预测值的所有误差指标,误差指标有5个:mae(绝对误差)、smape、mape、mase、mapee.
    2. 将误差指标组合成一个map,其中key表示误差指标,value表示误差指标对应的n个误差值
  2. 对于每项误差指标(共5项),使用简单的KSigma规则计算出异常灵敏度,将灵敏度作为该项误差指标的阈值
    1. 假设每项误差指标值序列均符合正态分布,计算出每项误差指标值序列的平均值和标准差
    2. 对于每项误差指标,其灵敏度(即阈值)为:均值 + 3*标准差
  3. 将误差指标和灵敏度保存到map,该map则保存了各个误差指标的阈值

KSigmaModel模型检测异常的核心思想:

  1. 将各项误差指标(5个)的阈值存入数组
  2. 计算出每个时间点t对应的真实值与期望值的各项误差指标值(5个)
  3. 若待检测点处于检测窗口,且待检测点的任一误差指标值超过了对应的阈值,则待检测点为异常点

3. 总结

本文介绍了EGADS的TimeSeries模型和AnomalyDetection模型的处理流程和常用算法的核心思想。其中TimeSeries模型主要包含:训练和预测方法,AnomalyDetection模型主要包含:计算阈值参数和检测异常的方法。

关于TimeSeries模型介绍了可以预测嵌套周期的OlympicModel的核心思想,关于AnomalyDetection模型介绍了基于聚类思想计算出阈值的ExtremeLowDensityModel和基于正态分布数据的3Sigma法则计算出阈值的KSigmaModel的核心思想。

EGADS介绍(二)--时序模型和异常检测模型算法的核心思想的更多相关文章

  1. 《为大量出现的KPI流快速部署异常检测模型》 笔记

    以下我为这篇<Rapid Deployment of Anomaly Detection Models for Large Number of Emerging KPI Streams>做 ...

  2. 从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考

    1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关 ...

  3. 网络KPI异常检测之时序分解算法

    时间序列数据伴随着我们的生活和工作.从牙牙学语时的“1, 2, 3, 4, 5, ……”到房价的走势变化,从金融领域的刷卡记录到运维领域的核心网性能指标.时间序列中的规律能加深我们对事物和场景的认识, ...

  4. 基于机器学习的web异常检测

    基于机器学习的web异常检测 Web防火墙是信息安全的第一道防线.随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战.传统web入侵检测技术通过维护规则集对入侵访问进行拦截.一 ...

  5. Abnormal Detection(异常检测)和 Supervised Learning(有监督训练)在异常检测上的应用初探

    1. 异常检测 VS 监督学习 0x1:异常检测算法和监督学习算法的对比 总结来讲: . 在异常检测中,异常点是少之又少,大部分是正常样本,异常只是相对小概率事件 . 异常点的特征表现非常不集中,即异 ...

  6. Stanford机器学习---第十一讲.异常检测

    之前一直在看Standford公开课machine learning中Andrew老师的视频讲解https://class.coursera.org/ml/class/index 同时配合csdn知名 ...

  7. 异常检测(anomaly detection)

    版权声明:本文为博主原创文章,转载或者引用请务必注明作者和出处,尊重原创,谢谢合作 https://blog.csdn.net/u012328159/article/details/51462942 ...

  8. LSTM UEBA异常检测——deeplog里其实提到了,就是多分类LSTM算法,结合LSTM预测误差来检测异常参数

    结合CNN的可以参考:http://fcst.ceaj.org/CN/article/downloadArticleFile.do?attachType=PDF&id=1497 除了行为,其他 ...

  9. 斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection

    异常检测,广泛用于欺诈检测(例如“此信用卡被盗?”). 给定大量的数据点,我们有时可能想要找出哪些与平均值有显着差异. 例如,在制造中,我们可能想要检测缺陷或异常. 我们展示了如何使用高斯分布来建模数 ...

随机推荐

  1. 【Java】运算符(算术、赋值、比较(关系)、逻辑、条件、位运算符)

    运算符 文章目录 运算符 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 5. 条件运算符 6. 位运算符 7. 运算符优先级 8. 运算符操作数类型说明 9.code 算术运 ...

  2. 【Oracle】修改oracle中SGA区的大小

    1.备份数据库: 2.关机,拔下电源和各种连接线,抽出机箱,打开机箱上盖,增加内存: 3.完成后按原样将各个部件及连接线恢复好,电开机,系统正常运行: 4.进入系统查看,发现内存已经顺利安装: 5.修 ...

  3. java创建线程安全的类

    如果一个对象想要被多个线程安全的并发访问,那么这个对象必须是或线程安全的或事实不可变的或由锁来保护的. 1.java监视器模式 大多数对象都是组合对象.当从头开始构建一个类,或者将多个非线程安全的类组 ...

  4. Golang应用性能问题排查分析

    背景 公司有一个使用golang开发的采集模块,负责调用多个外部系统采集数据:最近做了一次架构上的调整,将采集模块分成api.job两个子模块,并部署到容器中,拆分前部署在虚机上. 现象 部分采集任务 ...

  5. DOI技术扫盲一

    DOI:  desktop office intergration   桌面办公软件集成简单的将,就是我们在Windows桌面中打开的办公软件(如:word,excel,pdf等等)可以在SAP系统进 ...

  6. 使用Intelij 运行Android 程序导致的无法安装

    前几天的时候更换了开发工具开发Android ,终于不用忍受Android studio 的各种卡顿了.我决定使用一段时间Intelij 开发Android. 之前的程序代码在运行的时候也出现了异常, ...

  7. 知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838

    知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838

  8. python RecursionError: maximum recursion depth exceeded while calling

    import copyimport sys # 导入sys模块sys.setrecursionlimit(8192) # 将默认的递归深度修改为r = sys.getrecursionlimit()_ ...

  9. ModuleNotFoundError 模块寻找路径

    t = os.path.dirname(os.path.dirname((os.path.dirname(os.path.abspath(__file__)))))os.path.sys.path.a ...

  10. 在ubuntu编写helloworld

    安装vim 打开终端 输入sudo apt-get install vim-gtk 输入登陆密码 等待安装完成 编译C 创建.c文件:vim helloworld.c 编写代码,保存并退出 编译:gc ...