4. 单变量分布对比:直方图、核密度估计图(KDE)、箱线图、小提琴图
在特征回放分析中,单变量分布对比是最基础也是最直观的环节。通过对比不同分组下同一特征的分布形态,可以快速发现组间差异、异常值以及数据偏移。本章聚焦四种核心可视化工具:直方图、核密度估计图(KDE)、箱线图和小提琴图,并系统对比它们在分组对比场景下的适用性与解读要点。
4.1 四种分布图的核心差异
在开始实战之前,需要明确每种图表的数学原理与视觉侧重点。下表从数据粒度、分布信息、分组对比能力三个维度进行对比:
| 图表类型 | 数据粒度 | 分布信息 | 分组对比能力 | 适用场景 |
|---|---|---|---|---|
| 直方图 | 离散化分箱 | 频数/频率分布 | 中等(重叠时易混淆) | 初步观察分布形状、偏态、多峰 |
| KDE图 | 连续平滑 | 概率密度曲线 | 强(曲线重叠清晰) | 平滑分布对比、多峰检测 |
| 箱线图 | 五数概括 | 中位数、四分位距、异常值 | 强(并排对比直观) | 异常值检测、组间位置与离散度对比 |
| 小提琴图 | 密度+箱线 | 完整密度形状+关键统计量 | 最强(形状与统计量兼得) | 精细分布对比、样本量差异大时 |
选型建议:当需要快速筛查异常值时,优先使用箱线图;当需要观察分布的双峰或多峰结构时,KDE图或小提琴图更具优势;直方图适合作为初步探索,但受分箱数影响较大,建议结合KDE曲线一起解读。
4.2 直方图与KDE图:分组叠加对比
直方图通过将数据划分为连续的区间(bins)并统计每个区间内的样本数量来展示分布。KDE图则使用核函数(通常为高斯核)对每个数据点周围进行平滑加权,生成一条连续的概率密度曲线。在分组对比中,透明度(alpha)和颜色区分是避免视觉重叠的关键。
以下代码演示如何在同一张图上叠加两个分组的直方图与KDE曲线:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成模拟数据:两组不同分布
np.random.seed(42)
group_a = np.random.normal(loc=50, scale=10, size=300)
group_b = np.random.normal(loc=65, scale=15, size=250)
# 叠加直方图与KDE
plt.figure(figsize=(10, 5))
sns.histplot(group_a, bins=20, color='#3498db', alpha=0.4, label='Group A', kde=True)
sns.histplot(group_b, bins=20, color='#e74c3c', alpha=0.4, label='Group B', kde=True)
plt.title('直方图 + KDE 叠加对比')
plt.xlabel('特征值')
plt.ylabel('频数 / 密度')
plt.legend()
plt.tight_layout()
plt.show()
解读要点:
- 中心位置偏移:Group B 的峰值明显右移,说明该组特征均值更高。
- 离散程度差异:Group B 的KDE曲线更扁平,标准差更大,数据更分散。
- 重叠区域:两条曲线在 55-65 区间重叠较多,说明该区间样本难以直接区分组别。
4.3 箱线图与小提琴图:并排对比
箱线图以五数概括(最小值、下四分位数、中位数、上四分位数、最大值)为核心,通过箱体、须线和异常值点展示分布。小提琴图则结合了箱线图与KDE图,在箱线图的基础上两侧绘制对称的密度曲线,能够同时展示分布的形状细节与关键统计量。
在分组对比中,并排排列是标准做法。以下代码生成并排箱线图与并排小提琴图:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 构造DataFrame
df = pd.DataFrame({
'value': np.concatenate([group_a, group_b]),
'group': ['A']*300 + ['B']*250
})
# 并排箱线图
plt.figure(figsize=(8, 4))
sns.boxplot(x='group', y='value', data=df, palette=['#3498db', '#e74c3c'])
plt.title('并排箱线图对比')
plt.tight_layout()
plt.show()
# 并排小提琴图
plt.figure(figsize=(8, 4))
sns.violinplot(x='group', y='value', data=df, palette=['#3498db', '#e74c3c'], inner='quartile')
plt.title('并排小提琴图对比')
plt.tight_layout()
plt.show()
常见陷阱:
- 箱线图对多峰不敏感:当数据呈现双峰分布时,箱线图可能显示正常的箱体范围,但实际分布形态与单峰完全不同。此时必须结合小提琴图或KDE图验证。
- 小提琴图在样本量过小时失真:当某组样本量少于30时,KDE平滑可能产生误导性的尖峰或凹陷,建议同时标注样本量。
- 异常值标记标准:箱线图默认使用1.5倍IQR规则,不同业务场景可能需要调整(如3倍IQR用于金融风控)。
4.4 实战对比:四图联用分析流程
在实际项目中,建议按照以下流程依次使用四种图表,形成完整的分布对比分析闭环:
- 第一步:直方图快速扫描 — 观察整体分布形状、偏态方向、是否存在明显多峰。
- 第二步:KDE图平滑验证 — 确认直方图中观察到的多峰是否真实,排除分箱数选择带来的假象。
- 第三步:箱线图定位异常 — 标记各组异常值,对比中位数与四分位距的组间差异。
- 第四步:小提琴图综合判断 — 融合形状与统计量,给出最终的分组差异结论。
案例:在信贷风控场景中,对比“好客户”与“坏客户”的“月收入”特征。直方图显示坏客户收入分布左偏严重;KDE图确认存在双峰(部分低收入群体+部分高收入但异常群体);箱线图标记出高收入异常点;小提琴图最终揭示坏客户在低收入区间密度显著高于好客户,且存在一个高收入长尾。四图联用完整刻画了收入特征的区分能力。
4.5 分组对比的统计检验补充
可视化分析提供直观判断,但组间差异是否具有统计显著性,需要结合假设检验。下表列出与四种分布图对应的常用统计检验方法:
| 可视化图表 | 关注维度 | 推荐统计检验 | 适用条件 |
|---|---|---|---|
| 直方图 / KDE图 | 分布形状差异 | Kolmogorov-Smirnov 检验 | 两组独立样本,连续分布 |
| 箱线图 | 中位数差异 | Mann-Whitney U 检验 | 非正态分布,有序数据 |
| 小提琴图 | 整体分布差异 | Kruskal-Wallis 检验(多组) | 三组及以上,非正态 |
最佳实践:在输出可视化图表的同时,在图表标题或注释中标注检验p值。例如:“小提琴图显示两组分布差异显著(KS检验 p < 0.001)”。这样既保留了视觉直观性,又提供了统计严谨性。