2(2).特征处理---连续型特征
分类:
特征工程
一.查看变量的缺失值(missing value,空值)个数以及所占比例
二.画频数占比分布图,查看样本在该特征值上的分布
- 根据连续变量的值域范围,将该变量分成10箱,就是分成10段,箱数可自由选择;
- 统计每一箱内样本的频数占比:该箱内样本个数/总样本个数。然后将每一箱的频数比例画出来:
1 | sns.distplot(data,kde = True ) # 或 df.hist(bins=10) |
三.画“好坏样本比”曲线,也叫比率曲线
- 根据连续变量的值域范围,将该变量分成10箱,就是分成10段,箱数可自由选择;
- 统计每一箱内的两类样本的比值:该箱内label=1的样本个数 / 该箱内label=0的样本个数;
- 可以看出该特征对两类样本的区分度。
- 问题:在实际画图的时候,会出现一个问题,当分母=0的时候,该比值会无穷大,画不出来;
- 解决办法:找到该样本集中总体占比多的那一类,比说label=1的样本多,那么统计每一箱内label=1样本个数 / 该箱内总样本个数,效果也是一样的,因为就只有两类。
四.极端值分析
- 在上一步画图的时候,就可以看出来有哪些极端值
- 除非是计算或者人为错误,极端值需要从业务层面进行分析
- a) 分别计算“拥有极端值的那些样本中,label=1样本的占比R1” 和“拥有非极端值的那些样本中,label=1样本的占比R2”
- b) 如果R1明显大于R2,则说明极端值有业务意义,建议保留,特别是从反欺诈的角度来分析一
- 3)如果是计算或者人为错误,极端值的影响可以通过分箱被中和,对模型训练没有影响;也可以将极端值设置成缺失值/空值,然后用处理缺失值的方法进行处理
五.计算变量的方差
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 计算变量的方差 # 如果方差接近于0,也就是该特征的特征值之间基本上没有差异,这个特征对于样本的区分并没有什么用,剔除 from sklearn.feature_selection import VarianceThreshold selector = VarianceThreshold(threshold = 0 ) #默认threshold=0.0 selector.fit_transform(data[all_used_features]) # 查看各个特征的方差, selector.variances_ , len (selector.variances_) selector.get_params(deep = True ) # {'threshold': 0} all_used_features_dict = dict ( zip (all_used_features,selector.variances_ )) #特征和方差的对应 |
六.查看变量与label之间的相关性
七.查看变量之间的相关性
八.计算变量IV值(也可以考虑Gini系数)
目的:筛选变量,IV值低的变量根据业务分析决定是否剔除,一般情况下,
<0.02的变量可剔除
<0.02 unpredictive
0.02 – 0.1 weak (maybe acceptable)
– 0.3 medium
>0.3 strong
九.计算AUC
计算单变量的AUC:该变量经过lightgbm之后的AUC,AUC>0.53可以考虑留下
十.计算importance
将上面步骤筛选出来的特征,全部输送到lightgbm算法中训练,得到每一个特征的importance,过滤掉importance=0的变量。
十一.其他考虑因素
以上所有特征工程的步骤,都要跟业务结合在一起,综合考虑,衡量一个变量采用与否。
参考文献:
分类:
特征工程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现