4、特征编码技术:Label Encoding、One-Hot Encoding、Target Encoding 在催收特征中的应用

催收模型的特征工程中,原始数据往往包含大量非数值型字段,例如:客户职业、逾期原因代码、催收员等级、城市等级、联系人关系。这些类别特征无法直接输入逻辑回归、XGBoost 或神经网络,必须通过编码技术转换为数值向量。不同的编码方式对催收特征的区分度、稳定性和可解释性有显著影响。

4.1 三种编码技术的核心原理与催收场景适配

编码方式 核心原理 催收场景适配性 典型催收特征示例
Label Encoding 将类别映射为从 0 开始的整数序号 适用于有序类别特征,如催收阶段、风险等级 催收阶段(1-首催,2-二催,3-三催)
One-Hot Encoding 为每个类别创建一个二元哑变量(0/1) 适用于无序、基数较小的类别特征 逾期原因代码(失业、疾病、遗忘等)
Target Encoding 用目标变量(如是否还款)的统计量替换原始类别 适用于高基数类别特征,能直接编码催收响应率 城市代码(用该城市历史还款率编码)
催收编码选择原则: 优先保留特征的序关系(Label Encoding),其次处理无序低基类别(One-Hot Encoding),最后用 Target Encoding 压缩高基数特征,但必须配合交叉验证或平滑处理防止过拟合。

4.2 Label Encoding:保留催收阶段的序关系

催收业务中存在大量有序类别,例如:催收阶段(首催 < 二催 < 三催 < 法务催收)、逾期天数区间(M1 < M2 < M3)、客户风险等级(低 < 中 < 高)。Label Encoding 将这些有序类别映射为递增整数,使模型能够捕捉到单调性趋势。

# 催收阶段 Label Encoding 示例
import pandas as pd
from sklearn.preprocessing import LabelEncoder

collection_stage = ['首催', '二催', '三催', '法务催收']
le = LabelEncoder()
stage_encoded = le.fit_transform(collection_stage)
# 输出: [0, 1, 2, 3] 对应首催→法务催收
避坑提示: 不要对无序类别(如职业、城市)使用 Label Encoding,否则模型会错误地认为类别之间存在数值大小关系,例如“医生=2 > 教师=1”会导致无意义的权重学习。

4.3 One-Hot Encoding:处理催收原因等无序低基特征

催收数据中的逾期原因代码、联系人关系、还款渠道等特征属于无序类别,且基数通常较低(一般 < 20 个类别)。One-Hot Encoding 为每个类别生成独立的 0/1 特征,避免引入虚假的序关系。

# 逾期原因 One-Hot Encoding 示例
import pandas as pd

reason_data = pd.DataFrame({'逾期原因': ['失业', '疾病', '遗忘', '资金周转', '失业']})
reason_encoded = pd.get_dummies(reason_data, columns=['逾期原因'], prefix='原因')
# 生成列:原因_失业、原因_疾病、原因_遗忘、原因_资金周转

催收场景注意事项:

  • 稀疏性问题: 当类别基数超过 20-30 时,One-Hot 会生成大量稀疏列,增加模型训练负担并降低特征重要性评估的稳定性。
  • 高频类别截断: 对于出现频次极低的类别(如罕见逾期原因),建议合并为“其他”类别后再编码,避免过拟合。
  • 与树模型的兼容性: XGBoost、LightGBM 等树模型对 One-Hot 特征的处理效率较高,但逻辑回归需要配合正则化。
One-Hot Encoding 在催收原因特征中的应用 原始类别 失业 疾病 遗忘 资金周转 编码后二元特征 原因_失业: 1/0 原因_疾病: 1/0 原因_遗忘: 1/0 原因_资金周转: 1/0 催收场景优势 • 不引入虚假序关系 • 每个原因独立可解释 • 适合逻辑回归与树模型

4.4 Target Encoding:高基数催收特征的压缩利器

催收数据中经常出现高基数类别特征,例如:城市代码(数百个城市)、催收员ID(数十到数百人)、客户来源渠道(几十个渠道)。One-Hot Encoding 会导致特征维度爆炸,而 Target Encoding 通过用目标变量(如还款率、回收率)的统计量替换原始类别,将高基数特征压缩为单个数值特征。

4.4.1 编码公式与平滑处理

标准 Target Encoding 公式:

编码值 = (类别内正样本数 + 全局均值 × 平滑参数) / (类别内总样本数 + 平滑参数)

其中平滑参数(通常取 10-100)用于防止小样本类别的极端值。在催收场景中,目标变量通常为是否还款(1/0)或回收率(0-1)。

# Target Encoding 催收城市特征示例
import pandas as pd
from category_encoders import TargetEncoder

# 假设催收数据:城市代码 + 是否还款
data = pd.DataFrame({
    '城市': ['北京', '上海', '广州', '北京', '上海', '北京', '深圳'],
    '是否还款': [1, 0, 1, 1, 0, 0, 1]
})

encoder = TargetEncoder(cols=['城市'], smoothing=20)
data_encoded = encoder.fit_transform(data['城市'], data['是否还款'])
# 输出:每个城市被替换为基于还款率的平滑统计值

4.4.2 过拟合风险与交叉验证策略

核心风险: Target Encoding 直接使用目标变量信息,如果不加约束,会导致严重的数据泄露和过拟合。模型在训练集上表现极好,但在测试集上大幅下降。

催收场景下的标准做法:

  1. K-Fold 交叉编码: 在每一折中,仅使用其他折的数据计算编码值,当前折的样本使用该统计量。
  2. 加入噪声: 对编码后的值添加少量高斯噪声(如标准差 0.01-0.05),增加鲁棒性。
  3. 时间序列拆分: 对于催收数据,按时间划分训练集/测试集,编码统计量仅基于历史数据计算。
Target Encoding 在催收城市特征中的过拟合防护流程 原始城市特征 5-Fold 交叉编码 每折用其他4折统计 平滑 + 噪声 smoothing=20, noise=0.02 编码后特征 催收场景 Target Encoding 防护要点 1. 时间序列拆分:用历史月份的城市还款率编码当前月份 2. 全局先验融合:小样本城市向全局均值收缩,避免极端值 3. 特征重要性评估:编码后特征可直接参与 SHAP 分析 4. 稳定性监控:按月监控编码值的分布漂移(PSI < 0.1)

4.5 三种编码技术在催收特征中的对比总结

对比维度 Label Encoding One-Hot Encoding Target Encoding
适用特征类型 有序类别(催收阶段、风险等级) 无序低基类别(逾期原因、还款渠道) 高基数类别(城市、催收员ID)
特征维度变化 1 列 → 1 列 1 列 → N 列(N=类别数) 1 列 → 1 列
过拟合风险 低 低(需处理稀疏性) 高(必须交叉验证+平滑)
可解释性 高(单调性直观) 高(每个类别独立) 中(需理解统计含义)
催收特征重要性评估 直接使用原始特征重要性 需聚合哑变量的重要性 可直接参与 SHAP/增益分析
推荐模型 树模型、线性模型 树模型、线性模型(需正则化) 树模型(XGBoost/LightGBM)
实战建议: 在催收特征重要性评估项目中,建议采用混合编码策略:有序特征用 Label Encoding,低基无序特征用 One-Hot Encoding,高基数特征用 Target Encoding(配合 5-Fold 交叉验证)。编码完成后,统一进行特征重要性排序,避免因编码方式不同导致重要性偏差。