2. 风控特征基础:特征的定义与分类
在风控阈值调优之前,必须建立对“特征”的清晰认知。特征(Feature)是原始数据经过加工后,用于描述用户、交易或设备某一维度属性的变量。阈值设置的本质,就是为这些特征划定一个“正常”与“异常”的分界线。
2.1 特征的定义与核心属性
一个合格的风控特征应具备以下属性:
| 属性 | 说明 | 阈值调优影响 |
|---|---|---|
| 区分度 | 特征值在好坏样本上的分布差异程度 | 区分度低的特征,阈值难以找到稳定切割点 |
| 稳定性 | 特征分布随时间波动的幅度(PSI < 0.1) | 不稳定特征需要动态阈值或频繁重调 |
| 可解释性 | 特征值变化与风险逻辑的关联是否直观 | 黑盒特征(如深度嵌入向量)不适合人工设阈 |
| 时效性 | 特征反映的是实时、近30天还是历史累计行为 | 时序型特征阈值需考虑衰减窗口 |
实战经验: 阈值调优前,先对每个特征做 PSI(群体稳定性指标) 和 IV(信息价值) 计算。IV < 0.02 的特征建议直接剔除,不参与阈值设置。
2.2 特征的三类基本形态
风控特征按数据结构与业务含义,分为数值型、类别型和时序型。三类特征在阈值设置时的处理逻辑完全不同。
2.2.1 数值型特征
数值型特征(Numeric Feature)是可直接参与数学运算的连续或离散数值,如交易金额、登录次数、设备评分。阈值设置通常采用单侧截断(如金额 > 5000 告警)或双侧截断(如登录次数 < 1 或 > 20 告警)。
2.2.2 类别型特征
类别型特征(Categorical Feature)取值有限且无序,如国家代码、设备类型、支付渠道。阈值设置通常转化为黑名单/白名单或风险等级映射(如渠道A=低风险,渠道B=高风险)。
2.2.3 时序型特征
时序型特征(Time-series Feature)包含时间窗口与变化趋势,如过去1小时交易笔数、7天平均金额、金额增速。阈值设置需考虑窗口长度、衰减因子和季节性模式。
避坑指南: 不要对类别型特征直接计算均值或标准差来设阈。例如“国家代码=156”与“国家代码=840”之间没有数值大小关系,只能用频次或风险率来设阈。
2.3 特征工程与阈值的关系
特征工程(Feature Engineering)决定了阈值设置的上限。原始数据经过以下变换后,阈值才能被有效定义:
- 缺失值处理: 缺失值填充为-1或中位数后,阈值需避开填充值区域,防止误告警。
- 异常值截断: 对极端值做99.9%分位数截断后,阈值不应超过截断边界。
- 分箱/离散化: 连续特征分箱后,阈值只能落在箱边界上,精度受箱数限制。
- 标准化/归一化: 特征缩放后,阈值需同步缩放,否则告警逻辑失效。
- 交叉特征: 如
金额/历史平均金额,阈值需基于比率而非绝对值。
常见错误: 特征工程阶段做了
StandardScaler 标准化,但阈值设置时仍使用原始业务单位(如“金额 > 5000”)。标准化后的特征均值为0、标准差为1,原始阈值5000已无意义。必须将阈值也转换到标准化空间,或使用原始特征设阈。
2.4 三类特征阈值设置对比
| 维度 | 数值型 | 类别型 | 时序型 |
|---|---|---|---|
| 阈值形式 | 单侧/双侧截断值 | 白名单/黑名单/风险等级 | 窗口统计量 + 变化率 |
| 常用统计量 | 均值、标准差、分位数 | 频次、风险率、WOE | 滑动平均、指数加权、差分 |
| 调优方法 | KS曲线、ROC、收益图 | 卡方检验、频次排序 | 时间序列分解、异常检测 |
| 动态性 | 可静态或动态 | 通常静态 | 必须动态(窗口滑动) |
| 示例 | 单笔金额 > 10000 | 国家代码 ∈ [高风险列表] | 1小时交易笔数 > 均值+3σ |
2.5 特征分类与阈值设置流程
下图展示了从原始数据到阈值生效的完整链路,以及特征分类在其中的位置:
2.6 实战案例:特征分类对阈值的影响
以“交易金额”为例,展示不同特征工程处理方式下,阈值设置的差异:
# 原始特征:交易金额(单位:元)
# 场景A:不做任何处理,直接设阈
threshold_A = 10000 # 单笔超过1万元告警
# 场景B:做对数变换后设阈
import numpy as np
log_amount = np.log1p(amount) # log(1+amount)
threshold_B_log = np.log1p(10000) # 约9.21
# 场景C:做标准化后设阈
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_amount = scaler.fit_transform(amount.reshape(-1, 1))
# 原始10000元对应的标准化值需重新计算
threshold_C_scaled = (10000 - scaler.mean_[0]) / scaler.scale_[0]
# 场景D:分箱后设阈
bins = [0, 1000, 5000, 10000, 50000, np.inf]
labels = ['极低', '低', '中', '高', '极高']
# 阈值只能落在箱边界:1000, 5000, 10000, 50000
threshold_D_bin = '高' # 对应原始值 > 10000
核心结论: 特征工程改变了特征的数值空间,阈值必须与特征空间保持 同尺度。建议在特征工程完成后,将阈值也纳入特征监控体系,确保告警逻辑与特征分布一致。