关于 stats-methods
面向数据分析的统计方法技能,提供描述数值分布、分析趋势、识别异常值和开展假设检验的指导。还总结了常见统计陷阱与轻量级预测方法。
主要功能
- 01选择中心与离散度指标
- 02使用百分位数描述分布
- 03比较周期并分析趋势
- 04识别和处理异常值
- 05选择假设检验方法
- 06规避常见统计陷阱
适用场景
- 01总结业务指标的分布与差异
- 02比较 A/B 实验或用户群体
- 03检查时间序列异常和季节性
- 04为近期指标给出范围预测
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ okou-ai/ okou-skills --skill stats-methods安装后在 Claude Code 中输入/stats-methods确认已加载。
详细介绍
数值数据汇总
选择中心度量指标
| 数据特征 | 推荐度量指标 | 原因 |
|---|---|---|
| 对称且无离群值 | 均值 | 效率最高的估计量 |
| 不对称或离群值较多 | 中位数 | 不受极端值影响 |
| 非数值型或有序数据 | 众数 | 分类数据的唯一选择 |
| 用户收入等业务 KPI | 均值和中位数 | 两者的差异能揭示偏态 |
指南: 对于任何业务指标,都应同时呈现均值和中位数。两者相差较大时,说明分布存在偏态,仅用均值会产生误导。
量化变异程度
- 标准差:数据与均值的典型距离;最适用于钟形分布的数据。
- IQR(四分位距):第 25 百分位数与第 75 百分位数之间的差值;不易受极端值影响。
- 变异系数:标准差除以均值;便于比较不同量级数据的变异程度。
- 极差:最大值减去最小值;可快速了解数据的分散程度,但容易受离群值影响。
用百分位数讲述数据特征
不要止步于平均值,还应报告一组阶梯式百分位数:
p1: Floor of the distribution (bottom 1%)
p5: Lower boundary of typical values
p25: First quartile
p50: Median — the representative observation
p75: Third quartile
p90: Top 10% threshold (heavy users, premium tier)
p95: Upper boundary of typical values
p99: Extreme top 1%
示例洞察:“一半的会话时长不到 4.2 分钟,但时长位于前 10% 的会话超过 22 分钟,导致平均时长达到 7.8 分钟。”
描述分布特征
对于每个数值列,都应记录:
- 形状:高斯分布、右偏、左偏、双峰、均匀分布、重尾
- 中心:均值与中位数,以及两者的差异大小
- 离散程度:视情况选择标准差或 IQR
- 极端值:离群值的数量和严重程度
- 边界:零下限或 100% 上限等自然限制
趋势分析与预测
平滑含噪时间序列
# Weekly smoother — useful for daily data with weekday/weekend cycles
df['smooth_7'] = df['metric'].rolling(window=7, min_periods=1).mean()
# Four-week smoother — irons out both weekly and monthly rhythms
df['smooth_28'] = df['metric'].rolling(window=28, min_periods=1).mean()
周期比较
- 环比周变化:比较相隔一周的同一星期几
- 环比月变化:比较本日历月与上一个日历月
- 同比变化:具有季节性模式的业务所采用的黄金标准
- 同日历日比较:与上一年的确切日期进行比较
衡量增长
Simple rate: (current - prior) / prior
CAGR: (final / initial) ^ (1 / n_years) - 1
Log rate: ln(current / prior) # more stable for volatile series
识别季节性周期
- 先直观检查原始序列
- 按星期几汇总,以显现每周的规律
- 按日历月汇总,以显现每年的规律
- 始终使用同比或匹配周期的比较,将趋势与季节性区分开来
轻量级预测方法
对于需要快速预测而非完整建模的分析师:
- 朴素法:预测值等于最近一次观测值。可作为最低可行基线。
- 季节性朴素法:预测值等于上一个周期中相同期间的数值。
- 线性外推:根据近期历史数据拟合一条直线。仅适用于趋势明显呈线性的情况。
- 滚动平均:将滚动均值作为预测值。
预测结果应始终以范围表示,而不是点估计:
- 合适:“根据上一季度的数据,下个月预计会有 10,000 到 12,000 次注册”
- 易造成误导:“下个月将会有正好 11,234 次注册”
当模式呈非线性、多种季节性周期重叠、外部因素(广告支出、节假日)影响显著,或预测精度会影响资源决策时,应交由专家处理。
检测和处理离群值
识别方法
Z 分数法(假设数据近似正态分布):
z = (df['val'] - df['val'].mean()) / df['val'].std()
outliers = df[abs(z) > 3] # beyond 3 standard deviations
IQR 栅栏法(适用于任何分布形状):
q1 = df['val'].quantile(0.25)
q3 = df['val'].quantile(0.75)
iqr = q3 - q1
lo = q1 - 1.5 * iqr
hi = q3 + 1.5 * iqr
outliers = df[(df['val'] < lo) | (df['val'] > hi)]
百分位数截断法(最直接):
outliers = df[(df['val'] < df['val'].quantile(0.01)) |
(df['val'] > df['val'].quantile(0.99))]
如何处理异常值
切勿自动剔除异常值。请按以下流程进行判断:
- 诊断:这是记录错误、合理的极端观测值,还是不同总体的迹象?
- 错误:更正或排除(例如,负数年龄、时间戳为 epoch-zero)
- 合理的极端值:保留,但改用稳健的汇总统计量(中位数、IQR)
- 不同总体:分别分析(例如,企业账户与自助服务账户)
记录每一项排除:“我们将 47 条记录(占数据集的 0.3%)暂不纳入分析,这些记录的订单金额超过 $50K;这些企业批量交易会在单独的章节中介绍。”
检测时间序列中的异常
- 确定预期基线(滚动平均值或去年同期值)
- 计算残差:实际值减去预期值
- 标记超出历史残差 2-3 个标准差的残差
- 区分一次性峰值(点异常)与持续性变化(变点)
假设检验要点
适用情形
每当需要区分真实信号与随机噪声时,都应使用正式检验:
- 评估 A/B 实验结果
- 衡量产品变更的影响(变更前后)
- 比较不同客户细分群体的指标
分步流程
- 陈述原假设(H0):不存在差异(默认立场)
- 陈述备择假设(H1):存在差异
- 设定显著性阈值(alpha):标准值为 0.05(容许 5% 的假阳性)
- 计算检验统计量和 p 值
- 作出判断:p < alpha 表示有充分证据拒绝 H0
选择合适的检验
| 问题 | 合适的检验 | 条件 |
|---|---|---|
| 两组均值是否不同? | 独立样本 t 检验 | 大致符合正态分布,且只有两组 |
| 两组转化率是否不同? | 比例 z 检验 | 二元结果 |
| 是否对相同实体进行了两次测量? | 配对 t 检验 | 对相同对象进行前后测量 |
| 三组或更多组的均值是否不同? | ANOVA | 多个变体或细分群体 |
| 非正态数据的两组比较? | Mann-Whitney U 检验 | 偏态或序数指标 |
| 两个分类变量是否相关? | 卡方检验 | 频数表数据 |
不止看 p 值:实际影响
统计显著的结果只表示该效应不太可能由偶然因素造成,并不保证它在实际中具有重要意义。请务必在检验结果中同时提供:
- 效应大小:“变体 B 使转化率提高了 0.3 个百分点”
- 置信区间:真实效应的合理取值范围
- 业务解读:对收入、用户或效率的影响
注意样本量
- 即使 p 值看起来不错,小样本也会得出不可靠的结论
- 对比例进行分析时,每组大约需要 30 个或更多事件,才能保证基线可靠性
- 检测微小效应(例如,转化率变化 1 个百分点)可能需要每组数千个观测值
- 数据有限时,应明确说明:“每组有 200 个观测值,因此小于 X% 的效应很可能无法检测到”
避免统计陷阱
相关性与因果关系
每当发现相关性时,都应明确评估:
- 反向关系:也许是 B 导致 A,而不是 A 导致 B
- 隐藏的第三因素:某个未测量的变量 C 可能同时影响两者
- 巧合:变量对足够多时,总会出现虚假关联
安全表述:“使用功能 X 的用户表现出高 30% 的留存率” 不安全表述:“功能 X 使留存率提高了 30%”(需要实验性证据)
多重检验陷阱
进行大量检验会增加假阳性的数量:
- 当 alpha = 0.05 时,检验 20 个指标大约会因偶然而出现一个虚假的显著结果
- 如果你先探索了许多细分群体才找到“有趣”的那一个,应对此予以说明
- 应采用 Bonferroni 校正(alpha / 检验次数),或透明地报告进行的检验总数
辛普森悖论
将数据细分为子群体后,总体趋势可能会反转:
- 验证总体结论在每个关键细分群体中是否成立
- 经典情形:总转化率上升,但每个细分群体的转化率都下降,因为流量转向了一个天然转化率更高的细分群体
幸存者偏差
你的数据集只包含存在足够长时间、得以被记录的实体:
- 只研究当前用户,会忽略所有已经离开的用户
- 只分析成功的产品,会忽略失败的产品
- 定期自问:“这份数据中缺少了谁?如果把他们纳入,结论会改变吗?”
生态谬误
群体层面的模式未必适用于个人:
- “X 较高的国家往往 Y 也较高”并不意味着对每个人来说也是如此
- 避免将总体统计数据用于个体层面的预测
虚假精确
过于具体的数字会显得自信过头,缺乏依据:
- “下个季度的流失率将为 4.73%”暗示了现实中很少能达到的准确度
- 更适合给出诚实的范围:“流失率可能在 4% 到 6% 之间”
- 根据实际掌握的确定程度进行取整