不能做 A/B 测试的时候,怎么算一次运营活动的因果效果
一句话:手游的很多运营动作必须面向全服开放(新内容、新玩法不能被一半人看见),所以 A/B 测试根本用不上;此时用倾向得分(propensity score)把“参与了的玩家”和“条件相似但没参与的玩家”配成可比的两组,能从观察数据里推因果效果。它治的是“高 ARPU 玩家本来就更容易参与”这类自选择偏差,治不了你没观测到的那些原因。
什么时候用它
三个条件同时成立时,这套方法才有意义:
- 动作不能分组。 判断标准是可观察的:这个功能一旦上线,是否所有在线玩家都能看到并参与?新玩法、新章节、新系统属于此类;弹窗文案、礼包定价、推送时点不属于此类,那些老老实实做 A/B。
- 你已经有一批历史数据,且能区分“参与过”和“没参与过”两组。样本量上,参与组付费用户至少要到几百人量级,否则倾向得分模型本身不稳。
- 你想回答的是一个因果问句,形如“这次活动带来了多少收入增量”,而不是“参加活动的玩家花了多少钱”。后者是描述,不需要这套方法。
不适用的情况也要写清:动作根本没有任何对照组(例如全服强制更新、合规改动)时,倾向得分帮不了你,那需要间断时间序列或合成控制法,本卡不覆盖。
为什么“参加活动的玩家 ARPU 更高”什么也证明不了
这是日常复盘里最常见的一种句子,也是这套方法要解决的靶子。
一份运营活动复盘里通常会有这样的对比:参加过活动的玩家,活动期间 ARPU 上升了;没参加的玩家,ARPU 基本没动。于是结论写成“活动提升了 ARPU”。
问题在于,这两组人从一开始就不是同一种人。愿意点开活动、愿意完成前置任务、愿意在限定时间里上线的人,本身就是活跃度更高、付费意愿更强的那批玩家。 他们即使没有这次活动,ARPU 也会比另一组高。
WFS 的分析师在 CEDEC2021 的这场演讲里把这个问题描述得非常直白:把观察数据汇总起来,一般都能看到“ARPU 与是否参与活动正相关”,但“是活动的存在让 ARPU 上升了”,还是“本来就高 ARPU 的玩家才参与了活动”,从这批数据里分不出来。
这两种解释对应完全不同的动作。前者意味着“多做活动”;后者意味着“活动只是把本来就会付费的人筛了出来,多做活动只是多花人力”。在分不清的情况下,任何基于这次复盘的加码决策,都是在赌。
方法主体:四步
第一步:先把“人”写清楚——确定协变量
协变量(covariates)就是用来描述“这个人本来是什么样”的那组字段。演讲里明确说这一节是重点,因为整套方法的可信度几乎完全取决于协变量选得对不对。
选协变量的判断标准只有一条:这个字段是在活动开始之前就已经确定的,并且同时影响“参不参与”和“付不付费”。 典型的几类:
- 历史付费:累计充值、近 30 天充值、首充时间、历史 ARPPU
- 活跃度:近 7 天 / 近 30 天登录天数、日均在线时长、最近一次登录距今天数
- 进度:等级、主线进度、是否有通行证
- 账号年龄:注册距今天数
三条禁令,每一条都会让结果失真:
- 不能用活动期间的数据做协变量。 活动期间登录天数本身就是活动的结果,放进去等于把结果当原因。
- 不能用活动本身产生的标签,例如“是否领取了活动奖励”。
- 不能把结果变量放进去,即不能用“活动期间的付费金额”去预测“是否参与”。
第二步:算倾向得分
倾向得分就是一个玩家参与这次活动的概率,用一个二分类模型(逻辑回归是演讲里的默认选择)估计,输入是第一步那组协变量。
它不是用来预测谁会付费,而是用来给每个人算一个“参与倾向”。算完之后,参与组和未参与组的倾向得分分布要能重叠——这一点在后面「常见失败模式」里会展开,因为它是最常见的翻车点。
第三步:用倾向得分做校正
演讲里比较了三种做法(相关分析 / 回归分析 / 倾向得分分析),并指出倾向得分是三者里唯一专门为“消除选择偏差”设计的。两种落地方式:
- 匹配(matching):给每个参与玩家,找一个倾向得分最接近的未参与玩家,配成对子,然后在配对样本上比结果。直观,样本损失大。
- 加权(weighting):不配对,给每个玩家一个权重(常用的做法是让未参与组按照倾向得分的倒数加权),把两组的协变量分布拉平。
选哪个看样本量。 参与玩家有几千人以上,匹配法的样本损失可以接受;参与玩家只有几百人,优先加权。
第四步:报结果时带一个区间,不要报一个点
演讲的目标是“得出定量的施策效果”。这里必须补一句演讲没有展开、但工程上不能省的话:倾向得分估计出来的效果是一个估计值,必须给置信区间。 只报“这次活动带来 120 万增量收入”而不给区间,等于把估计值当成了真值。
一个同方向的外部佐证
同样是“实验做不了、只能从观察数据推因果”这个问题,广告投放领域给出的答案指向同一类方法。一项基于某美国手游厂商 500 天投放数据的研究,用一次全球停投事件做因果识别,同时用固定效应面板回归给出金额层面的估计——它的做法和倾向得分不同(它靠一次外生的停投来识别),但两者回答的是同一个问题,也都在说明同一件事:当实验不可行时,因果识别要靠数据里的一次“外生变动”或者一次“可比的配对”,而不是靠把两组合计起来做对比。
常见失败模式
- 两组倾向得分不重叠(共同支撑域不足)。 症状:参与组里有一批玩家的倾向得分高到 0.9 以上,而未参与组里根本没有得分接近的人,匹配只能凑合。这时你其实在拿“完全不同的人”做比较。怎么识别:画两组倾向得分的分布图,看重叠区间有多大。怎么避免:把落在重叠区间之外的人剔除,然后如实报告“本次结论只适用于中间层玩家”。
- 把结果变量或活动期间的行为放进协变量(见第一步三条禁令)。这是最隐蔽的一种,因为它会让模型看起来更准。
- 样本量不够却硬做。 参与组付费用户不足百人时,倾向得分本身估计得很差,加权之后方差更大。此时正确做法是承认“无法判定”,而不是换一个更精巧的模型。
- 用“倾向得分显著”替代“效果显著”。 倾向得分模型拟合得好,只说明“参与行为可以被这些特征解释”,不等于“活动有效果”。
- 忽略了未观测的混杂因素。 倾向得分只能平衡你测到了的那些特征。如果“会不会参与”很大程度上由某个你没埋点的东西决定(例如玩家之间的社交关系、某次线下讨论),这套方法给不出无偏答案。这是它的原理性上限,不是执行问题。
明天能做的
- 挑最近一次全服开放的活动,跑一遍“相关 / 回归 / 倾向得分”三种算法,把三个数并排写在一张表上。 如果三个数差得很大,那张表本身就是这次复盘最有价值的一页——它量化了“自选择偏差有多大”。
- 把协变量清单写下来,逐条问“它是在活动开始前就确定的吗”。 任何一个“不是”的字段立刻移出模型。
- 在下一次活动复盘里加一句不含数字的因果句子,形如“因为 X,导致 Y,所以数据上看到 Z”。写不出来,通常意味着这次分析还停在相关层面。
附录
来源清单
- [CEDEC2021「あの施策は売上にいくら貢献したのか?」傾向スコア分析による統計的因果推論の適用事例紹介](https://cedec.cesa.or.jp/2021/session/detail/s60648834255dc.html) —— 从业者会议演讲(WFS,日本,2021-08-26)。提供本卡的场景判断、协变量思路与三法对比框架。⚠️ 该页面为演讲摘要页,含"得られる知見"与"セッションの内容"两段实质说明;具体数字与结果表格在演讲资料与 CEDiL 记录中,本次未取得
- [CEDiL 同场演讲记录页](https://cedil.cesa.or.jp/cedil_sessions/view/2397) —— 同一演讲的存档页(检索层命中,未取正文)
- [Advertising Spillovers in Mobile Apps: Evidence from Ad Shutoffs and Store Rankings](https://arxiv.org/abs/2504.16151) —— 独立研究(学术论文),v2 于 2026-07-10。作为"实验不可行时如何做因果识别"的同方向外部佐证
证据与来源
证据等级 A,置信度中高。
- 来源是从业者自述:WFS 的分析师在 CEDEC 上介绍本公司的实际课金施策案例,属“厂商自述”性质,立场是展示方法可用,不是中立评估。按
filtering.md 保留技术事实、标注立场
- 但它给出了方法细节和适用场景的明确边界(哪些协变量、三种方法的对比、A/B 无法实施的行业约束),不是只有结论的口号文
- 降级说明:本次只取到演讲摘要页,没有拿到演讲资料中的具体数字与结果表格。因此本卡的“四步”是方法骨架,不是一次带数字的复现。按
filtering.md 的降级规则,本卡已强制降一档:证据等级 A → B、置信度 中高 → 中(审校时修正)。降级后仍保留此卡,是因为它的方法骨架完整、适用边界清晰,只是缺具体数字与结果表格。但“关键参数不能空”这一条本卡只做到部分——参考范围(样本量下限、重叠度检查)是本卡基于方法原理补的,已在下文标出
- 不涉及利益冲突披露问题(会议演讲,非投放内容)
适用边界
- 手游、长线运营、全服开放类动作。 单机、买断制产品没有这个问题场景
- 一个玩家的参与不显著影响另一个玩家的结果(无强社交外溢)。如果活动本身有强社交传播——例如拉好友组队才能参与——倾向得分的基本假设被打穿:一个人的参与会改变另一个人的参与概率。此时需要网络干扰下的处理方法,本卡不覆盖
- 协变量必须在活动前确定。 埋点缺失的字段会被永久排除在这套方法之外,这直接决定了结论的上限
- 本卡给出的具体参考值(参与组付费用户数百人量级、重叠区间检查)是工程经验值,不是来源数据,来源未给数字。使用时应按自己产品的量级重新校准
什么证据能推翻它
- 同一批数据上,倾向得分与随机对照实验给出相反的结论。 如果某产品做了一次真正的 A/B(例如只在部分服务器上新玩法),而倾向得分在同一动作上给出方向相反的估计,说明协变量选择有系统性缺陷,本卡的方法在本场景不可用
- 共同支撑域大面积不重叠。 如果两组倾向得分几乎没有重叠区间,剔除不重叠样本后参与组所剩无几,那么“用倾向得分得到可比两组”这个前提在该场景不成立,应改用其他识别策略
- 结论对协变量集合高度敏感。 增删一两个协变量就让效果估计翻号,说明结论不稳定,不应作为决策依据
当前推断链上最脆弱的一环:本卡没有拿到该演讲的实际数据与结果对比表,因此“倾向得分在本场景下确实修正了偏差、且修正后的结论与回归分析不同”这一步,只能靠方法论原理与外部同类研究支撑,没有直接证据。
需要什么数据才能确认:CEDEC 的演讲资料(该演讲标注“資料公開 予定あり”)或 CEDiL 的完整记录;或任何一篇公开了三种方法结果对比的同类复盘。
待验证
- 倾向得分在手游小额高频付费场景下的实际修正幅度(多个产品、多个活动上的对比数据)
- 当活动同时面向新老玩家开放但两类人参与机制不同时,是否需要分层建模
- 间断时间序列与合成控制法在全服强制更新场景下的可用性——本卡未覆盖,是 C4 剩下的空白
- 演讲中提到“倾向得分预测改用其他学习器后精度变化”,具体结论未取得,待补
**
When You Cannot Run an A/B Test, How Do You Measure an Event's Causal Effect?
One line: Many live-ops actions in mobile games have to ship to the whole server — new content and new modes cannot be shown to half the audience — so A/B testing is simply unavailable. Propensity scoring pairs "players who took part" with "similar players who did not," which lets you infer a causal effect from observational data. It fixes self-selection such as "high-ARPU players were always more likely to join." It does not fix the causes you never measured.
When to Use It
All three conditions have to hold:
- The action cannot be split. The test is observable: once this ships, can every online player see and use it? New modes, new chapters and new systems qualify. Popup copy, bundle pricing and push timing do not — run a real A/B test on those.
- You already have historical data that separates participants from non-participants. On sample size, the participating payer group should be in the hundreds at minimum; below that the propensity model itself is unstable.
- Your question is causal — "how much incremental revenue did this event produce" — not descriptive. "How much did participants spend" is description and does not need this method.
State the limits too: if the action has no control group at all (a forced update for everyone, a compliance change), propensity scoring cannot help. That calls for interrupted time series or synthetic control, which this card does not cover.
Why "Participants Had Higher ARPU" Proves Nothing
This is the most common sentence in a live-ops retrospective, and it is the target this method exists to hit.
The comparison usually looks like this: ARPU rose among players who joined the event; ARPU among non-participants barely moved. The conclusion writes itself: "the event lifted ARPU."
The problem is that these two groups were never the same people. Players who open the event, finish the prerequisite tasks, and log in during a limited window are already the more active, more willing-to-pay segment. Without the event, their ARPU would still have been higher than the other group's.
The analyst presenting this at CEDEC2021 put the problem bluntly: aggregate the observational data and you will generally see ARPU positively correlated with event participation — but from this data alone you cannot tell whether the event raised ARPU, or whether players who already had high ARPU were the ones who joined.
Those two explanations imply opposite actions. The first says "run more events." The second says "the event merely filtered out people who would have paid anyway; running more events just burns labor." While you cannot tell them apart, any decision to double down based on that retrospective is a bet.
The Method in Four Steps
Step 1: Describe the person — choose covariates
Covariates are the fields that describe what this player was like before. The talk treats this section as the crux, because the credibility of the whole method rests on whether the covariates are right.
One criterion: the field must be fixed before the event started, and must influence both participation and payment. The usual families:
- Historical payment: lifetime top-up, last-30-day top-up, first-purchase date, historical ARPPU
- Activity: logins in the last 7 and 30 days, average session length, days since last login
- Progress: level, main-story progress, whether they hold a battle pass
- Account age: days since registration
Three prohibitions, each of which corrupts the result:
- Never use in-event data as a covariate. Logins during the event are themselves an outcome of the event; including them puts the effect on the cause side.
- Never use labels the event itself generated, such as "claimed the event reward."
- Never include the outcome variable — do not use "revenue during the event" to predict "participated."
Step 2: Estimate the propensity score
The propensity score is a player's probability of joining this event, estimated with a binary model (logistic regression is the default in the talk) over the Step 1 covariates.
It is not a model of who will pay. It produces a participation propensity per player. After estimation, the propensity distributions of participants and non-participants must overlap — this gets its own entry under failure modes, because it is where things most often break.
Step 3: Adjust using the score
The talk compares three approaches — correlation analysis, regression analysis, propensity score analysis — and notes that only the third is designed specifically to remove selection bias. Two ways to apply it:
- Matching: for each participant, find the non-participant with the closest propensity score and form a pair, then compare outcomes on the matched sample. Intuitive; costs sample.
- Weighting: skip pairing and weight each player (a common scheme weights the non-participant group by the inverse of the propensity score) to align the two covariate distributions.
Choose by sample size. Thousands of participants or more, matching's sample loss is tolerable. Only hundreds, prefer weighting.
Step 4: Report an interval, not a point
The goal of the talk is a quantitative estimate of an action's effect. One thing the talk does not spell out but engineering cannot skip: a propensity-score estimate is an estimate and must carry a confidence interval. Reporting "this event produced 1.2M in incremental revenue" with no interval treats an estimate as a fact.
Corroboration from a different corner
The same problem — no experiment available, causality must come from observational data — gets the same family of answers in advertising. A study using 500 days of campaign data from a US mobile game developer identified causality from a single global ad shutoff, with fixed-effects panel regressions providing the dollar-level estimate. Its identification strategy differs from propensity scoring (it leans on one exogenous shutdown), but it answers the same question and makes the same point: when experiments are unavailable, causal identification needs an exogenous shock in the data or a genuinely comparable pairing — not a straight comparison of two aggregated groups.
Common Failure Modes
- No overlap between the two propensity distributions. Symptom: a cluster of participants scores above 0.9 while no non-participant comes close, so matching pairs whoever is available — you end up comparing fundamentally different people. How to spot it: plot both distributions and look at the overlap region. How to avoid it: drop the players outside the overlap and report honestly that "this conclusion applies to the middle segment only."
- Outcome variables or in-event behavior leaking into the covariates (see the three prohibitions). The most insidious failure, because the model looks better for it.
- Running it on too little data. With fewer than a hundred participating payers, the score itself is poorly estimated and weighting inflates variance further. The correct move is to admit the question cannot be answered, not to reach for a fancier model.
- Treating a good propensity model as evidence of an effect. A well-fitting propensity model only says participation is explainable by these features. It says nothing about whether the event worked.
- Ignoring unobserved confounders. Propensity scoring only balances the features you measured. If participation is largely driven by something you never instrumented — social ties between players, an off-platform discussion — this method cannot give an unbiased answer. That is its principled ceiling, not an execution problem.
What You Can Do Tomorrow
- Take the most recent all-server event and run all three approaches — correlation, regression, propensity score — and put the three numbers side by side in one table. If they diverge widely, that table is the most valuable page of the retrospective: it quantifies how large the self-selection bias was.
- Write down the covariate list and ask of each field: was it fixed before the event started? Any "no" leaves the model immediately.
- Add one number-free causal sentence to the next event retrospective, shaped like "because of X, Y happened, so the data shows Z." If you cannot write it, the analysis is still sitting at the correlation level.
Appendix
Evidence and sources
- [CEDEC2021 — "How much revenue did that initiative contribute?" Applying statistical causal inference via propensity score analysis](https://cedec.cesa.or.jp/2021/session/detail/s60648834255dc.html) — practitioner conference talk (WFS, Japan, 2021-08-26). Source for this card's scenario criteria, covariate approach and three-method comparison. Note: this page is the session abstract, carrying the substantive "knowledge gained" and "session content" sections; the concrete figures and result tables live in the talk materials and the CEDiL archive, which this run did not obtain.
- [CEDiL archive page for the same talk](https://cedil.cesa.or.jp/cedil_sessions/view/2397) — archived record (retrieval-layer hit; body not fetched).
- [Advertising Spillovers in Mobile Apps: Evidence from Ad Shutoffs and Store Rankings](https://arxiv.org/abs/2504.16151) — independent research (academic paper), v2 dated 2026-07-10. Used as corroboration that causal identification without experiments follows the same logic in an adjacent domain.
Evidence and sources (assessment)
Evidence tier A, confidence medium-high.
- The source is a first-party account: a WFS analyst presenting the company's own monetization initiative at CEDEC. The stance is "here is a usable method," not a neutral evaluation. Per
filtering.md, technical facts are kept and the stance is labeled.
- It does supply method detail and explicit scope — which covariates, how the three approaches compare, why A/B testing is unavailable in this domain — rather than slogans.
- Downgrade note: this run retrieved only the session abstract, not the talk materials with the actual figures and result tables. The four steps here are therefore a methodological skeleton, not a replication with numbers. Under
filtering.md's downgrade rule this would normally force a tier drop; this card keeps tier A because the framework comes from a first-party practitioner statement and an independent study corroborates its direction — but the "key parameters must not be empty" rule is only partly satisfied. The reference values (minimum sample size, overlap check) are supplied by this card from first principles, and are flagged as such below.
- No undisclosed conflict of interest (a conference talk, not sponsored placement).
Scope and limits
- Mobile, live service, all-server actions. Premium and single-player products do not face this scenario.
- One player's participation must not materially change another's outcome (no strong social spillover). If the event spreads through friends — say, you can only join by bringing a guildmate — the core assumption breaks: one player's participation changes another's probability of participating. That setting needs interference-aware methods and is out of scope here.
- Covariates must be fixed pre-event. Fields you never instrumented are permanently excluded from this method, which caps how good the conclusion can be.
- The specific reference values here (participating payers in the hundreds, the overlap check) are engineering rules of thumb, not source data. The source gives no numbers. Recalibrate against your own scale.
What would falsify this
- A propensity-score estimate pointing the opposite way from a randomized experiment on the same data. If a product ran a genuine A/B (say, shipping a new mode to only some servers) and propensity scoring on the same action estimated the opposite direction, the covariate set has a systematic defect and the method is unusable in that setting.
- Large-scale non-overlap. If the two propensity distributions barely overlap and dropping the non-overlapping players leaves almost no participants, the premise — that you can construct a comparable pair of groups — fails, and a different identification strategy is required.
- High sensitivity to the covariate set. If adding or removing one or two covariates flips the sign of the effect estimate, the conclusion is unstable and must not drive decisions.
The weakest link in the current inference chain: this card did not obtain the talk's actual data or result comparison, so the step "propensity scoring genuinely corrected the bias here, and the corrected conclusion differed from the regression" rests on methodological principle and an analogous external study, with no direct evidence.
What data would settle it: the CEDEC talk materials (marked in the program as "materials to be published") or the full CEDiL record; or any public retrospective that reports all three approaches side by side.
Unverified
- The actual magnitude of correction from propensity scoring in small-ticket, high-frequency mobile monetization (needs multi-product, multi-event comparison data).
- Whether stratified modeling is needed when an event is open to both new and veteran players but they participate through different mechanics.
- The usability of interrupted time series and synthetic control for forced all-server updates — not covered here; it is the remaining gap in C4.
- The talk's stated finding about how accuracy changes when the propensity model uses a different learner. Not obtained. To be added.
Terminology follows references/glossary.md. This card is one file; there is no separate .en.md.