ML 学习站
跳到正文

置信区间:均值与比例

z 区间与 t 区间, 样本量计算。

30 分钟1 / 13,325
加载中...

本章探讨了置信区间及其在均值和比例估计中的应用。核心概念包括点估计与区间估计的对比、置信区间的定义和计算方法,以及样本量计算。区间估计通过提供一个范围来量化不确定性,比点估计更诚实。置信区间表示在重复抽样下,有一定比例的区间会包含真实参数。读者将学习如何计算均值的置信区间(使用z区间和t区间),以及比例的置信区间(经典z区间和更准确的Wilson区间)。此外,本章还介绍了样本量计算方法,帮助读者确定在特定误差范围内所需的样本数量。学完后,读者能够正确计算和应用置信区间,理解其背后的统计原理,并避免常见错误,如混淆置信区间的可靠性和准确性。

置信区间: 均值与比例

本章问题: 调研报告说"民调候选人 A 支持率 52% ± 2%"。这 ± 2% 怎么来的? 如果再调一次, 还会落在 50-54% 吗? 这就是置信区间

1. 为什么要区间估计?

估计方式报告形式例子
点估计一个数"平均寿命 78.5 岁"
区间估计区间 + 置信度"平均寿命 [76.3, 80.7] (95% 置信)"

点估计永远有误差, 但很多人误以为它就是"真值"。区间估计诚实地承认了不确定性

2. 置信区间的核心思想

置信区间: 从样本计算一个区间 [L, U], 使得在重复抽样下, 有 X% 的区间会包含真参数

最常被误解的概念:

  • ❌ "真值有 95% 概率落在 [L, U]" ← 错!
  • ✅ "如果我们重复抽样 100 次, 大约 95 次的区间会包含真值" ← 对!

真值 μ 是固定的, 区间是随机的。单个区间要么包含 μ, 要么不包含, 概率 0 或 1。只有"重复抽样"才有 95% 这个数。

3. 均值的置信区间

3.1 σ 已知 (z 区间)

3.2 σ 未知 (t 区间, 最常见)

import numpy as np
from scipy.stats import t, norm

# 例: 抽 25 个灯泡, 平均寿命 980h, 标准差 30h
n = 25
xbar = 980
s = 30
confidence = 0.95

# t 临界值
alpha = 1 - confidence
t_crit = t.ppf(1 - alpha/2, df=n-1)  # ≈ 2.064
margin = t_crit * s / np.sqrt(n)
ci = (xbar - margin, xbar + margin)
print(f"95% CI: [{ci[0]:.1f}, {ci[1]:.1f}]")
# ≈ [967.6, 992.4]

3.3 几个常见 t 临界值

dft(0.025)t(0.005)
112.7163.66
102.2283.169
302.0422.750
1001.9842.626
∞ (z)1.9602.576

n 越大, t → z。

4. 比例的置信区间

调研 1000 人, 520 人支持某政策, 支持率 52% 的 95% CI?

from scipy.stats import norm
n = 1000
p_hat = 0.52
z_crit = norm.ppf(0.975)  # 1.96
margin = z_crit * np.sqrt(p_hat * (1 - p_hat) / n)
ci = (p_hat - margin, p_hat + margin)
print(f"95% CI: [{ci[0]:.3f}, {ci[1]:.3f}]")
# ≈ [0.489, 0.551]

4.1 Wilson 区间 (更准)

经典 z 区间在 p 接近 0 或 1 时不准。Wilson 区间Clopper-Pearson 更稳:

from scipy.stats import beta
# Clopper-Pearson 精确区间
def cp_ci(x, n, alpha=0.05):
    lower = beta.ppf(alpha/2, x, n - x + 1) if x > 0 else 0
    upper = beta.ppf(1 - alpha/2, x + 1, n - x) if x < n else 1
    return lower, upper

print(cp_ci(0, 100))   # 0 个事件: [0, 0.036]
print(cp_ci(520, 1000))  # 跟 z 区间接近

5. 样本量计算:我需要抽多少?

想要"误差不超过 1 个百分点, 95% 置信", 至少抽多少?

E = 允许的最大误差 (margin of error)。

# 比例场景: 想让 margin ≤ 0.01, 95% 置信
z = norm.ppf(0.975)
E = 0.01
# 最坏情况 p=0.5 (方差最大)
n = (z / E)**2 * 0.25
print(f"所需 n = {n:.0f}")  # ≈ 9604
# 所以"误差 1%"的民调至少要 1 万人!

6. 常见错误

6.1 "样本量" vs "总体数"

如果总体 N 很大, 抽样比例 n/N < 5%, 不需要修正。 如果 n/N > 5%, 用有限总体修正:

6.2 选错公式

场景关键
大样本 + σ 已知z几乎只出现在理论题
小样本 + σ 未知 (正常)t现实中最常见
比例z 或 WilsonWilson 更稳
两个均值/比例比较见下章公式不同

6.3 95% 含义

不是"区间 95% 准确", 而是"方法 95% 可靠"。具体一次抽样, 区间要么对要么错, 没"准确度"。

7. Python 实战: 完整置信区间报告

import numpy as np
import pandas as pd
from scipy import stats

# 加载鸢尾花数据
import seaborn as sns
df = sns.load_dataset("iris")

# 对每个数值列, 计算均值和 95% CI
results = []
for col in df.select_dtypes("number").columns:
    data = df[col].dropna().values
    n = len(data)
    xbar = data.mean()
    s = data.std(ddof=1)
    t_crit = stats.t.ppf(0.975, df=n-1)
    margin = t_crit * s / np.sqrt(n)
    results.append({
        "变量": col,
        "n": n,
        "均值": f"{xbar:.3f}",
        "标准差": f"{s:.3f}",
        "95% CI 下限": f"{xbar - margin:.3f}",
        "95% CI 上限": f"{xbar + margin:.3f}",
        "宽度": f"{2*margin:.3f}",
    })

print(pd.DataFrame(results).to_string(index=False))

输出 (示例):

      变量     n      均值    标准差  95% CI 下限  95% CI 上限     宽度
sepal_length  150   5.843   0.828      5.710        5.977   0.268
 sepal_width  150   3.057   0.436      2.987        3.128   0.141
petal_length  150   3.758   1.765      3.473        4.043   0.570
 petal_width  150   1.199   0.762      1.077        1.322   0.245

8. 置信区间 vs 预测区间

容易混! 区别:

区间估计目标公式
置信区间 (CI)总体参数 (μ, p)x̄ ± t × s/√n
预测区间 (PI)单个未来值x̄ ± t × s × √(1 + 1/n)

CI 更窄 (估的是平均), PI 更宽 (估的是单个, 含个体变异)。

# 例: 已知 25 个灯泡平均 980h ± 30h
# CI: 估计"所有这种灯泡平均寿命"
# PI: 估计"下一个灯泡的寿命"
n, xbar, s = 25, 980, 30
t_crit = stats.t.ppf(0.975, n-1)
ci = (xbar - t_crit * s/np.sqrt(n), xbar + t_crit * s/np.sqrt(n))
pi = (xbar - t_crit * s*np.sqrt(1 + 1/n), xbar + t_crit * s*np.sqrt(1 + 1/n))
print(f"95% CI (均值): [{ci[0]:.1f}, {ci[1]:.1f}]")  # 窄
print(f"95% PI (单值): [{pi[0]:.1f}, {pi[1]:.1f}]")  # 宽

9. ML 中的置信区间

场景应用
模型准确率95% CI: [0.82, 0.88] (测试集 1000 样本)
A/B 测试转化率 95% CI 不重叠 → 显著
回归系数β ± SE (标准误)
预测sklearn 不给 CI, 但 mapie 库可以
强化学习多次随机种子, 报告"平均 ± SE"
假设检验95% CI 不含"零假设值" → 拒绝 H₀ (下章)

10. 小结

你学到了关键点
区间估计比点估计更诚实, 量化不确定性
z 区间σ 已知或 n 很大时用
t 区间σ 未知时, 用 s 估计, df=n-1
比例区间z 或 Wilson, Wilson 更稳
样本量n = (z × σ / E)², 误差越小要 n 越多
95% 含义"方法 95% 可靠", 不是"区间 95% 准确"
CI vs PICI 估参数, PI 估单值, PI 更宽

11. 习题

  1. 100 个学生, 平均成绩 75, 标准差 10。求 95% 和 99% 置信区间。

  2. 民调 1500 人, 60% 支持某政策。求 95% 置信区间。如果要"误差 ≤ 1%", 至少需要多少人?

👉 查看参考答案
  1. 计算:

    • 95% CI: 75 ± 1.984 × 10/√100 = 75 ± 1.98 = [73.02, 76.98]
    • 99% CI: 75 ± 2.626 × 10/√100 = 75 ± 2.63 = [72.37, 77.63]
    • 99% 更宽, 因为要求更高的"可靠度"。
  2. 计算:

    • 95% CI: 0.60 ± 1.96 × √(0.24/1500) = [0.575, 0.625]
    • 误差 1% 所需 n: (1.96/0.01)² × 0.25 ≈ 9604
    • 但用 0.6 估计, 实际所需: (1.96/0.01)² × 0.6 × 0.4 ≈ 9220
    • 所以"误差 1%"的民调至少 1 万人。

12. 下一章


📚 本章来源: 改编自 Triola《基础统计学》第 14 版 第 7 章 7-1、7-2、7-3 节, 加入 ML 视角。

章末小测验

检验你对《置信区间:均值与比例》的掌握程度。

1

关于置信区间的描述,以下哪些是正确的?

2

在计算均值的置信区间时,以下哪些情况应该使用 t 区间?

3

关于比例的置信区间,以下哪些说法是正确的?

4

关于样本量计算,以下哪些说法是正确的?

5

关于置信区间与预测区间的区别,以下哪些说法是正确的?

讨论区(0)

加载评论中...