背景介绍
科大讯飞AI营销云在高速发展的同时,积累了海量的广告数据和用户数据,如何有效利用这些数据去预测用户的广告点击概率,是大数据应用在精准营销中的关键问题,也是所有智能营销平台必须具备的核心技术。本次大赛提供了讯飞AI营销云的海量广告投放数据,参赛选手通过人工智能技术构建预测模型预估用户的广告点击概率,即给定广告点击相关的广告、媒体、用户、上下文内容等信息的条件下预测广告点击概率。希望通过本次大赛挖掘AI营销算法领域的顶尖人才,共同推动AI营销的技术革新。

相关数据:

  • 初赛数据
    https://pan.baidu.com/share/init?surl=1DAKNAEKyPysB1a-unUPPw 提取码:rle2
  • 复赛数据
    https://pan.baidu.com/share/init?surl=kn3unsFSKj1DG4nVIiGvpA 提取码:z2pc

数据项内容

上下文信息11个 广告信息16个
osv 操作系统的版本 orderid 订单id
os 操作系统柜 adid 广告id
os_name 操作系统名 advert_id 广告主id
make 手机品牌 advert_name 广告主名称
model 手机型号 advert_industry_inner 广告主行业
province 省份 campaign_id 活动id
time 时间戳 creative_type 创意id
city 城市 creative_type 创意类型
nnt 联网类型 creative_tp_dnf 样式定向id
carrier 运营商 creative_has_deeplink 相应素材是否有deeplink
devtype 设备类型 create_is_jump 是否有落地页跳转
create_is_download 是否有落地页下载
媒体信息 5个 creative_as_js 是否为js素材
app_cate_id app分类 create_is_voicead 是否为语音广告
f_channel 一级频道 creative_width 创意宽
app_id 媒体id creative_height 创意高
inner_slot_id 媒体广告位 用户信息 1个
app_paid app是否付费 user_tags 用户标签

比赛分析

  • 由于是CTR预估问题,因此该问题可以简单的抽象为样本分布不均衡的二分类问题,需要预测的内容为用户是否会点击该商品。评测指标为logloss。
  • 而数据方面大致可以分为四类:上下文信息(11个), 媒体信息(5个), 广告信息(16个), 用户信息(1个),几乎所有特征都为类别型特征。
  • 数据量为100万条30维左右的数据

数据预处理
数据合并: 将不同分布的数据进行整合

数据采样:正负样本比为1:4,属于非均衡类别,不过负样本数据量尚可,因此对其采用了欠采样操作,去除了一部分过量的负样本。

EDA探索性数据分析:

  • 首先观察了单变量的分布,如在手机品牌这方面OPPO和 vivo的用户最多,而这两种机型的用户点击率也高于其他手机的用户
  • 对不同特征和标签之间进行组合,绘制柱状图观察影响(如不同时刻点击的总数量,不同的广告长度和宽度对点击的影响)。

数据清洗:对重复值使用dropna操作将其去掉,对异常值数据进行了一些清洗(如make手机品牌中出现了一些具体型号的异常值,进行了统一的品牌合并如iphone/apple),一些可以预测出来的异常值,由手机品牌可以由手机
型号反推,训练了一个简单的随机森林去进行拟合。其他难以推测的缺失值采用了众数的方法进行填充

时间序列交叉验证:在进行交叉验证时分数很好但LB的分数却不理想,后来发现是因为忽视了时间序列的影响因素,导致了时间穿越,也就是用未来的数据去预测过去的数据,在切分验证集的时候,标准的做法是构建时间窗,有规律的用前面七天的数据作为训练集,
第八天的数据作为验证集修改之后,效果有了一定的提升。

数据泄露:data leakage模型在训练时已经见过验证集,尽管不是直接看到验证集,但基于全量数据的统计特征已经泄露了一部分验证集信息,为了改善这种情况,
我将统计特征的统计范围从原来的全量数据改为了训练集数据,重新训练后logloss进一步从0.22降至了0.19。学习到的点在于应该先划分数据集,再构造特征,而不是先构造特征再划分数据集。同时也明白了pipline在一定程度上可以避免混淆对于训练集和验证集的不同的操作(前者使用fit_transform(), 后者使用transform())

特征工程

  • 由于大部分特征都是类别型特征,因此对部分特征进行了交叉特征的构建。
  • 对时间特征进行了分组划分,额外生成了早上下午晚上午夜四个时间段,能在一定程度上增加信息量。
  • 对版本号进行了更细粒度的刻画 5.1.1>–5 1 1 ,将一维文本信息变为三维类别信息
  • 对数字代表的地理位置信息进行了更细粒度的切分,如:510410,51代表广东省,04代表广州市,10代表白云区
  • 对大部分特征进行了计数统计, 对能进行groupby操作的特征进行了汇总统计。
  • 构建了比例特征(如广告主id的某个广告id投放比例)
  • 构建了类别变量的nunique特征(如广告主id有多少个不同的广告id)
  • 针对类别型的特征和标签之间,构建了分组统计点击率,如不同APP,不同手机点击率的平均值,最大最小值,这称为feature encoding,加入之后验证集的分数从0.41左右大幅下降至0.22,和之前完全不在一个水平线上。
  • 针对类别型特征进行了OneHot-Encoding,对于类别较多的特征,把长尾部分归为其他类,大幅减少了数据的维度,同时用sparse将系数矩阵转换为稠密矩阵,提升了训练速度。
  • 对相互之间并非完全独立,有大小,级别关系的类别型特征,采取了Label encoding而非OneHot-encoding,来体现出他们之间的关系,避免信息损失
  • 特征筛选方面,使用了基于树模型产生的feature importance的方法来进行特征筛选,剔除掉一些冗余的特征。

参数调节(GridSearchCV):

boosting_type=‘gbdt’,
num_leaves=48,
max_depth=-1
learning_rate=0.02,
n_estimators=6000,
max_bin=425,
subsample_for_bin=50000,
objective=‘binary’,
min_split_gain=0,
min_child_weight=5,
min_child_samples=10,
subsample=0.8,
subsample_freq=1,
colsample_bytree=0.8,
reg_alpha=3,
reg_lambda=0.1,
seed=1000,
n_jobs=-1,
silent=True

模型融合

  • 通过stacking模型融合的方式最大限度度在减小数据维度的同时保存原有特征信息。
  • 把Xgboost和LightGBM进行了一组stacking融合,把LightGBM作为基模型(因为其处理数据的速度更快),Xgboost作为二级模型(其预测效果更准确),说白了就是以LightGBM给出的预测作为训练数据,再训练一次Xgboost,从最后的效果上来看,有提升,但不如特征工程来的明显。
  • 训练多个上述stacking模型,每个模型差异化训练不同特征,又进行了一次bagging操作,分数由有所提升。
  • 在融合结果的时候,发现使用调和平均(倒数求平均再取倒数)的效果要优于加权平均,调整后分数有所上升。

思考总结

  • 对于CTR问题而言,广告是否被点击的主导因素是用户,其次是广告信息。所以我们要做的是充分挖掘用户及用户行为信息,然后才是广告主、广告等信息。
  • 这类问题评估函数常用logloss和AUC,简单的说logloss更关注和观察数据的吻合程度,AUC更关注rank order。如果是按照概率期望来进行收费投放的话就用logloss,如果定投一定量就用AUC,主要还是和业务相关。
  • 匿名化数据需要对数据进行充分理解分析,甚至可以尝试根据业务理解进行反编码,这样能够为特征工程指明方向。
  • 建模过程中充分考虑了用户标签与其他信息的交互作用,并采用Stacking抽取特征信息的方式减少维度与内存的使用,对广告与用户交互信息的充分挖掘,也使得模型在AB榜测试相对稳定。
  • 模型缺乏差异性和创新性,最开始尝试过deepffm,由于效果一般而没有坚持改进,大部分精力放在了数据理解与特征挖掘上。

科大讯飞AI营销大赛 CTR预估总结相关推荐

  1. 赛后复盘 - DataCastle 科大讯飞AI营销算法大赛

    最近这个月参加了DataCastle上的科大讯飞AI营销算法大赛,最后的名次是97 / 1086,没能进入复赛(要求前50名).其实也没什么好失落的,已经尽力了,这就是我现阶段的真实水平.最大的遗憾, ...

  2. 科大讯飞AI营销云广告投放数据分析报告【实战总结】

    4月份项目实战的总结,前后进行了约20多天. 花了大量时间在清洗数据,虽然耗时但是觉得过程中很享受,喜欢"静静地泡在里面"的感觉. 另外,了解了涉及到的广告投放.业务指标体系.手机 ...

  3. AI:2020 科大讯飞AI开发者大赛,总奖金池180+万元!拿下比赛,大厂offer到手,那么,你还在等什么?

    AI:2020 科大讯飞AI开发者大赛,iFLYTEK热浪来袭,总奖金池180+万元!拿下比赛,大厂offer到手,那么,你还在等什么? 导读:总奖金池180+万元,除此外,还有绿色就业通道& ...

  4. 华为2019算法大赛CTR预估数据探索

    华为2019算法大赛CTR预估数据探索 训练集 时间信息 siteId(媒体Id) slotId(广告位Id) netType(网络连接类型) id类信息 测试集 媒体id 网络型号 测试集与训练集分 ...

  5. 2018科大讯飞AI营销算法比赛笔记

    题目背景: 本次大赛提供了讯飞AI营销云的海量广告投放数据,参赛选手通过人工智能技术构建预测模型预估用户的广告点击概率,即给定广告点击相关的广告.媒体.用户.上下文内容等信息的条件下预测广告点击概率. ...

  6. 科大讯飞AI开发者大赛报名开启,百万奖金等你来!

    由科大讯飞主办,讯飞研究院.讯飞开放平台.AI 大学承办的 2018 首届"顶天立地" iFLYTEK AI 开发者大赛报名已经开启,登陆大赛官网http://challenge. ...

  7. 竞赛|数据竞赛Top解决方案开源整理-科大讯飞AI营销算法、阿里妈妈搜索广告、腾讯广告算法、搜狗的用户画像

    https://mp.weixin.qq.com/s/_4QG0dWhh784lF0n1wymcw

  8. 科大讯飞CTR预估挑战赛Top3方案总结

    ‍ ‍前一阵子,老肥参加了科大讯飞AI开发者大赛的部分比赛,主要包括结构化.音频.文本以及图像这四大类型,总体来看都是较为简单的任务并且解题方案也较为简单,后续会跟大家一一分享. 今天要分享的是结构化 ...

  9. 华为digix算法大赛2020机器学习赛道-ctr预估初赛/决赛rank1

    华为digix算法大赛2020机器学习赛道-ctr预估初赛/决赛rank1 写在前面 1.比赛成绩 2.基础方案 2.1.赛题理解 2.2.特征工程 2.3.算法实现 3.冷启动探索 3.1.数据分析 ...

最新文章

  1. ES单字段支持的最大字符数
  2. js 获取屏幕高宽_JS获取屏幕的宽高。
  3. zcmu-1182(大数相减)
  4. python 输出一个 5*5的 三角形_GitHub标星3W+,80个Python案例,带你轻松玩转Python学习!...
  5. Kratos技术系列|从Kratos设计看Go微服务工程实践
  6. CF1000G. Two-Paths(树形dp)
  7. easyui学习笔记一:主要结构
  8. 数据:以太坊上借贷协议资金规模年内增长幅度超300%
  9. 优先级(HTML、CSS)
  10. 教你React Native使用fetch实现图片上传
  11. 疫情之下,分享几款免费CRM系统,提高在家办公效率!
  12. Docker搭建rtmp视频直播
  13. 遇见心想事成的自己……
  14. 基于tflearn的RNN模仿莎士比亚写作
  15. GIS中快速添加天地图、查看历史影像
  16. Lucene学习总结
  17. 如何提取文件名称到excel
  18. 安装JDK报错:Failed to extract file RegUtils from the binary table
  19. CRM 软件都开始投身小程序了:纷享销客推出“客脉”小程序
  20. 安吉尔直饮水设备保质交付,深圳湾公园直饮水保障完成

热门文章

  1. 网易杭研易盾实习心得(4)
  2. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言时课程设计.docx
  3. 求导,微分,积分的区别
  4. oracle rman crosscheck,rman crosscheck作用
  5. mdx和mdd格式的词典解析Android JNI方式实现
  6. android view.isshown,关于android:View getVisibility()isShown()返回不正确的可见性
  7. Cut through switching
  8. 魔兽世界各服务器显示版本,魔兽世界版本时间表等级(魔兽世界国服版本时间表)...
  9. linux qos 软件,linux下QOS:应用篇
  10. 如何判断建设用地是否符合土地利用总体规划?