2021-03-23 特征选择的效果评估

2021-03-23  本文已影响0人  春生阁

在初步特征筛选之后,若使用树模型,特征经过数值化处理后就可以模型进行效果评估,一般会给出一个AUC或KS的模型评估结果。这里假设我们放入的特征数量为N,我期盼的是通过丢弃某些无效的特征,进一步提升模型效果

特征选择有常用的三种方法,Filter(过滤法)、Wrapper(包裹法)、Embedded(嵌入法)。我们常用的IV计算、相关性计算、PSI计算、自变量方差分析都属于Filter;而模型中的L1和L2正则化以及模型产出的importance features部分等于0属于Embedded,也就是模型本身提供的一些消除无效特征的方法。剩下唯一的方法Wrapper就是这次研究对象。

Wrapper可能听到的不多,但我常听到向前搜索(Forward)、向后搜索(Backward)以及双向搜索(Bidirectional),就是属于这个框架之下。因为这些方法根据模型不同,无论的模型类型、模型参数还是评价指标都可能不同,因此目前我还没有在网络上找到一套成熟的解决方案加理论基础。给我研究的深度多了一层探索空间。

我打算测试以下方法,来验证效果给予未来特征选择做出更多的一套解决方案备选。这里挑战的是提升效果vs执行效果,在后期计算复杂度会慢慢体现起重要性。


Backward、Forward、Bidirectional三者的选择

因为已经选择了树模型,使用模型适应性通用参数和最佳效果AUC差异在0.0X的级别,保持在相同参数情况下,对特征选择而言是公平的,因此优先选择Backward方法。

方案一,选择Backward,使用Boruta工具(随机森林给变量打分工具)若不会这个工具也可以使用模型本身的importance feature的score作为排序条件,逐一丢弃特征看在train和test上的效果。结果没有向上向下的明显表现,仅在最后10个特征丢弃时效果有下降的显现。从提升模型效果角度看,因此不建议使用。

Boruta从弱到强逐一丢弃

方案二,选择Bidirectional,需要考虑这些问题,1使用如何评价效果,2判断是否丢弃或者拿回,3如何迭代过程控制,4信息记录保存。问题分解后结合用Xgboost测试特征的时候出现计算3-4小时的用时,产生下面的计算复杂度问题需要考虑。

可能选择验证的计算复杂度讨论

根据Wikipedia对“时间复杂度”的解释,在计算机科学中,算法的时间复杂度是一个函数,定性描述该算法的运行时间。

当等待时间过久,一个测试一个错误甚至本身上线的可能性都会受到影响,面对生产问题时间复杂度变得重要不可或缺。常用O(N)来表示,常数时间O(1)、线性时间O(n)、二次方时间O(n2)、指数时间2O(n)。根据这次计算初步知道若150个特征,做一次全局搜索找最优解需要2^150=1427247692705959881058285969449495136382746624,若按照一次程序6秒计算,是一个不可计量的时间复杂度度,设计一个更好的搜索方法在Bidirectional中找到相对的最优解就是我的目标。

应对的策略方案(追求模型AUC最大化)

按照150个变量,用LightGBM通用模型预估6秒一轮计算。

方案 排序策略 选子集策略 执行计划 时间复杂度 时间预估
全变量搜索 无指向 逐一剔除和替换 1选子集->重复1 2^O(n) 无穷
迭代排序迭代筛选1 原模型下删除1个特征后计算AUC 删除AUC上升且影响最大的变量 1排序->2选子集->重复12 O(n^2) 39小时
迭代排序迭代筛选2 原模型下统计importance 删除importance效果最差的特征 1排序->2选子集->重复12 O(2n) 30分钟
一轮排序迭代筛选 原模型下统计importance 删除importance效果最差的特征 1排序->2选子集->重复2 O(n) 15分钟
一轮排序迭代筛选3 原模型下删除1个特征后计算AUC 删除importance效果最差的特征+bidirectional 1排序->2选子集->重复2 O(n*(n+1)/2) 90分钟
类型 效果 速度
动态停止点 Test更平稳效果下降更缓慢 略久,多跑stop rounds
固定停止点 Test陡峭下降不稳定 略快,约节省10%时间
Dynamic vs Fixed, Dynamic更平稳

实验结果以及对自己的启示

  1. 树模型中的特征重要性feature importance对变量选择而言,并不适用。可能的原因是模型训练时起正向负向效果都是重要,我们期望的是把负向(干扰项)找到并丢弃,而0分的特征仅仅说明对模型没有正负效果而已。

  2. 停止点对模型产生影响,结合固定和动态从效果上看动态更稳定。不同特征组合放入模型后效果存在差异,因此采用动态搜索可以更好的证明当前特征的效果。

上一篇 下一篇

猜你喜欢

热点阅读