衫衫学长 发表于 2017-1-8 10:38

阿里天池赛冠军解决方案

本帖最后由 衫衫学长 于 2017-1-7 21:42 编辑








阿里天池赛冠军解决方案代码及说明:



队伍简介队伍名 “诗人都藏在水底”,三位队员分别是来自北大的wepon和charles,来自中科大的云泛天音
赛题回顾本赛题提供用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,预测用户在2016年7月领取优惠券后15天以内是否核销。评测指标采用AUC,先对每个优惠券单独计算核销预测的AUC值,再对所有优惠券的AUC值求平均作为最终的评价标准。
比赛背景    随着移动设备的完善和普及,移动互联网+各行各业进入了高速发展阶段,这其中以O2O(Online to Offline)消费最为吸引眼球。据不完全统计,O2O行业估值上亿的创业公司至少有10家,也不乏百亿巨头的身影。O2O行业天然关联数亿消费者,各类APP每天记录了超过百亿条用户行为和位置记录,因而成为大数据科研和商业化运营的最佳结合点之一。
    以优惠券盘活老用户或吸引新客户进店消费是O2O的一种重要营销方式。然而随机投放的优惠券对多数用户造成无意义的干扰。对商家而言,滥发的优惠券可能降低品牌声誉,同时难以估算营销成本。
    个性化投放是提高优惠券核销率的重要技术,它可以让具有一定偏好的消费者得到真正的实惠,同时赋予商家更强的营销能力。本次大赛为参赛选手提供了O2O场景相关的丰富数据,希望参赛选手通过分析建模,精准预测用户是否会在规定时间内使用相应优惠券。
竞赛规则    本次大赛分为初赛、复赛和决赛三个阶段,其中:初赛由参赛队伍下载数据在本地进行算法设计和调试;复赛要求参赛者在线进行数据分析和处理;决赛要求参赛者进行现场演示和答辩。具体安排和要求如下:
初赛(10月01日-11月10日)
[*]1、参赛队伍10月07日可下载数据,并在本地调试算法,提交结果。若参赛队伍在两次评测之间多次提交结果,新结果版本将覆盖旧版本;
[*]2、从10月08日18:00起,系统每天进行4次评测和排名,评测开始时间为每天00:00, 06:00, 12:00, 18:00。按照评测指标从高到低更新排行榜,排行榜将选择参赛队伍在本阶段的历史最优成绩进行排名展示;
[*]3、本竞赛排行版采用A/B榜设置,使用测试集的50%数据作为A榜测试集,另外50%作为B榜测试集,最终线上成绩与排名以B榜成绩与排名为准(B榜成绩仅在初赛最后一天公布);
[*]4、初赛截止时间是11月10日18:00,同时满足以下条件的队伍进入复赛:

[*]    a. 在天池网站和CCF大赛官方完成注册且“昵称/姓名/邮箱/队名和队伍结构“一致;
[*]    b. 通过支付宝实名认证;(认证入口:天池网站-个人中心-认证-支付宝实名认证,要求初赛截至前完成认证,要求11月14日00:00前完成认证)
[*]    c. 初赛成绩排名前100名;

平台赋权(11月16日—11月17日)
[*]1、复赛需通过天池官网进入数加平台进行参赛;
[*]2、11月16日10:00开始赋权,11月17日12:00完成赋权;
[*]3、复赛队伍获得数加平台权限后,比赛详情页面左侧将显示“数加”菜单,点击进入平台;也可直接点击这里登录(注:登录数加平台需RAM子账号, RAM子账号请前往个人中心"我的RAM账号"中获取);
[*]4、数加平台使用手册请查看这里

复赛(11月18日—12月19日)
[*]1、复赛的数据不可下载,下载数据将视为违规自动失去比赛资格;
[*]2、选手需要使用平台完成数据处理、建模、算法调试、产出结果等所有环节,可使用基于MaxComputer的Map Reduce、SQL、GRAPH及平台集成的各种机器学习算法包/模型;
[*]3、从11月18日18:00起,系统每天进行4次评测和排名,评测开始时间为每天00:00, 06:00, 12:00, 18:00,按照评测指标从高到低进行排序更新排行榜;
[*]4、本竞赛排行版采用A/B榜设置,使用测试集的50%数据作为A榜测试集,剩余50%作为B榜测试集,最终线上成绩与排名以B榜成绩与排名为准(B榜成绩仅在复赛最后一天可见);
[*]5、复赛截止时间是12月19日18:00,复赛成绩排名前5名的选手将受邀参加决赛的现场答辩;
积分发放:进入第二赛季的队伍,会有相应排名的积分奖励 (相应积分规则详见个人中心的积分)

决赛(12月30日)
[*]决赛将以现场答辩会的形式进行,具体形式另行通知

赛题介绍:https://tianchi.shuju.aliyun.com/competition/introduction.htm?spm=5176.100068.5678.1.9Igo9O&raceId=231587第一赛季数据:http://pan.baidu.com/s/1nvFG2ff
解决方案概述本赛题提供了用户线下消费和优惠券领取核销行为的纪录表,用户线上点击/消费和优惠券领取核销行为的纪录表,记录的时间区间是2016.01.01至2016.06.30,需要预测的是2016年7月份用户领取优惠劵后是否核销。根据这两份数据表,我们首先对数据集进行划分,然后提取了用户相关的特征、商家相关的特征,优惠劵相关的特征,用户与商家之间的交互特征,以及利用本赛题的leakage得到的其它特征(这部分特征在实际业务中是不可能获取到的)。最后训练了XGBoost,GBDT,RandomForest进行模型融合。
数据集划分可以采用滑窗的方法得到多份训练数据集,特征区间越小,得到的训练数据集越多。以下是一种划分方式:
划取多份训练集,一方面可以增加训练样本,另一方面可以做交叉验证实验,方便调参。
特征工程赛题提供了online和offline两份数据集,online数据集可以提取到与用户相关的特征,offline数据集可以提取到更加丰富的特征:用户相关的特征,商家相关的特征,优惠劵相关的特征,用户-商家交互特征。另外需要指出的是,赛题提供的预测集中,包含了同一个用户在整个7月份里的优惠券领取情况,这实际上是一种leakage,比如存在这种情况:某一个用户在7月10日领取了某优惠券,然后在7月12日和7月15日又领取了相同的优惠券,那么7月10日领取的优惠券被核销的可能性就很大了。我们在做特征工程时也注意到了这一点,提取了一些相关的特征。加入这部分特征后,AUC提升了10个百分点,相信大多数队伍都利用了这一leakage,但这些特征在实际业务中是无法获取到的。以下简要地说明各部分特征:
[*]用户线下相关的特征

[*]用户领取优惠券次数

[*]用户获得优惠券但没有消费的次数
[*]用户获得优惠券并核销次数
[*]用户领取优惠券后进行核销率
[*]用户满0~50/50~200/200~500 减的优惠券核销率
[*]用户核销满0~50/50~200/200~500减的优惠券占所有核销优惠券的比重
[*]用户核销优惠券的平均/最低/最高消费折率
[*]用户核销过优惠券的不同商家数量,及其占所有不同商家的比重
[*]用户核销过的不同优惠券数量,及其占所有不同优惠券的比重
[*]用户平均核销每个商家多少张优惠券
[*]用户核销优惠券中的平均/最大/最小用户-商家距离
[*]用户线上相关的特征

[*]用户线上操作次数
[*]用户线上点击率
[*]用户线上购买率
[*]用户线上领取率
[*]用户线上不消费次数
[*]用户线上优惠券核销次数
[*]用户线上优惠券核销率
[*]用户线下不消费次数占线上线下总的不消费次数的比重
[*]用户线下的优惠券核销次数占线上线下总的优惠券核销次数的比重
[*]用户线下领取的记录数量占总的记录数量的比重
[*]商家相关的特征

[*]商家优惠券被领取次数
[*]商家优惠券被领取后不核销次数
[*]商家优惠券被领取后核销次数
[*]商家优惠券被领取后核销率
[*]商家优惠券核销的平均/最小/最大消费折率
[*]核销商家优惠券的不同用户数量,及其占领取不同的用户比重
[*]商家优惠券平均每个用户核销多少张
[*]商家被核销过的不同优惠券数量
[*]商家被核销过的不同优惠券数量占所有领取过的不同优惠券数量的比重
[*]商家平均每种优惠券核销多少张
[*]商家被核销优惠券的平均时间率
[*]商家被核销优惠券中的平均/最小/最大用户-商家距离
[*]用户-商家交互特征

[*]用户领取商家的优惠券次数
[*]用户领取商家的优惠券后不核销次数
[*]用户领取商家的优惠券后核销次数
[*]用户领取商家的优惠券后核销率
[*]用户对每个商家的不核销次数占用户总的不核销次数的比重
[*]用户对每个商家的优惠券核销次数占用户总的核销次数的比重
[*]用户对每个商家的不核销次数占商家总的不核销次数的比重
[*]用户对每个商家的优惠券核销次数占商家总的核销次数的比重
[*]优惠券相关的特征

[*]优惠券类型(直接优惠为0, 满减为1)
[*]优惠券折率
[*]满减优惠券的最低消费
[*]历史出现次数
[*]历史核销次数
[*]历史核销率
[*]历史核销时间率
[*]领取优惠券是一周的第几天
[*]领取优惠券是一月的第几天
[*]历史上用户领取该优惠券次数
[*]历史上用户消费该优惠券次数
[*]历史上用户对该优惠券的核销率
[*]其它特征这部分特征利用了赛题leakage,都是在预测区间提取的。

[*]用户领取的所有优惠券数目
[*]用户领取的特定优惠券数目
[*]用户此次之后/前领取的所有优惠券数目
[*]用户此次之后/前领取的特定优惠券数目
[*]用户上/下一次领取的时间间隔
[*]用户领取特定商家的优惠券数目
[*]用户领取的不同商家数目
[*]用户当天领取的优惠券数目
[*]用户当天领取的特定优惠券数目
[*]用户领取的所有优惠券种类数目
[*]商家被领取的优惠券数目
[*]商家被领取的特定优惠券数目
[*]商家被多少不同用户领取的数目
[*]商家发行的所有优惠券种类数目


模型设计与模型融合基于以上提取到的特征,进行模型设计与融合。
[*]单模型第一赛季只训练了XGBoost单模型提交,连续几周位居排行榜第一位。第二赛季训练了XGBoost,GBDT,RandomForest三种单模型,其中GBDT表现最好,XGBoost次之,RandomForest相比之下最差。GBDT和XGBoost单模型在第二赛季仍然名列Top3,融合后效果更佳,尝试了以下两种方法:
[*]加权融合得到了单模型的预测结果后,直接将概率预测值进行加权融合,我们简单地用0.65 * GBDT + 0.35 * XGBoost就得到了第一的成绩。
[*]Blending模型我们尝试了两层的blending模型,首先将训练集分为两部分(D1和D2),一部分用于第一层(level 1)的训练,另一部分用于第二层(level 2)的训练。level1 在D1上训练了4个XGBoost,4个GBDT,4个RandomForest,将这些模型的预测结果作为level2的feature,在D2上训练第二层模型。Blending模型的结果相比单模型有细微的提升,但这点提升相对于模型复杂度带来的计算代价显得微不足道。


原文链接:https://github.com/wepe/O2O-Coupon-Usage-Forecast




data-science 发表于 2017-1-8 13:05

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

VOW 发表于 2017-1-8 17:16

阿里天池,听过听过~~~~~~~~~~~~~~·
页: [1]
查看完整版本: 阿里天池赛冠军解决方案