2019华为算法精英赛(CTR)思路

第一次打数据比赛,排名就不说了/(ㄒoㄒ)/~~比赛过程中学到了很多pandas姿势。。

比赛链接

https://developer.huawei.com/consumer/cn/devservice/activity/devStarAI/info/712

1.赛题分析

  • 题目数据
文件 描述 数据量
train_20190518.csv 训练集(有标签) 9,837,655(正样本)/159,837,655(总数)
test_20190518.csv 测试集(无标签) 1,000,000
user_info.csv 用户资料 51,743,538
ad_info.csv 广告资料 5223
content_info.csv 广告媒体资料 2321

  • 不同时刻的曝光量和点击率变化

  

数据预处理

1.merge

  (1)一次性merge
  pandas读csv的时候要加上header=None,因为这次比赛数据的csv文件不带表头。如果不加最后合并的数据会少一行(999999),多谢群里大佬提醒!

  这种方法需要60G以上空闲内存(两两merge)。如果一次性merge所有表需要100G以上内存。

  (2)抽样

  1. (hint给的方法)在user表中随机抽取一部分用户,然后按顺序扫描train表,如果在抽取的用户中就merge并加入训练集,构建一个较小的训练集训练。
  2. 在抽取的过程中要控制正负样本的比例。
  3. 抽取的用户数量大小取决于内存的大小。
  4. 这种方法不能全面地反映train集的特性。

2.空缺值/异常值处理

3.字段处理

  1. 字符串类型的全部转成id
  2. 时间提取小时即可
  3. content_info中的分类建立dictionary,按照索引号转换成单id的问题

4.正负样本均衡

  由于正样本只占总数的6%左右,正负样本严重不平衡。需要对负样本作降采样处理。我们把原来的训练集生成5个子训练集。算法为:正样本在每个子训练集中都会全部保留,负样本按顺序保留在子训练集1、2、3、4、5中。这5个子训练集会被用来训练5个模型,最后进行ensemble。

特征工程

统计特征

模型

NFFM
XDeepFM
LBA

评价指标

参考

科大讯飞ctr比赛冠军总结(知乎专栏)
https://zhuanlan.zhihu.com/p/47807544

推荐系统遇上深度学习(二十二)–DeepFM升级版XDeepFM模型强势来袭
https://www.jianshu.com/p/b4128bc79df0

Tensorflow实现ffm
https://www.jianshu.com/p/8b57473e385a

很有参考价值的merge、数据清洗、填充的pandas代码实现(腾讯2018广告算法大赛第10)
https://github.com/keyunluo/Tencent2018_Lookalike_Rank10th/blob/master/src/make_dataset.py

腾讯2018广告算法大赛第三
https://github.com/DiligentPanda/Tencent_Ads_Algo_2018/tree/master/scripts/merge

FFM的一些csdn文章
https://blog.csdn.net/John_xyz/article/details/78933253
https://blog.csdn.net/a940902940902/article/details/89320879#FMFFM_1

FFM推导(结合这个看论文)
https://www.cnblogs.com/zhangchaoyang/articles/8157893.html

FFM论文
https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf

ctr-net-tool(github)
https://github.com/guoday/ctrNet-tool

pandas官方文档
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html