FE经验总结

1. 特征工程的构建

1. 皮尔逊相关系数的应用(可以看feature和target之间的相关程度,太弱的可以直接舍弃);

2. 选择一些强相关的feature,通过一些运算构造一些新的feature;

3. 结合业务场景构造一些业务中常用的指标;

4. 进行特征选择,去除冗余feature(可以用xgb或gbdt这种有feature_importances方法的,对训练完的模型特征,根据评分进行sort,以此选择一些比较好的feature)。

通常共线性fea,不会明显增加信息量,却会影响模型的鲁棒性和稳定性。

为什么选择XGBoost?

      因为树模型对特征处理要求不高而且效果也相当不错,不管是类别特征还是连续特征,效果都很好。

2. 线上线下特征一致性

1. 特征处理一致性
        离线和在线使用同一套特征处理流程;
2. 特征值一致性
        将在线的特征做一个离线的上报,使在线和离线所用特征都是同一份数据源,可以消除特征穿越导致的不一致。

3. 未来信息的处理

         构造用户时间截面特征时,要避免使用未来信息(当前时间截面之后的数据)。产生未来信息最直接的原因:缺少快照表

1. 快照表:每天照个相片,23:00点 把当天的数据备份一份,快照表只会保存当天最终的状态。

2. 日志表:每一次操作都记录下来(不会update,只有insert), 操作一次记录一次。

        金融相关数据原则上都需要快照表记录所有痕迹(额度变化情况,多次申请的通过和拒绝情况...),缺少快照表的可能原因:

1. 快照表消耗资源比较大,为了性能不做;

2. 原有数据表设计人员疏忽,没做;

3. 借用其他业务数据(如电商)做信贷。

处理方案:

1. 及时增加快照表;

2. 没有快照表的情况下,将数据区分为是否有未来信息的区间,分别进行特征构造。

评分卡模型对模型的稳定性要求远高于其性能。

4. 特征变换

    4.1 特征离散化 - 分箱

    将连续变量离散化,合并成较少的状态。

    分箱的作用:

 1. 离散特征的增加和减少都很容易,易于模型的快速迭代;

 2. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

 3. 分箱后的特征对异常数据有很强的鲁棒性;

 4. 单变量分箱为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力;

 5. 分箱后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

 6. 分箱后模型会更稳定,如对年龄离散化,20-30为一个区间,不会因为年龄+1就变成一个新的特征;

7. 特征离散化以后,可以将缺失作为独立的一类带入模型。

    4.2 常用分箱方法

            卡方分箱、决策树分箱、等频分箱、等距分箱、聚类分箱(k-means)

    4.2.1 等频分箱

            按数据的分布,均匀切分,每个箱体里的样本数基本一样。

1. 在样本少的时候泛化性较差;

2. 在样本不均衡时可能无法分箱;

3. 特征分析常用等频分箱。

    4.2.2 等距分箱

        按数据的特征值的间距均匀切分,每个箱体的数值距离一样。

1. 一定可以分箱;

2. 无法保证箱体样本数均匀;

3. 信用分统计时常用等距分箱。

    4.2.3 卡方分箱

        使用卡方检验确定最优分箱阈值。将数据按等频或等距分箱后,计算卡方值,将卡方值较小的两个相邻箱体合并,使得不同箱体的好坏样本比例区别放大,容易获得高IV。卡方分箱是利用独立性检验来挑选箱划分节点的阈值。卡方分箱的过程可以拆分为初始化和合并两步:

        1. 初始化:根据连续变量值大小进行排序,构建最初的离散化;

        2. 合并:遍历相邻两项合并的卡方值,将卡方值最小的两组合并,不断重复直到满足分箱数目要求。(合并坏人比例接近平均水平的箱体,留下比例差异大的箱体)。

4.3 使用toad库进行分箱处理

    Toad 是专为工业界模型开发设计的Python工具包,特别针对评分卡的开发,其功能覆盖了建模全流程,从 EDA、特征工程、特征筛选 到 模型验证和评分卡转化。Toad 的主要功能极大简化了建模中最重要最费时的流程,即特征筛选和分箱。

import toad
combiner = toad.transform.Combiner()
 
# 训练数据并指定分箱方法
# min_samples: 每箱至少包含样本量,可以是数字或者占比
combiner.fit(data, y='creditability', method='chi', min_samples=0.05)
# 以字典形式保存分箱结果
bins = combiner.export() 
print('month:', bins['aa'])
# aa: [9, 12, 13, 16, 36, 45]

        通常使用双变量图(Bivar图) 来评价分箱结果,使用bin_plot()画图对分箱进行调整。注意:信贷风险分析中Bivar图,纵轴固定为负样本占比。

%matplotlib inline
from toad.plot import bin_plot
c2 = toad.transform.Combiner()  
c2.fit(data[['aa','creditability']],
    y='creditability', method='chi', n_bins=7)  
transformed = c2.transform(data[['aa','creditability']], labels=True)
#传给bin_plot的数据必须是分箱转化之后的
bin_plot(transformed, x='aa', target='creditability')

    柱形图表示每一箱的占比,折线图表示每一箱的坏样本率,一般折线图要呈现出单调的趋势。可以通过调整箱数实现单调趋势。

c2.fit(data[['aa','creditability']], y='creditability', method='chi',n_bins=5) 

各种分箱方法对比

for method in ['chi', 'dt', 'quantile', 'step', 'kmeans']:  
    c2 = toad.transform.Combiner()  
    c2.fit(data[['aa','creditability']],
             y='creditability', method=method, n_bins=5)
    bin_plot(c2.transform(data[['aa','creditability']],labels=True), x='aa',target='creditability')

从单调性和模型稳定性角度考虑一般使用卡方分箱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值