判断一条分析假设成不成立,为什么用统计检验而不是让大模型判断?
简化版
因为模型给不出可复现、可追问「凭什么」的判据。同一条假设、同一批数据,模型这次说成立、下次可能说不成立;它看到「4.31 和 3.87」会说「明显更高」,但样本只有 5 条时这个差异可能毫无意义。统计检验把「这个差异算不算数」变成确定的计算:样本量够不够、p 值过不过阈值、方向对不对,三个都能从库里读出来,同样的数据永远得到同样的结论。分工是模型提假设、选工具,代码做判定;判定函数是纯函数,不碰数据库也不调模型,可以单独测试。页面上展示的也不是「显著」两个字,而是用了哪个检验、统计量多少、p 值多少。
详细版
假设:「A 板块近一年跌幅显著大于同区其他板块」
→ 取数:A 板块与同区其他板块的月度价格变化
→ 统计工具:组间差异检验
两组都近似正态 → 独立样本 t 检验
有一组不像正态 → Mann-Whitney U 检验
→ 返回:检验名、统计量、p 值、样本量、是否显著、方向
→ 代码判定:
样本量 < 下限 → 数据不足(放宽粒度重查,或标为数据不足)
p ≥ 阈值 → 证伪(差异不显著)
p < 阈值,方向对 → 成立
p < 阈值,方向反 → 证伪
常用检验与适用问题:
| 要回答的问题 | 检验 | 输出 |
|---|---|---|
| 两组有没有差异 | t 检验 / Mann-Whitney U | 统计量、p 值 |
| 两个指标是否相关 | 皮尔逊 / 斯皮尔曼 | 相关系数、p 值 |
| 有没有持续趋势 | 曼-肯德尔检验(配合 Sen 斜率) | Z 值、p 值、斜率 |
| 占比有没有差异 | 卡方检验 | 卡方值、p 值 |
| 从哪个时点开始变的 | 变点检测(如 PELT) | 变点位置、前后均值差(无 p 值) |
| 哪些因素更重要 | 随机森林特征重要性 | 相对重要性排序(无方向、无 p 值) |
完整版教学
一、让模型判断会出什么问题
把数据交给模型,问「A 板块是否跌得比别处多」,模型通常会给出看似合理的判断。问题在于:
不可复现:同一批数据,两次调用可能给出相反结论
不看样本量:5 个点的差异和 500 个点的差异,模型的描述可能一样肯定
被数字大小带偏:均值差 0.4 看起来小、差 40 看起来大,但是否显著取决于波动和样本量
无法追问:「凭什么说显著?」模型只能再生成一段解释,没有可核对的依据
分析系统的结论要回答「凭什么」,这正是统计检验存在的意义:它用一套公认的计算方法,把「差异是不是偶然的」变成一个可以复算的数字。
记忆钩子:模型擅长「提出值得验证的假设」,统计检验擅长「判断假设是否成立」。前者要灵活,后者要可复现。
二、p 值到底在说什么
p 值是:假设两组其实没有差异(零假设成立),观察到当前这么大(或更大)差异的概率。
p = 0.012 → 如果真的没差异,看到这么大的差异只有 1.2% 的概率 → 倾向于认为差异存在
p = 0.35 → 没差异时也有 35% 的概率看到这样的差异 → 不能说明有差异
需要记住三点:
- p 值小不代表差异大,只代表差异不太可能是偶然的;样本量很大时,微小差异也会显著。
- p 值大不代表「没有差异」,只代表「这批数据证明不了有差异」,样本少时尤其如此。
- 显著性阈值(常用 0.05)是一个约定,应该放在配置里,而不是写死在代码里。
三、检验要按数据的特点选
同一个问题,数据条件不同,要用不同的检验:
| 问题 | 数据条件 | 选用 | 原因 |
|---|---|---|---|
| 两组差异 | 两组都近似正态 | 独立样本 t 检验 | 比较均值,检验效力高 |
| 两组差异 | 偏态、有极端值,或样本极少 | Mann-Whitney U | 基于秩,不依赖正态假设 |
| 相关性 | 样本充足、近似线性 | 皮尔逊 | 衡量线性相关程度 |
| 相关性 | 样本少或关系非线性 | 斯皮尔曼 | 基于秩,对异常值稳健 |
组间差异。 t 检验假设数据近似正态分布;房价、票房这类数据经常偏态、有极端值,这时应该改用 Mann-Whitney U 这类基于秩的非参数检验。实现上可以先做正态性检验,任一组不满足就换非参数检验;样本太少(比如少于 3 个)时正态性无从判断,直接用秩检验。
相关性。 皮尔逊相关要求线性关系、对异常值敏感;样本少或关系非线性时用斯皮尔曼秩相关。结论里还要注明:相关不等于因果。
趋势。 曼-肯德尔检验不要求正态、对缺失和异常值稳健,适合判断月度序列有没有持续上升或下降;配合 Sen 斜率给出变化幅度。
占比。 两组的「分子/分母」构成列联表,用卡方检验;分子大于分母这类不合法的数据要先拦下来。
用了哪个检验、为什么用它,都应该写进结论文字里,让读者知道这个判断是怎么得出来的。
四、判定逻辑:样本量 → 显著性 → 方向
判定要按固定顺序:
1. 样本量不足(低于配置的下限)
→ 判不出结论;可以放宽一层粒度重查(小区 → 板块),已到最上层就标「数据不足」
2. 有 p 值的检验
→ 不显著:证伪
→ 显著:再看方向是否与假设一致
3. 没有 p 值的方法
→ 变点检测:看是否检出变点、断点前后均值差是否在期望方向
→ 因素排序:只有相对重要性,没有方向和显著性,判不出成立,记为数据不足并说明原因
「没有 p 值」和「p 值不小」是两回事:变点检测、因素排序本来就不产出 p 值,这一栏为空是正常的,不能算作「不显著」。统计显著率这类观测指标,分母也只应该包括真正做出显著性判断的检验。
五、方向比较要先归一
不同检验描述方向的语言不一样:组间差异说「高于 / 低于参照」,趋势和变点说「上升 / 下降」,相关说「同向 / 反向」。判定前要先把它们归到统一的几个方向桶里再比较。
还有一种情况要单独处理:假设说的方向和工具测的方向不是同一类。比如假设说「两条曲线反向变化」,工具给的却是「A 组高于 B 组」,这是工具没测到假设说的那件事,应该判为「不可比」、只看显著与否,而不是判为「方向不符」。硬比会把一条本来能成立的假设判成证伪。
六、为什么判定函数要写成纯函数
判定只依赖输入的检验结果和配置阈值,不查数据库、不调模型:
输入:检验结果(统计量、p 值、样本量、方向)+ 假设的期望方向 + 阈值配置
输出:成立 / 证伪 / 数据不足 / 不可比,以及判定说明
好处是可以脱离数据库和模型单独测试:构造各种边界情况(样本刚好在下限、p 值刚好等于阈值、方向为空),逐一验证判定结果。判定说明也由代码按模板拼:「检验名 + 工具给出的结论原文 + 本步如何判定」,而不是让模型描述——模型写的说明,你查不清这条假设到底有多硬。
七、页面上展示什么
「显著」两个字是不合格的展示。一条经过检验的假设,应该能说出:
两组分布不满足正态,采用 Mann-Whitney U 检验:
两组均值 4.31 与 3.87,U = 132,p = 0.012,差异显著(阈值 0.05);
方向与假设一致,判定成立。
统计量、p 值、样本量、是否显著这些同时存成结构化字段,页面和观测统计直接读取,而不是从文字里再解析。
八、常见误区与追问
- 误区:模型能读懂数据,让它判断显著性就行。 模型的判断不可复现,也不考虑样本量和波动,给不出可核对的依据。
- 误区:p 值越小说明差异越大。 p 值反映差异是否可能是偶然的,不反映差异大小,样本大时微小差异也会显著。
- 误区:不显著就说明没有差异。 只能说明这批数据证明不了有差异,样本少时尤其如此。
- 误区:t 检验适用于所有两组比较。 数据偏态或有极端值时应改用 Mann-Whitney U 等非参数检验。
- 误区:变点检测没有 p 值,就算不显著。 它本来不产出 p 值,这一栏为空是正常的,要用自己的判据。
- 追问:样本量不够怎么办? 放宽一层粒度重查,已到最上层就标为数据不足,不强行下结论。
- 追问:模型在这个流程里还做什么? 提出待验证的假设、选择用哪个统计工具;判定和说明都由代码完成。
九、加强记忆
假设成不成立不让模型判断,因为模型不可复现、不看样本量、给不出可核对的依据。统计检验把判断变成可复算的数字:p 值是零假设下看到当前差异的概率,小不代表差异大,大不代表没差异,阈值放配置。检验按数据特点选:偏态用 Mann-Whitney U,样本少或非线性用斯皮尔曼,趋势用曼-肯德尔加 Sen 斜率,占比用卡方。判定顺序是样本量、显著性、方向;变点和因素排序没有 p 值要用自己的判据。方向先归一,跨类判不可比。判定函数写成纯函数可单测,说明由代码按模板拼,页面展示检验名、统计量和 p 值。