特征工程和数据清洗转换是比赛中至关重要的一块,
因为数据和特征决定了机器学习的上限,而算法和模型只是逼近这个上限而已,所以特征工程的好坏往往决定着最后的结果,特征工程可以一步增强数据的表达能力,通过构造新特征,我们可以挖掘出数据的更多信息,使得数据的表达能力进一步放大。
对于特征工程的处理,我们常见的有数值特征处理、类别特征处理和时间特征等,另外还可以构造新的特征进行模型的训练。
1.制作与用户历史行为相关特征
对于每个用户召回的每个商品, 做特征。 具体步骤如下:
- 对于每个用户, 获取最后点击的N个商品的item_id,
- 对于该用户的每个召回商品, 计算与上面最后N次点击商品的相似度的和(最大, 最小,均值),
时间差特征,相似性特征,字数差特征,与该用户的相似性特征
single_user_fea.extend(sim_fea) # 相似性特征
single_user_fea.extend(time_fea) # 时间差特征
single_user_fea.extend(word_fea) # 字数差特征
single_user_fea.extend([max(sim_fea), min(sim_fea), sum(sim_fea), sum(sim_fea) / len(sim_fea)]) #
2.用户和文章特征¶
用户相关特征
这一块,正式进行特征工程,既要拼接上已有的特征, 也会做更多的特征出来,我们来梳理一下已有的特征和可构造特征:
- 文章自身的特征, 文章字数,文章创建时间, 文章的embedding (articles表中)
- 用户点击环境特征, 那些设备的特征(这个在df中)
- 对于用户和商品还可以构造的特征:
- 基于用户的点击文章次数和点击时间构造可以表现用户活跃度的特征 基于文章被点击次数和时间构造可以反映文章热度的特征
- 用户的时间统计特征:根据其点击的历史文章列表的点击时间和文章的创建时间做统计特征,比如求均值, 这个可以反映用户对于文章时效的偏好 用户的主题爱好特征,对于用户点击的历史文章主题进行一个统计, 然后对于当前文章看看是否
- 属于用户已经点击过的主题 用户的字数爱好特征, 对于用户点击的历史文章的字数统计, 求一个均值
# 读取文章特征
articles = pd.read_csv(data_path+'articles.csv')
articles = reduce_mem(articles)
# 日志数据,就是前面的所有数据
if click_val is not None:
all_data = click_trn.append(click_val)
all_data = click_trn.append(click_tst)
all_data = reduce_mem(all_data)
# 拼上文章信息
all_data = all_data.merge(articles, left_on='click_article_id', right_on='article_id')
记录时间:2020年12月3号