paper2skills Playbook

Difference-in-Differences (DiD) for Causal Effect Estimation

Skill-DiD-Difference-in-Differences · 01-因果推断

causalexperimentforecastingpricing广告与投放定价与利润WF-B 广告优化WF-F 动态定价WF-G Listing内容优化
年化 ROI50万
实现难度⭐⭐☆☆☆
业务优先级⭐⭐☆☆☆
业务视角
适用角色增长负责人 / CMO · 数据分析师 · 广告优化师
适用平台Amazon · TikTok Shop · Meta Ads · DTC 独立站
什么情况下用广告预算花了,但不确定哪个渠道真的带来新客;做了大促,不知道销量增长是促销效果还是季节规律
成功是什么样的能区分「真实增量」和「自然购买」,砍掉虚假归因渠道后同等预算 ROI 提升 20-40%
业务痛点
钱花出去了不知道有没有用各渠道报告都说自己贡献最大怎么向老板证明这笔钱值得花

1. 解决的问题

核心思想:利用处理组和对照组在政策/干预前后的变化差异来估计因果效应。基本逻辑是:如果没有干预,处理组的趋势应该与对照组平行(平行趋势假设)。干预后的实际差异减去趋势差异,就是干预的净效应。

2. 核心算法逻辑

核心思想:利用处理组和对照组在政策/干预前后的变化差异来估计因果效应。基本逻辑是:如果没有干预,处理组的趋势应该与对照组平行(平行趋势假设)。干预后的实际差异减去趋势差异,就是干预的净效应。

3. 业务应用场景

业务问题:2025年美国对中国产婴儿推车加征25%关税。团队需要评估:关税究竟导致销量下降了多少?是自然的市场波动,还是关税的直接影响?

应用流程: 1. 定义处理组和对照组: - 处理组:销往美国的婴儿推车(受关税影响) - 对照组:销往加拿大/英国的婴儿推车(未受关税影响) 2. 定义时间窗口: - 干预前:2024年6月-2025年5月(12个月) - 干预后:2025年6月-2026年5月(12个月) 3. 检验平行趋势:事件研究法,看干预前12个月处理组和对照组的趋势是否平行 4. 估计DiD效应:计算交互项系数

预期产出: - 关税导致的销量下降幅度(如:月均销量下降 18%,其中 12% 可归因于关税) - 事件研究图:干预前后各月的动态效应 - 稳健性检验:安慰剂检验、替换对照组

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • 数据要求:需要处理组和对照组在干预前后的面板数据
  • 技术门槛:低,核心是OLS回归
  • 主要挑战:平行趋势假设的检验和满足(需要领域知识选择合理的对照组)
  • 必要性极高:跨境电商面临大量外部政策冲击(关税、平台规则、物流变化),DiD是最自然的评估工具
  • 通用性强:几乎所有"自然实验"场景都适用
  • 实施成本低:不需要实验数据,利用现有历史数据即可

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
Difference-in-Differences (DiD) — 双重差分因果效应估计
用于评估政策/干预对母婴出海业务的因果影响

支持:经典DiD、Staggered DiD(Callaway-Sant'Anna)、事件研究法
"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
import warnings
warnings.filterwarnings('ignore')


# ==================== DiD 核心实现 ====================

class DifferenceInDifferences:
    """双重差分估计器"""

    def __init__(self, method='classic'):
        """
        初始化 DiD 估计器

        Args:
            method: 'classic' 或 'staggered'
        """
        self.method = method
        self.model = None
        self.tau = None
        self.se = None
        self.event_study_results = None

    def fit(self, df, unit_col, time_col, treat_col, post_col, outcome_col,
            covariates=None, cluster_col=None):
        """
        拟合 DiD 模型

        Args:
            df: DataFrame
            unit_col: 单元标识列(如店铺ID、国家)
            time_col: 时间列
            treat_col: 处理标志列(1=处理组,0=对照组)
            post_col: 干预后标志列(1=干预后,0=干预前)
            outcome_col: 结果变量列(如销量、转化率)
            covariates: 协变量列表(可选)
            cluster_col: 聚类标准误的聚类变量(可选)
        """
        df = df.copy()

        # 创建交互项
        df['treat_post'] = df[treat_col] * df[post_col]

        # 构建特征矩阵
        feature_cols = [treat_col, post_col, 'treat_post']
        if covariates:
            feature_cols.extend(covariates)

        X = df[feature_cols].values
        y = df[outcome_col].values

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。