【实战】如何做归因分析?——以断货率变化为例详解三种常用方法(贡献度分析,因素分解分析,变量影响分析,差分法)

【实战】如何做归因分析?——以断货率变化为例详解三种常用方法(贡献度分析,因素分解分析,变量影响分析,差分法)

一、引言:什么是归因分析?

在电商、零售、供应链等业务场景中,我们经常需要回答这样的问题:

某个指标发生了变化,是哪些因素导致的?每个因素的贡献度是多少?

这类问题在数据分析中被称为 归因分析(Attribution Analysis)因素分解分析(Factor Decomposition Analysis)。它广泛应用于销售增长、用户活跃、库存周转、断货率等指标变动的解释中。

归因分析 也被称为:

  • 贡献度分析(Contribution Analysis)
  • 因素分解分析(Factor Decomposition Analysis)
  • 变量影响分析(Impact Analysis / Driver Analysis)
  • 在经济学中也称为 增长核算(Growth Accounting)

本文将以一个实际案例为基础,介绍三种常用的归因分析方法:

  1. 差分法(Differential Method)
  2. 固定变量法 / 替换法(Counterfactual Replacement Method)
  3. Shapley 值法(Shapley Value Method)

并通过 断货率变化 的具体数据,展示每种方法的实现逻辑和计算过程。


二、案例背景与数据说明

1. 指标定义

断货率 = 断货天数总和 ÷ (Asin数量 × 时间周期)

时间周期设为30天。

2. 数据概览

指标初始值(20250501)最终值(20250518)变化量
Asin数量 A81558253+98
断货天数 D2943023950-5480
断货率 R12.03%9.67%-2.36%

目标:分析 Asin 数量增加 和 断货天数减少 各自对断货率下降的贡献。


三、方法一:差分法(Differential Method)

1. 原理简介

差分法基于微分思想,适用于连续可导的目标函数。假设目标函数为:

R=DA×30 R = \frac{D}{A \times 30} R=A×30D

其全微分为:

ΔR≈∂R∂D⋅ΔD+∂R∂A⋅ΔA \Delta R \approx \frac{\partial R}{\partial D} \cdot \Delta D + \frac{\partial R}{\partial A} \cdot \Delta A ΔRDRΔD+ARΔA
其中偏导数分别为:

  • ∂R∂D=1A×30\frac{\partial R}{\partial D} = \frac{1}{A \times 30}DR=A×301
  • ∂R∂A=−DA2×30\frac{\partial R}{\partial A} = -\frac{D}{A^2 \times 30}AR=A2×30D

2. 计算步骤

(1) 偏导数计算
  • ∂R∂D=18155×30≈0.000004087\frac{\partial R}{\partial D} = \frac{1}{8155 \times 30} \approx 0.000004087DR=8155×3010.000004087
  • ∂R∂A=−29430(8155)2×30≈−0.00001475\frac{\partial R}{\partial A} = -\frac{29430}{(8155)^2 \times 30} \approx -0.00001475AR=(8155)2×30294300.00001475
(2) 变化量代入
  • ΔD=−5480\Delta D = -5480ΔD=5480
  • ΔA=+98\Delta A = +98ΔA=+98
(3) 贡献计算
  • 断货天数贡献:
    ΔRD≈0.000004087×(−5480)≈−2.24% \Delta R_D \approx 0.000004087 \times (-5480) \approx -2.24\% ΔRD0.000004087×(5480)2.24%

  • Asin数量贡献:
    ΔRA≈−0.00001475×98≈−0.1446% \Delta R_A \approx -0.00001475 \times 98 \approx -0.1446\% ΔRA0.00001475×980.1446%

(4) 总贡献验证

ΔRtotal≈−2.24%−0.1446%=−2.3846% \Delta R_{\text{total}} \approx -2.24\% - 0.1446\% = -2.3846\% ΔRtotal2.24%0.1446%=2.3846%

与实际变化 -2.36% 接近,误差来源于线性近似。

3. 小结

  • 断货天数减少 贡献约 94.7%
  • Asin数量增加 贡献约 5.3%

四、方法二:固定变量法 / 替换法(Counterfactual Replacement Method)

1. 原理简介

该方法通过保持一个变量不变,只改变另一个变量来观察结果的变化,从而衡量每个变量的独立影响。

2. 计算步骤

(1) 假设 Asin 不变(保持 A₁ = 8155)

Rhypothetical1=239508155×30≈9.79% R_{\text{hypothetical1}} = \frac{23950}{8155 \times 30} \approx 9.79\% Rhypothetical1=8155×30239509.79%

ΔRD=9.79%−12.03%=−2.24% \Delta R_D = 9.79\% - 12.03\% = -2.24\% ΔRD=9.79%12.03%=2.24%

(2) 假设断货天数不变(保持 D₂ = 23950)

Rhypothetical2=239508253×30≈9.67% R_{\text{hypothetical2}} = \frac{23950}{8253 \times 30} \approx 9.67\% Rhypothetical2=8253×30239509.67%

ΔRA=9.67%−9.79%=−0.12% \Delta R_A = 9.67\% - 9.79\% = -0.12\% ΔRA=9.67%9.79%=0.12%

3. 小结

  • 断货天数减少 贡献约 94.9%
  • Asin数量增加 贡献约 5.1%

五、方法三:Shapley 值法(Shapley Value Method)

1. 原理简介

Shapley 值来自博弈论,用于公平分配多个参与者对整体成果的贡献。在数据分析中,可用于评估不同变量对目标指标变化的“公平”贡献。

2. 计算步骤

(1) 定义四个状态
状态ADR
Base81552943012.03%
A only82532943011.91%
D only8155239509.79%
Final8253239509.67%
(2) 枚举所有排列顺序并计算边际贡献
排列顺序A 贡献D 贡献
A → D-0.12%-2.24%
D → A-0.12%-2.24%
(3) 计算 Shapley 值(平均值)
变量Shapley 值
Asin数量 A-0.12%
断货天数 D-2.24%

3. 小结

  • 断货天数减少 贡献约 94.9%
  • Asin数量增加 贡献约 5.1%

六、总结对比

方法断货天数贡献Asin数量贡献是否考虑交互作用
差分法-2.24%-0.1446%
固定变量法-2.24%-0.12%
Shapley 值法-2.24%-0.12%

所有方法得出的结论一致:断货天数的减少是断货率下降的主要原因


七、应用场景

  • 销售额变化归因(价格 vs 销量)
  • 用户留存率变化(新客减少 or 老客流失)
  • 库存周转率提升(出库增加 or 库存积压减少)
  • 广告转化率波动(点击率 or 转化率)
### 乘法型指标的贡献度归因分析方法归因分析中,当目标指标是由多个因子相乘构成时,如 GMV(商品交易总额)= 用户数 × 人均单数 × 均价,采用对数变换的方法可以将乘法关系转化为加法关系,从而更方便地分析各因子对整体变化贡献度。 首先,对原始公式取自然对数: $$ \ln(\text{GMV}) = \ln(\text{用户数}) + \ln(\text{人均单数}) + \ln(\text{均价}) $$ 接着,计算相邻周期的对数差值: $$ \Delta \ln(\text{GMV}) = \Delta \ln(\text{用户数}) + \Delta \ln(\text{人均单数}) + \Delta \ln(\text{均价}) $$ 其中,$\Delta \ln(X) = \ln(X_t) - \ln(X_{t-1})$,表示因子 $X$ 在两个时间点之间的对数变化量。 每个因子的贡献度定义为该因子的对数差值与整体指标对数差值的比值: $$ \text{贡献度}_{\text{用户数}} = \frac{\Delta \ln(\text{用户数})}{\Delta \ln(\text{GMV})} $$ 类似地,可以计算出人均单数和均价的贡献度。所有因子的贡献度之和应接近 1(或 100%)。 --- ### Python 实现示 以下是一个基于 pandas 的实现代码,用于计算乘法型指标中各因子的贡献度: ```python import pandas as pd import numpy as np # 示数据:包含用户数、人均单数、均价 df = pd.DataFrame({ '用户数': [1000, 1200], '人均单数': [2.5, 2.7], '均价': [50, 55] }) # 计算对数差分 df_log_diff = np.log(df).diff() # 计算整体指标 GMV 的对数差分 df_log_diff['GMV'] = df_log_diff['用户数'] + df_log_diff['人均单数'] + df_log_diff['均价'] # 计算各因子的贡献度 contributions = df_log_diff[['用户数', '人均单数', '均价']].div(df_log_diff['GMV'], axis=0) print(contributions) ``` 该代码首先对原始数据取对数并计算差分,然后基于对数差分计算每个因子对整体 GMV 变化的贡献比。 --- ### 注意事项 - 所有因子值必须为正数,否则无法取对数。 - 若因子值中存在零或负值,建议进行平滑处理(如加一个极小的正数)。 - 贡献度反映的是相对变化,适用于波动分析和趋势归因,不适用于绝对值变动的归因。 - 该方法本质上是基于对数线性模型的近似,适用于因子之间相互独立或相关性较低的场景。 --- ### 应用场景 该方法广泛应用于电商、金融、用户增长等领域的指标归因分析如: - 分析 GMV 增长是来自用户数增加、购买频次提升还是客单价上涨。 - 拆解广告点击提升是由于素材优化、投放策略调整还是用户兴趣匹配度提高。 - 判用户活跃度波动是否由新用户增长、老用户留存或活动刺激驱动。 --- ### 可视化建议 将贡献度结果以柱状图或堆叠图形式展示,可以更直观地看出各因子在不同时间段对整体指标变化的推动或抑制作用。如,使用 matplotlib 或 seaborn 可以实现如下可视化: ```python import matplotlib.pyplot as plt contributions[['用户数', '人均单数', '均价']].plot(kind='bar', figsize=(10,6)) plt.title('各因子对 GMV 变化贡献度') plt.ylabel('贡献度') plt.xlabel('时间周期') plt.legend(title='因子') plt.show() ``` --- ### 相关问题 1. 在归因分析中如何处理零值或负值数据? 2. 有哪些可视化工具可用于展示贡献度分析结果? 3. 除法型指标的贡献度归因分析如何实现? 4. 如何判多个因子之间是否存在共线性影响归因结果? 5. 对数变换在归因分析中的适用条件和局限性是什么?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值