数据准备与特征工程:从原始数据到模型变量的关键一跃
在信用评分卡与贷后预警模型开发中,数据准备与特征工程往往决定模型效果的上限,而算法模型只是在逼近这个上限。行业经验表明,一个优秀的特征工程方案可以将模型区分度(KS或AUC)提升0.05~0.15,其贡献远大于更换复杂算法。本章将系统拆解数据源接入、数据清洗、缺失值处理、异常值检测、特征构造与筛选的完整链路,并结合信贷业务场景给出可落地的操作方案。
一、数据源体系:征信、行为与第三方数据的融合策略
信用评分卡模型的数据源通常分为三大类:征信数据(央行征信、百行征信、朴道征信)、行为数据(行内交易流水、APP操作日志、还款记录)以及第三方数据(电商消费、社保公积金、司法涉诉、运营商数据)。不同数据源在模型中的角色差异显著:征信数据是“硬信息”,具有强预测力但覆盖度有限;行为数据是“软信息”,能反映借款人近期风险变化;第三方数据则用于补充征信白户或薄征信人群的评估维度。
数据接入时需重点关注三个问题:数据时效性(T+1还是实时)、数据粒度(客户级、账户级、交易级)、数据合规性(授权范围、数据最小化原则)。实践中建议建立数据字典,明确每个字段的业务定义、取值逻辑、更新频率和来源系统,这是后续特征工程的基础。
| 数据源类型 | 典型字段 | 预测力 | 覆盖度 | 更新频率 |
|---|---|---|---|---|
| 央行征信 | 信贷记录、查询次数、逾期历史 | 高 | 中(约70%人群) | 月度 |
| 行为数据 | 近6个月消费金额、登录频次、还款提前天数 | 中高 | 高(存量客户) | 日级 |
| 第三方数据 | 电商消费等级、社保缴纳基数、涉诉记录 | 中 | 中低 | 周/月级 |
二、数据清洗:从原始数据到可用数据的质量管控
数据清洗的目标是解决格式不一致、重复记录、逻辑冲突、非法值四类问题。以征信报告解析为例,不同征信机构返回的字段格式可能不同(如日期格式“20240101”与“2024-01-01”并存),需要统一转换。重复记录处理需定义去重键(如身份证号+业务编号),并保留最新或最完整的记录。
逻辑校验是清洗环节的关键。例如:贷款发放日期应早于首期还款日期;逾期天数不能为负;授信额度应大于等于已用额度。对于违反业务规则的记录,需标记异常并决定剔除或修正。建议输出数据质量报告,统计每个字段的缺失率、唯一值数量、非法值比例,为后续处理提供依据。
三、缺失值处理:从“填数”到“利用缺失信息”
缺失值处理不能简单理解为“把空值填上”,而应区分缺失机制:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)。在信贷场景中,很多缺失具有业务含义——例如征信报告中“未结清贷款笔数”为空,可能表示借款人无贷款记录,而非数据缺失。因此,处理缺失值的第一步是判断缺失的业务含义。
常用处理方法包括:删除(缺失率过高且无业务含义的字段)、统计填充(均值/中位数/众数)、模型预测填充(用其他变量预测缺失值)、缺失指示变量(新增0/1变量标记是否缺失)。对于信用评分卡,推荐优先使用“缺失指示变量+业务默认值”的组合策略,既保留缺失信息,又避免引入偏差。
# 缺失值处理示例(Python伪代码)
# 1. 计算缺失率
missing_rate = df.isnull().mean().sort_values(ascending=False)
# 2. 高缺失字段(>60%)且无业务含义 → 删除
drop_cols = missing_rate[missing_rate > 0.6].index
# 3. 有业务含义的缺失 → 填充业务默认值(如-999)
df['loan_count'].fillna(-999, inplace=True)
# 4. 新增缺失指示变量
df['loan_count_missing'] = df['loan_count'].isnull().astype(int)
四、异常值检测:识别“真异常”与“假异常”
异常值检测的目标是识别与大多数样本显著不同的观测值。在信贷数据中,异常值可能来自数据录入错误(如年龄为200岁)、欺诈行为(如短期内频繁申请)、或真实的高风险客户(如收入突增10倍)。检测方法分为三类:统计方法(Z-score、IQR)、距离方法(KNN、LOF)、模型方法(孤立森林、DBSCAN)。
处理异常值时需谨慎:对于明显的数据错误,直接修正或删除;对于业务上的“极端但真实”的客户,建议保留并做截尾处理(Winsorize),将极端值压缩到合理范围。例如,将收入变量的99.5%分位数以上的值替换为该分位数值,避免极端值对模型产生过大影响。
五、特征构造:从业务逻辑到预测变量的转化
特征构造是特征工程的核心环节,目标是将原始数据转化为能刻画客户风险特征的变量。常用方法包括:统计特征(近3个月消费金额均值、标准差)、时序特征(消费金额环比变化率、逾期天数趋势)、交叉特征(收入/负债比、额度使用率×还款频率)、业务衍生变量(近6个月查询次数/授信笔数、最大逾期天数/总贷款笔数)。
以贷后预警模型为例,一个有效的特征构造思路是:从“还款能力”和“还款意愿”两个维度出发。还款能力特征包括收入稳定性(工资入账频次、金额波动)、负债压力(总负债/月收入);还款意愿特征包括还款行为(提前还款天数、逾期次数)、联系活跃度(APP登录频次、客服通话时长)。特征构造完成后,需进行初步的单变量分析,计算每个特征的IV值(信息价值),筛选IV>0.02的特征进入建模阶段。
六、特征筛选:平衡预测力、稳定性与可解释性
特征筛选的目标是在保证模型性能的前提下,减少特征数量,提升模型的稳定性和可解释性。常用方法分为三类:过滤法(基于统计指标如IV、PSI、相关系数)、包裹法(递归特征消除RFE)、嵌入法(L1正则化、树模型特征重要性)。在信用评分卡场景中,推荐采用“过滤法初筛+嵌入法精选+业务复核”的三步策略。
特征筛选还需关注特征稳定性(PSI<0.1为稳定,0.1~0.25需关注,>0.25需替换)和特征相关性(相关系数>0.7的变量需保留其一)。最终输出的特征集应控制在20~50个变量,既保证模型区分度,又便于业务解释和监管合规。
背景:该银行开发信用卡申请评分卡,原始数据包含200+字段,覆盖征信、申请资料、内部黑名单。
目标:构建KS>0.35、PSI<0.1的评分卡模型,且变量数不超过30个。
操作步骤:
1. 数据清洗:剔除缺失率>70%的字段12个,修正逻辑冲突记录1,200条(占比0.3%);
2. 缺失值处理:对“月收入”采用中位数填充+缺失指示变量,对“工作年限”填充业务默认值0;
3. 异常值检测:用IQR方法识别“年收入”异常值,对>99%分位数的值做截尾处理;
4. 特征构造:生成“收入负债比”“近3个月查询次数”“信用卡使用率”等30个衍生变量;
5. 特征筛选:IV>0.02初筛保留45个变量,L1正则化压缩至28个,业务复核剔除2个不合规变量。
结果:最终模型KS=0.38,PSI=0.08,变量数26个,通过监管可解释性审查。
复盘经验:特征工程阶段投入的时间约占项目总时长的60%,但有效避免了模型上线后的频繁迭代。
七、常见误区与总结复盘
在数据准备与特征工程中,常见的误区包括:过度依赖自动特征工程工具(忽略业务含义)、缺失值处理一刀切(未区分缺失机制)、异常值处理不当(误删风险信号)、特征筛选只看IV(忽略稳定性与相关性)。正确的做法是:以业务理解为基础,以数据质量报告为依据,以“预测力+稳定性+可解释性”为三重标准,构建高质量的特征集。
总结本章核心要点:数据源接入需明确业务含义与合规边界;数据清洗是质量保障的基础;缺失值处理应结合业务机制;异常值检测需区分噪声与信号;特征构造要围绕业务逻辑展开;特征筛选需平衡多维标准。只有扎实完成数据准备与特征工程,后续的模型开发才能事半功倍。