队伍简介
队伍名 “诗人都藏在水底”,三位队员分别是来自北大的wepon和charles,来自中科大的云泛天音
赛题介绍
本赛题提供用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,预测用户在2016年7月领取优惠券后15天以内是否核销。评测指标采用AUC,先对每个优惠券单独计算核销预测的AUC值,再对所有优惠券的AUC值求平均作为最终的评价标准。
解决方案
本赛题提供了用户线下消费和优惠券领取核销行为的纪录表,用户线上点击/消费和优惠券领取核销行为的纪录表,记录的时间区间是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,但这些特征在实际业务中是无法获取到的。
字段表
Table 1: 用户线下消费和优惠券领取行为 表名 train_offline_stage2
Field | Description |
---|---|
User_id | 用户ID |
Merchant_id | 商户ID |
Coupon_id | 优惠券ID:null表示无优惠券消费,此时Discount_rate和Date_received字段无意义 |
Discount_rate | 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y。单位是元 |
Distance | user经常活动的地点离该merchant的最近门店距离是x*500米(如果是连锁店,则取最近的一家门店),x\in[0,10];null表示无此信息,0表示低于500米,10表示大于5公里; |
Date_received | 领取优惠券日期 |
Date | 消费日期:如果Date=null & Coupon_id != null,该记录表示领取优惠券但没有使用,即负样本;如果Date!=null & Coupon_id = null,则表示普通消费日期;如果Date!=null & Coupon_id != null,则表示用优惠券消费日期,即正样本; |
Table 2: 用户线上点击/消费和优惠券领取行为 表名 train_online_stage2
Field | Description |
---|---|
User_id | 用户ID |
Merchant_id | 商户ID |
Action | 0 点击, 1购买,2领取优惠券 |
Coupon_id | 优惠券ID:null表示无优惠券消费,此时Discount_rate和Date_received字段无意义。“fixed”表示该交易是限时低价活动。 |
Discount_rate | 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y;“fixed”表示低价限时优惠; |
Date_received | 领取优惠券日期 |
Date | 消费日期:如果Date=null & Coupon_id != null,该记录表示领取优惠券但没有使用;如果Date!=null & Coupon_id = null,则表示普通消费日期;如果Date!=null & Coupon_id != null,则表示用优惠券消费日期; |
Table 3:用户O2O线下优惠券使用预测样本 表名 prediction_stage2
Field | Description |
---|---|
User_id | 用户ID |
Merchant_id | 商户ID |
Coupon_id | 优惠券ID |
Discount_rate | 优惠率:x \in [0,1]代表折扣率;x:y表示满x减y. |
Distance | user经常活动的地点离该merchant的最近门店距离是x*500米(如果是连锁店,则取最近的一家门店),x\in[0,10];null表示无此信息,0表示低于500米,10表示大于5公里; |
Date_received | 领取优惠券日期 |
Table 4:选手提交表名要求统一命名为:o2o_result 字段要求如下表 其中user_id,coupon_id和date_received均来自Table 3,而Probability为预测值
Field | Description |
---|---|
User_id | 用户ID |
Coupon_id | 优惠券ID |
Date_received | 领取优惠券日期 |
Probability | 15天内用券概率,由参赛选手给出 |
特征提取:
模型设计
基于以上提取到的特征,进行模型设计与融合。
0.65 * GBDT + 0.35 * XGBoost
就得到了第一的成绩。