原文:https://www.usenix.org/system/files/conference/nsdi14/nsdi14-paper-bhagwan.pdf
本文主要解决在广告系统中,当指标异常波动时在和收益相关的指标的各个维度中去定位根因。
本文实现了一个名为Adtributor的工具,其中实现了一个属性算法,以及一个可视化的接口。该工具可以帮助故障派出人员快速识别异常的潜在原因,在一个大型广告系统中取得了良好的效果。
维度根因定位问题有三大特点:
本文有三点主要贡献:
利用ARMA模型进行预测,当预测结果和实际结果超出一定的百分比偏差时告警。
下面的例子,在某个时刻,广告收益的预测值为100 , 实 际 只 有 50 ,实际只有50 ,实际只有50,触发异常告警,并且执行根因分析。
这里假设和收益相关只有三个维度分别是数据中心(DC),广告商(AD),设备类型(DT)。上图是该时刻三个维度的实际值和预测值的情况。算法需要定位是哪些维度的哪些元素导致了这次收益下降。
布尔表达式
用如下的布尔表达式描述50$收益下降:
作者团队经过长期的案例学习发现,一个异常的根因由多个维度共同导致的情况非常罕见。因此本文将问题限制在只在一个维度的元素组合中寻找异常的根因。
稻草人方法(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): 来描述这种变化。
给定元素的 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)
对于每个元素 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)。
算法描述
最终广告系统收入根因分析方法分为如下三步:
伪代码:
算法中主要有两个参数 T E P T_{EP} TEP, T E E P T_{EEP} TEEP:
最终结果取surprise值最大的三个,这里可以改成设置一个surprise的阈值 T S T_{S} TS,满足该阈值的候选集作为最终结果。
在算法描述中遍历所有具有最小 T E P T_{EP} TEP解释力的基数子集非常耗费时间,伪代码中采用贪婪的启发式算法,可以大大降低执行速度。
第四章是介绍衍生指标的EP值和S值的求法,这一块没有仔细看。