指标预警和指标归因分析

1 指标预警的基本方法

1.1 数据值异常的定义

  1. 绝对值异常点
  2. 同环比异常
  3. 趋势异常

1.2 异常诊断

1.2.1 经典分析方法

  1. 首先我们通过预测模型进行值的预测
  2. 计算预测残差 = 预测值 - 真实值 ,这一步同时也可以使用滑动窗口的 3 σ 3\sigma 3σ原理进行判断
  3. 结合 3 σ 3\sigma 3σ原理判断残差是否偏离模型
  4. 结合同环比表现综合判断是否是应当关注的异常值

1.2.2 阈值诊断

阈值诊断常借助于统计模型进行,常见的阈值包括历史同期同环比数据以及 3 σ 3\sigma 3σ原理等

1.2.3 预测模型 - prophet模型

在工业生产中,prophet模型能够很好的对时间序列进行预测

prophet模型将时间序列通过加法分解为趋势项、季节项和节假日项以及残差项,其中残差项应当满足正态性和独立性假设,模型如下:

y ( t ) = g ( t ) + s ( t ) + h ( t ) + ϵ y(t) = g(t) + s(t) + h(t) + \epsilon y(t)=g(t)+s(t)+h(t)+ϵ

其中, g ( t ) g(t) g(t)代表趋势项,它表示时间序列中非周期的长期趋势,

s ( t ) s(t) s(t)代表季节项,它表示较长时间范围的周期变化,

h ( t ) h(t) h(t)代表节假日项,它表示较短时间范围的周期变化,

ϵ \epsilon ϵ是模型的残差,也可以理解为随机噪声

1.2.4 prophet模型使用

  1. 输入:

ds表示时间序列的时间戳,pandas date格式

y表示时间序列的取值, 数值类型

  1. 输出:

list包含不同分量的值

  1. 参数

growth:增长趋势模型,分为“linear”与“logistic”,分别代表线性与非线性的增长,默认值为linear

Capacity:在增量函数是逻辑回归函数的时候,需要设置的容量值,表示非线性增长趋势中限定的最大值,预测值将在该点达到饱和

Change Points:可以通过 n_changepoints 和 changepoint_range 来进行等距的变点设置,也可以通过人工设置的方式来指定时间序列的变点,默认值:“None”

n_changepoints:用户指定潜在的”changepoint”的个数,默认值:25

changepoint_prior_scale:增长趋势模型的灵活度。调节”changepoint”选择的灵活度,值越大,选择的”changepoint”越多,从而使模型对历史数据的拟合程度变强,然而也增加了过拟合的风险。默认值:0.05

seasonality_prior_scale(seasonality模型中的):调节季节性组件的强度。值越大,模型将适应更强的季节性波动,值越小,越抑制季节性波动,默认值:10.0

holidays_prior_scale(holidays模型中的):调节节假日模型组件的强度。值越大,该节假日对模型的影响越大,值越小,节假日的影响越小,默认值:10.0

freq:数据中时间的统计单位(频率),默认为”D”,按天统计

periods:需要预测的未来时间的个数。例如按天统计的数据,想要预测未来一年时间内的情况,则需填写365

mcmc_samples:mcmc采样,用于获得预测未来的不确定性。若大于0,将做mcmc样本的全贝叶斯推理,如果为0,将做最大后验估计,默认值:0

interval_width:衡量未来时间内趋势改变的程度。表示预测未来时使用的趋势间隔出现的频率和幅度与历史数据的相似度,值越大越相似,默认值:0.80
当mcmc_samples = 0时,该参数仅用于增长趋势模型的改变程度,当mcmc_samples > 0时,该参数也包括了季节性趋势改变的程度

uncertainty_samples:用于估计未来时间的增长趋势间隔的仿真绘制数,默认值:1000

yearly_seasonality: 数据是否有年季节性,默认“自动检测”

weekly_seasonality: 数据是否有周季节性,默认“自动检测”

daily_seasonality: 数据是否有天季节性,默认“自动检测”

seasonality_mode: 季节性效应模式,默认加法模式“additive”,可选“multiplicative”乘法模式

2 指标归因问题的分析框架

2.1 明确问题

  1. 首先我们要明确解决什么问题
  2. 其次我们要对问题进行数学建模
  3. 最后我们要针对问题选择数据,对模型选择参数(即收集足够多的信息)

2.2 分析定位

  1. 首先我们要从方法库中选择分析问题最合适的方法进行问题拆解
  2. 其次我们要通过方法定位到具体原因
  3. 最后我们要论证原因是否具有明确的业务含义

2.3 解决问题

  1. 首先我们要解释该原因如何回答原始问题
  2. 其次我们要通过原因寻求解决问题的方案
  3. 最后推动执行落实下来的方案

3 指标归因的基本方法

在指标归因中,我们常用到指标拆解和漏斗分析等方法对核心指标进行归因分析,

两种方式对于所处理的数据都有着很强的解释性,结果也相当直观。

漏斗分析实质上是指标拆解的一个特殊情况,其关注点不仅仅在于贡献度,还在每环节漏出,因此在转化场景下有更为突出的使用效能

3.1 确定性推断

  1. 确定性判断主要采用的原则是指标拆解和贡献度可量化
  2. 在进行指标拆解的过程中,我们要注意满足MECE原则(Mutually Exclusive and Collectively Exhaustive)

3.1.1 加|减法类

3.1.1.1 静态拆解 - 解决变化量问题

X = x 1 + x 2 + x 3 + ⋯ + x n Δ X = Δ x 1 + Δ x 2 + Δ x 3 + ⋯ + Δ x n \begin{array}{ll} X &=&x_1 + x_2 + x_3 + \cdots + x_n \\ \Delta X &=& \Delta x_1 + \Delta x_2 + \Delta x_3 + \cdots + \Delta x_n \end{array} XΔX==x1+x2+x3++xnΔx1+Δx2+Δx3++Δxn
其中, X X X是总指标值, { x 1 , ⋯   , x n } \{x_1, \cdots, x_n\} {x1,,xn}是维度拆分后各因素的值,

那么,各个因素的贡献度可以通过以下公式进行计算:
C n = Δ x n Δ X C_n = \frac{\Delta x_n}{\Delta X} Cn=ΔXΔxn
其中, C n C_n Cn即为第 n n n个维度的贡献度

3.1.1.2 动态拆解(单因素拆解) - 解决变化率问题

动态拆解常常用来解决同环比的贡献率问题

由于同环比是一个双因素指标,因此我们在进行分子的加法拆解时,需要固定分母的数值

因此各个分项对于整体同比变化的贡献可以通过如下公式进行计算

C n = Δ x n X 0 C_n = \frac{\Delta x_n}{X^0} Cn=X0Δxn

其中, C n C_n Cn为第 n n n个维度同环比的贡献度, X 0 X^0 X0是基期(上一期)的绝对值

3.1.2 乘法类

乘法类指标常常拥有以下拆解形式:

Y = y 1 × y 2 × ⋯ y n Y = y_1 \times y_2 \times \cdots y_n Y=y1×y2×yn

3.1.2.1 替换法

替换法背后的逻辑非常浅显易懂,该方法主要考虑将基期(上一期)的某一个分量被替换为当期的值并计算总结果值,该值基期总结果值之间的差即可表征该分量对于基期与当期变化的程度

使用数学公式可以表示如下:

I n = ∏ i = 1 , i ≠ n N y i 0 × y n 1 − ∏ i = 1 N y i 0 I_n = \displaystyle{\prod_{i=1,i\ne n}^{N}{y_i}^0}\times {y_n}^1 - \displaystyle{\prod_{i=1}^{N}{y_i}^0} In=i=1,i=nNyi0×yn1i=1Nyi0

在以上公式中,上角标0代表基期数值,1代表当期数值, N N N代表所有指标因素的数量

举一个非常简单的例子,假如GMV拆解公式如下:

G M V = D A U × A R P P U GMV = DAU \times ARPPU GMV=DAU×ARPPU

基期GMV=40000, DAU=100, ARPPU=400;

当期GMV=33600, DAU=80, ARPPU=420;

那么采用替换法,DAU贡献差值为 ( 80 − 100 ) × 400 = − 8000 (80-100)\times 400=-8000 (80100)×400=8000

ARRPU贡献差值为 ( 420 − 400 ) × 100 = 2000 (420-400)\times 100=2000 (420400)×100=2000

由此我们可以看出DAU对整体GMV做出了负向贡献而ARRPU做出了正向贡献

但是,这种方法并不能表示各个分量的精确占比,只能够作为定性衡量分量贡献度的大致依据

3.1.2.2 敏感性分析

与替换法相类似的方法就是敏感性分析法,这种方法通过研究因子本身的波动对目标整体的影响来衡量该指标的重要性

从表达形式上来说,敏感性分析类似于替换法,只不过是以比值的形式出现的

I n = Y 1 − Y 0 Y 0 = Δ y n y n 0 = y n 1 − y n 0 y n 0 I_n = \frac{Y^1-Y^0}{Y^0} = \frac{\Delta y_n}{{y_n}^0} = \frac{{y_n}^1 - {y_n}^0}{{y_n}^0} In=Y0Y1Y0=yn0Δyn=yn0yn1yn0

同样的,这种方法并不能表示各个分量的精确占比,只能够作为定性衡量分量贡献度的大致依据

如果需要我们精确表示各因素占比,我们需要多元数据做一系列处理,这就是LMDI方法的由来

3.1.2.3 LMDI - 乘积因子拆解

LMDI的基本思路是将基期(上一期)和当期的所有指标值取对数,这样我们就可以将乘法公式转化为加法公式进行求解

后续的计算方式就和加法的静态拆解一致了;用数学公式可以表述为:

C n = l n ( y n 1 ) − l n ( y n 0 ) l n ( Y 1 ) − l n ( Y 0 ) C_n = \frac{ln({y_n}^1)-ln({y_n}^0)}{ln({Y}^1)-ln({Y}^0)} Cn=ln(Y1)ln(Y0)ln(yn1)ln(yn0)

在以上公式中, C n C_n Cn代表分量指标贡献值,上角标0代表基期数值,1代表当期数值

3.1.3 双因素法

双因素法解决比率指标的加法拆解问题

加入一个比率指标能够拆分为n个不同的分量指标,那么我们将同时拥有一套总指标比率值和一系列分量指标比率值

这时,我们需要更加巧妙的设计分量指标贡献公式,让最后各分量指标比率贡献值的和正好等于总体比率指标的差值

{ A n = ( Y n 1 − Y n 0 ) × y n 0 B n = ( Y n 1 − Y n 0 ) × ( y n 1 − y n 0 ) C n = A n + B n \left \{ \begin{array}{ll} A_n & = & ({Y_n}^1-{Y_n}^0) \times {y_n}^0 \\ B_n & = & ({Y_n}^1-{Y_n}^0) \times ({y_n}^1-{y_n}^0)\\ C_n & = & A_n + B_n \\ \end{array} \right . AnBnCn===(Yn1Yn0)×yn0(Yn1Yn0)×(yn1yn0)An+Bn

以上公式中, A n A_n An代表分量指标贡献的绝对值,

B n B_n Bn代表分量比率指标在整体比率指标中所占比例

C n C_n Cn还是我们关注的分量指标贡献值

以这种方式设计出的分量指标贡献值计算公式将满足:

∑ C n = Δ Y \sum C_n = \Delta Y Cn=ΔY

3.2 可能性推断

3.2.1 JS散度判断指标相关性

JS散度来源于KL散度,后者是判断两个分布距离的一个数学公式

KL散度的计算公式如下:

K L [ P ( x ) ∣ ∣ Q ( x ) ] = ∑ x ∈ X [ P ( x ) l o g P ( x ) Q ( x ) ] KL[P(x)||Q(x)] = \displaystyle{\sum_{x \in X}[P(x)log\frac{P(x)}{Q(x)}]} KL[P(x)∣∣Q(x)]=xX[P(x)logQ(x)P(x)]

由于KL散度不具备对称性,因此后续提出JS散度,其公式即为KL散度的叠加:

J S [ P 1 ( x ) ∣ ∣ P 2 ( x ) ] = 1 2 K L [ P 1 ( x ) ∣ ∣ P 1 ( x ) + P 2 ( x ) 2 ] + K L [ P 2 ( x ) ∣ ∣ P 1 ( x ) + P 2 ( x ) 2 ] JS[P_1(x)||P_2(x)] = \frac{1}{2}KL[P_1(x)||\frac{P_1(x)+P_2(x)}{2}] + KL[P_2(x)||\frac{P_1(x)+P_2(x)}{2}] JS[P1(x)∣∣P2(x)]=21KL[P1(x)∣∣2P1(x)+P2(x)]+KL[P2(x)∣∣2P1(x)+P2(x)]

由定义可知,JS散度的取值范围是 [ 0 , 1 ] [0,1] [0,1];如果两个分布足够近,其二者JS散度将无限接近于0,这就意味着二者具备极强的相关性;

那么判断指标相关性时,我们可以取遍自变量和因变量的分布对,最后留下与因变量相关性最强的自变量

3.2.2 JS散度 - python实现

在scipy.stats 模块中,entropy函数能够直接求解两个分布KL散度的值,

然后我们可以根据JS散度的计算公式完成JS散度的计算

entropy方法的介绍如下:

scipy.stats.entropy(pk, qk=None, base=None, axis=0)
Calculate the entropy of a distribution for given probability values.
If only probabilities pk are given, the entropy is calculated as S = -sum(pk * log(pk), axis=axis).
If qk is not None, then compute the Kullback-Leibler divergence S = sum(pk * log(pk / qk), axis=axis).
This routine will normalize pk and qk if they don’t sum to 1.

注意,entropy方法的输入必须是两个分布,因此我们需要对原始数据做归一化处理,使其成为一个分布

但如果输入不是分布,该方法也会自动调成为分布进行计算

import scipy.stats as ss
import numpy as np
from scipy.stats import entropy
from sklearn.datasets import load_iris

iris_x, iris_y = load_iris(return_X_y=True)

def js_divergence(p,q):
    p = np.array(p)
    q = np.array(q)
    M = (p+q)/2
    js = 0.5*entropy(p,M) + 0.5*entropy(q,M)
    
    return np.round(float(js),6)

attr_1 = iris_x[:,0]
attr_2 = iris_x[:,1]
attr_3 = iris_x[:,2]
attr_4 = iris_x[:,3]
res1 = js_divergence(attr_1,iris_y)
res2 = js_divergence(attr_2,iris_y)
res3 = js_divergence(attr_3,iris_y)
res4 = js_divergence(attr_4,iris_y)
print("js divergance: attr1:{}, attr2:{}, arrt3:{}, attr4:{}".format(res1,res2,res3,res4))

$ js divergance: attr1:0.157331, attr2:0.18844, arrt3:0.064379, attr4:0.028869

3.2.3 机器学习+SHAP

机器学习是一种进行相关性推断的建模方式

对于常用的树形模型来说,由于其本身可解释性较差,我们常采用SHAP值对其中相关属性的贡献度或者是相关程度进行度量

有关SHAP值推导及编程的过程请参看:特征选择|模型解释|Pearson相关系数|JS散度|SHAP算法

3.2.4 因果推断

3.2.4.1 ABTest

ABTest经常使用两样本之间均值差的假设检验,在数学软件中这种检验常常是双边的t检验

当控制混淆因子相同,只改变目标因子后,我们将获得两组不同分布的样本,将两个样本的均值差进行假设检验,

我们可以得到检验对象与目标因子之间的因果关系,具体检验方法参见ABtest假设检验知识|配对检验|比率检验|单向表-列联表检验

3.2.4.2 DID - Difference in Differences

双重差分法的本质是计算自然实验中实验组和对照组在干预下增量的差距

双重差分的意义在于通过两次差分获取干扰对于实验对象的真实影响

第一次差分是施加干预前和施加干预后实验组与对照组的差分,用于消除每一个个体不随时间变化的差异性

第二次差分是对第一差分的两组值进行差分,用于消除随时间变化的增量,最终得到干预作用于实验对象的净效应

双重差分法需要数据满足以下三个条件:

  1. 平行趋势假设 PTA(Parallel Trend Assumption)

    实验组和对照组在没有干预的情况下,结果的趋势是一样的;即在不干预的情况下,前后两个时间点实验组和对照组的差值一致
  2. 个体处理稳定性假设 SUTVA(The Stable Unit Treatment Value Assumption)

    一致性:个体接受处理后所导致的潜在结果是唯一的

    互不干预性:个体接受处理后导致的潜在结果不受其他个体处理的影响
  3. 线性关系假设

    因变量和结果变脸存在线性关系

3.3 猜测性推断

能够提供一定的信息增量

4 指标拆解的基本方法

4.1 总体原则

  1. 首先要定位核心变化场景
  2. 通过横向拆解和纵向下钻进行综合分析
  3. 指标需要有意义
  4. 指标能够定位到明确团队
  5. 指标不宜过多

4.2 举例

某短视频平台GMV拆解

GMV = 曝光数 * OPM(千次曝光订单量) * 单均价

曝光数 = 供给因素+流量因素

OPM = CTR(点击率) * 次均观流时长 * OPH(单位时长订单量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值