Tencent / Metis

Metis is a learnware platform in the field of AIOps.
Other
1.69k stars 494 forks source link

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

Closed wanghuaway closed 5 years ago

zr9558 commented 6 years ago

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

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

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

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

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

  1. 模型满足了以上的概念:

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

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

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

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

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

net592 commented 6 years ago

学习中~3q

zr9558 commented 6 years ago

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

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

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

xiaolong2009 commented 6 years ago

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

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

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

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

zr9558 commented 5 years ago

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

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

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

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

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

ahyang98 commented 5 years ago

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

ahyang98 commented 5 years ago

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

zr9558 commented 5 years ago

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

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

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

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

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

ahyang98 commented 5 years ago

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

wanghuaway commented 5 years ago

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

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

ahyang98 commented 5 years ago

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

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

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

wanghuaway commented 5 years ago

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

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

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

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