1. 问题引入
1.1 背景
微软公司向大众提供很多大型在线软件系统,例如Microsoft Office 365, Windows Azure, 和Visual Studio Online,当这些产品的用户遇到问题时,可以通过提交反馈、咨询在线客服、拨打客服热线等方式将问题上报给运维团队,一次问题上报称为一个Issue Report。通常情况下,一个软件系统下的issue report的数量是相对稳定的,但是有时会发生issue report的数量突变(通常是骤增)的情况,快速且有效的定位这些问题相当重要。
本文提出了iDice算法,用于帮助技术支持工程师识别与**新出现问题(emerging issue)**相关的有效组合的自动化算法。这里将识别属性组合作为一个模式挖掘问题:给定一段时间内的客户问题报告量,目标是搜索一个属性组合,将整个多维时间序列数据集隔离成两个部分:一部分问题量的显著增加,另一部分没有这种显著增加。
1.2 实际案例
表1是某团队收到的用户发过来的一组issue report的例子,这些report中包含许多属性,同时还有时间戳,可以认为是一个多维时间序列。
图一显示了2013年检测到的一个真实的emerging issue。12月8日起,包含以下属性组合的问题报告数量明显增加。
{Country="India"; TenantType="Edu"; DataCenter="DC6"}
进一步研究显示,在2013年12月8日之前,这个属性组合平均每天与70个问题报告相关。从12月8日开始,与该属性组合相关的问题报告数量上升到每天300多份。这个特定的属性组合表征了新出现的问题,并为问题调查提供了有用的信息。我们称这样的属性组合为有效组合(Effective Combination)。
在确定了新出现的问题后,技术支持工程师很快发现,这些问题报告与一个软件配置错误有关,它未能为印度的客户创建账户,这些客户是通过TenantType EDU订阅服务的。因此,许多客户联系了微软的支持团队,请求帮助。
1.3 挑战
而目前(by 2016)的情况是,技术支持工程师们使用Excel Pivot Table 去逐个查询可能的属性组合,来定位问题。
人工的方法如下问题:
- Inefficient。候选集(属性的组合)可能是一个极大的量,人工识别成本太高。
- Ineffective。人工方法是非常ad-hoc的探寻工作,手工方法可能会遗漏有效的组合,有时找到的结果包含冗余和重复信息。
传统的频繁项集挖掘方法无法使用,原因:
- 传统封闭项集挖掘只能处理多维数据,没有考虑时间属性。
- Emerging issue 可能不是整个数据集的频繁模式。
1.4 问题描述
由于问题报告数据可能包含大量的属性组合,因此iDice的目标是从所有可能的组合中有效识别出能够反映问题的有效组合(effective combinations)。
剪枝策略的基础
整个属性组合通过它们的子集-超集关系形成一个网格结构,对于两个属性组合X和Y,如果包含X的数据也都包含在Y的数据中,称X为Y的子集,Y为X的超集。
如图2所示,节点表示一个属性组合,边表示子集和超集的关系。黑色节点表示一个effective combinations,他可以有效的分隔开issue明显增长的节点和issue没有明显增长的节点。如果一个effective combinations X是一个emerging issue的症状,并且它与问题报告量的爆发有关,那么X的所有子集也应该受到同一问题的影响,并同时表现出一定程度的issue的数量增加,因为其他属性与这个新出现的问题是正交的。
例如,如果集合
{Country=Japan, ProductVersion=V16SP2, ClientOS=Win8.1}
是一个有效集合,那么他的所有子集如
{Country=Japan,ProductVersion=V16SP2, ClientOS=Win8.1, TenantType=Edu}
{Country=Japan, ProductVersion= V16SP2, ClientOS=Win8.1, UserAgent=IE7.0}
他们的issue report数量都应该会有显著的增长。相反,X的超集可能不会表现出issue数量的明显增加,例如,我们可能不会看到所有关于{ClientOS=Win8.1}
的issue report出现明显的爆发。
需求
要进行定位的effective combinations,应该具备一些性质,可以供运维工程师来识别和区分与其他combinations。本文通过对实际案例的分析,确定了effective combinations 应有以下一些需求:
- 影响力(Impactful)。由于用以运维的各项资源有限,首先要解决的问题肯定是影响力最大的问题。因此,一个effective combination对应的issue report数量应该是比较大的。
- 反映变化(Reflecting changes)。一个effective combination应该在变化程度上足够显著,才能够将自己与其他combination区分开。
- 冗余要少(Less redundant): 一个effective combination应该是简洁的,因为冗余度高的结果会降低检测的准确性,并且浪费的后续调查工作的时间。
1.5 Note
- 本文专注于寻找issue report数量增加的根因(effective combination),即考虑的指标只有issue report的数量。
- 和Adtributor不同,这是一个超集影响子集的问题。
2. iDice算法
2.1 算法概况
寻找Effective combination的关键挑战是,候选的属性组合形成了一个巨大的搜索空间。相应的,iDice的核心算法是在不遗漏有效组合的情况下有效减少搜索空间。
主要有如下三个剪枝策略来降低搜索空间。
- 基于影响的剪枝(Impact based Pruning)
- 基于变化检测的剪枝(Change Detection based Pruning)
- 基于隔离能力的剪枝(Isolation Power based Pruning)
图3是iDice算法的概况。iDice将问题报告数据作为输入,这些数据是多维的时间序列数据,如表1所示。iDice执行以下三个步骤来有效地搜索有效的组合:基于影响的修剪,基于变化检测的修剪,以及基于隔离能力的修剪。最后,对得到的结果进行排序并返回给用户。
2.2 基于影响的剪枝
首先根据属性组合的影响力进行剪枝,也就是只考虑issue report数量大的属性组合,对于那些数量不足够大的属性组合,直接剪枝删掉的报告。
iDice采用基于BFS(广度优先搜索)的封闭项集挖掘方法进行影响力剪枝。基本思想是:作为有效组合的一个属性,如果一个属性组合没有足够的issue report数量(support threshold),显然它的所有子集也没有足够的容量。因此,我们可以直接删除这个属性组合和它的所有子集。
例如两个属性组合:
X={Country=India; TenantType=Edu; DataCenter=DC6}
Y={Country=USA; TenantType=Edu; DataCenter=DC1}
如果Y出现数量小于support threshold则Y及其子集全部删掉;若X出现次数大于support threshold,则保留X。
2.3 基于变化检测的剪枝
Effective combination除了具有影响力之外,还应该与新出现的问题相关。换句话说,需要找出与问题报告数量显著增加相对应的effective combination。
为了实现这一点,考虑数据的时间戳信息,并为封闭的项目集建立了时间序列数据。时间序列中的每个数据点都表示在某个特定的时间戳中包含相应封闭项集的issue report数量。然后使用变点检测的算法找到问题爆发的爆发时间点。这里应用异常检测算法(GLR: Generalized Likelihood Ratio 算法)来寻找异变点,然后将异变点前后变化不显著的候选组合剪枝删除。
例如,在图1中,时间序列从27-Nov到7-Dec服从一个分布,8-Dec到10-Dec服从另一个分布,而 8-Dec这一点是一个变化点。对于没有任何变化点的时间序列数据,相应的属性组合将被修剪掉。
考虑以下两个属性组合。
X={Country=India; TenantType=Edu; DataCenter=DC6}
Y={Country=UK; TenantType=Home; DataCenter=DC1}
它们对应的时间序列分别是 S X S_X SX和 S Y S_Y SY。如果检测到 S X S_X SX从12月8日开始有明显的变化,而 S Y S_Y SY在一段时间内没有明显的变化,那么Y将被修剪,X将进入下一步剪枝流程。
2.4 基于隔离能力的剪枝
一个effective combination应该能够将具有变化的combinations与没有变化的其他combinations隔离开来。这里提出了Isolation Power的概念:
I P ( X ) = − 1 Ω a ˉ + Ω b ˉ ( X a ˉ l n 1 P ( a ∣ X ) + X b ˉ l n 1 P ( b ∣ X ) + ( Ω a ˉ − X a ˉ ) l n 1 P ( a ∣ X ˉ ) + ( Ω b ˉ − X b ˉ ) l n 1 P ( b ∣ X ˉ ) ) IP(X)=-\frac{1}{\bar{\Omega_{a}}+\bar{\Omega_{b}}}(\bar{X_a}ln\frac{1}{P(a|X)}+\bar{X_b}ln\frac{1}{P(b|X)}+(\bar{\Omega_{a}}-\bar{X_{a}})ln\frac{1}{P(a|\bar{X})}+(\bar{\Omega_{b}}-\bar{X_{b}})ln\frac{1}{P(b|\bar{X})}) IP(X)=−Ωaˉ+Ωbˉ1(XaˉlnP(a∣X)1+XbˉlnP(b∣X)1+(Ωaˉ−Xaˉ)lnP(a∣Xˉ)1+(Ωbˉ−Xbˉ)lnP(b∣Xˉ)1)
( l n p − 1 lnp^{-1} lnp−1可以把负号提出,like entropy gain)
其中 S X S_X SX表示combinations X的时间序列数据, X a X_a Xa表示 S X S_X SX发生变化后的volume(数值), X b X_b Xb表示 S X S_X SX发生变化之前的volume; Ω a \Omega_{a} Ωa表示X发生变化后的总的volume, Ω b \Omega_{b} Ωb表示X发生变化之前的总的volume; ∗ ˉ \bar{*} ∗ˉ—表示相应区域的时序的均值;
同时:
P ( a ∣ X ) = X a ˉ X a ˉ + X b ˉ , P ( b ∣ X ) = X b ˉ X a ˉ + X b ˉ , P(a|X)=\frac{\bar{X_a}}{\bar{X_a}+\bar{X_b}},P(b|X)=\frac{\bar{X_b}}{\bar{X_a}+\bar{X_b}}, P(a∣X)=Xaˉ+XbˉXaˉ,P(b∣X)=Xaˉ+XbˉXbˉ,
P ( a ∣ X ˉ ) = Ω a ˉ − X a ˉ Ω a ˉ + Ω b ˉ − X a ˉ − X b ˉ , P(a|\bar{X})=\frac{\bar{\Omega_{a}}-\bar{X_a}}{\bar{\Omega_{a}} + \bar{\Omega_{b}} - \bar{X_a}-\bar{X_b}}, P(a∣Xˉ)=Ωaˉ+Ωbˉ−Xaˉ−XbˉΩaˉ−Xaˉ,
P ( b ∣ X ˉ ) = Ω b ˉ − X b ˉ Ω a ˉ + Ω b ˉ − X a ˉ − X b ˉ P(b|\bar{X})=\frac{\bar{\Omega_{b}}-\bar{X_b}}{\bar{\Omega_{a}} + \bar{\Omega_{b}} - \bar{X_a}-\bar{X_b}} P(b∣Xˉ)=Ωaˉ+Ωbˉ−Xaˉ−XbˉΩbˉ−Xbˉ
Isolation Power是基于信息熵的思想。在图2中,所有的combination候选集集构成一个网状图,图中每个节点都可以将数据集分为两部分,包含该属性combination的节点(其子孙节点)和不包含该属性combination的节点。如果一个combination是effective combination,那么网状图中它的所有子孙节点也应该相应的有异常变化(volumn increase),但是她的兄弟节点却没有。因此,一个effective combination是能够完全将整个数据集分成两部分的节点:有明显异常(volumn increase)和没有明显异常(volumn increase)。根据信息论,两个数据集(如A和B)的整体熵,其中每个数据集(A或B)包含具有相同属性的样本(如所有的样本都表现出增加,或所有的样本都没有表现出增加),比两个具有不同属性的样本混合在一起的熵小得多。基于这个概念,计算Isolation Power来模仿熵的计算。
具体的做法是,若一个combination节点的IP值既大于它的子节点IP值,又大于它的父节点的IP值,则可将其子节点与父节点剪枝删除。
例子:
X={Country=India}
Y={Country=India; TenantType=Edu; DataCenter=DC6}
Z={Country=India; TenantType=Edu; DataCenter=DC6;Package=Lite}
如果Y的IP值大于其子集Z小于其超集X,则Y被保留,Z和X将被移出搜索空间。
2.5 结果排序
经过以上三步剪枝,得到一组effective combination的集合,再根据这些combination的相对重要性对它们进行排序。
本文采用一个与Fisher distance相似的分数进行排名:
R = p a ∗ l n p a p b R=p_a*ln{\frac{p_a}{p_b}} R=pa∗lnpbpa
其中 p = V X t V t p=\frac{V_{X_t}}{V_t} p=VtVXt, V X t V_{X_t} VXt表示在某一时间段t内当前有效组合的volume, V t V_t Vt表示在某一时间段t内总的volume。 p a p_a pa, p b p_b pb分别表示变化区域(即异变点之后的一段时间)和变化之前的比率。
这里的 R R R其实是 p a p_a pa和 p b p_b pb的KL散度
得分R:
- 考虑的是组合的全局影响。如果两个组合具有相同的变化率(这意味着它们具有相同的趋势性意义),我们将把数据量较大的那个组合排在前面。
- 通过 p a p b \frac{p_a}{p_b} pbpa反应变化率。
R分数很低的属性组合被认为意义不大,可以进一步剪掉(作者在实践经验中把ths_R设置为1)。最后,我们对剩下的属性组合进行排序,并将它们作为有效组合输出。
2.6 算法总览
iDice算法伪代码如下