17 数据分布:原理与可视化
本章目标:理解直方图、核密度估计、箱线图和小提琴图的统计原理,能够根据数据特征选择合适的图形,并正确解读分布的形态特征。本章是可视化分析的理论基础,也是后续计量建模(正态性假设、异方差检验、残差分析)的基础。
17.1 从总体到样本:可视化的统计基础
17.1.1 为什么关心分布
均值和标准差是描述数据的最常用统计量,但它们只是分布的摘要,会丢失大量信息。
考虑以下三组数据,均值和标准差完全相同:
| 数据集 | 均值 | 标准差 | 实际形态 |
|---|---|---|---|
| A | 0 | 1 | 标准正态分布 |
| B | 0 | 1 | 双峰分布(两个子群体混合) |
| C | 0 | 1 | 高度右偏,存在若干极端大值 |
如果只看均值和标准差,这三组数据”完全一样”。但它们对应的经济含义截然不同:B 可能暗示存在两个不同的市场状态,C 可能意味着尾部风险被严重低估。
可视化分布的意义:让我们”看见”均值和标准差看不见的信息。
17.1.2 总体、样本与经验分布
总体分布(population distribution)是数据生成过程的真实规律,通常未知,用概率密度函数 \(f(x)\) 描述。
样本是从总体中随机抽取的有限个观测值 \(\{x_1, x_2, \ldots, x_n\}\)。
经验分布(empirical distribution)是样本的分布,是总体分布的一个估计。当样本量 \(n \to \infty\) 时,经验分布依概率收敛到总体分布。
可视化的核心任务是:用有限的样本数据,尽可能准确地”描绘”出总体分布的形状。
直方图、KDE、箱线图是三种不同的方式,各有侧重:
- 直方图:将样本离散化,直接统计各区间的频率,是经验分布的阶梯形近似
- KDE:对直方图进行平滑处理,得到连续的密度曲线估计
- 箱线图:用五个分位数概括分布的中心、扩散和尾部,不展示完整形状
17.2 直方图:原理与实践
17.2.1 基本构造
设有样本 \(\{x_1, x_2, \ldots, x_n\}\),将数据范围划分为 \(K\) 个等宽区间(bins),第 \(k\) 个区间为 \([a_k, a_{k+1})\),区间宽度为:
\[h = \frac{\max(x) - \min(x)}{K}\]
对每个区间统计落入的数据点数 \(n_k\),纵轴有三种表示方式:
频数(Frequency):直接计数 \[\text{纵轴} = n_k\]
频率(Relative Frequency):占总样本的比例 \[\text{纵轴} = p_k = \frac{n_k}{n}, \quad \sum_{k=1}^K p_k = 1\]
密度(Density):单位区间内的频率,使得面积之和为 1 \[\text{纵轴} = f_k = \frac{p_k}{h} = \frac{n_k}{n \cdot h}, \quad \sum_{k=1}^K f_k \cdot h = 1\]
📌 关键区别:只有密度直方图的纵轴与概率密度函数(PDF)处于同一量纲,可以直接与 KDE 曲线叠加比较。频率直方图的面积之和为 1,频数直方图的面积之和为 \(n\)。
17.2.2 Bin 宽度的选择
Bin 宽度(即区间数 \(K\))是直方图最关键的参数:\(K\) 太小则过度平滑,\(K\) 太大则噪声过多。
三种常用的自动选择规则:
Sturges 规则(最简单,适合正态分布): \[K = \lceil \log_2 n \rceil + 1\]
Scott 规则(最优均方误差,假设正态分布): \[h = 3.49 \cdot \hat{\sigma} \cdot n^{-1/3}\]
Freedman-Diaconis(FD)规则(对离群值更稳健): \[h = 2 \cdot \text{IQR}(x) \cdot n^{-1/3}\]
其中 \(\text{IQR} = Q_3 - Q_1\) 为四分位距。FD 规则在金融数据(存在肥尾和离群值)中通常比 Sturges 更合适。
Sturges 和 Scott 规则均基于正态分布推导,使用标准差 \(\hat{\sigma}\) 作为数据扩散程度的度量。但标准差对极端值非常敏感——一个离群值就能显著放大 \(\hat{\sigma}\),导致 \(h\) 偏大(即 \(K\) 偏小),掩盖分布的细节。
FD 规则改用 IQR(四分位距)代替标准差,IQR 只关注中间 50% 的数据,不受极端值影响,因此在金融收益率(存在”黑天鹅”事件)等场景下更为稳健。
17.2.3 直方图的局限性
- 结果依赖于 bin 的划分:不同的起始位置或区间数,会得到形状差异很大的直方图
- 不连续:阶梯形状使得相邻区间的”边界效应”显著,无法呈现分布的平滑特征
- 难以比较多组:多个直方图叠加时,由于颜色遮挡,对比效果差
这些局限性直接引出了核密度估计(KDE)的必要性。
我有一组金融数据(日收益率),请帮我:
1. 分别用频数、频率、密度三种纵轴绘制直方图,1行3列并排
2. 在密度直方图上叠加 KDE 曲线(用 scipy.stats.norm 拟合的正态密度曲线)
3. 同时展示 bins=5, 15, 30 三种设置的密度直方图对比
4. 所有图形使用模拟数据:N=500, 日收益率 ~ N(0.001, 0.02),seed=42
5. 图形风格简洁,去掉上/右边框,添加中文标题和坐标轴标签
17.3 核密度估计(KDE)
17.3.1 基本思想:从直方图到平滑曲线
直方图的核心问题是”块状”——每个数据点要么完整地贡献给某个 bin,要么完全不贡献。KDE 的思想是:让每个数据点对周围所有位置都有贡献,距离越近贡献越大。
具体地,在估计点 \(x\) 处的密度时,KDE 对所有样本点 \(x_i\) 进行加权平均:
\[\hat{f}_h(x) = \frac{1}{nh} \sum_{i=1}^{n} K\!\left(\frac{x - x_i}{h}\right)\]
其中 \(K(\cdot)\) 为核函数,\(h\) 为带宽(bandwidth),控制平滑程度。
直觉上:在每个样本点 \(x_i\) 处”放置”一个以 \(x_i\) 为中心、形状由 \(K(\cdot)\) 决定的”小山丘”,所有小山丘叠加后归一化,就得到密度估计曲线。
17.3.2 核函数的选择
核函数 \(K(\cdot)\) 需满足:\(K(u) \geq 0\),\(\int K(u)\,du = 1\),且关于 0 对称。
常用核函数:
| 核函数 | 表达式 | 特点 |
|---|---|---|
| 高斯核(默认) | \(K(u) = \frac{1}{\sqrt{2\pi}} e^{-u^2/2}\) | 无限支撑,平滑,最常用 |
| Epanechnikov 核 | \(K(u) = \frac{3}{4}(1-u^2) \mathbf{1}(\|u\| \leq 1)\) | 有限支撑,均方误差最优 |
| 均匀核 | \(K(u) = \frac{1}{2}\mathbf{1}(\|u\|\leq 1)\) | 等价于滑动平均直方图 |
实践中,核函数的选择对结果影响远小于带宽的选择,高斯核是绝大多数场景的合理默认值。
17.3.3 带宽的影响
带宽 \(h\) 是 KDE 中最重要的参数:
- \(h\) 过小:每个样本点的”小山丘”很窄,曲线追着每个数据点走,欠平滑(过拟合)
- \(h\) 过大:小山丘很宽,相互重叠严重,曲线过于平坦,过平滑(欠拟合)
最优带宽(Silverman 经验公式,适用于接近正态的数据):
\[h^* = 1.06 \cdot \hat{\sigma} \cdot n^{-1/5}\]
这也是 seaborn.kdeplot() 和 scipy.stats.gaussian_kde 的默认带宽规则(bw_method='scott' 略有差异)。
KDE 估计的均方误差可以分解为偏差的平方和方差之和:
\[\text{MSE}[\hat{f}_h(x)] = \text{Bias}^2[\hat{f}_h(x)] + \text{Var}[\hat{f}_h(x)]\]
- 偏差随 \(h\) 增大而增大(过度平滑导致系统性偏离真实密度)
- 方差随 \(h\) 增大而减小(更多点参与估计,随机波动减少)
最优带宽是偏差和方差之间的最佳折衷,通过最小化积分均方误差(MISE)得到。这与回归中的”偏差-方差权衡”是同一个原理。
请帮我演示 KDE 带宽选择的影响:
- 生成模拟数据:N=200, x ~ N(0,1), seed=42
- 绘制 1 行 3 列子图,分别使用 bandwidth = 0.1(欠平滑)、
0.5(适中)、2.0(过平滑)
- 每张子图同时显示:密度直方图(背景)+ KDE 曲线 + 真实正态密度曲线(虚线)
- 结论性标题注明带宽效果
- 使用 scipy.stats.gaussian_kde,手动设置 bw_method
17.4 箱线图与小提琴图
17.4.1 五数概括与箱线图的构造
箱线图用五个统计量概括数据分布:
\[\text{最小值} \quad Q_1 \quad \text{中位数}(Q_2) \quad Q_3 \quad \text{最大值}\]
但实际绘制中,“最小值”和”最大值”并非真正的极值,而是通过 IQR 规则确定的”须”(whisker)的端点:
\[\text{下须} = Q_1 - 1.5 \times \text{IQR}, \quad \text{上须} = Q_3 + 1.5 \times \text{IQR}\]
其中 \(\text{IQR} = Q_3 - Q_1\)(四分位距)。
超出上下须范围的点被标记为离群值(outlier),单独用点绘出。
为什么是 1.5 倍 IQR? 对于正态分布,\([Q_1 - 1.5\,\text{IQR},\; Q_3 + 1.5\,\text{IQR}]\) 约覆盖 99.3% 的数据。因此落在此范围外的点,在正态假设下是小概率事件,被视为潜在离群值。
对正态分布 \(X \sim N(\mu, \sigma^2)\),有: \[Q_1 = \mu - 0.6745\sigma, \quad Q_3 = \mu + 0.6745\sigma, \quad \text{IQR} = 1.349\sigma\]
因此须的上限为: \[Q_3 + 1.5\,\text{IQR} = \mu + 0.6745\sigma + 1.5 \times 1.349\sigma = \mu + 2.698\sigma\]
对应正态分布的概率约为 \(P(X > \mu + 2.698\sigma) \approx 0.35\%\),双侧合计约 0.7%,即约 99.3% 的数据在须内。
这就解释了为什么在正态数据中,箱线图的离群值”很少”;而在肥尾分布(如金融收益率)中,离群值会”很多”——这恰好是箱线图传递的有效信息。
17.4.2 小提琴图:KDE 与箱线图的融合
小提琴图在箱线图的基础上,将两侧对称地绘制 KDE 曲线,宽度正比于该位置的密度估计值。
小提琴图的信息量比箱线图更丰富: - 可以看出分布是否是双峰(箱线图无法反映) - 可以看出分布的偏斜方向和程度 - 仍然保留了中位数、IQR 等分位数信息
何时用箱线图,何时用小提琴图?
| 场景 | 推荐 |
|---|---|
| 需要精确读取分位数 | 箱线图 |
| 比较多个组的分布形态 | 小提琴图 |
| 数据量较小(\(n < 50\)) | 箱线图(KDE 在小样本下不可靠) |
| 怀疑存在双峰或多峰 | 小提琴图 |
| 面向非统计专业读者 | 箱线图(更直观易懂) |
请用 Python 演示箱线图和小提琴图的信息差异:
- 生成两组数据,N=500,seed=42:
- 组1:标准正态分布 N(0,1)
- 组2:双峰分布(50% 来自 N(-2,0.5),50% 来自 N(2,0.5))
- 两组数据的均值、标准差近似相同
- 绘制 1 行 2 列:左图箱线图,右图小提琴图(两组并排)
- 在图注中说明:箱线图无法区分两组分布形态,小提琴图可以
- 使用 seaborn,色盲友好配色
17.5 分布的形态特征
17.5.1 偏态(Skewness)
偏态衡量分布相对于均值的不对称程度,定义为三阶标准化中心矩:
\[\text{Skewness} = \frac{E[(X-\mu)^3]}{\sigma^3}\]
- 正偏(右偏):\(\text{Skewness} > 0\),右尾更长,均值 > 中位数 > 众数
- 金融案例:个股市值分布、房价分布
- 负偏(左偏):\(\text{Skewness} < 0\),左尾更长,均值 < 中位数 < 众数
- 金融案例:期权到期收益率
📌 对于资产收益率,负偏(左偏)意味着极端亏损比极端盈利更可能发生,这是风险管理中需要特别关注的特征。
17.5.2 峰态(Kurtosis)
峰态衡量分布尾部的厚薄和峰部的尖峭程度,定义为四阶标准化中心矩:
\[\text{Kurtosis} = \frac{E[(X-\mu)^4]}{\sigma^4}\]
正态分布的峰态为 3。通常使用超额峰态(excess kurtosis):
\[\text{Excess Kurtosis} = \text{Kurtosis} - 3\]
- 超额峰态 > 0(厚尾/尖峰,leptokurtic):极端值比正态分布更频繁
- 金融案例:几乎所有金融资产的日收益率,超额峰态通常在 2–10 之间
- 超额峰态 < 0(薄尾/低峰,platykurtic):极端值比正态分布更罕见
金融数据的典型特征:负偏 + 厚尾(fat tails)是金融收益率分布的”风格化特征”(stylized facts),这意味着正态分布会系统性地低估极端损失的概率。
17.5.3 正态性检验的可视化:QQ 图
QQ 图(Quantile-Quantile Plot)将样本的经验分位数与理论分布(通常是正态分布)的分位数进行对比:
- X 轴:理论正态分布的分位数
- Y 轴:样本数据的对应分位数
- 参考线:若数据来自正态分布,点应落在 \(y = x\) 的对角线上
如何读 QQ 图:
| 偏离模式 | 含义 |
|---|---|
| 两端向上偏离参考线 | 右偏(正偏) |
| 两端向下偏离参考线 | 左偏(负偏) |
| 两端均偏离参考线(S 形) | 厚尾(超额峰态 > 0) |
| 基本落在参考线上 | 接近正态分布 |
QQ 图是比正态性检验统计量(如 Jarque-Bera 检验)更直观的工具——它不仅告诉你”是否正态”,还告诉你”在哪里偏离了正态”。
请帮我绘制四种分布的 QQ 图对比,1行4列:
- 正态分布 N(0,1)
- 右偏分布(用 chi-squared(df=3) 模拟)
- 左偏分布(用 -chi-squared(df=3) 模拟)
- 厚尾分布(用 t(df=3) 模拟)
每张子图:散点为样本分位数 vs 正态分布分位数,红色虚线为参考线 y=x
N=500,seed=42,使用 scipy.stats.probplot
结论性标题注明每种分布的 QQ 图特征
17.6 多组分布的比较
17.6.1 分组 KDE 与分组箱线图
比较多组数据的分布时,图形选择取决于组数和关注重点:
| 场景 | 推荐图形 |
|---|---|
| 2–3 组,关注形态 | 叠加 KDE 图(不同颜色/线型) |
| 3–8 组,关注分位数 | 分组箱线图或小提琴图 |
| 8 组以上 | 山脊图(ridge plot / joy plot) |
| 关注时序演变 | 分年度/分期箱线图 |
17.6.2 Small Multiples(分面图)
当组数较多、或希望展示完整的分布形态时,small multiples(分面图)往往优于将所有组叠加在一张图上:
- 每个子图展示一组的完整分布
- 所有子图共享相同的坐标轴范围(可比性)
- 读者可以同时处理多张简单图,而不是一张复杂图
在 seaborn 中,FacetGrid 和 displot(col=...) 提供了方便的分面功能。
17.6.3 金融场景:宏观经济指标的分布演变
使用 statsmodels 自带的宏观经济数据,比较不同时期 GDP 增速和通胀率的分布特征。
使用 statsmodels.datasets.macrodata 中的美国宏观数据:
- 变量:realgdp(实际GDP)的季度增速
- 按时期分组:1960s, 1970s, 1980s, 1990s, 2000s, 2010s
- 绘制两张图:
(1) 分组箱线图:横轴为时期,纵轴为季度增速(%)
(2) 叠加 KDE 图:6 个时期用不同颜色,使用 colorblind palette
- 中文标题:"美国实际GDP增速分布的跨期演变(1960–2019)"
- 去掉上/右边框,图例直接标注在 KDE 曲线末端
17.7 金融数据的典型分布特征
17.7.1 收益率分布的”风格化特征”
金融资产收益率的分布具有一些普遍性规律,被称为风格化特征(stylized facts):
- 非正态性:峰态远高于正态分布(厚尾),偏态通常为负
- 波动聚集(volatility clustering):大波动之后往往跟随大波动——但这是时序特征,分布图无法反映
- 肥尾(fat tails):极端收益率(尤其是极端损失)发生的频率显著高于正态分布预测
实践含义:如果用正态分布建模资产收益率,会系统性地低估极端损失的概率。这是 2008 年金融危机中许多风险模型失效的重要原因之一。
17.7.2 可视化验证:用图形”看见”肥尾
通过以下组合图形,可以直观地验证收益率的肥尾特征:
- 密度直方图 + 正态密度曲线:观察两端(尤其是左尾)的差异
- QQ 图:两端偏离参考线 → 厚尾
- 箱线图:离群值数量远多于正态分布的预期(> 0.7%)
使用 statsmodels.datasets.macrodata 数据,取 realcons(实际消费)
的季度增速作为代理变量,完成以下分析:
1. 计算季度对数增速(log difference × 100)
2. 计算并打印:均值、标准差、偏度、超额峰态
3. 绘制 1 行 3 列的诊断图:
- 左:密度直方图 + KDE 曲线 + 拟合正态密度曲线(红色虚线)
- 中:箱线图,标注离群值数量
- 右:QQ 图,参考线为红色虚线
4. 总标题:"{变量名} 增速的分布特征:肥尾与偏态"
5. 在图注中报告偏度和超额峰态数值
17.8 本章小结
| 工具 | 优势 | 局限 | 适用场景 |
|---|---|---|---|
| 直方图 | 直观,显示频率/密度绝对值 | 依赖 bin 选择,不连续 | 单变量分布初探 |
| KDE | 连续平滑,不依赖 bin | 依赖带宽,小样本不可靠 | 分布形态估计,多组对比 |
| 箱线图 | 清晰呈现分位数和离群值 | 看不出双峰、完整形态 | 多组分位数对比 |
| 小提琴图 | KDE + 分位数,信息最丰富 | 相对复杂,小样本不可靠 | 多组分布形态对比 |
| QQ 图 | 直观诊断正态偏离方向 | 仅与一种理论分布对比 | 正态性检验,残差诊断 |
三张图的互补关系:在分析一组新数据时,建议同时绘制直方图/KDE + 箱线图 + QQ 图,三者提供互补的视角——KDE 看整体形态,箱线图看分位数和离群值,QQ 图看与正态分布的偏离。
17.9 延伸阅读
- Wasserman, L. (2006). All of Nonparametric Statistics, Chapter 6. — 直方图和 KDE 的统计理论基础
- Silverman, B. W. (1986). Density Estimation for Statistics and Data Analysis. — KDE 的经典专著
- Cont, R. (2001). Empirical properties of asset returns: stylized facts and statistical issues. Quantitative Finance, 1(2), 223–236. — 金融收益率风格化特征的经典综述
statsmodels宏观数据文档:https://www.statsmodels.org/stable/datasets/index.html