场景回放:面试官把简历放在桌角,抬起头问:“产品经理跑过来说新版详情页的转化率比旧版高了0.5%,想全量上线,你觉得这个结论可不可信?”这个问题看起来简单,但背后牵出来的是一整套A/B测试和统计学的知识链条。A/B测试在数据分析、数据科学、商业分析这些岗位的面试里几乎是必考题,而统计学决定了你能不能从一组实验数据里得出站得住脚的结论。我结合这些年自己面试候选人和被面试的经验,把A/B测试和统计学这块的面试题系统拆一遍,覆盖假设检验、样本量计算、显著性分析、置信区间、常见面试连环追问,尽量还原面试官真正想听的回答思路。
这篇内容主要适合三类人:正在准备数据分析面试的人,平时会用A/B测试但理论基础不太扎实的从业者,以及想系统补一下统计学短板的产品或运营同学。里面的公式不会堆太多,我会把每个概念先翻译成人话,再给可以直接套用的计算方法和面试回答模板。
1. A/B测试面试的第一关:先搞懂业务场景到底在问什么
1.1 面试官问A/B测试,其实是在考察你的完整分析闭环
很多候选人一听到“A/B测试”就条件反射开始背流程:定义指标、确定分组、跑实验、看显著性。这个回答方向没错,但分拿不高。面试官真正想看的是你能不能从业务问题出发,走完一个完整的数据分析闭环:业务目标拆解、指标口径定义、实验设计、数据采集、统计分析、最终业务决策。
我面试别人的时候,如果候选人直接跳到“P值小于0.05就显著”,我会立刻追问一句:那如果这个业务场景根本不适合做A/B测试呢?所以第一个要建立的思维是,A/B测试不是万能工具。它是用来验证因果关系的,但前提是你有足够的流量、指标可以被稳定测量、实验单元能够随机分配。在回答任何A/B测试设计题之前,先花三十秒把业务场景、实验单元、核心指标说清楚,这个开场基本就赢了一半。
一个比较稳妥的回答框架是:
- 先还原业务目标:这个实验要解决什么问题,提升什么商业指标;
- 再定义核心指标和辅助指标:主指标用来决策,辅助指标用来排查异常和发现副作用;
- 接着确定实验单元和分组粒度:用户、设备、账号还是行为;
- 然后算样本量和实验时长;
- 最后说明分析方法和决策标准。
这套框架的好处是让面试官看到你不是只会套模板,而是真的有从业务到统计再到决策的全局观。
1.2 高频业务场景题:指标口径与实验单元是重灾区
A/B测试面试里最容易翻车的两个人是“指标口径”和“实验单元”。先说实验单元。常见的有user_id、device_id、cookie、账号,甚至订单。它们之间最大的区别在于“独立性”。
假设你要给一个App做新功能测试,想让一部分用户体验新版界面,一部分用户保留旧版。如果按cookie来分,同一个用户换个设备就可能被分到两个组里,这就会导致实验组和对照组之间产生交叉污染。正确的做法是优先使用企业标识或用户唯一标识,这个在电商、内容、金融等行业里基本默认按用户维度来做实验。
再说指标口径。以点击率为例,是点击PV除以曝光PV,还是点击用户数除以曝光用户数?前者反映行为层面的反应强度,后者反映用户层面的渗透率。大多数实验用用户级指标做核心判断更合理,因为实验单元是用户,如果指标还是事件级,会引入同一用户的多个样本点,导致样本不独立,最后显著性检验会失真。
举个具体例子:某电商App想优化商品详情页的购买转化率,核心指标是“下单用户数/进入详情页用户数”,实验单元是user_id。如果我们错误地统计成“下单订单数/详情页UV”,一方面重复购买用户会放大实验组效果,另一方面订单数和用户数之间的关系会藕断丝连,检验的独立性假设就破了。面试时主动把这种细节讲出来,会明显加分,因为它是实际业务里最常踩的坑。
1.3 如何优雅地回答“这个实验值不值得做”
面试官有一个高频追问:如果业务方没有从0到1做实验的需求,你还会不会支持他用A/B测试?这个问题背后问的是ROI思维。在回答时可以从实验成本、机会成本、流量成本三个角度来拆。
实验成本包括开发埋点、排期、数据回刷、分析师时间;机会成本是实验期间不能上线其他策略,可能错失增长窗口;流量成本是样本量不够甚至要全量投放才能出结果时,实验就失去了意义。当你把这些成本摆出来,再问“这个实验值不值得做”,你的答案就已经不是简单“做”或“不做”,而是一个基于投入产出的判断。
这里可以用一个比较经典的判断框架来回答:先明确期望提升,也就是最小可检测效应(MDE);再估算要达到统计学显著需要的样本量;结合DAU和可分配流量算出运行时长;最后对比实验期间的业务风险和收益预期。如果实验要用三周才能跑出结果,但业务活动窗口只有十天,那这个实验设计本身就需要调整,而不是硬着头皮上。
2. 统计学基础:假设检验的核心逻辑
2.1 先理解原假设与备择假设的“无罪推定”
假设检验是A/B测试的底层地基,其中原假设(H0)和备择假设(H1)的设定又最重要。很多人背过定义,但没有真正理解为什么这么设。用法律系统来类比就很好懂:在法庭上,默认被告是无罪的,控方需要拿出足够证据才能推翻这个假定。这里的“无罪推定”就是原假设,“有罪”就是备择假设。你不能证明一个人无罪,只能说证据不足以证明他有罪。
放到A/B测试里:原假设通常是“新版本和旧版本没有差异”,也就是新版转化率等于旧版转化率;备择假设是“新版本和旧版本有差异”,也就是新版转化率不等于旧版转化率。我们收集数据,计算P值,如果P值足够小,就说明在“没有差异”的前提下,出现当前这种结果的可能性太低,于是拒绝原假设,认为差异显著。
这个设定背后有个很关键的点:我们永远无法证明原假设为真,只能拒绝原假设或者不拒绝原假设。如果你想证明“新版更好”,其实你是在收集证据去拒绝“新版没有更好”这个假设。面试中主动说出这层逻辑,比单纯背“拒绝H0接受H1”要更显功力。
2.2 P值的含义,以及为什么它常常被误解
P值大概是统计学里被误解最多的概念。我几乎每次面试都会问一句“P值等于0.03是什么意思”,能完全答对的人不到三分之一。最常见的错误答案是“H0为假的概率是3%”或者“我做错决定的概率是3%”。这两个都不对。
正确的理解是:在原假设为真的前提下,观察到当前样本这么极端甚至更极端的概率是3%。注意,这里的前提是假设H0为真,讨论的是数据出现的概率,不是H0为假的概率。用一个生活化的类比来说:假设你的朋友没有超能力,只是瞎猜硬币正反面,那么他连续猜中十次正面的概率大约是0.1%。现在他真的连续猜中了十次,那你要么相信他运气逆天,要么更倾向于怀疑他真有超能力。P值就是那个“运气逆天”的概率,当它足够小,我们就选择怀疑原假设。
在面试里,你可以用一个简洁的公式流:P值 = 在H0为真时,观测到至少这么极端结果的概率。同时补一句“P值不是效应大小,所以P值小不代表效果好”,这句话能防止面试官觉得你概念不清。
2.3 犯两类错误怎么权衡:alpha与beta
假设检验有两条“犯罪路径”:第一类错误是把没有差异的结果判成有差异,第二类错误是把真实存在的差异漏掉了。第一类错误用alpha控制,通常设定为0.05,意思是“我允许有5%的概率误判”;第二类错误用beta控制,统计功效等于1减去beta,代表“当真实差异确实存在时,我能正确检出的概率”,行业惯例是要求0.8或者更高。
面试里经常出现这样的追问:如果样别量不够,两组差异看起来不显著,能说明新版本一定没用吗?这时候就要用第二类错误来回答:样本量不足时,检验功效很低,即便真实存在差异,也可能检不出来。不做功效分析就下“无效结论”,这是很大的统计风险。
alpha和beta之间的权衡关系也很重要。如果业务上很怕误上线一个没用的功能,那就要把alpha设严一点;如果更怕漏掉一个有用的功能,那就得提高功效、增加样本量。面试时能主动提到“换一个业务场景,我会调整这两者的优先级”,会让你显得很有实战判断力。
3. A/B测试实验设计:样本量、运行时长与最小可检测效应
3.1 样本量计算:从效应量到均值/比例检验
样本量计算几乎是A/B测试面试的必问题。它背后的逻辑是:如果你的实验组和对照组真有一个真实差异,你需要足够多的样本才能把“信号”从“噪声”里稳定地捞出来。
对于比例类指标,比如转化率,每组所需样本量可以用下面的公式估算:
n = ((Z_{1-alpha/2} + Z_{1-beta})^2 * (p1 * (1-p1) + p2 * (1-p2))) / (p1 - p2)^2
其中p1是基线转化率,p2是实验组的预期转化率,alpha通常取0.05,beta通常取0.2。我们直接用Python这个公式写出来:
import math from scipy import stats def calc_sample_size(p1, p2, alpha=0.05, power=0.8): z_alpha = stats.norm.ppf(1 - alpha / 2) z_beta = stats.norm.ppf(power) delta = p1 - p2 n = math.ceil( ((z_alpha + z_beta) ** 2) * (p1 * (1 - p1) + p2 * (1 - p2)) / (delta ** 2) ) return n # 例子:基线转化率10%,期望提升到12%,也就是绝对提升2个百分点 print(calc_sample_size(0.10, 0.12))跑出来的每组样本量大约在3800多。这个数量级和用在线样本量计算器得到的结果是一致的。实际业务中,我们通常会在此基础上再放大10%到20%,因为要考虑用户流失、埋点缺失、数据清洗等损耗。
如果是均值类指标,比如人均访问时长、客单价,样本量公式会用到方差。处理思路其实差不多,只要把比例中的p*(1-p)替换成方差估计值就行。面试时多被追问的就是“方差从哪里来”,你可以回答用历史数据或AA实验的方差来估计,这是比较标准的做法。
3.2 运行时长怎么定:不仅有样本量,还要考虑新奇效应
样本量算出3800,并不意味着实验跑一天就够了。A/B测试的运行时长由两个约束条件同时决定:一是样本量约束,二是时间效应约束。
样本量约束比较好理解:每天可进入实验的用户数有限,假设日活跃用户是10万,实验组和对照组各分50%,那么每天大约有5万用户体验新版、5万用户体验旧版。如果需要3800人一组,理论上第一天就够了。但事情没这么简单,因为用户行为存在“新奇效应”。
新奇效应是指新版本刚上线时,用户因为新鲜感而点击率虚高,几周后效果回落到真实水平。如果你只跑两天就下结论,很可能把一个短期效应当成长期效果,上线后立刻被打脸。所以在面试里,我建议的回答是:先算理论需要几天,再结合业务周期设置最短运行时长,一般不少于7天,覆盖一个完整的自然周;如果有周期性特征,比如电商要覆盖周末和工作日对比,最好跑14天甚至更长。
另外,运行期间要尽量避免其他策略并行造成混淆。如果刚好赶上大促、节假日、内容热点,流量和用户行为都会异常,实验结果容易失真。遇到这种情况,可以考虑顺延实验期,或者在分析时用分层对比做一定程度的修正。
3.3 埋点与分组:保证随机化的几种做法
分组随机化是A/B测试的灵魂。如果分组有偏,后面所有统计检验都不成立。面试常问的问题是:你会怎么把用户随机分到实验组和对照组?
最稳妥的方法是哈希分桶,把user_id经过MD5或SHA256后取模,把用户映射到0到99的分桶里,再指定某几个分桶为实验组。这样做的好处是:同一个用户永远进入同一个桶,实验可复现,也方便后续做多实验的冲突隔离。
A/B测试需要保证的另一个关键点是分组的稳定性。有些候选人会说用device_id分组,但用户可能换设备、清cookie、重装App,这种情况下分组会漂移。所以核心逻辑是“以业务可稳定追溯的用户身份作为分组键”。在金融风控这类场景里,用户身份、设备、IP可能是不同维度,你甚至需要先定义“哪个身份适合作为实验单元”,这个比直接套公式更见功力。
面试官还可能追问:如果用户本身做过实验,导致他的行为被污染了,怎么办?这时候可以考虑在分析时剔除曾参加过同类型实验的用户,或者直接用分层随机化让每组的新老用户比例保持一致。很多时候,业务上的异常才是面试官真正想考察的点,数据分析不能只会算数,还要能感知数据的“脏”和“偏”。
4. 结果分析阶段:显著性检验与置信区间实战
4.1 t检验与z检验的选择
A/B测试中比较两组均值或转化率时,最常用的是t检验和z检验。面试里喜欢问“什么时候用t检验,什么时候用z检验”,但这种问法往往是一个陷阱,因为实际业务里两者在大样本下结果几乎一样。
从理论出发:z检验适用于总体方差已知且样本量足够大的场景;t检验适用于总体方差未知、需要用样本方差估计总体的场景。实际业务中我们几乎永远不知道总体方差,所以更稳妥的说法是用t检验而不是z检验。许多统计软件默认输出的也是t检验结果,比如SciPy里的ttest_ind。
具体到代码,非常简洁:
from scipy import stats # 实验组和对照组的人均价值或人均时长 group_a = [float(x) for x in range(1, 101)] group_b = [float(x * 1.2) for x in range(1, 101)] t_stat, p_value = stats.ttest_ind(group_a, group_b) print(f"t统计量: {t_stat:.4f}, P值: {p_value:.4f}")这段代码里我特意用了两组长度只有100的数据,因为小样本下t检验更容易看出效果。如果样本量很大,t分布会趋近正态分布,t检验和z检验的差异会很小。所以在面试中完整回答应该是先讲理论适用条件,再点出实际分析中的简化处理,最后说明工具选择对结论影响不大,但是假设条件的检验不能省。
需要注意,使用t检验前最好看一下两组方差是否接近。如果方差异常大,可以使用Welch t检验,只需要把参数equal_var设为False。面试时主动提到不等方差问题,说明你处理过真实数据,而不是只会下载现成模板。
4.2 卡方检验用于比率类指标
A/B测试中的转化率对比,还有一种常见写法是卡方检验。它本质上是比较实际频数和期望频数之间的偏离程度。两组用户分别点击和未点击的数据可以整理成一张2×2列联表,然后计算卡方统计量。
举个例子:实验组有9800人没点击、200人点击;对照组有9600人没点击、400人点击。用Python做卡方检验:
from scipy.stats import chi2_contingency table = [[9800, 200], [9600, 400]] chi2, p_value, dof, expected = chi2_contingency(table) print(f"卡方统计量: {chi2:.4f}, P值: {p_value:.6f}")这个P值会远小于0.05,说明两组点击率差异非常显著。从直觉上也很容易理解,实验组点击率200/10000约2%,对照组400/10000约4%,差异确实很大。
面试时讲卡方检验,重点不是说“我会调用这个函数”,而是解释卡方检验背后的逻辑:计算每个单元格的期望频数,比如总点击次数已定,如果两组真实点击率相同,两个组的点击量应该按照各自的样本量按比例分配,然后把实际频数和期望频数的差异累计起来,得到卡方统计量。这个统计量服从卡方分布,自由度在2×2表里是1,再根据卡方分布算出P值。
这个解释能直接击中南向面试官的心,因为它说明你理解检验的构造逻辑,而不是单纯记API。更进阶的回答是补充一句:当样本量很大时,双比例z检验和卡方检验在数学上是等价的。
4.3 置信区间怎么解读,如何避免常见误读
显著性检验只告诉你“有没有差异”,置信区间还告诉你“差异大概有多大”。这个信息在实际业务里非常关键,因为一个P值小于0.05的结果,如果提升幅度只有0.01个百分点,业务上大概率不值得投入。
置信区间的准确定义是:如果我们重复做很多次实验,每次构造一个95%置信区间,那么大约95%的区间都能覆盖真实的总体参数。这句话说起来拗口,很多人容易误解成“真实参数有95%的概率落在区间内”,但从频率学派的角度来看,参数是固定值,不是随机变量,是区间在随机变动。
在面试里直接用这句话来防杠,特别有效。然后补一句业务解读:置信区间越窄,说明我们对效应量的估计越精确;区间越宽,说明样本噪声越大。如果置信区间下限很低但上限很高,这样的实验结果即使显著,也说明不确定性很大,不建议全量上线。
用Python可以这样构造均值差的置信区间:
import numpy as np from scipy import stats a = np.random.normal(100, 15, 500) b = np.random.normal(103, 15, 500) mean_diff = b.mean() - a.mean() se = np.sqrt(a.var(ddof=1) / len(a) + b.var(ddof=1) / len(b)) ci_low = mean_diff - 1.96 * se ci_high = mean_diff + 1.96 * se print(f"均值差: {mean_diff:.2f}, 95%置信区间: [{ci_low:.2f}, {ci_high:.2f}]")这里的1.96就是标准正态分布在95%置信水平下的临界值。面试现场如果能手写这段代码,基本可以用“实战型数据分析师”来定义你了。
4.4 多重比较与peeking问题
实验分析里最隐形的坑是“偷看数据”,统计上叫peeking。产品经理每天打开实时看板,第三天看到P值小于0.05就开始庆祝,然后把这个结论当最终结论。问题在于,你反复在不同时间点看P值,其实是在做多次检验,每一次都有5%的假阳性风险,多次累积下来,整体犯错的概率会远高于5%。
我在实际业务里碰到过很多次这种场景。最典型的是“实验刚跑两天,PM发消息说效果显著”。这时候我通常会先按住节奏,查一下当前样本量和预定的最小样本量差多少,如果还差得很远,那这个“显著”基本不靠谱。因为在样本量不足时得到的显著结果,往往是被高估的效应量,也就是所谓的“假阳性膨胀”。
面试中遇到这个问题,可以分三步回答:
- 第一,和业务方约定好决策周期,在达到最小样本量之前不看P值;
- 第二,如果确实需要滚动监测,使用序贯检验或者alpha spending策略,而不是普通P值;
- 第三,多指标同时看时,做多重比较校正,比如Bonferroni校正,或者用FDR(错误发现率)来控制整体风险。
这部分能讲清楚,说明你已经不是会跑实验,而是会管理实验,这两者的差距在面试里非常大。
5. 面试中的统计学细节题:中心极限定理、分布与检验方法
5.1 中心极限定理为什么是A/B测试的基石
中心极限定理是大样本推断的基石,也是A/B测试里很多近似方法能成立的原因。它说的是:无论原始总体是什么分布,只要样本量足够大,样本均值的抽样分布都会近似正态。
转化率这类数据本质上来自伯努利分布,取值只有0和1,分布形态长得非常不“正态”。但如果我们一次取几百上千个用户的转化结果来计算平均值,这个平均值的分布会非常接近正态分布。这就意味着,即使数据本身不是正态的,我们也可以放心地用z检验、t检验以及基于正态分布的置信区间公式来做推断。
招聘面试时经常问“样本量多少才算足够大”。教科书上的经验值是n≥30,但实际数据要复杂得多。如果说是高度偏态的数据,比如用户活跃天数呈长尾分布、绝大多数人活跃很少而少数人天天刷,那么30个样本根本不够,100个都未必够。所以回答时我会带一句:要看分布的偏态程度,至少要让抽样分布看起来够“滑”,必要时可以画直方图或做正态性检验。
5.2 正态分布、二项分布、泊松分布怎么选
面试官可能会用一些看似基础的问题来考你对分布的敏感度。比如,用户点击率、用户页面访问次数、用户单日下单金额,分别适合用什么分布?
点击率是典型的二项分布,因为你把每次曝光看作一次独立试验,结果为点击或不点击,成功概率就是点击率。当曝光次数足够大时,二项分布可以用正态分布近似,这也是A/B测试里用比例检验不必纠结于“数据不服从正态”的原因。
访问次数、客服消息数、用户主动行为次数这类计数数据,更常用泊松分布。泊松分布描述的是在一个固定时间或空间窗口内,稀有事件发生次数的分布。比如一小时内客服消息量,理论上没有上限,但均值不高,形状右偏,尾部很长。
用户单日下单金额是连续型右偏数据,你最好不要拿它硬套正态分布。这类数据在实验里如果作为核心指标,通常是取对数后再比较,或者用基于秩的非参数检验。面试的时候把“分布决定检验方法”这条线索串起来,会显得你有建模感,而不是只懂复制代码。
5.3 参数检验与非参数检验的使用边界
经典面试题:“如果数据严重偏态,而且有大量异常值,你还能用t检验比较两组均值吗?”这是一个很阴险的问题。因为从理论上说,如果样本量很大,中心极限定理能帮我们兜底,t检验仍然近似有效。但异常值对均值的影响很大,可能让均值这个统计量本身失去业务意义,这时候就算检验显著,结论也不可靠。
更稳妥的做法是先看业务逻辑。如果异常值是由错误埋点或不计成本的特殊用户造成的,应该做数据清洗;如果异常值本身就是业务的一部分,比如大额订单,那么直接删掉会反而会损失真实信息。可以考虑用中位数做比较,结合Mann-Whitney U检验这种非参数方法。
非参数检验不依赖正态性和方差齐性假设,用的是秩次而不是原始值,对异常值稳健得多。缺点也很明显,它把数值大小转换为顺序,会丢失一些信息,检验功效通常比参数检验低一些。面试中把这两点讲出来,就说明你真正理解了它们各自的优劣。
5.4 常见统计学概念快查表
面试前把下面的概念快速过一遍很有用。我整理成一张速查表,方便你在最后冲刺阶段回顾。
| 概念 | 一句话理解 | 面试常见误区 |
|---|---|---|
| 原假设H0 | 默认没有差异,需要证据推翻 | 把H0当成“需要被证明为真” |
| 备择假设H1 | 我们真正想发现的结果 | 和H0混淆 |
| 显著性水平alpha | 允许犯第一类错误的概率 | 误以为是“结论正确的概率” |
| P值 | H0为真时出现当前数据的概率 | 误以为是“H0为假的概率” |
| 第二类错误beta | 真实差异被漏掉的概率 | 忽略它导致“不显著=无差异”的错误结论 |
| 统计功效1-beta | 能正确检出真实差异的概率 | 样本量不足时功效其实很低 |
| 置信区间 | 重复实验中约95%覆盖真值 | 误以为是“真值落在区间的概率” |
| MDE | 期望能检出的最小差异 | 没有定义就盲目算样本量 |
| 中心极限定理 | 大样本下抽样均值近似正态 | 误以为“原始数据本身必须是正态” |
面试前如果时间紧张,只背这张表就把大部分统计概念题的基本盘稳住了。
6. 模拟面试复盘:高频问题与经典回答思路
6.1 “设计一个A/B测试”怎么答
这类题目是综合题,面试官给一个业务场景,让你从0到1设计一个A/B测试。拿到题,先不要着急算,把逻辑顺顺清楚比较重要。我会用一套固定模板来控制回答节奏:
- 第一步,明确实验目标。用一句话说清楚要验证什么,比如“新版首页是否提升次日留存”。
- 第二步,定义指标。主指标取次日留存率;辅助指标取人均浏览时长、崩溃率、关键路径转化率。
- 第三步,确定实验单元。这里用user_id做随机分桶,按哈希取模,保证稳定。
- 第四步,计算样本量。基线次日留存率按历史数据来,比如40%,MDE设为2个百分点。用比例检验样本量公式估算每组人数。
- 第五步,确定运行时长。按DAU和可分配流量算理论天数,再叠加7天周期约束,最后取较大值。
- 第六步,实验前做一次AA测试,确认分组无差异。
- 第七步,实验结束后,先看主指标显著性,再看辅助指标是否异常,最后按分群维度做探索分析。
这套回答的节奏感很重要,能覆盖大部分面试官考察点。如果面试官中间插话追问某个细节,就顺着他的问题展开。
6.2 “如果结果不显著怎么办”怎么答
面试官特别喜欢问“结果不显著,这个新功能还要不要上”。这个问题没有标准答案,但回答思路能看出你的统计功底。多数人直接说“不显著就是没效果”,这个回答在统计上是不成立的,因为不显著只表示“没有足够证据拒绝无差异假设”,并不是“证明无差异”。
正确的处理路径是:先检查数据质量,比如埋点是否完整、实验组是否有异常流量、是否存在用户泄漏;然后看置信区间,如果区间上限可能包含一个有业务价值的效应量,说明样本量不足,不能下结论;再做分层分析,看不同新老用户、不同端口、不同地区是否存在显著差异。不过要提醒一句,分层分析会引入多重比较风险,所以要合理控制后继续看主指标。
最后落地到决策上:如果主指标不显著,但辅助指标显著恶化或改善,也要谨慎考虑。比如转化率没变、但崩溃率大增,这种实验是不能上线的。用这种结构回答问题,面试官会觉得你做过真实业务,而不是只会套统计学概念。
6.3 “如何判断实验是否有效”怎么答
很多候选人把“有效”等同于“P值显著”,这个认知过于简化。我自己的判断框架是三层:统计显著、业务显著、可解释。
统计显著就是P值是否小于设定的alpha,或者置信区间是否包含零。业务显著是看效应量是否达到业务方预先设定的MDE,比如转化率提升了0.02个百分点,P值确实显著,但商业价值微乎其微。可解释是看这个差异是否符合业务逻辑,有没有一种合理的因果解释,如果没有解释只是凑出来的噪声,那再显著也要打问号。
举个例子,某一次我们跑实验,实验组点击率显著上升,但客单价显著下降。如果只看点击率就上线,会直接打脸。综合三层判断的话,它就不是一个成功的实验,因为用户的注意力被吸引到低客单商品上了。面试时把这个例子讲出来,面试官至少能记住你可不只是个“P值战士”。
6.4 现场手撕统计题的经验
有些公司会在面试里直接给你一个小数据集,让你现场判断两组差异是否显著。这种题通常可以用Python在电脑上跑,也可以在白板上手写公式。如果是白板手写,把基本公式记熟就好:
两组均值差的Z统计量 = 均值差 / 标准误。标准误等于两组标准差的平方除以各自样本量再加总后开根号。比例检验类似,只是标准误用p*(1-p)来表示。
如果是对着电脑做,我最常用的工具是Python的scipy.stats和statsmodels。用一行ttest_ind就能出结果,但不要只输出P值就结束,建议把均值差、置信区间、样本量都列出来,这样才能看出结论的稳定性。如果不熟悉Python,用Excel里的T.TEST函数、F.TEST函数也能完成大部分判断,很多传统行业的数据分析师用Excel做A/B测试分析也完全够用。
现场手撕题还有一个隐藏考点:你的数据清理能力。直接给你的数据往往有空值、重复值、异常值,先快速清洗再跑检验,这个过程能体现你的真实工作状态,比统计公式本身更被面试官看重。
我自己的体会是,A/B测试和统计学的面试题,越到后面越考验“能不能把统计语言翻译成业务决策”。面试官列一堆问题,表面在问公式和概念,实际都在问一件事:拿到实验数据,你敢不敢拍板上线?我刚带团队的时候,也曾经被一个不显著的结果困住,后来发现是样本量不足和偷看数据导致的假象。所以如果你正在准备面试,我建议别只刷题,选一个自己经手过的真实项目,把从指标定义、实验设计、数据分析到上线决策的完整链路盘一遍,这个动作比刷一百道面试题都值。