2. 特征工程:衍生变量生成
任务目标
基于信贷申请原始字段(月收入、总负债、贷款金额、信用历史长度等),构造有业务含义的衍生特征,使后续模型能捕捉原始单字段无法表达的还款能力与风险信号。本案例以负债收入比(DTI)为核心衍生变量,并补充额度使用率、信用历史分段等常用衍生特征,形成一份可直接用于建模的特征工程代码。
原始数据说明
使用内置模拟数据(无需外部文件),每条样本包含以下原始字段:
monthly_income:月收入(元)total_debt:总负债(元)loan_amount:本次贷款申请金额(元)credit_history_months:信用历史长度(月)default_flag:目标变量,1表示违约,0表示正常
核心实现
import pandas as pd
import numpy as np
# ========== 1. 构造原始模拟数据(10条样本) ==========
raw_data = {
'monthly_income': [8000, 15000, 6000, 20000, 9500, 12000, 4500, 18000, 7000, 30000],
'total_debt': [20000, 45000, 15000, 60000, 30000, 50000, 12000, 80000, 18000, 90000],
'loan_amount': [50000, 120000, 30000, 200000, 60000, 100000, 25000, 150000, 40000, 250000],
'credit_history_months': [12, 60, 6, 84, 24, 48, 3, 96, 18, 120],
'default_flag': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
}
df = pd.DataFrame(raw_data)
# ========== 2. 衍生特征生成 ==========
# 2.1 负债收入比(DTI):总负债 / 月收入,衡量月度偿债压力
df['dti'] = df['total_debt'] / df['monthly_income']
# 2.2 贷款收入比:贷款金额 / 年收入,反映贷款规模相对收入水平
df['loan_to_annual_income'] = df['loan_amount'] / (df['monthly_income'] * 12)
# 2.3 信用历史分段:将连续月份转为类别(<12为短期,12-48为中期,>48为长期)
def credit_segment(months):
if months < 12:
return 'short'
elif months <= 48:
return 'medium'
else:
return 'long'
df['credit_segment'] = df['credit_history_months'].apply(credit_segment)
# 2.4 收入负债交互项:月收入与DTI的乘积,捕捉高收入高负债组合风险
df['income_dti_interaction'] = df['monthly_income'] * df['dti']
# ========== 3. 查看生成结果 ==========
print("衍生特征生成完成,新增4个特征:dti, loan_to_annual_income, credit_segment, income_dti_interaction")
print("\n前5行数据预览:")
print(df[['monthly_income', 'total_debt', 'dti', 'loan_to_annual_income', 'credit_segment']].head())
print("\n衍生特征统计描述:")
print(df[['dti', 'loan_to_annual_income', 'income_dti_interaction']].describe())
运行方式
环境要求:Python 3.7+,安装 pandas 和 numpy。将上述代码保存为 feature_engineering.py,在终端执行:
python feature_engineering.py
验证方法
运行后观察输出:
- 数据预览应显示每行新增的
dti值等于total_debt / monthly_income(例如第1行:20000/8000=2.5) credit_segment应正确分类:信用历史6个月为short,24个月为medium,60个月为long- 统计描述中
dti的最小值应为 2.0(4500元收入对应12000元负债),最大值应为 3.0(6000元收入对应15000元负债)
若输出与上述逻辑一致,说明衍生特征生成正确,可直接将 df 中新增列作为模型输入特征。
特征有效性说明
上述衍生特征中,dti 和 loan_to_annual_income 直接刻画借款人偿债能力,credit_segment 将连续变量离散化以捕捉非线性效应,income_dti_interaction 则保留高收入高负债组合的交互信息。将这些特征加入逻辑回归或树模型后,相比仅用原始字段,模型可更有效区分违约风险群体。