Adtributor: Revenue Debugging in Advertising Systems

原文:https://www.usenix.org/system/files/conference/nsdi14/nsdi14-paper-bhagwan.pdf

本文主要解决在广告系统中,当指标异常波动时在和收益相关的指标的各个维度中去定位根因。

本文实现了一个名为Adtributor的工具,其中实现了一个属性算法,以及一个可视化的接口。该工具可以帮助故障派出人员快速识别异常的潜在原因,在一个大型广告系统中取得了良好的效果。

1. 综述

维度根因定位问题有三大特点:

  1. 系统规模
    每天有大量的用户使用,所以在单个搜索或者点击级别去定位问题不现实,只能在一些聚合的指标上去定位问题。问题定位系统也只有在发现了异常时才触发。
  2. 在指标的多个维度中首先找到能解释异常的维度
  3. 衍生指标的普遍性问题

本文有三点主要贡献:

  1. 提出了一个根因定位的算法。
  2. 对于衍生指标的根因定位问题。
  3. 实现了根因定位的算法,并且开发了一个可视化的工具。

2. 问题引入

2.1 异常检测部分

利用ARMA模型进行预测,当预测结果和实际结果超出一定的百分比偏差时告警。

2.2 问题范围限定

下面的例子,在某个时刻,广告收益的预测值为10050,实际只有50,触发异常告警,并且执行根因分析。
image
这里假设和收益相关只有三个维度分别是数据中心(DC),广告商(AD),设备类型(DT)。上图是该时刻三个维度的实际值和预测值的情况。算法需要定位是哪些维度的哪些元素导致了这次收益下降。

布尔表达式

用如下的布尔表达式描述50$收益下降:

  1. Recenue_drop(DC=X)=47$
  2. Recenue_drop(AD=A1 | AD=A3 | AD=A4)=51$
  3. Recenue_drop(DT=Mobile | DT=Tablet)=49$

作者团队经过长期的案例学习发现,一个异常的根因由多个维度共同导致的情况非常罕见。因此本文将问题限制在只在一个维度的元素组合中寻找异常的根因。

2.3 Explanatory Power(EP) & Succinctness§ & Surprise(S)

稻草人方法(strawman): 我们寻找的解满足以下情况,该维度的一组元素其收入下降达到总收入下降的阈值分数TEPT_{EP},并且是最简洁的组合。

Explanatory Power(EPEP): 一组元素解释指标变化的分数。

Succinctness(PP): 一组元素中元素的个数。

稻草人方法就是去寻找个数最少的一组元素,该组元素的解释力超过TEPT_{EP}

但是仅用稻草人方法有一些不足。如上例所示,数据中心维度中,X的预测收入占比94%,实际收入占比94%,Y的预测收入占比和实际收入占比均为6%。设备类型维度中,PC的预测占比为50%,但是实际占比为98%,Mobile和Tablet的预测占比均为,但是实际占比一个是2%一个是0%。这种变化在广告商维度变化也挺大。

根据稻草人原则,我们会最终定位根因为X数据中心,但是如上所述在设备类型维度元素的预测和实际收入占比的这种变化是让人感到surprise的,所以引入一个新的概念 Surprise(SS): 来描述这种变化。

3. 根因定位算法

3.1 符号

  1. DD: 维度,例如:广告商,数据中心。
  2. CiC_i: 维度的基数,例如:广告商共有100个取值。
  3. EiE_i: 维度的元素,例如:可口可乐是广告商之一。
  4. MM: 指标,例如:总收入,总搜索次数。
  5. Fij(m)F_{ij}(m): 对于指标MM的元素EijE_{ij}的预测值。
  6. Aij(m)A_{ij}(m): 对于指标MM的元素EijE_{ij}的实际值。
  7. F(m)F(m): 指标MM的整体的预测值。
  8. A(m)A(m): 指标MM的整体的实际值。

3.2 Explanatory power

给定元素的EPEP值是该元素的变化在该维度整体变化的占比。例如维度iijj元素的解释力为:
EPij=Aij(m)Fij(m)A(m)F(m) EP_{ij}=\frac{A_{ij}(m)−F_{ij}(m)}{A(m)−F(m)}

3.3 Surprise

对于每个元素EijE_{ij},用pijp_{ij}表示预测占比或者叫先验概率

pij=Fij(m)F(m),Eij p_{ij}=\frac{F_{ij}(m)}{F(m)}, \forall E_{ij}

qijq_{ij}表示实际占比或者叫后验概率。
qij=Aij(m)A(m),Eij q_{ij}=\frac{A_{ij}(m)}{A(m)}, \forall E_{ij}

用JS散度来衡量这两个分布的差异:
DJS(P,Q)=0.5(ipilog2pipi+qi+iqilog2qipi+qi) 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})

其中0DJS10 \leq D_{JS} \leq 1,0表示两个分布相同,值越大差异越大。

(不用KL散度的原因是:一、KL散度不是对称的。二、KL散度是无界的,对于概率值为0的情况KL散度无法处理。)

对于每个元素EijE_{ij}计算surprise值SijS_{ij}

Sij(m)=0.5(plog2pp+q+qlog2qp+q) S_{ij}(m)=0.5 * (p log \frac{2p}{p+q} + q log \frac{2q}{p+q})

其中p=pij(m)p=p_{ij}(m)q=qij(m)q=q_{ij}(m)

3.4 完整算法:

算法描述

最终广告系统收入根因分析方法分为如下三步:

  1. (Explanatory Power)在每个维度中,找到解释性达到TEPT_{EP}的元素集合。
  2. (Succinctness)在每个维度的元素集合中找到该维度最简洁的集合。
  3. (Surprise)对于所有的集合,找到在贡献变化最大的集合。

伪代码:
image
算法中主要有两个参数TEPT_{EP}TEEPT_{EEP}

  • TEPT_{EP}:该维度下的元素组合(该维度的根因元素候选集)的Explanatory Power总和要满足的阈值,满足该阈值的候选集才能被加到该异常的根因组合中。
  • TEEPT_{EEP}:该维度下单个元素的Explanatory Power要满足的阈值,满足该阈值才能被加到该维度的根因元素候选集中。

最终结果取surprise值最大的三个,这里可以改成设置一个surprise的阈值TST_{S},满足该阈值的候选集作为最终结果。

在算法描述中遍历所有具有最小TEPT_{EP}解释力的基数子集非常耗费时间,伪代码中采用贪婪的启发式算法,可以大大降低执行速度。

其他

第四章是介绍衍生指标的EP值和S值的求法,这一块没有仔细看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章