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. 缺失值处理: 缺失值填充为-1或中位数后,阈值需避开填充值区域,防止误告警。
  2. 异常值截断: 对极端值做99.9%分位数截断后,阈值不应超过截断边界。
  3. 分箱/离散化: 连续特征分箱后,阈值只能落在箱边界上,精度受箱数限制。
  4. 标准化/归一化: 特征缩放后,阈值需同步缩放,否则告警逻辑失效。
  5. 交叉特征: 如金额/历史平均金额,阈值需基于比率而非绝对值。
常见错误: 特征工程阶段做了 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
核心结论: 特征工程改变了特征的数值空间,阈值必须与特征空间保持 同尺度。建议在特征工程完成后,将阈值也纳入特征监控体系,确保告警逻辑与特征分布一致。