基本统计特征:均值、方差、峰度、偏度
做特征工程,本质上是在跟数字的「脾气」打交道。均值、方差这些统计量,说白了就是一套量化的尺子——帮你摸清每个字段的分布性格。
我个人习惯,拿到一张大宽表后,会先算一遍这四类统计特征。不是炫技,而是真的能快速发现脏数据、识别值域异常、甚至提前感知建模风险。你想想看,如果某个字段的偏度高达 30,那基本可以断定是非对称分布了,再做后续衍生就得格外小心。
这一章我们就把这四个量拆开揉碎,讲清楚它们到底在度量什么,在特征衍生和分箱场景下怎么用。
均值(Mean)——最朴素的中心趋势
均值就是所有值的算术平均值。简单,但有用。在特征衍生里,我们经常用它做跨群对比——比如按用户分组,算出每个用户的日均交易金额,这就是一个很好的衍生特征。
不过要小心,均值对异常值极其敏感。我在项目中遇到过这样的情况:某个字段本来均值在 50 左右,因为几条录入错误(数值变成 500000),均值直接被拉到了 3000 多。你如果不做预处理,后续分箱的边界会完全跑偏。
方差与标准差(Variance & Standard Deviation)——离散程度的度量
方差衡量的是数据围绕均值的波动幅度。标准差就是方差的平方根,量纲与原始数据一致,更方便解释。
举个例子:两个用户的月消费均值都是 5000 元。但一个人每月消费在 4500~5500 之间波动,另一个在 1000~9000 之间。同样均值,方差天差地别。这种差异在风控模型里可能就是「稳定用户」和「风险用户」的分水岭。
在自动分箱中,方差常用来判断是否需要单独划出一个「高波动」区间。我之前做信贷评分卡时,发现连续 3 个月收入方差大于某个阈值的群体,违约率显著上升。后来直接把方差作为一个离散化维度放进模型,效果提升了一个百分点。
偏度(Skewness)——分布的对称性
偏度告诉我们数据是往左偏还是往右偏。
- 偏度 = 0:对称分布(比如理想正态)。
- 偏度 > 0:右偏,右边有长尾(大部分数据集中在左侧,少量极大值)。
- 偏度 < 0:左偏,左边有长尾。
为什么会关心偏度?因为很多统计模型(如线性回归)天然假设误差正态,如果偏度太大就需要做变换。在特征工程里,我习惯先用偏度做一次「过滤」:如果偏度的绝对值大于 1.5,我会优先考虑做 Log 变换或 Box-Cox 变换,再去做分箱。
峰度(Kurtosis)——尖峰还是平峰
峰度描述的是分布尾部的「厚薄」和峰部的「尖峭程度」。通常我们会与正态分布做对比(正态分布峰度为 3)。
| 峰度值 | 形态说明 | 常见场景举例 |
|---|---|---|
| > 3 | 尖峰厚尾,极端值较多 | 金融收益率、网页访问量(有突发峰值) |
| = 3 | 标准正态 | 实验室测量误差(理想情况) |
| < 3 | 平峰薄尾,数据相对均匀 | 人体身高、考试分数(受物理限制) |
峰度高意味着极值频发——这在风控模型里往往是「黑天鹅」信号。自动分箱时,我一般会检查峰度 > 5 的字段,考虑单独划出一个「异常极端值」箱,而不是强行让极端值混入其他箱体。你想想看,如果几个极端值被分到同一个箱里,这个箱的 WOE 会很不稳定,模型上线后容易失效。
SQL 实现:快速计算四个统计量
下面是在 Apache Hive / Spark SQL 中一次性算均方偏峰的写法,注意偏度和峰度用的是内置聚合函数。
SELECT
用户ID,
AVG(消费金额) AS 均值,
STDDEV_SAMP(消费金额) AS 标准差,
VAR_SAMP(消费金额) AS 方差,
SKEWNESS(消费金额) AS 偏度,
KURTOSIS(消费金额) AS 峰度
FROM 交易表
GROUP BY 用户ID;
STDDEV_POP、VAR_POP,但偏度没有内置函数,需要自己用 POW 和聚合算三阶矩。Presto/Trino 中偏度函数叫 SKEWNESS,峰度叫 KURTOSIS。生产环境注意版本兼容。
特征衍生中的实战经验
我个人很少只用单字段的均值或方差做特征,而是把它们组合起来看。举个例子:
- 「均值 + 标准差」一起作为特征,相当于同时表达了中心位置和离散程度。
- 「偏度 + 峰度」组合,可以刻画一个字段的异常敏感度。我曾经在用户生命周期建模中,把活跃天数的偏度 > 2 且峰度 > 5 的用户单独标记为一个群体,结果这个群体的留存率比普通用户低了 40%。
- 在分箱阶段,如果某个字段的偏度接近 0 且峰度接近 3,你大可以用等距分箱;否则建议优先用等频或基于统计分布的定制分箱。
基本统计量看起来简单,但用好了就是特征工程的「听诊器」。在后续几章里,我们会把这些量作为基石,做更复杂的图谱变量衍生和自动分箱策略。嗯,今天就先到这里。