特征处理和特征选择

特征处理之统计特征

历届的Kaggle/天池比赛,天猫/京东排序和推荐业务线里模型用到的特征
1.加减平均:这个用户所买商品高于所有用户购买商品平均价格的多少(权衡一个人的消费能力),用户连续登录天数超过平均多少(表明这个用户对该产品的黏性
2.分位线:商品属于售出商品价格的多少分位线处。(比如20%,说明20%的人买东西都不会低于这个价格)。
3.次序型:排在第几位。
4.比例型:电商中,某商品在某电商平台好/中/差评的比例
### 特征处理示例:
##### 数据说明:
数据主要包含两个部分。第一部分是1000万用户在商品全集上的移动端行为数据(D),包含如下字段:

实例如:
141278390,282725298,1,95jnuqm,5027,2014-11-18 08
这些字段中behavior_type字段和time字段包含的信息量最大,user_geohash字段由于缺失值太多,基本没法使用。
第二个部分是商品子集(P),包含如下字段:

实例如:
117151719,96ulbnj,7350
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。参赛者要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。

数据处理示例

(1) 前一天的购物车商品很有可能第二天就被购买 => 规则
(2) 剔除掉30天里从来不买东西的人 =>数据清洗
(3) 加车N件,只买了一件的,剩余的不会买 =>规则
(4) 购物车的购买转化率 (有的人加车了,就买了。直接推该用户推荐加车的东西)=>用户维度统计特征
(5) 商品热度(比较热的东西,是大众比较喜欢的:一般为销量,连续型数据) =>商品维度特征
(6) 不同的item点击/收藏/购物车/购买的总计 (4个连续值) =>商品维度统计特征
(7) 不同的item点击/收藏/购物车/购买平均每个user的计数 (4个连续值,每个用户对其交互的特定商品发生上述行为的次数) =>用户维度统计特征
(8) 变热门的品牌/商品(对于某个item,今天有多少人点击-昨天有多少人点击,若差值变大,说明该item变热) =>商品维度统计特征(差值型)
(9) 最近第1/2/3/7天的行为数与平均行为数的比值 (有的user比较喜欢点,他就不喜欢买;有的用户点的非常少,他点了基本就会买) =>用户维度统计特征(比例型)
(10) 商品在类别中的排序(比如iphone8在手机类别中的排序,按热度:点击量、购买量、上架时间) =>商品维度统计特征(次序型)
(11) 商品的购买转化率(商品展示和购买次数的比值,有些商品展示了很多次都没人买,有些商品一展示就很多人买) =>商品维度统计特征(比例型)
开一个时间窗口,时间可能是前一周,最多一个月,或一个季度
(12) 最近的交互离现在的时间 =>时间型
(13) 总交互的天数(该用户对该APP的关联程度有多高) =>时间型
(14) 用户前一天最晚的交互行为时间(判断用户的习惯,比如发现某用户喜欢半夜购) =>时间型
(15) 用户购买商品的时间 (用户发生购买行为的平均、最早、最晚时间) =>时间型

模型特征组合
  1. 拼接型:简单的组合特征。例如挖掘用户对某种类型的喜爱,对用户和类型做拼接。正负权重,代表喜欢或不喜欢某种类型。
      - user_id&&category: 10001&&女裙 10002&&男士牛仔
      - user_id&&style: 10001&&蕾丝 10002&&全棉  
  2. 模型特征组合:
      - 用GBDT产出特征组合路径
      - 组合特征和原始特征一起放进LR训练
特征选择

特征选择和降维的不同:特征选择只是删除了原始特征里和结果预测关系不大的特征,后者做特征的计算组合构成了新的特征。
特征选择包含:过滤型、包裹型、嵌入型

过滤型
  • 方法:评价单个特征和结果之间的相关程度,排序留下Top相关的部分。
  • 评价方式:Pearson相关系数、互信息
  • 缺点:没有考虑到特征之间的关联作用,可能把有用的关联特征踢掉。因此工业界使用的比较少
  • python包:SelectKBest指定过滤个数、SelectPercentile指定过滤的百分比
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
X.shape

(150, 4)

X_new = SelectKBest(chi2, k = 2).fit_transform(X, y)
X_new.shape

(150, 2)

包裹型
  • 方法:把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果(递归特征删除算法RFE)。
  • 应用在LR上过程:用全量特征跑一个模型;删掉5~10%的弱特征,观察准确率/AUC的变化;逐步进行,直至准确率/AUC出现大的下滑停止。
  • python:RFE
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
lr = LinearRegression()
rfe = RFE(lr, n_features_to_select = 1)
rfe.fit(X, Y)
print("Features sorted by their rank:")
print(sorted(zip(map(lambda x: round(x, 4), rfe.ranking_),names)))

Features sorted by their rank:
[(1, ‘NOX’), (2, ‘RM’), (3, ‘CHAS’), (4, ‘PTRATIO’), (5, ‘DIS’), (6, ‘LSTAT’), (7, ‘RAD’), (8, ‘CRIM’), (9, ‘INDUS’), (10, ‘ZN’), (11, ‘TAX’), (12, ‘B’), (13, ‘AGE’)]

嵌入型
  • 方法:根据模型来分析特征重要性,最常见的方式为正则化方式来做特征选择
  • 举例:举个例子,最早在电商用LR做CRT预估,在3-5亿维系数的特征上用L1正则化的LR模型。剩余2-3千万的feature,意味着其他的feature的重要程度不够。
  • python:feature_selection.SelectFromModel选出权重不为0的特征。
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
X.shape

(150, 4)

lsvc = LinearSVC(C = 0.01, penalty = "l1", dual = False).fit(X, y)
model = SelectFromModel(lsvc, prefit = True)
X_new = model.transform(X)
X_new.shape

(150, 3)

More
  1. 4月机器学习算法班-特征工程:https://blog.csdn.net/joycewyj/article/details/51647036
  2. 特征处理与选择实例分析:
    https://blog.csdn.net/han_xiaoyang/article/details/50481967
  3. 特征工程笔记:https://blog.csdn.net/joycewyj/article/details/51647036
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值