原文:https://www.usenix.org/system/files/conference/nsdi14/nsdi14-paper-bhagwan.pdf
本文主要解决在广告系统中,当指标异常波动时在和收益相关的指标的各个维度中去定位根因。
本文实现了一个名为Adtributor的工具,其中实现了一个属性算法,以及一个可视化的接口。该工具可以帮助故障派出人员快速识别异常的潜在原因,在一个大型广告系统中取得了良好的效果。
1. 综述
维度根因定位问题有三大特点:
- 系统规模
每天有大量的用户使用,所以在单个搜索或者点击级别去定位问题不现实,只能在一些聚合的指标上去定位问题。问题定位系统也只有在发现了异常时才触发。 - 在指标的多个维度中首先找到能解释异常的维度
- 衍生指标的普遍性问题
本文有三点主要贡献:
- 提出了一个根因定位的算法。
- 对于衍生指标的根因定位问题。
- 实现了根因定位的算法,并且开发了一个可视化的工具。
2. 问题引入
2.1 异常检测部分
利用ARMA模型进行预测,当预测结果和实际结果超出一定的百分比偏差时告警。
2.2 问题范围限定
下面的例子,在某个时刻,广告收益的预测值为100
,
实
际
只
有
50
,实际只有50
,实际只有50,触发异常告警,并且执行根因分析。
这里假设和收益相关只有三个维度分别是数据中心(DC),广告商(AD),设备类型(DT)。上图是该时刻三个维度的实际值和预测值的情况。算法需要定位是哪些维度的哪些元素导致了这次收益下降。
布尔表达式
用如下的布尔表达式描述50$收益下降:
- Recenue_drop(DC=X)=47$
- Recenue_drop(AD=A1 | AD=A3 | AD=A4)=51$
- Recenue_drop(DT=Mobile | DT=Tablet)=49$
作者团队经过长期的案例学习发现,一个异常的根因由多个维度共同导致的情况非常罕见。因此本文将问题限制在只在一个维度的元素组合中寻找异常的根因。
2.3 Explanatory Power(EP) & Succinctness§ & Surprise(S)
稻草人方法(strawman): 我们寻找的解满足以下情况,该维度的一组元素其收入下降达到总收入下降的阈值分数 T E P T_{EP} TEP,并且是最简洁的组合。
Explanatory Power( E P EP EP): 一组元素解释指标变化的分数。
Succinctness( P P P): 一组元素中元素的个数。
稻草人方法就是去寻找个数最少的一组元素,该组元素的解释力超过 T E P T_{EP} TEP。
但是仅用稻草人方法有一些不足。如上例所示,数据中心维度中,X的预测收入占比94%,实际收入占比94%,Y的预测收入占比和实际收入占比均为6%。设备类型维度中,PC的预测占比为50%,但是实际占比为98%,Mobile和Tablet的预测占比均为,但是实际占比一个是2%一个是0%。这种变化在广告商维度变化也挺大。
根据稻草人原则,我们会最终定位根因为X数据中心,但是如上所述在设备类型维度元素的预测和实际收入占比的这种变化是让人感到surprise的,所以引入一个新的概念 Surprise( S S S): 来描述这种变化。
3. 根因定位算法
3.1 符号
- D D D: 维度,例如:广告商,数据中心。
- C i C_i Ci: 维度的基数,例如:广告商共有100个取值。
- E i E_i Ei: 维度的元素,例如:可口可乐是广告商之一。
- M M M: 指标,例如:总收入,总搜索次数。
- F i j ( m ) F_{ij}(m) Fij(m): 对于指标 M M M的元素 E i j E_{ij} Eij的预测值。
- A i j ( m ) A_{ij}(m) Aij(m): 对于指标 M M M的元素 E i j E_{ij} Eij的实际值。
- F ( m ) F(m) F(m): 指标 M M M的整体的预测值。
- A ( m ) A(m) A(m): 指标 M M M的整体的实际值。
3.2 Explanatory power
给定元素的
E
P
EP
EP值是该元素的变化在该维度整体变化的占比。例如维度
i
i
i的
j
j
j元素的解释力为:
E
P
i
j
=
A
i
j
(
m
)
−
F
i
j
(
m
)
A
(
m
)
−
F
(
m
)
EP_{ij}=\frac{A_{ij}(m)−F_{ij}(m)}{A(m)−F(m)}
EPij=A(m)−F(m)Aij(m)−Fij(m)
3.3 Surprise
对于每个元素 E i j E_{ij} Eij,用 p i j p_{ij} pij表示预测占比或者叫先验概率
p i j = F i j ( m ) F ( m ) , ∀ E i j p_{ij}=\frac{F_{ij}(m)}{F(m)}, \forall E_{ij} pij=F(m)Fij(m),∀Eij
用
q
i
j
q_{ij}
qij表示实际占比或者叫后验概率。
q
i
j
=
A
i
j
(
m
)
A
(
m
)
,
∀
E
i
j
q_{ij}=\frac{A_{ij}(m)}{A(m)}, \forall E_{ij}
qij=A(m)Aij(m),∀Eij
用JS散度来衡量这两个分布的差异:
D
J
S
(
P
,
Q
)
=
0.5
(
∑
i
p
i
l
o
g
2
p
i
p
i
+
q
i
+
∑
i
q
i
l
o
g
2
q
i
p
i
+
q
i
)
D_{JS}(P,Q)=0.5(\sum_i p_i log \frac{2p_i}{p_i+q_i} + \sum_i q_i log \frac{2q_i}{p_i+q_i})
DJS(P,Q)=0.5(i∑pilogpi+qi2pi+i∑qilogpi+qi2qi)
其中 0 ≤ D J S ≤ 1 0 \leq D_{JS} \leq 1 0≤DJS≤1,0表示两个分布相同,值越大差异越大。
(不用KL散度的原因是:一、KL散度不是对称的。二、KL散度是无界的,对于概率值为0的情况KL散度无法处理。)
对于每个元素 E i j E_{ij} Eij计算surprise值 S i j S_{ij} Sij:
S i j ( m ) = 0.5 ∗ ( p l o g 2 p p + q + q l o g 2 q p + q ) S_{ij}(m)=0.5 * (p log \frac{2p}{p+q} + q log \frac{2q}{p+q}) Sij(m)=0.5∗(plogp+q2p+qlogp+q2q)
其中 p = p i j ( m ) p=p_{ij}(m) p=pij(m), q = q i j ( m ) q=q_{ij}(m) q=qij(m)。
3.4 完整算法:
算法描述
最终广告系统收入根因分析方法分为如下三步:
- (Explanatory Power)在每个维度中,找到解释性达到 T E P T_{EP} TEP的元素集合。
- (Succinctness)在每个维度的元素集合中找到该维度最简洁的集合。
- (Surprise)对于所有的集合,找到在贡献变化最大的集合。
伪代码:
算法中主要有两个参数
T
E
P
T_{EP}
TEP,
T
E
E
P
T_{EEP}
TEEP:
- T E P T_{EP} TEP:该维度下的元素组合(该维度的根因元素候选集)的Explanatory Power总和要满足的阈值,满足该阈值的候选集才能被加到该异常的根因组合中。
- T E E P T_{EEP} TEEP:该维度下单个元素的Explanatory Power要满足的阈值,满足该阈值才能被加到该维度的根因元素候选集中。
最终结果取surprise值最大的三个,这里可以改成设置一个surprise的阈值 T S T_{S} TS,满足该阈值的候选集作为最终结果。
在算法描述中遍历所有具有最小 T E P T_{EP} TEP解释力的基数子集非常耗费时间,伪代码中采用贪婪的启发式算法,可以大大降低执行速度。
4. 衍生指标
4.1衍生指标的EP
派生指标根因问题的解决方案是从偏导数和有限差分微积分改编而来的。(偏导是衡量一个由多个变量组成的函数在其中一个变量变化时的变化情况。由于是在离散域中操作,使用有限差分微积分作为偏导等价物)
通用定义:一个元素i对衍生指标的解释力,即基本指标 m1,m2,…,mk 的函数h(m1,m2,…,mk),作为h(.)的有限差分中相对于i的偏导数,归一化,使二元的所有元素的值加起来为100%。
f
(
.
)
g
(
.
)
\frac{f(.)}{g(.)}
g(.)f(.)的有限差分偏导的形式是:
Δ
f
∗
g
−
Δ
g
∗
f
g
∗
(
g
+
Δ
g
)
\frac{\Delta f*g-\Delta g*f}{g*(g+\Delta g)}
g∗(g+Δg)Δf∗g−Δg∗f
与连续域偏导类似,只是分母中多了一个
Δ
g
\Delta g
Δg。
以衍生指标 A ( m 1 ) A ( m 2 ) \frac{A(m_1)}{A(m_2)} A(m2)A(m1)为例(m1=revenue, m2=clicks),元素j对维度i的解释力,对于形式为m1/m2的派生度量,由以下公式给出:
E P i j = ( A i j ( m 1 ) − F i j ( m 1 ) ) ∗ F ( m 2 ) − ( A i j ( m 2 ) − F i j ( m 2 ) ) ∗ F ( m 1 ) F ( m 2 ) ∗ ( F ( m 2 ) + A i j ( m 2 ) − F i j ( m 2 ) ) EP_{ij}=\frac{(A_{ij}(m_1)-F_{ij}(m_1))*F(m_2)-(A_{ij}(m_2)-F_{ij}(m_2))*F(m_1)}{F(m_2)*(F(m_2)+A_{ij}(m_2)-F_{ij}(m_2))} EPij=F(m2)∗(F(m2)+Aij(m2)−Fij(m2))(Aij(m1)−Fij(m1))∗F(m2)−(Aij(m2)−Fij(m2))∗F(m1)
用上述公式计算每个元素的 E P i j EP_{ij} EPij,然后将其归一化,使其加起来达到100%。
4.2 衍生指标的S
用之前的方法计算surprise在衍生指标中不合适,如表8中广告商A2的例子,如果使用上述方法来计算A2元素的惊奇性,它的值将是0(没有惊奇性)。然而,对于A2的点击次数的变化所导致的每次点击成本的整体变化有很高的预测能力,即106%。
从相对熵的角度来考察这个问题,给定几个measure,首先需要计算measure的联合概率分布,然后计算联合概率分布函数的相对熵。(这里)如果这些measure是独立的(这里假设独立),那么联合概率分布的相对熵(也是JS散度)就是各个measure的概率分布的相对熵之和。