目录

  • 数据与评价方式
  • 解决方案
  • 数据划分
  • 特征工程
  • 算法及模型融合
    • 模型融合
    • 应用
  • 线下评估
  • 回顾

赛题地址:https://tianchi.shuju.aliyun.com/competition/introduction.htm?spm=5176.100065.200879.2.6r6s4g&raceId=231587

第一赛季数据


目录


正式开始做是从十月底开始的,我之前参加了新手赛,而这一次正式赛可以说是真正认真做的一次,中间和队友一起学习了很多,也有小小的收获,不管这次成绩如何,以后还有机会。


数据与评价方式

赛题提供用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,预测用户在2016年7月领取优惠券后15天以内的使用情况。 使用优惠券核销预测的平均AUC(ROC曲线下面积)作为评价标准。 即对每个优惠券coupon_id单独计算核销预测的AUC值,再对所有优惠券的AUC值求平均作为最终的评价标准。


解决方案

提供数据的区间是2016-01-01~2016-06-30,预测七月份用户领券使用情况,即用或者不用,转化为二分类问题,然后通过分类算法预测结果。首先就是特征工程,其中涉及对数据集合的划分,包括提取特征的区间和训练数据区间。接着就是从特征区间中提取特征,包括用户特征、商户特征、优惠券特征、用户商户组合特征、用户优惠券组合特征。后期在测试区间提取了当天的前后7/3/1天的领券信息(这里面后七天的特征其实是不能应用于工业应用的,因为实际预测中你无法知道后7/3/1天的领券信息),提升较大。最后使用GBDT、RandomForest、LR进行基于rank的分类模型融合


数据划分

最初没有使用数据划分,导致特征中产生数据泄露,以至于在训练数据上效果很好,线下测试也还不错,在线上表现确差强人意,后来划分了之后有明显提升。

集合 预测区间 特征区间
预测集 领券:20160701~20160731 领券&消费:20160101~20160630
训练集 领券:20160515~20160615
消费:20160515~20160630
领券:20160101~20160501
消费:20160101~20160515

并没有划分多个训练集,这一点是要改进之处。


特征工程

主要有五大特征类:用户特征、商户特征、优惠券特征、用户商户组合特征、用户优惠券组合特征,赛题包括online和offline的数据,由于里面只有部分用户重合,商户优惠券等并未有重合,个人臆测线上应该是淘宝天猫的购买消费数据,有一定关联,但关系微弱,因此只向其中提取了用户特征。而offline数据集就提取了所有五个特征类。一下是各部分特征:

  • 用户特征:u

    • 线下领取优惠券但没有使用的次数 u1
    • 线下普通消费次数 u2
    • 线下使用优惠券消费的次数 u3
    • 线下平均正常消费间隔 u4
    • 线下平均优惠券消费间隔 u5
    • u3/u1 使用优惠券次数与没使用优惠券次数比值 u6
    • u3/(u2+u3) 表示用户使用优惠券消费占比 u7
    • u4/15 代表15除以用户普通消费间隔,可以看成用户15天内平均会普通消费几次,值越小代表用户在15天内普通消费概率越大 u8
    • u5/15 代表15除以用户优惠券消费间隔,可以看成用户15天内平均会普通消费几次,值越大代表用户 在15天内普通消费概率越大 u9
    • 领取优惠券到使用优惠券的平均间隔时间 u10
    • u10/15 表示在15天内使用掉优惠券的值大小,值越小越有可能,值为0表示可能性最大 u11
    • 领取优惠券到使用优惠券间隔小于15天的次数 u12
    • u12/u3 表示用户15天使用掉优惠券的次数除以使用优惠券的次数,表示在15天使用掉优惠券的可能,值越大越好。 u13
    • u12/u1 F014 表示用户15天使用掉优惠券的次数除以领取优惠券未消费的次数,表示在15天使用掉优惠券的可能,值越大越好。 u14
    • u1+u3 领取优惠券的总次数 u15
    • u12/u15 F016 表示用户15天使用掉优惠券的次数除以领取优惠券的总次数,表示在15天使用掉优惠券的可能,值越大越好。 u16
    • u1+u2 一共消费多少次 u17
    • 最近一次消费到当前领券的时间间隔 u18
    • 最近一次优惠券消费到当前领券的时间间隔 u19
    • 用户当天领取的优惠券数目 u20
    • 用户前第i天领取的优惠券数目 u20si
    • 用户后第i天领取的优惠券数目 u20ai
    • 用户前7天领取的优惠券数目 u21
    • 用户前3天领取的优惠券数目 u22
    • u22/u21 u23
    • u20/u22 u24
    • 用户后7天领取的优惠券数目 u25
    • 用户后3天领取的优惠券数目 u26
    • u26/u25 u27
    • u20/u26 u28
    • 用户训练、预测时间领取的优惠券数目 u29
    • 用户当天领取的不同优惠券数目 u30
    • 用户前第i天领取的不同优惠券数目 u30si
    • 用户后第i天领取的不同优惠券数目 u30ai
    • 用户训练、预测时间领取的不同优惠券数目 u31
    • 按照7/4/2分解训练、预测时间,提取此段窗口时间的特征
    • 用户7/4/2天领取的优惠券数目 u32_i
    • 用户7/4/2天所领取的优惠券优惠率r1/r2/r3/r4排名 u_ri_ranki
    • 用户7/4/2天所领取的优惠券优惠率r1/r2/r3/r4排名 u_ri_dense _ranki
    • u32_4/u32_7 u33
    • u32_2/u32_4 u34
    • u32_2/u32_7 u35
    • u20/u32_2 u36

    • 线上领取优惠券未使用的次数 action=2 uo1
    • 线上特价消费次数 action=1 and cid=0 and drate="fixed" uo2
    • 线上使用优惠券消费的次数 uo3
    • 线上普通消费次数 action=1 and cid=0 and drate="null" uo4
    • 线上领取优惠券的次数 uo1+uo3 uo5
    • uo3/uo5 线上使用优惠券次数除以线上领取优惠券次数,正比 uo6
    • uo3/uo4 线上使用优惠券次数除以线上普通消费次数,正比 uo7
    • uo2/uo4线上特价消费次数除以线上普通消费次数 uo8

    • 加入训练预测时间前一个月的窗口特征

    • 线下领取优惠券但没有使用的次数 uw1
    • 线下普通消费次数 uw2
    • 线下使用优惠券消费的次数 uw3
    • 线下平均正常消费间隔 uw4
    • 线下平均优惠券消费间隔 uw5
    • uw3/uw1 使用优惠券次数与没使用优惠券次数比值 uw6
    • uw3/(uw2+uw3) 表示用户使用优惠券消费占比 uw7
    • uw4/15 代表15除以用户普通消费间隔,可以看成用户15天内平均会普通消费几次,值越小代表用户在15天内普通消费概率越大 uw8
    • uw5/15 代表15除以用户优惠券消费间隔,可以看成用户15天内平均会普通消费几次,值越大代表用户在15天内普通消费概率越大 uw9
    • 领取优惠券到使用优惠券的平均间隔时间 uw10
    • uw10/15 表示在15天内使用掉优惠券的值大小,值越小越有可能,值为0表示可能性最大 uw11
    • 领取优惠券到使用优惠券间隔小于15天的次数 uw12
    • uw12/uw3 表示用户15天使用掉优惠券的次数除以使用优惠券的次数,表示在15天使用掉优惠券的可能,值越大越好。 uw13
    • uw12/uw1 F014 表示用户15天使用掉优惠券的次数除以领取优惠券未消费的次数,表示在15天使用掉优惠券的可能,值越大越好。 uw14
    • uw1+uw3 领取优惠券的总次数 uw15
    • uw12/uw15 F016 表示用户15天使用掉优惠券的次数除以领取优惠券的总次数,表示在15天使用掉优惠券的可能,值越大越好。 uw16
    • F01+F02 一共消费多少次 uw17


  • 商户特征:m

    • 商户一共的消费笔数:m0
    • 商户优惠券消费笔数:m1
    • 商户正常的消费笔数:m2
    • 没有被使用的优惠券: m3
    • 商户发放优惠券数目:m3+m1 m4
    • 商户优惠券使用率:m1/m4 m5
    • 商户在训练、预测时间发行的优惠券数目 m6
    • 商户当天发行的优惠券数目 m7
    • 商户在训练、预测时间有多少人在此店领券 m8
    • 商户在当天有多少人在此店领券 m9
    • 按照7/4/2分解训练、预测时间,提取此段窗口时间的特征
    • 7/4/2天此商店优惠券发放数目 m10_i
    • m9 / m10_7 m11
    • m9 / m10_4 m12
    • m9 / m10_2 m13
    • m10_2 / m10_4 m14

  • 优惠券特征:c

    • 折扣类的优惠券折扣率 r1
    • 满减类优惠券满减金额 r2
    • 满减类优惠券减的金额 r3
    • 满减类优惠券优惠率 (r2-r3)/r2 r4
    • c1+c2 此优惠券一共发行多少张 c0
    • 此优惠券一共被使用多少张 c1
    • 没有使用的数目 c2
    • c1/c0 优惠券使用率 c3
    • 优惠力度 c5
    • 优惠力度在当天所领取优惠券里面排名 c5_rank
    • 优惠力度在当天所领取优惠券里面排名 c5_denserank
    • 优惠力度在当天同一店家所领取优惠券里面排名 c5_rankm
    • 优惠力度在当天所领取优惠券里面百分比排名 c5_rankp
    • 优惠力度在当天同一店家所领取优惠券里面百分比排名 c5_rankmp
    • 此优惠券在训练、预测时间发行了多少张 c6
    • 此优惠券在当天发行了多少张 c7
    • 领券当天周几 c8
    • 领券当天是否周末 c9 c8,c9去掉效果更好了。。。。
    • 此优惠券在当天被多少人领过 c10
    • 此优惠券在训练、预测时间被多少个人领过 c11
    • 此优惠券最后一次领券时间到此领券时间的间隔 c12
    • 此优惠券最后一次消费时间到此领券时间的间隔 c13
    • 按照7/4/2分解训练、预测时间,提取此段窗口时间的特征
    • 7/4/2天此优惠券发放数目 c14_i
    • c10 / c14_7 AS c15
    • c10 / c14_4 AS c16
    • c14_2 / c14_4 AS c17
    • c10 / c14_2 AS

  • 用户和商户组合特征:um

    • 用户在商店总共消费过几次 um0
    • 用户在商店使用优惠券几次 um1
    • 用户在商店领取优惠券未消费次数 um2
    • 用户在商店普通消费次数 um3
    • um1/(um1+um2) 用户在此商户优惠券使用率 um4
    • um0/(u2+u3) 值大表示用户比较常去的商户 um5
    • um1/u3 值大表示用户比较喜欢在那个商户使用优惠券 um6
    • 用户在训练、预测时间在此商店领取的优惠券数目 um7
    • 用户当天在此商店领取的优惠券数目 um8
    • 按照7/4/2分解训练、预测时间,提取此段窗口时间的特征
    • 7/4/2天此用户在此商店领取的优惠券发放数目 um9_i
    • um8 / um9_7 um10
    • um8 / um9_4 um11
    • um8 / um9_2 um12
    • um9_2 / um9_4 um13

  • 用户和优惠券组合特征:uc

    • 用户领取的优惠券数目 uc0
    • 用户领取未消费的优惠券数目 uc1
    • 用户消费了此优惠券的数目 uc2
    • uc02/uc0 uc3
    • 用户在此期间领取了多少张此优惠券 uc4 partiton by uid, cid
    • 用户在当天领取了多少张此优惠券 uc5
    • 领取优惠券时间-最后一次使用优惠券时间 uc6
    • uc6/ u5 uc7 正比

    • 用户前第i天领取的此优惠券数目 uc5si
    • 用户后第i天领取的此优惠券数目 uc5ai
    • 用户前7天领取的此优惠券数目 uc8
    • 用户前3天领取的此优惠券数目 uc9
    • uc9/uc8 uc10(若u21为0,则为1)
    • uc4/uc9 uc11
    • 用户后7天领取的此优惠券数目 uc12
    • 用户后3天领取的此优惠券数目 uc13
    • uc13/uc12 uc14
    • uc4/uc13 uc15
    • 按照7/4/2分解训练、预测时间,提取此段窗口时间的特征
    • 7/4/2天此用户在此商店领取的优惠券发放数目 uc16_i
    • 用户前后2/4/7领取的优惠券优惠率排名 uc17_i


算法及模型融合

最初使用RF、GBDT两种模型,GBDT效果优于RF,后期使用了多个GBDT和XGBoost,分别使用不同的参数、不同的正负样本比例以rank的方式进行多模型的融合,效果有微小提升,但是由于计算量的限制没有进一步展开。

模型融合

由于评估指标是计算每个coupon_id核销预测的AUC值,然后所有优惠券的AUC值平均作为最终的评估指标,而rank融合方式对AUC之类的评估指标特别有效,所以采用此方法,公式为:

$\sum\limits_{i=1}^{n}\frac{Weight_i}{Rank_i} $

其中$n$表示模型的个数, $Weight_i$表示该模型权重,所有权重相同表示平均融合。$Rank_i$表示样本在第i个模型中的升序排名。它可以较快的利用排名融合多个模型之间的差异,而不需要加权融合概率。

应用

基于参数,样本(采样率),特征获得多个模型,得到每个模型的概率值输出,然后以coupon_id分组,把概率转换为降序排名,这样就获得了每个模型的$Rank_i$,然后这里我们使用的是平均融合,$Weight_i=1/n$,这样就获得了最终的一个值作为输出。


线下评估

虽然这次比赛每天有四次评测机会,但是构建线下评估在早期成绩比较差的时候用处很大,早期添加特征之后线下评估基本和线上的趋势保持一致(例如在添加了Label区间的领券特征之后,线下提升十多个百分点,线上也是一致),对于新特征衡量还是有参照性的。后期差距在0.1%级别的时候,就没有参照性了。

线下评估在训练集中采样1/3 or 1/4 or 1/5做线下评估集合,剩下的做为训练集训练模型,并将评估集合中全0或者全1的优惠券ID去掉,然后使用训练的模型对评估集合预测,将预测结果和实际标签作异或取反(相同为1,不同为0),然后算出每个优惠券ID的AUC,最后将每个ID的优惠券AUC取均值就得到最终的AUC。


回顾

这一次比赛学习了很多,包括分布式平台ODPS和机器学习平台实现数据清洗,特征提取,特征选择,分类建模、调参及模型融合等,学习摸索了一套方法,使自己建立了信心,明白还有很多需要学习的地方,之前一直对于算法都是当做一个黑匣子,只会熟悉输入输出直接调用,要深入了解算法,才能突破目前的瓶颈有所提高。
同时我觉得大家一起探讨交流也很重要,一个人做着做着就容易走偏,纯属个人看法。

CSDN博客链接:http://blog.csdn.net/shine19930820/article/details/53995369

授人以鱼不如授人以渔:
参考 第一名队伍:【诗人都藏在水底】:GitHub地址

python sklearn数据预处理:http://blog.csdn.net/shine19930820/article/details/50915361
广义线性模型--Generalized Linear Models:http://blog.csdn.net/shine19930820/article/details/50997645
交叉验证的Java weka实现,并保存和重载模型:http://blog.csdn.net/shine19930820/article/details/50921109
机器学习知识图谱:http://lib.csdn.net/base/machinelearning/structure

转载于:https://www.cnblogs.com/aaronchou820/p/6707200.html

『 天池竞赛』O2O优惠券使用预测思路总结相关推荐

  1. 天池比赛:o2o优惠券使用预测

    一.比赛背景 O2O:全称Online To Offline,线上线下电子商务,是把线上的消费者带到现实的商店中去:在线支付线下商品.服务,再到线下去享受服务.通过打折(例如团购).提供信息.服务(例 ...

  2. 天池 O2O 优惠券使用预测思路解析与代码实战

    个人网站:redstonewill.com 前阵子因为机器学习训练营的任务安排,需要打一场 AI 比赛.然后就了解到最近热度很高且非常适合新人入门的一场比赛:天池新人实战赛o2o优惠券使用预测.今天, ...

  3. 【天池竞赛系列】资金流入流出预测思路

    赛题地址:http://tianchi.aliyun.com/competition/information.htm?spm=5176.100067.5678.2.VZW16k&raceId= ...

  4. 【机器学习】天池O2O优惠券使用预测_系统性总结与心得

    Preface:上半年参加天池的O2O优惠券预测赛排名第二,同时参加了学校数据仓库老师的课程改革建设团队,于是把参赛经验总结成文,准备分享给该课程的学弟学妹.现在我把总结的参赛教程文章也发到CSDN上 ...

  5. 天池o2o优惠券使用预测(入门)

    一.前言 近期学习了一下天池中o2o优惠券使用预测的学习赛,主要任务是通过分析建模,精准预测用户是否会在规定时间内使用相应优惠券.这次的参与主要是学习为主,牛刀小试. 二.解决方案 数据分析:对于给定 ...

  6. Sklearn:天池新人实战赛o2o优惠券使用预测 part1

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 阿里云官网:天池新人实战赛o2o优惠券使用预测 数据集下载链接 ...

  7. Sklearn:天池新人实战赛o2o优惠券使用预测 part2

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 阿里云官网:天池新人实战赛o2o优惠券使用预测 数据集下载链接 ...

  8. W12 - 999、O2O优惠券使用预测

    初学耗时:999h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 『   因为要去见那个不一般的人,所以我就不能是一般人.』  W99.阿里大学征服路 - W系列总纲   ...

  9. O2O优惠券使用预测项目总结

    O2O优惠券使用预测笔记 前言 项目介绍 数据 评价方式 赛题分析 基本思路 数据集划分 特征工程 模型选取 过程及代码 导入python库 导入与划分数据集 特征工程 模型训练与调参 预测测试集 总 ...

最新文章

  1. CBNet:物体检测的一种新的组合主干网络结构
  2. Java编程基础阶段笔记 day04 Java基础语法(下)
  3. C和指针之动态内存分配常见问题和总结
  4. 启动不起来_国产开源工具:U盘启动工具Ventoy v1.0.29发布——墨涩网
  5. 不说“安全”俩字,如何证明自己是做安全的?
  6. 自定义过滤器和标签,动态显示菜单权限
  7. 服务器server操作系统吗,windows server 2008 R2 操作系统
  8. SYN-COOKIE
  9. Linux解决忘记密码的方法
  10. 利用Bitvise等软件通过SSH登录linux系统的心得
  11. HSV/HSB/HSL 色相、饱和度、亮度的色彩模型
  12. 死区时间的分析与设置
  13. 苹果新款MacBook Pro可能会有SD卡插槽
  14. 用java实现文档加密解密
  15. 讲义母版和备注模板的作用
  16. Mysql基础篇-23-触发器Tigger
  17. 【HIT-OSLAB-实验中的碎碎念】
  18. 行车记录仪com.android,如何在android系统行车记录仪安装新软件
  19. 8月份补丁更新:微软修补了121个安全漏洞
  20. Cassandra官方文档整理

热门文章

  1. 50 【Go版本变化】
  2. Chisel 学习笔记(四)
  3. python is 和 == 的区别、解码和编码 小数据池
  4. 大数据的起步:初学者
  5. php 连接oracle插入多张图片的方法
  6. 魔兽世界---屠夫(Just a Hook)
  7. chmod 命令详解
  8. Extjs 登录界面源码
  9. CSMA/CD工作原理
  10. 你可能过于高估了机器学习算法能力,带你解读鲜为人知的数据泄露问题