关于 statistical-analysis
面向业务分析人员及数据解读者的统计分析技能,涵盖描述性统计、趋势、异常值和假设检验,并提示如何谨慎解读统计结论。
主要功能
- 01描述性统计指导
- 02趋势分析与简单预测
- 03离群值和异常检测
- 04假设检验基础
- 05统计结论的注意事项
适用场景
- 01概括业务指标分布
- 02比较不同时期的结果
- 03检查数据集中的异常值
- 04评估 A/B 测试差异
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ w95/ awesome-claude-corporate-skills --skill statistical-analysis安装后在 Claude Code 中输入/statistical-analysis确认已加载。
详细介绍
统计分析技能
描述性统计、趋势分析、异常值检测、假设检验,以及关于何时对统计结论保持谨慎的指引。
描述性统计方法
集中趋势
根据数据选择合适的集中趋势度量:
| 情况 | 使用 | 原因 |
|---|---|---|
| 分布对称、无异常值 | 均值 | 最有效的估计量 |
| 分布偏斜 | 中位数 | 对异常值稳健 |
| 类别型或有序型数据 | 众数 | 非数值数据的唯一选择 |
| 高度偏斜且有异常值(例如每用户收入) | 中位数 + 均值 | 同时报告两者;两者的差距反映偏斜程度 |
对于业务指标,始终同时报告均值和中位数。 如果两者差异显著,说明数据存在偏斜,仅看均值会产生误导。
离散程度与变异性
- 标准差:数值通常偏离均值的程度。适用于正态分布数据。
- 四分位距(IQR):p25 与 p75 之间的距离。对异常值稳健。适用于偏斜数据。
- 变异系数(CV):标准差 / 均值。用于比较量纲不同的指标之间的变异性。
- 极差:最大值减最小值。对异常值敏感,但能快速反映数据的范围。
面向业务场景的百分位数
报告关键百分位数,比单看均值能更完整地说明问题:
p1: Bottom 1% (floor / minimum typical value)
p5: Low end of normal range
p25: First quartile
p50: Median (typical user)
p75: Third quartile
p90: Top 10% / power users
p95: High end of normal range
p99: Top 1% / extreme users
示例表述:"会话时长的中位数为 4.2 分钟,但前 10% 的用户每次会话时长超过 22 分钟,将均值拉高到 7.8 分钟。"
描述分布
对每一个进行分析的数值分布,都要加以刻画:
- 形态:正态、右偏、左偏、双峰、均匀、重尾
- 中心:均值与中位数(以及两者之间的差距)
- 离散程度:标准差或 IQR
- 异常值:数量多少及极端程度
- 边界:是否存在自然下限(零)或上限(100%)?
趋势分析与预测
识别趋势
使用移动平均平滑噪声:
# 7-day moving average (good for daily data with weekly seasonality)
df['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()
# 28-day moving average (smooths weekly AND monthly patterns)
df['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()
环比期间对比:
- 周环比(WoW):与上周同一天对比
- 月环比(MoM):与上一个同月对比
- 年同比(YoY):季节性业务的黄金标准
- 去年同日:与去年的具体某一天对比
增长率:
Simple growth: (current - previous) / previous
CAGR: (ending / beginning) ^ (1 / years) - 1
Log growth: ln(current / previous) -- better for volatile series
季节性检测
检查是否存在周期性模式:
- 绘制原始时间序列——先进行可视化检查
- 计算星期几的平均值:是否存在明显的每周模式?
- 计算各月份的平均值:是否存在年度周期?
- 对比不同期间时,始终使用同比或同期对比,以避免将趋势与季节性混为一谈
预测(简单方法)
面向业务分析师(而非数据科学家),使用简单直接的方法:
- 朴素预测:明天 = 今天。用作基准。
- 季节性朴素预测:明天 = 上周或去年的同一天。
- 线性趋势:对历史数据拟合一条直线。仅适用于明显线性的趋势。
- 移动平均预测:以滚动平均值作为预测值。
始终说明不确定性。给出区间,而不是单点估计:
- "基于近 3 个月的趋势,我们预计下个月注册人数为 1 万至 1.2 万"
- 而不是 "我们预计下个月注册人数恰好为 11,234"
何时交由数据科学家处理:非线性趋势、多重季节性、外部因素(营销投入、节假日),或预测准确性对资源分配至关重要时。
异常值与异常检测
统计方法
Z 分数法(适用于正态分布数据):
z_scores = (df['value'] - df['value'].mean()) / df['value'].std()
outliers = df[abs(z_scores) > 3] # More than 3 standard deviations
IQR 法(对非正态分布稳健):
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
百分位法(最简单):
outliers = df[(df['value'] < df['value'].quantile(0.01)) |
(df['value'] > df['value'].quantile(0.99))]
处理离群值
不要自动删除离群值。应当:
- 调查:这是数据错误、真实的极端值,还是不同的群体?
- 数据错误:修正或删除(例如负数年龄、1970 年的时间戳)
- 真实极端值:保留它们,但考虑使用稳健统计量(用中位数代替均值)
- 不同群体:将其分离出来单独分析(例如企业客户与中小企业客户)
报告你所做的处理:"我们排除了 47 条(0.3%)交易金额超过 5 万美元的记录,这些记录代表大宗企业订单,已单独分析。"
时间序列异常检测
用于检测时间序列中的异常值:
- 计算期望值(移动平均或去年同期值)
- 计算与期望值的偏差
- 标记超出阈值的偏差(通常为残差的 2 至 3 个标准差)
- 区分单点异常(单个异常值)与变化点(持续性偏移)
假设检验基础
适用场景
当你需要判断观察到的差异是真实存在,还是可能由随机波动造成时,使用假设检验。常见场景包括:
- A/B 测试结果:变体 B 是否真的优于 A?
- 前后对比:产品变更是否真的带动了指标变化?
- 分群比较:企业客户的留存率是否真的更高?
基本框架
- 原假设(H0):不存在差异(默认假设)
- 备择假设(H1):存在差异
- 选择显著性水平(alpha):通常为 0.05(5% 的假阳性概率)
- 计算检验统计量和 p 值
- 解释结果:若 p < alpha,则拒绝 H0(有证据表明存在真实差异)
常见检验
| 场景 | 检验方法 | 适用情况 |
|---|---|---|
| 比较两组均值 | 独立样本 t 检验 | 正态数据,两组 |
| 比较两组比例 | 比例 z 检验 | 转化率、二元结果 |
| 比较配对测量值 | 配对 t 检验 | 同一对象的前后对比 |
| 比较 3 组及以上均值 | 方差分析(ANOVA) | 多个分群或变体 |
| 非正态数据,两组 | Mann-Whitney U 检验 | 偏态指标、有序数据 |
| 类别变量之间的关联 | 卡方检验 | 两个分类变量 |
实际显著性与统计显著性
统计显著性指该差异不太可能由偶然因素造成。
实际显著性指该差异大到足以影响业务决策。
差异可能具有统计显著性,但实际意义甚微(在样本量较大时很常见)。报告时务必包括:
- 效应量:差异有多大?(例如:"变体 B 将转化率提升了 0.3 个百分点")
- 置信区间:真实效应可能落在什么范围内?
- 业务影响:这转化为多少收入、用户数或其他业务指标?
样本量考量
- 小样本即使 p 值显著,结果也不可靠
- 比例检验的经验法则:每组至少需要 30 个事件才能保证基本可靠性
- 若要检测较小的效应(例如 1% 的转化率变化),每组可能需要数千条观测
- 如果样本较小,应当明确说明:"每组仅有 200 条观测,检测小于 X% 的效应的能力有限"
何时对统计结论保持谨慎
相关不等于因果
发现相关性时,应明确考虑:
- 反向因果:也许是 B 导致 A,而非 A 导致 B
- 混杂变量:也许是 C 同时导致了 A 和 B
- 巧合:变量足够多时,虚假相关不可避免
可以表述的内容:"使用功能 X 的用户留存率高出 30%" 在没有更多证据时不能表述的内容:"功能 X 带来了 30% 的留存率提升"
多重比较问题
当你检验大量假设时,有些结果会因偶然而呈现"显著":
- 对 20 个指标在 p=0.05 水平下进行检验,大约会有 1 个被误判为显著
- 如果你在找到一个有差异的细分群体之前查看了许多细分群体,请注明这一点
- 使用 Bonferroni 校正(将显著性水平 alpha 除以检验次数)进行多重比较校正,或报告共进行了多少次检验
辛普森悖论
当数据被细分后,聚合数据中的趋势可能发生逆转:
- 始终检查结论在关键细分群体中是否依然成立
- 示例:总体转化率上升,但在每一个细分群体中转化率都下降了,原因是样本构成向转化率更高的细分群体偏移
幸存者偏差
你只能分析那些"幸存"下来、进入数据集的对象:
- 只分析活跃用户,会忽略已流失的用户
- 只分析成功的公司,会忽略已倒闭的公司
- 始终自问:"这个数据集遗漏了谁?如果把他们纳入,结论是否会改变?"
生态谬误
群体层面的趋势不一定适用于个体:
- "X 越高的国家,Y 也越高"并不意味着"X 越高的个人,Y 也越高"
- 将群体层面的发现套用到个案时要格外谨慎
过度依赖具体数字
警惕虚假的精确性:
- "下个季度流失率将为 4.73%"所传达的确定性超出了实际依据
- 更推荐使用区间:"根据历史规律,我们预计流失率在 4%–6% 之间"
- 恰当取整:"约 5%"往往比"4.73%"更诚实