Skip to content
This repository has been archived by the owner on Aug 6, 2024. It is now read-only.

如何理解学件?Metis和学件之间的关系 #25

Closed
wanghuaway opened this issue Oct 28, 2018 · 13 comments
Closed

如何理解学件?Metis和学件之间的关系 #25

wanghuaway opened this issue Oct 28, 2018 · 13 comments

Comments

@wanghuaway
Copy link
Collaborator

No description provided.

@zr9558
Copy link
Collaborator

zr9558 commented Oct 28, 2018

AIOps 的白皮书 0.6 版本里面,通常来说要构建一个智能运维平台,需要运维工程师开发工程师算法工程师三个角色。而在实际环境中,由于 AIOps 概念的提出是在 2017 年前后开始的,就出现了机器学习的人不了解运维场景,运维人员不知道该怎么样使用数据等难题。即使有相同的数据,不同的机器学习人员也有不同的处理方法,在效果上面很可能千差万别。而在公司层面,数据的隐私和安全一直是需要关注的问题,很可能面临着数据不能开放和不能对外等问题。就像在医疗领域,大医院拥有海量数据,社区诊所数据稀少,但是很难做到大医院把用户的数据对外开放,毕竟数据的安全和隐私一直是很重要的问题。

基于以上种种困难,在 2016 年南京大学的周志华老师定义了学件的概念,学件 = 模型 + 规约。其模型有可能是普通的机器学习模型,也有可能是特殊的某种深度学习模型。学件可以存在于机器学习的各个领域,无论是医疗,银行,安全,游戏,运维等。目前 Metis 就是基于运维场景的学件集合。

  1. 模型需要满足:
  • 可重用;
  • 可演进;
  • 可了解。
  1. 规约需要满足:
  • 给出模型的合适刻画。

在 Metis 的时间序列异常检测上,学件就是基于运维人员的海量运维经验,通过机器学习的方式来进行固化。像检测接口的约定,数据格式的约束(例如时间间隔, 前后三小时窗口),通用性的规定规范等这些就称为学件中的规约。目前基于运维人员标注的数据,使用特征工程和模型训练等机器学习方法,可以将这些标注数据形成机器学习学件,然后对外提供。提供这个模型的时候,其实内部用来训练的数据并没有直接对外,对外提供的只是特征层和模型层。

在 Metis 的时间序列异常检测上,

  1. 模型满足了以上的概念:
  • 可重用:其他运维团队的人员可以直接使用这个已经训练好的模型,可以不做任何额外的操作就可以重新使用。只要确定了输入,就可以输出相应的结果。
  • 可演进:未来 Metis 时间序列异常检测模型会提供增量学习的工具,如果在使用环境中出现了模型的退化,不准确,召回率不够等问题,后续使用这个工具可以实现模型的演进,也就是增量训练。
  • 可了解:一般来说,从模型的角度来看,机器学习模型都是可以查看模型的内部结构和框架的。从特征层的角度来看,Metis 目前已经开源了特征层的构建。从测试效果的角度来看,只要在环境中部署了 Metis,就可以了解 Metis 的效果。
  1. 像检测接口的约定,数据格式的约束(例如时间间隔, 前后三小时窗口),通用性的规定规范等这些就称为学件中的规约。

使用Metis 时间序列异常检测学件给大家带来的好处:

  1. 难以 适应环境变化;
  2. 难以 了解模型;
  3. 难以 获得专家级结果;
  4. 难以 避免数据泄露,保障用户的隐私和安全;

@xiaolong2009
Copy link

可重用:其他运维团队的人员可以直接使用这个已经训练好的模型,可以不做任何额外的操作就可以重新使用。只要确定了输入,就可以输出相应的结果。

1)典型的异常检测场景包括,周期性的波动数据,关心突变的数据的数据等
这两种数据的算法上关注的点不同,周期性数据关注同比历史数据,关心突变的关注环比近期数据,
请问按照Metis的思路,是不是经过同样的特征层都可以达到比较好的效果?
我理解应该有个算法选择的过程,是不是GBDT、XGBoost、RF这种树形模型已经达到了这种效果?
2)样本库里的窗口都取180分钟是不是有点不合适?不同的场景考虑的窗口应该不是一样的吧,请问内部是不是有时序标注的工具结合起来使用
非常感谢~

@net592
Copy link

net592 commented Oct 29, 2018

学习中~3q

@zr9558
Copy link
Collaborator

zr9558 commented Oct 30, 2018

可重用:其他运维团队的人员可以直接使用这个已经训练好的模型,可以不做任何额外的操作就可以重新使用。只要确定了输入,就可以输出相应的结果。

1)典型的异常检测场景包括,周期性的波动数据,关心突变的数据的数据等
这两种数据的算法上关注的点不同,周期性数据关注同比历史数据,关心突变的关注环比近期数据,
请问按照Metis的思路,是不是经过同样的特征层都可以达到比较好的效果?
我理解应该有个算法选择的过程,是不是GBDT、XGBoost、RF这种树形模型已经达到了这种效果?
2)样本库里的窗口都取180分钟是不是有点不合适?不同的场景考虑的窗口应该不是一样的吧,请问内部是不是有时序标注的工具结合起来使用
非常感谢~

(1)周期波动类,突变型数据,都可以做出相应的特征。例如同比特征,环比特征,只要特征做得好,其实模型是可以做到判断的,其实并不需要每次都选择一个模型来做。
(2)内部使用的时候,XGBoost,GBDT,RF这类模型是针对所有时间序列来做的,效果达到内部使用的要求。目前并没有对外开放时间序列分类或者聚类的工具。
(3)窗口选择180分钟有一定的局限性,但是这个也是考虑线上的计算压力。从算法的角度来讲,最理想的是 14 天的全部数据,但是在百万时间序列的量级上,就要考虑窗口的长度了。

@xiaolong2009
Copy link

可重用:其他运维团队的人员可以直接使用这个已经训练好的模型,可以不做任何额外的操作就可以重新使用。只要确定了输入,就可以输出相应的结果。

1)典型的异常检测场景包括,周期性的波动数据,关心突变的数据的数据等
这两种数据的算法上关注的点不同,周期性数据关注同比历史数据,关心突变的关注环比近期数据,
请问按照Metis的思路,是不是经过同样的特征层都可以达到比较好的效果?
我理解应该有个算法选择的过程,是不是GBDT、XGBoost、RF这种树形模型已经达到了这种效果?
2)样本库里的窗口都取180分钟是不是有点不合适?不同的场景考虑的窗口应该不是一样的吧,请问内部是不是有时序标注的工具结合起来使用
非常感谢~

(1)周期波动类,突变型数据,都可以做出相应的特征。例如同比特征,环比特征,只要特征做得好,其实模型是可以做到判断的,其实并不需要每次都选择一个模型来做。
(2)内部使用的时候,XGBoost,GBDT,RF这类模型是针对所有时间序列来做的,效果达到内部使用的要求。目前并没有对外开放时间序列分类或者聚类的工具。
(3)窗口选择180分钟有一定的局限性,但是这个也是考虑线上的计算压力。从算法的角度来讲,最理想的是 14 天的全部数据,但是在百万时间序列的量级上,就要考虑窗口的长度了。

非常感谢,我还有个疑问,现在Metis的标注不太好用啊,不能分段标记,有没有类似百度的Curve这种标注工具?

@zr9558
Copy link
Collaborator

zr9558 commented Nov 8, 2018

可重用:其他运维团队的人员可以直接使用这个已经训练好的模型,可以不做任何额外的操作就可以重新使用。只要确定了输入,就可以输出相应的结果。

1)典型的异常检测场景包括,周期性的波动数据,关心突变的数据的数据等
这两种数据的算法上关注的点不同,周期性数据关注同比历史数据,关心突变的关注环比近期数据,
请问按照Metis的思路,是不是经过同样的特征层都可以达到比较好的效果?
我理解应该有个算法选择的过程,是不是GBDT、XGBoost、RF这种树形模型已经达到了这种效果?
2)样本库里的窗口都取180分钟是不是有点不合适?不同的场景考虑的窗口应该不是一样的吧,请问内部是不是有时序标注的工具结合起来使用
非常感谢~

(1)周期波动类,突变型数据,都可以做出相应的特征。例如同比特征,环比特征,只要特征做得好,其实模型是可以做到判断的,其实并不需要每次都选择一个模型来做。
(2)内部使用的时候,XGBoost,GBDT,RF这类模型是针对所有时间序列来做的,效果达到内部使用的要求。目前并没有对外开放时间序列分类或者聚类的工具。
(3)窗口选择180分钟有一定的局限性,但是这个也是考虑线上的计算压力。从算法的角度来讲,最理想的是 14 天的全部数据,但是在百万时间序列的量级上,就要考虑窗口的长度了。

非常感谢,我还有个疑问,现在Metis的标注不太好用啊,不能分段标记,有没有类似百度的Curve这种标注工具?

后续我们会逐步完善这些功能,谢谢您提出来的建议。

@ahyang98
Copy link

ewma实现中的ucl是啥含义,感觉和3sigma很类似

@ahyang98
Copy link

PredictRate率值检测只应用了3sigma方法,这个怎么考虑的

@zr9558
Copy link
Collaborator

zr9558 commented Nov 16, 2018

ewma实现中的ucl是啥含义,感觉和3sigma很类似

https://github.com/Tencent/Metis/blob/master/time_series_detector/algorithm/ewma.py

这里是参考了统计学里面的控制图理论(Control Chart Theory),在 Control Chart Theory 里面,有常见的几种方法:

  • Basic Control Chart
  • Moving Average Control Chart
  • EWMA Control Chart

它们的本质都是计算平均线,然后计算出上下界,超出上下界就算异常。其中,

  • Basic Control Chart 就是 3-Sigma 原理。
  • Moving Average Control Chart 就是基于移动平均算法(Moving Average)的控制图理论,可以参考文章:时间序列简介(一)
  • EWMA Control Chart 就是基于指数移动平均算法(EWMA)的控制图理论,可以参考文章:EWMA Chart

这里的 ucl 和 lcl 分别是上下界的意思,也就是 upperbound 与 lowerbound。

@ahyang98
Copy link

学件里的xgb_default_model是不是用sample_dataset.sql里的数据训练出来的

@wanghuaway
Copy link
Collaborator Author

学件里的xgb_default_model是不是用sample_dataset.sql里的数据训练出来的

default_model是使用内部更多的样本训练出来的,sample_dataset中只有300条样本,是做数据示例

@ahyang98
Copy link

学件里的xgb_default_model是不是用sample_dataset.sql里的数据训练出来的

default_model是使用内部更多的样本训练出来的,sample_dataset中只有300条样本,是做数据示例

这模型是不是包含了大部分时序的异常基本够用了,哈哈

@wanghuaway
Copy link
Collaborator Author

学件里的xgb_default_model是不是用sample_dataset.sql里的数据训练出来的

default_model是使用内部更多的样本训练出来的,sample_dataset中只有300条样本,是做数据示例

这模型是不是包含了大部分时序的异常基本够用了,哈哈

对互联网行业的KPI业务数据指标基本是够用了
当然业务观点也可以存在个性化,所以也可以支持用自己的业务打标签,用自己的样本来训练模型

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants