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ˉ