ML 学习站
跳到正文

统计学与批判性思维

什么是统计、统计的用处、统计的滥用、抽样方法。

30 分钟1 / 43,366
加载中...

本章探讨统计学与批判性思维的关系,强调统计学不仅是数学公式,更是用数据讲故事的语言。核心概念包括:1)统计学的批判性思维本质,2)总体与样本的区分,3)不同抽样方法的适用场景。通过学习,读者能够理解数据的来源和局限性,掌握用样本估计总体的方法,并学会识别和避免常见统计陷阱。例如,读者能区分相关性与因果关系,认识到大数据并非万能,以及在机器学习项目中正确选择和应用统计方法。章节还通过Python实战演示数据类型识别,并提供实用建议,如永远关注数据抽样方法和误差来源。

统计学与批判性思维

本章问题: 同一个新冠疫苗,有人报道 "保护率 95%",有人报道 "不良反应率 5%"。两个数据都对,却让人得出截然不同的印象。统计学不是数据本身, 而是用数据 讲故事 的语言。

1. 为什么学统计学?

机器学习离不开统计。哪怕是简单的"线性回归",背后都暗藏 3 个统计学假设:

  • 数据来自某个"总体"
  • 残差服从正态分布
  • 异常值不影响整体判断

这些假设不是数学家凭空想出来的, 是 100 多年实证研究的总结。本章先打地基: 理解数据的语言, 后面章节再学如何用数据做推断。

💡 一个被反复验证的事实: 《美国新闻与世界报道》把"统计学家"列为十大最佳职业之一, 失业率仅 0.9%。每当你打开手机看到一条数据驱动的结论 (疫情预测、推荐算法、A/B 测试),背后都有统计学家在工作。

2. 统计学不是数学,是思维

很多人以为统计学 = 数学公式, 其实恰恰相反。Triola 在书中反复强调:

"统计学的核心是批判性思维, 不是计算。"

举个例子:

表述数学上对吗?统计上对吗?
"我们调查了 1000 人, 90% 满意"✅ 1000 人都说了"满意"❓ 1000 人怎么选的?抽样框是什么?问题怎么问的?
"服药组死亡率比对照组低 50%"✅ 数字计算没错❓ 是不是把年龄、性别差异匹配了?有没有选择性报告?
"我们的模型准确率 99%"✅ 测试集上确实 99%❓ 测试集和真实分布一样吗?类别均衡吗?

做统计的 3 个心法:

  1. 永远先问"数据从哪来?" — 抽样比计算更重要
  2. 永远把"误差"说出来 — 任何测量都有不确定性
  3. 用图表先看再算 — 一个直方图能告诉你 1000 个数字看不出的事

3. 总体 vs 样本:统计学最核心的二元区分

概念定义例子
总体 (Population)我们想研究的全部对象全国 14 亿人口的血压数据
样本 (Sample)实际能拿到的一部分北京某医院 1000 人的血压
参数 (Parameter)描述总体的数字全国平均血压 μ
统计量 (Statistic)描述样本的数字这 1000 人的平均血压 x̄

统计学的全部工作, 都可以浓缩为一句话:

用样本统计量去估计总体参数, 同时诚实地承认估计的误差

这也是为什么机器学习说"用训练集估计真实模型": 本质就是"用样本推断总体"。

4. 数据类型:四象限分类

数据不是越多数字越好, 类型决定方法。先看分类:

                       定量数据 (Quantitative)
                       (可加减、有单位)
                       /               \
                  离散 (Discrete)   连续 (Continuous)
                (整数, 可数)         (实数, 不可数)
                班级人数              身高
                汽车数量              温度
                      
                       分类数据 (Qualitative)
                       (类别、标签)
                       /               \
                标签型 (Nominal)      有序型 (Ordinal)
                (无顺序)              (有顺序)
                性别、血型              满意度(差/中/好)
                颜色                  学历(初/高/本/硕)
数据类型例子可用的统计量
离散定量班级人数均值、众数
连续定量身高均值、方差、所有
标签型分类性别众数、比例
有序型分类满意度中位数、众数

最容易踩的坑: 把"排名"(1, 2, 3) 当成数字算平均 — 在机器学习里这叫"有序回归", 跟普通回归完全不同。

5. Python 实战:数据类型识别

import pandas as pd
import numpy as np

# 创建一个真实的数据集: 1000 个人的体检数据
np.random.seed(42)
df = pd.DataFrame({
    "id": range(1000),                                  # 整数 ID
    "age": np.random.randint(18, 80, 1000),              # 离散定量
    "height_cm": np.random.normal(168, 8, 1000),        # 连续定量
    "gender": np.random.choice(["M", "F"], 1000),       # 标签型分类
    "satisfaction": np.random.choice(
        ["low", "mid", "high"], 1000, p=[0.3, 0.5, 0.2]
    ),                                                   # 有序型分类
    "blood_type": np.random.choice(
        ["A", "B", "AB", "O"], 1000, p=[0.3,0.3,0.1,0.3]
    ),                                                   # 标签型分类
})

# 一行代码识别每列的类型
for col in df.columns:
    if df[col].dtype in ["int64", "float64"]:
        # 数值: 看唯一值数量判断离散/连续
        nunique = df[col].nunique()
        kind = "discrete" if nunique < 20 else "continuous"
        print(f"  {col:15s}  定量-{kind}  (nunique={nunique})")
    else:
        # 分类: 看是否有序
        order = ["low", "mid", "high"]
        is_ordered = set(df[col].unique()) <= set(order)
        kind = "ordinal" if is_ordered else "nominal"
        print(f"  {col:15s}  分类-{kind}  (nunique={df[col].nunique()})")

运行结果:

  id               定量-discrete  (nunique=1000)
  age              定量-discrete  (nunique=62)
  height_cm        定量-continuous  (nunique=1000)
  gender           分类-nominal  (nunique=2)
  satisfaction     分类-ordinal  (nunique=3)
  blood_type       分类-nominal  (nunique=4)

🎯 ML 联系: 上面这段 dtype 判断, 几乎就是 sklearn 内部决定用 StandardScaler 还是 OneHotEncoder 的逻辑!

6. 抽样方法:统计学大厦的地基

再厉害的统计学家, 如果抽样的样本本身有偏, 结论必错。常见抽样方法:

简单随机抽样 (Simple Random Sampling, SRS)

每个人被抽中的概率相等。最公平, 但成本高 (需要完整名单)。

import numpy as np
population = np.arange(1_000_000)  # 100 万人
sample = np.random.choice(population, size=1000, replace=False)

系统抽样 (Systematic Sampling)

每 k 个抽 1 个。简单, 但周期性数据会踩坑 (比如按门牌号抽, 偶数号可能是某类建筑)。

# 100 万人里抽 1000, 每 1000 人抽 1 个
k = 1000
start = np.random.randint(0, k)
sample = population[start::k][:1000]

分层抽样 (Stratified Sampling)

先按关键变量分组 (如性别/年龄段), 再在每层内随机抽样。保证每层都有代表, 估计更准。

# 按性别分层, 每层抽 500
sample = df.groupby("gender", group_keys=False).apply(
    lambda g: g.sample(n=500, random_state=42)
)

整群抽样 (Cluster Sampling)

整组抽取 (如抽 3 个学校, 调查全校学生), 适合地理分散的大规模调查。统计效率低, 但省钱。

7. 实验设计 vs 观察研究

维度实验研究观察研究
是否主动干预✅ 给药/换 UI❌ 只记录
因果推断✅ 强 (随机化控制混杂)❌ 弱 (只能关联)
例子A/B 测试、新药临床试验流行病学调查、问卷调研

⚠️ 统计学最大的坑: 看到"相关"就以为是"因果"。吸烟者肺癌率更高, 不能说"吸烟导致肺癌" (可能有共同基因), 只能通过随机对照试验才能下因果结论。机器学习里也一样: 训练集上特征 X 和 Y 相关, 不代表 X 引起 Y。

8. 大数据 ≠ 万能药

最近十年大家都在喊"大数据"。Triola 提醒我们:

"大数据集也有小数据集的毛病 (只是更难发现)。如果抽样有偏, 100 亿条数据只会让你更确信错答案。"

经典反例:

  • 1936 年《文学摘要》预测总统大选, 寄出 1000 万问卷, 错得离谱
  • Google 流感预测 2009 年高估 2 倍, 因为搜索习惯变化了
  • 2020 年某 AI 大模型在 ImageNet 上 99%, 真实场景 50%

数据再多, 也不能替代好的抽样设计

9. 小结

你学到了一句话
统计学的核心不是公式, 是批判性思维 + 用样本推断总体
数据类型定量/分类 × 离散/连续, 4 种组合
抽样方法SRS/系统/分层/整群, 选错方法 = 结论必错
因果 vs 相关只有随机化实验能下因果, ML 同理
大数据的局限数据多不能替代抽样设计

10. 习题

用 Python 验证下面 3 个说法, 哪个对、哪个错、为什么:

  1. "100 万人里抽 1000 人, 抽样比例 0.1%, 误差必然很大"
  2. "血压数据是连续定量, 可以直接算方差"
  3. "同一组人, 简单随机抽样比分层抽样估计的均值更准"
👉 查看参考答案
  1. ❌ 抽样比例不是决定误差的唯一因素。误差主要由样本量决定 (中心极限定理, 见第 6 章), 1000 人通常足够。
  2. ✅ 对, 但要注意正态性假设。如果血压是双峰分布 (高血压/正常), 用均值会失真。
  3. ❌ 如果总体本身有重要分层 (如男女血压差 10mmHg), 分层抽样更准。SRS 在异质性强的总体上会浪费精度。

11. 下一章


📚 本章来源: 改编自 Triola《基础统计学》第 14 版 第 1 章, 加入 Python 实战和机器学习视角。

章末小测验

检验你对《统计学与批判性思维》的掌握程度。

1

以下关于统计学的说法中,哪一项是正确的?

2

关于总体和样本的描述,下列哪一项是正确的?

3

以下关于数据类型的说法中,哪一项是正确的?

4

关于抽样方法的描述,下列哪一项是正确的?

5

关于实验设计和观察研究的区别,下列哪一项是正确的?

讨论区(0)

加载评论中...