文章目录
- 1.对数据进行分组统计
- 1.gropuby
- 2.df.pivot_ table
- 2.特征选择 去掉无用特征
- 3.按时间分组统计
经过了数据预处理和探索性数据分析了,接下来就算到了特征工程这一步了。
众所周知:
数据模型:数据模型框架+数据
数据和特征决定了机器学习的上限,模型和算法只是逼近
好了,前面的废话可以不看。重要的要知道所谓的特征工程就算要选取一些对提高预测能力有用的列。那么到底如何来进行特征工程呢?
我看了很多博客,大致的特征选取思路都是
Created with Raphaël 2.2.0 开始 空值、异常值处理 单个特征的标准话、归一化、离散化 数据变化 特征筛选 结束
然鹅,感觉ligtgbm算法来说,这些都不需要。下一篇将总结ligthgbm算法,感兴趣的朋友可以康康。那么特征工程这边我就记录一些使用点的吧
1.对数据进行分组统计
1.gropuby
首先我们来看这样一张表格,我们要得到每个id-Dat_Flg1_Cd组合的cny的总和和次数,表里都和大家标好了。
#groupby里写入要对谁进行分组,然后['cny_trx_amt']选中要操作的列,最后agg告诉我们怎么操作这列生成新的列。.reset_index()重置索引,你可以试试不加有什么问题。
grouped = data_trd.groupby(['id','Dat_Flg1_Cd'])['cny_trx_amt'].agg({'tot_trd_amt':'sum','count':'count'}).reset_index()
最后看看结果:多的这俩列就是我们分组出来的啦。
2.df.pivot_ table
pivoted_ counts=df.pivot_ table (indexs ='user_ ID' , columns= ' month',values='order_ dt' ,aggfunc= ='count') . fillna (0)
#pivot_ table参数中, index是设置数据透视后的索引 一即index是 你想要的行
#column是设置数据透视后的列一即column是 想要的列
#values是将哪个值进行计算
#aggfunc是用哪种方法
#于是这里用values=order_ dt和aggfunc=count, 统计里order_ dt出现的次数,即多少笔订单。
#fillna(0)一指定0去填无缺失值
2.特征选择 去掉无用特征
利用特征与标注的距离(可以是相关性、欧氏距离、假设检验等)剔除最不相关的特征。
- 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
- 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。
根据特征选择的形式又可以将特征选择方法分为3种: - Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
- Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
- Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
sklearn.feature_selection.SelectKBest
3.按时间分组统计
第一步,把時間作爲索引
data_trd['trx_tm'] = pd.to_datetime(data_trd['trx_tm']) #将数据类型转换为日期类型
data_trd = data_trd.set_index('trx_tm') # 将date设置为index
第二步:按周統計,也可按年、季度、月
data_trd_group = data_trd.groupby('id').resample('w').sum() #w按周,M按月,Q按季,AS/A按年
3.用pivot_table函數來弄特徵
data_trd_group=data_trd_group.pivot_table (index ='id' , columns= 'trx_tm',values='cny_trx_amt' ,aggfunc='sum') .fillna(0)
data_trd_group