2. 特征分布基础:定义、类型与可视化方法

在支付风控模型监控中,特征分布是衡量模型输入变量在时间或群体维度上稳定性的核心指标。当模型发生衰减(即预测能力下降)时,根因往往可以追溯到特征分布发生了偏移。本节将系统介绍特征分布的定义、离散与连续特征的分布形态,以及三种最常用的可视化诊断工具。

2.1 特征分布的定义

特征分布描述了一个特征变量在样本空间中取值的概率密度或频率。在支付场景中,每个特征(如交易金额、用户年龄、设备类型)都对应一个分布函数。分布的变化意味着样本的统计属性发生了改变,这可能是由于客群结构变化、业务策略调整或外部环境冲击所致。

概念 数学表示 支付场景示例
概率分布 P(X = x) 或 f(x) 单笔交易金额的分布
经验分布 基于样本统计的分布 过去30天交易金额的直方图
分布偏移 训练分布 vs 实时分布 模型上线后交易金额均值从200元变为500元
风控要点:分布偏移是模型衰减的前兆信号。当特征分布发生显著变化时,即使模型权重未变,预测结果也会产生系统性偏差,导致误杀率或漏报率上升。

2.2 离散特征与连续特征分布

2.2.1 离散特征分布

离散特征取值有限且可枚举,常见于支付风控中的类别型变量。其分布通过频率计数或概率质量函数(PMF)描述。

  • 典型离散特征:支付渠道(支付宝、微信、银行卡)、设备类型(iOS、Android)、交易结果(成功、失败、拒绝)。
  • 分布形态:每个类别对应一个概率值,所有类别概率之和为1。
  • 偏移检测:比较训练集与实时数据中各类别的占比变化,常用PSI(群体稳定性指标)量化。

2.2.2 连续特征分布

连续特征取值在实数范围内连续,通过概率密度函数(PDF)或累积分布函数(CDF)描述。支付场景中常见的连续特征包括交易金额、用户登录时长、IP地址的经纬度等。

  • 典型连续特征:交易金额(0~10000元)、用户年龄(18~70岁)、交易间隔时间(秒)。
  • 分布形态:可能呈现正态分布、长尾分布、双峰分布等。
  • 偏移检测:关注均值、方差、分位数(如P50、P95)的变化,常用KS检验或分布距离度量。
特征类型 分布描述方式 偏移量化指标 支付场景举例
离散特征 频率表、PMF PSI、卡方检验 支付渠道占比变化
连续特征 直方图、PDF、CDF KS统计量、Wasserstein距离 交易金额分布偏移

2.3 分布可视化方法

可视化是分布偏移诊断的第一步。以下三种图形是支付风控监控中最常用的工具,每种图侧重不同的分布特征。

2.3.1 直方图(Histogram)

直方图将连续特征的值域划分为若干等宽区间(bins),统计每个区间内的样本数量或频率。它直观展示数据的集中趋势、离散程度和偏态。

  • 适用场景:连续特征的分布形状对比(训练集 vs 实时集)。
  • 注意事项:bin宽度选择影响图形解读,过宽会掩盖细节,过窄会引入噪声。
  • 风控应用:对比交易金额直方图,若实时数据出现新的峰值,可能意味着刷单或异常交易模式。

2.3.2 箱线图(Box Plot)

箱线图通过五数概括(最小值、下四分位数Q1、中位数Q2、上四分位数Q3、最大值)描述分布,并标记异常值。它特别适合多组分布对比和异常值检测。

  • 核心元素:箱体(Q1~Q3)、中位线、须(1.5倍IQR范围)、离群点。
  • 适用场景:不同时间窗口或不同客群的特征分布对比。
  • 风控应用:比较本周与上周的交易金额箱线图,若中位数或IQR显著变化,提示分布偏移。

2.3.3 核密度图(Kernel Density Estimation, KDE)

核密度图通过平滑的曲线估计概率密度函数,比直方图更连续、平滑,能更精细地展示分布的多峰形态和尾部特征。

  • 适用场景:需要精确对比分布形状差异,尤其是多峰分布或长尾分布。
  • 注意事项:带宽(bandwidth)参数影响平滑程度,过小会过拟合,过大会丢失细节。
  • 风控应用:叠加训练集与实时集的KDE曲线,直观观察分布是否发生整体平移或形状变化。
可视化选择指南:
  • 快速查看分布形状 → 直方图
  • 对比多组分布的中位数和离散度 → 箱线图
  • 精细分析分布密度和多峰结构 → 核密度图

2.4 三种可视化方法对比

可视化方法 数据维度 核心信息 对异常值敏感度 多组对比能力
直方图 一维连续 频率分布、偏态 中等 一般(重叠时难区分)
箱线图 一维连续 分位数、异常值 高(明确标记离群点) 强(并排对比)
核密度图 一维连续 密度曲线、多峰 低(平滑后弱化) 强(叠加对比)

2.5 特征分布可视化示例(SVG)

下图展示了一个支付风控场景中“交易金额”特征的三种可视化对比。训练集(蓝色)与实时集(红色)的分布差异清晰可见,帮助分析师快速定位偏移。

交易金额特征分布可视化对比 直方图 0 交易金额 箱线图 训练集 实时集 核密度图(叠加对比) 训练集 实时集 0 交易金额 观察:实时集分布整体右移,中位数升高,尾部变长,提示交易金额特征发生偏移。

2.6 代码示例:使用Python绘制分布图

以下代码展示了如何使用 matplotlib 和 seaborn 绘制上述三种分布图,用于支付风控特征监控。

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

# 模拟训练集和实时集数据
np.random.seed(42)
train_data = np.random.normal(loc=200, scale=50, size=1000)
real_data = np.random.normal(loc=250, scale=70, size=1000)

# 创建画布
fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# 1. 直方图
axes[0].hist(train_data, bins=30, alpha=0.7, label='训练集', color='#3498db')
axes[0].hist(real_data, bins=30, alpha=0.6, label='实时集', color='#e74c3c')
axes[0].set_title('直方图')
axes[0].set_xlabel('交易金额')
axes[0].set_ylabel('频次')
axes[0].legend()

# 2. 箱线图
axes[1].boxplot([train_data, real_data], labels=['训练集', '实时集'],
                patch_artist=True,
                boxprops=dict(facecolor='#3498db', alpha=0.7),
                medianprops=dict(color='white'))
axes[1].set_title('箱线图')
axes[1].set_ylabel('交易金额')

# 3. 核密度图
sns.kdeplot(train_data, ax=axes[2], label='训练集', color='#3498db', linestyle='--')
sns.kdeplot(real_data, ax=axes[2], label='实时集', color='#e74c3c')
axes[2].set_title('核密度图')
axes[2].set_xlabel('交易金额')
axes[2].set_ylabel('密度')
axes[2].legend()

plt.tight_layout()
plt.show()
实践注意:在支付风控生产环境中,分布可视化应作为自动化监控仪表盘的一部分,每日定时刷新。当直方图或KDE曲线出现明显偏移时,应触发告警并启动根因分析流程。

2.7 本章小结

  • 特征分布是模型监控的基础,离散特征用频率表,连续特征用密度函数。
  • 直方图适合快速查看分布形状,箱线图擅长对比多组分布和检测异常值,核密度图提供平滑的密度估计。
  • 三种可视化方法应组合使用,从不同角度诊断分布偏移,为后续根因定位提供线索。