1. 集中趋势度量
1.1 均值(Mean): x̄ = (1/n)Σxᵢ
优点: 数学性质好 缺点: 对极端值敏感
1.2 中位数(Median)
将数据从小到大排列,取中间位置的值。优点: 对极端值稳健
1.3 众数(Mode)与截尾均值
众数:出现频率最高的值。截尾均值:去掉两端各p%后求均值,兼顾稳健性和信息利用。
2. 离散程度度量
2.1 方差与标准差
样本方差: s² = (1/(n-1))Σ(xᵢ-x̄)²
为什么除以 n-1? 贝塞尔校正——样本方差是总体方差的无偏估计。
2.2 变异系数 CV = σ/μ × 100%
消除量纲影响,比较不同尺度数据的离散程度。
2.3 四分位距(IQR)= Q₃ - Q₁
箱线图中定义异常值:x < Q₁-1.5×IQR 或 x > Q₃+1.5×IQR
3. 分布形态
3.1 偏度 Skew = E[(X-μ)³]/σ³
- Skew > 0: 右偏 - Skew < 0: 左偏 - Skew ≈ 0: 对称
3.2 峰度 Kurt = E[(X-μ)⁴]/σ⁴ - 3
- Kurt > 0: 尖峰(重尾) - Kurt < 0: 扁峰(轻尾) - Kurt = 0: 正态
金融风险: 峰度大意味着极端事件(黑天鹅)更频繁。
4. 五数概括与箱线图
五数概括: Min, Q₁, Median, Q₃, Max
箱线图直观展示:箱体(Q₁到Q₃)、箱内线(中位数)、须(1.5×IQR)、点(异常值)
5. 数据探索性分析(EDA)
- 整体概览: 数据维度、类型、缺失情况
- 单变量分析: 直方图、箱线图、统计量
- 双变量分析: 散点图、相关系数
- 多变量分析: 相关矩阵热力图
实践建议: 永远先看数据再建模;可视化 > 数值概括(安斯库姆四重奏)
Python代码实现与验证
💡 代码说明:以下代码使用 Python / Scikit-learn 实现,已实机运行验证。
完整代码
import numpy as np
import pandas as pd
from scipy import stats
np.random.seed(42)
data = np.concatenate([np.random.normal(50, 10, 95), np.random.normal(200, 5, 5)])
df = pd.DataFrame({'value': data})
print("=== 描述统计 ===")
print("均值: {:.2f}".format(df['value'].mean()))
print("中位数: {:.2f}".format(df['value'].median()))
print("标准差: {:.2f}".format(df['value'].std()))
print("偏度: {:.4f}".format(df['value'].skew()))
print("峰度: {:.4f}".format(df['value'].kurtosis()))
Q1, Q3 = df['value'].quantile(0.25), df['value'].quantile(0.75)
IQR = Q3 - Q1
print("IQR: {:.2f}".format(IQR))
print("\n=== 五数概括 ===")
print("Min={:.2f} Q1={:.2f} Med={:.2f} Q3={:.2f} Max={:.2f}".format(
df['value'].min(), Q1, df['value'].median(), Q3, df['value'].max()))
outliers = df[(df['value']<Q1-1.5*IQR)|(df['value']>Q3+1.5*IQR)]
print("\nIQR异常值: {}个".format(len(outliers)))
print("截尾均值(5%): {:.2f}".format(stats.trim_mean(df['value'], 0.05)))
运行结果
=== 描述统计 ===
均值: 56.52
中位数: 49.46
标准差: 34.03
偏度: 3.7174
峰度: 13.4274
IQR: 12.42
=== 五数概括 ===
Min=23.80 Q1=44.28 Med=49.46 Q3=56.70 Max=201.48
IQR异常值: 6个
截尾均值(5%): 50.11
✅ 验证通过
深入理解:描述统计的艺术
安斯库姆四重奏的启示
1973年,统计学家F.J. Anscombe构造了四组数据,它们拥有几乎相同的统计量(均值、方差、相关系数、回归线),但散点图形状截然不同。这告诉我们:永远先画图,再算数。
| 数据集 | x均值 | y均值 | 相关系数 | 回归线 | 形状 |
| I | 9 | 7.50 | 0.816 | y=3+0.5x | 线性 |
| II | 9 | 7.50 | 0.816 | y=3+0.5x | 抛物线 |
| III | 9 | 7.50 | 0.816 | y=3+0.5x | 离群点 |
| IV | 9 | 7.50 | 0.816 | y=3+0.5x | 垂直聚集 |
稳健统计量
当数据包含异常值或非正态分布时,传统统计量可能产生误导。稳健统计量提供更可靠的替代:
| 传统统计量 | 稳健替代 | 优势 |
| 均值 | 中位数/截尾均值 | 不受极端值影响 |
| 标准差 | MAD(中位绝对偏差) | 对异常值稳健 |
| 方差 | IQR | 基于分位数,不受极端值影响 |
| Pearson相关 | Spearman/Kendall | 捕捉单调关系,不受异常值影响 |
EDA最佳实践
💡 EDA黄金法则
- 先看整体,再看细节:数据维度、类型、缺失→单变量→双变量→多变量
- 可视化优先:直方图、箱线图、散点图比数字统计量更直观
- 检查数据质量:缺失值、异常值、重复记录、逻辑错误
- 关注分布形态:右偏→对数变换;多峰→可能需要分组建模
- 记录发现:EDA是探索性过程,重要发现必须文档化
实际数据集EDA案例
在Kaggle的Titanic数据集上,优秀的EDA会发现:
- 女性存活率远高于男性(Sex是最强特征)
- 一等舱存活率>二等舱>三等舱
- 年龄有缺失值(约20%),且儿童存活率更高
- SibSp和Parch可以组合为家庭规模特征
- 船舱号首字母隐含甲板信息
实践案例与深入分析
统计思维在日常ML工作中的体现
统计思维不仅是理论工具,更是ML工程师的核心素养。以下是一些日常工作中的统计思维应用:
数据质量检查:在建模前,始终检查数据的分布、异常值和缺失模式。一个异常值可能导致模型完全失效。用箱线图和直方图做第一道关卡,用Z-score和IQR做第二道关卡,用业务逻辑做第三道关卡。
实验设计:每次模型改进都需要统计验证。仅看测试集指标是不够的——你需要置信区间和假设检验来确认改进不是随机波动。使用配对t检验比较两个模型的交叉验证分数,比单次比较更可靠。
结果解读:永远不要只报告点估计。R2=0.85和95%CI[0.82,0.88]比单独的0.85更有信息量。p值<0.05不意味着效果显著——还需要看效应量。
概率论的工程应用
在推荐系统中,贝叶斯平滑是处理冷启动问题的经典方法。例如,一个商品只有3个评分(5,5,4),均值4.67可能不可靠。贝叶斯平滑公式:smoothed = (n*mean + m*global_mean)/(n+m),其中m控制先验的强度。当m=10时,这个商品的平滑评分变为(3*4.67+10*4.0)/13=4.15,更接近全局均值,更稳健。
常见统计错误与防范
- p-hacking:反复尝试不同分析直到p<0.05。防范:预先注册分析计划,报告所有尝试的检验次数。
- 选择性报告:只报告显著结果,忽略不显著的。防范:报告所有分析结果,使用森林图展示完整画面。
- 忽略多重比较:20个特征中可能1个"显著"纯属偶然。防范:Bonferroni/BH校正。
- 样本量不足:小样本下的"显著"结果不可靠。防范:预先计算所需样本量。
统计学习理论概览
VC维是衡量模型复杂度的理论工具。VC维越高,模型能拟合的函数越复杂,但也越容易过拟合。结构风险最小化(SRM)在经验风险和模型复杂度之间取得平衡:SRM = 经验风险 + 复杂度惩罚。这解释了为什么正则化能防止过拟合——它在做结构风险最小化。
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
补充:关键概念与面试要点
核心直觉
- 正则化 = 给模型加"约束",防止过度拟合噪声
- 交叉验证 = "用数据的不同部分反复检验模型"
- 特征选择 = "选择携带最多目标信息的特征"
- 集成学习 = "三个臭皮匠顶个诸葛亮"
- 降维 = "抓住主要矛盾"
常见面试问题
- L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
- 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
- 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
- K-Means为什么收敛到局部最优?(目标函数非凸)
- PCA为什么需要中心化?(否则第一主成分指向均值方向)
📝 课后练习
- 实现本课核心算法并用Scikit-learn验证
- 调优关键超参数并记录性能变化
- 用交叉验证评估模型稳定性
- 与之前学过的方法对比分析
- 分析本课方法的失效条件