倾向得分匹配PSM | 双重差分DID | AB Test对比

发布时间:2026/7/10 14:05:37

倾向得分匹配PSM | 双重差分DID | AB Test对比
倾向得分匹配PSMPSM能解决什么问题在一场促销活动后业务发现领券的的人均下单金额120元没有领券的人均下单金额80元。是因为发放消费券使得下单金额提升的吗—— 不一定因为领券的人群本来就更爱买东西可能没有券一样会买。这就是选择偏差。两组人群起点不一样不能直接比较。我们希望比较的是 “和领券人群差不多的人如果没领券会怎样”也就是需要找历史消费、活跃度、年龄都相似但刚好没领券的人再比两人花了多少钱这个方法就叫 匹配Matching。那“倾向得分”起到什么作用现实影响领不领券的因素很多比如历史消费金额、所在城市级别、活跃天数、是否容易被push触达等如果按这么多特征一一匹配结果就是几乎找不到完全相同的人。原理的核心是只要两个人在「领券概率」上一样就说明他们“各方面综合相似”。所以PSM起到的作用是第一步用历史特征算每个人“看起来有多像会领券的人”倾向得分第二步给每个领券的人找一个得分最接近、但没领券的人第三步对比两组的结果 —— 这就可以证明下单金额的提升是消费券的作用。本质就是把多维匹配问题压缩成一维得分再匹配。PSM是基于什么原理PSM 基于两个核心理论支柱潜在结果框架Rubin Causal Model, RCM、条件独立假设Conditional Ignorability / Unconfoundedness通俗地说先算一个人“有多像会接受干预的人”再只比较得分相近、但一个干预一个没干预的两人从而近似随机实验的效果。举个例子平台发了 10 万张“满 50 减 10”优惠券用户可以自己领。月底一看领券的人平均花了 120 元没领券的人平均花了 80 元。能不能说领券让人多花了 40 元 不能因为愿意领券的人本来就更爱买东西。如果不处理这个“选择偏差”效果会被严重高估。这时候用 PSM倾向得分匹配给每个领券的人找一个“长得像他、但没领券”的人再比较。消费层级领券人数领券GMV未领券人数未领券GMVPSM效应low500605000555medium1500130800012010high800180300017010结果解读在 low低消费人群里效应只有 5在 medium/high中高消费人群里效应是 10优惠券对中高消费人群效果更好对低消费人群拉动有限。以后发券可以减少给低频用户的投放集中资源给中高频用户。双重差分DID双重差分DID是基于什么理论潜在结果模型Rubin Causal Model, RCM 平行趋势假设Parallel TrendsDID 基于潜在结果框架通过在面板数据中引入个体固定效应和时间固定效应利用处理组与对照组在干预前后双重差分识别平均处理效应ATT它的因果识别依赖于平行趋势假设也就是若无干预两组结果变量的时间趋势是相同的。平行趋势假设若无干预处理组和对照组的 outcome 随时间的变化趋势相同为什么不直接用AB Test而要用DID之所以用 DID 而不是 A/B是因为很多业务和政策干预无法随机分配之所以用 DID 而不是简单前后或组间对比是因为 DID 能同时消除不随时间变的个体异质性和共同时间冲击从而避免严重的混淆偏误。AB Test 不适用的场景限制说明不能随机化​政策、法规、全量上线、线下门店、城市级干预伦理/商业不允许​不能故意不给某些用户核心权益历史数据复盘​功能已上线无法回滚重做实验网络效应/溢出​同一城市随机会污染如补贴、推荐。溢出的概念处理组的干预“漏”到了对照组使对照组不再代表无干预状态。破坏了AB测试的核心假设无相互干扰SUTVA被破坏。比如给A组的用户发券B组的用户没有那么A组的区域订单变多司机/骑手就去A组区域接单导致B组的订单更难被满足了B组的转化率因此被A组影响。或者A组用户把优惠发给B组朋友拼单等B组也受益了压低AB组直接的差距。因为 A/B 要求组间互不干扰而上面场景做不到而采用DID 能用地理/时间隔离代替用户级随机规避同一城市内的溢出污染。举个例子平台1月在北京上线优惠活动想测算活动能不能对GMV带来提升。上海没有这个活动作为对照组。问题是北京消费比上海高1月有元旦春节等节假日大家本来就会多花钱。而DID可以消除这两个干扰的影响。citymonthtotal_amountbeijing2023-111000beijing2023-121100beijing2024-011300beijing2024-021400shanghai2023-11900shanghai2023-12950shanghai2024-011000shanghai2024-021050组别政策前11–12月政策后1–2月变化北京处理组(10001100)/2 1050​(13001400)/2 1350​300上海对照组(900950)/2 925​(10001050)/2 1025​100DID (北京变化)−(上海变化) (300)−(100) 200业务意义优惠活动让北京用户每个月多贡献了 200 元业绩。拆解上海涨了 100 → 这是元旦/春节的自然增长北京多涨了 200 → 这是免配送费的真实效果PSM与DID区别与联系PSM 是横向对比只关心组内特征是否平衡。目的是让两组静态可比。DID 纵向横向对比先算各自前后变化消个体差异再比变化量的差消时间冲击。目的是让两组变化趋势可比。维度PSMDID解决偏误来源​选择偏差组间特征不同组间固有差 时间共同冲击数据要求​丰富协变量 X前后面板 对照组关键假设​条件独立已观测全平行趋势匹配维度​横截面特征相似时间 组别趋势相似能消未观测固定异质​❌✅不随时间那部分一句话总结“找和他差不多的人”“看他和对照组变化差多少”什么时候要用 PSM‑DID 而不是单独 PSM当既有自选又有前后时可以采用PSM‑DIDPSM能做的事① 让处理组和对照组在基期“特征相似”② 控制可以观测的选择偏差。PSM做不到的① 不能消除时间周期的影响比如节假日、大盘增长。② 如果平行趋势边际不满足PSM 样本仍可能残存趋势差。也即PSM 只能消“静态差异”消不掉“趋势差异”。DID能做到③ 不能处理 不随时间而变动的观测不到的比如用户天生特质、潜在付费意愿对趋势的解释。以下场景要用PSM-DID#条件说明1非随机干预用户/城市自选或运营指定需 PSM 平衡协变量2有前后面板同批单位有干预前 干预后能做 DID3处理 / 对照组基线存在显著差异​ 或平行趋势边缘可疑​单独 DID 也可能偏先做 PSM 改善平行趋势条件4你想报告因果效应而非描述差异​需双重差分消除时间×固定效应PSM 补 DID 的短板组间不可比DID 补 PSM 的短板时间趋势、未观测固定效应以下场景不能用PSM-DID情况建议可随机分流A/B直接 RCT随机对照试验只有横截面无前后期只能 PSM承认局限有面板但随机分配城市真自然实验且平行趋势 OK单独 DID 足够处理组 全量用户整个总体都受了干预无对照组需合成控制 / 中断时间序列合成控制法造一个对照组——用多个“未受干预的相似单元”加权组合拼成一个“虚拟对照组”模拟如果该地/产品没被干预会怎样。中断时间序列用干预前后的自身时间趋势——不靠横向对照别人而是用自己干预前的时间序列做对照看干预点前后趋势是否发生突变。DID 、 PSM 与 AB TestA/B 是理想 → DID / PSM 是在观测数据里“尽量像随机实验”。都是为逼近 随机对照试验RCT 的因果识别RCTA/B直接随机 → 无混杂DID用时间和组别双重差分 模拟 RCT 的控制逻辑PSM用匹配 模拟随机分组下的“可比对照组”。三种方法如何选择A/B Test 通过随机化无偏识别因果是黄金标准DID 在无法随机但拥有处理组/对照组前后面板数据时利用双重差分消除不随时间变异质性与共同时间冲击依赖平行趋势假设PSM 在干预非随机且有丰富协变量时通过倾向得分匹配构造可比对照组仅能控制已观测混杂。三者目标相同——估计因果效应适用条件不同常据数据与研究设计选择或联用PSM‑DID。Q1: 能对干预随机分配吗 ├─ YES → ★ A/B Test首选 └─ NO → Q2: 有处理组/对照组【前后面板数据】 ├─ YES → 优先考虑 DID │ └─ 若组间基线差异大 → PSM‑DID └─ NO → 用 PSM确认已观测协变量充分方法能否消未观测偏差说明PSM❌ 只能消可观测观测数据匹配——用已观测特征构造“假随机”对照组DID✅ 消不随时间变未观测需平行趋势准实验 面板——用“前后差分 × 组间差分”模拟控制组AB Test​ ✅✅直接消所有未观测偏差​RCT是因果推断的“黄金标准“3种方法核心对比维度A/B Test (RCT)DID (双重差分)PSM (倾向得分匹配)是否随机​✅ 是❌ 否自然/运营分组❌ 否数据要求​可随机分流 记录结果面板数据同一样本前后 ≥2 期 对照组横截面或面板 丰富协变量 X​控制未观测固定异质​✅ 随机化消去✅ 消去不随时间变部分需平行趋势❌ 只控制已观测 X控制时间冲击​✅同期随机✅通过对照组时间差分❌核心假设​随机化、SUTVA平行趋势​ 无溢出条件独立(CIA)​ 共同支撑典型场景​UI改版、算法上线、发券随机政策试点、城市分批上线、历史复盘用户自选领券/买会员/参加活动主要风险​实操不可行伦理/全量/历史平行趋势不成立 → 偏误遗漏关键未观测变量 → 仍有偏差因果可信度​⭐⭐⭐⭐⭐⭐⭐⭐⭐假设成立⭐⭐⭐仅已观测

相关新闻

Python面向对象进阶:__slots__、@property、枚举类、元类到底是什么?一篇彻底讲明白!(小白必看) (六.2)

Python面向对象进阶:__slots__、@property、枚举类、元类到底是什么?一篇彻底讲明白!(小白必看) (六.2)

2026/7/10 23:36:34

一、多重继承:一个类为什么可以有多个"爸爸"?上一篇文章,我们学习了继承。例如:class Animal:def eat(self):print("动物都会吃东西")创建狗类:class Dog(Animal):pass这时候:dog Dog…

LLM研究动态的生存指南:10个一线博客的技术雷达图谱

LLM研究动态的生存指南:10个一线博客的技术雷达图谱

2026/7/10 9:40:47

1. 这不是一份“资源清单”,而是一份LLM研究动态的生存指南如果你每天打开arXiv首页时,第一反应是快速滑动到“cs.CL”和“cs.LG”分类下,手指悬停在标题上却迟迟不敢点开——因为怕又是一篇30页附录、5个消融实验、3套新指标的论文&#xff…

FPGA加速随机模拟退火算法实现与优化

FPGA加速随机模拟退火算法实现与优化

2026/7/9 4:21:30

1. FPGA实现随机模拟退火算法的核心原理1.1 模拟退火算法的硬件加速挑战模拟退火(Simulated Annealing, SA)作为解决组合优化问题的经典算法,其核心思想源于金属退火过程中的热力学行为。算法通过控制"温度"参数,在搜索空间中逐步收敛到全局最…

2026自动化工程师学数据分析的价值分析

2026自动化工程师学数据分析的价值分析

2026/7/11 4:22:19

一、2026自动化工程师学习数据分析的必要性 随着工业4.0和智能制造的推进,自动化工程师的工作不再局限于传统的控制与硬件维护。数据分析能力逐渐成为自动化工程师的核心竞争力之一。以下是自动化工程师学习数据分析的价值与学习路径大纲。 二、自动化工程师为何需…

Jetpack Compose Paging 3 实战:LazyColumn 实现无限滚动,3步集成网络数据流

Jetpack Compose Paging 3 实战:LazyColumn 实现无限滚动,3步集成网络数据流

2026/7/11 4:22:19

Jetpack Compose Paging 3 深度实践:构建高性能无限滚动列表在移动应用开发中,高效处理大量数据展示一直是核心挑战。传统Android开发中,我们使用RecyclerView配合分页逻辑实现滚动加载,而在Jetpack Compose时代,Pagin…

RAG系统评估指南:从入门到实践

RAG系统评估指南:从入门到实践

2026/7/11 4:22:19

当你费尽心思搭建了一套RAG系统,它终于能回答问题了。但效果到底怎么样?怎么科学地衡量它的好坏?当系统答错时,如何快速定位是检索的问题还是生成的问题?当系统要上线时,又如何持续监控它的表现&#xff1f…

Verilog 小数分频 8.6 倍:双模前置法 3 种实现顺序的相位抖动对比

Verilog 小数分频 8.6 倍:双模前置法 3 种实现顺序的相位抖动对比

2026/7/11 4:22:19

Verilog小数分频8.6倍:三种实现顺序的相位抖动深度解析时钟分频电路作为数字IC设计中的基础模块,其性能直接影响整个系统的稳定性。当我们需要实现8.6这样的小数分频时,双模前置法成为主流选择,但很少有人深入探讨不同实现顺序对输…

Coverage.py:Python 代码覆盖率检测,一个库搞定

Coverage.py:Python 代码覆盖率检测,一个库搞定

2026/7/11 4:22:19

文章目录Coverage.py:Python 代码覆盖率检测,一个库搞定不用它,你缺的是什么支持哪些 Python 版本怎么用比你想的更深一点适合谁用Coverage.py:Python 代码覆盖率检测,一个库搞定 Coverage.py 在 GitHub 上已经拿到 3…

TAS5414C-Q1与PIC18F45K40在汽车电子中的差异与应用

TAS5414C-Q1与PIC18F45K40在汽车电子中的差异与应用

2026/7/11 4:12:18

1. TAS5414C-Q1与PIC18F45K40的定位差异在嵌入式系统设计中,芯片选型往往决定了整个项目的技术路线。TAS5414C-Q1和PIC18F45K40虽然都活跃在汽车电子领域,但它们的核心定位却截然不同。TAS5414C-Q1是德州仪器(TI)推出的一款汽车级Class-D音频功率放大器&…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…