mcpField
S
stats-methods

stats-methods

github.com/okou-ai数据与数据库8155 次安装1 周前更新
代码仓库

关于 stats-methods

面向数据分析的统计方法技能,提供描述数值分布、分析趋势、识别异常值和开展假设检验的指导。还总结了常见统计陷阱与轻量级预测方法。

主要功能

  1. 01选择中心与离散度指标
  2. 02使用百分位数描述分布
  3. 03比较周期并分析趋势
  4. 04识别和处理异常值
  5. 05选择假设检验方法
  6. 06规避常见统计陷阱

适用场景

  1. 01总结业务指标的分布与差异
  2. 02比较 A/B 实验或用户群体
  3. 03检查时间序列异常和季节性
  4. 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
识别季节性周期
  1. 先直观检查原始序列
  2. 按星期几汇总,以显现每周的规律
  3. 按日历月汇总,以显现每年的规律
  4. 始终使用同比或匹配周期的比较,将趋势与季节性区分开来
轻量级预测方法

对于需要快速预测而非完整建模的分析师:

  • 朴素法:预测值等于最近一次观测值。可作为最低可行基线。
  • 季节性朴素法:预测值等于上一个周期中相同期间的数值。
  • 线性外推:根据近期历史数据拟合一条直线。仅适用于趋势明显呈线性的情况。
  • 滚动平均:将滚动均值作为预测值。

预测结果应始终以范围表示,而不是点估计:

  • 合适:“根据上一季度的数据,下个月预计会有 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))]
如何处理异常值

切勿自动剔除异常值。请按以下流程进行判断:

  1. 诊断:这是记录错误、合理的极端观测值,还是不同总体的迹象?
  2. 错误:更正或排除(例如,负数年龄、时间戳为 epoch-zero)
  3. 合理的极端值:保留,但改用稳健的汇总统计量(中位数、IQR)
  4. 不同总体:分别分析(例如,企业账户与自助服务账户)

记录每一项排除:“我们将 47 条记录(占数据集的 0.3%)暂不纳入分析,这些记录的订单金额超过 $50K;这些企业批量交易会在单独的章节中介绍。”

检测时间序列中的异常
  1. 确定预期基线(滚动平均值或去年同期值)
  2. 计算残差:实际值减去预期值
  3. 标记超出历史残差 2-3 个标准差的残差
  4. 区分一次性峰值(点异常)与持续性变化(变点)

假设检验要点

适用情形

每当需要区分真实信号与随机噪声时,都应使用正式检验:

  • 评估 A/B 实验结果
  • 衡量产品变更的影响(变更前后)
  • 比较不同客户细分群体的指标
分步流程
  1. 陈述原假设(H0):不存在差异(默认立场)
  2. 陈述备择假设(H1):存在差异
  3. 设定显著性阈值(alpha):标准值为 0.05(容许 5% 的假阳性)
  4. 计算检验统计量和 p 值
  5. 作出判断: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% 之间”
  • 根据实际掌握的确定程度进行取整

评论

支持 Markdown