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

一、比赛背景

O2O:全称Online To Offline,线上线下电子商务,是把线上的消费者带到现实的商店中去:在线支付线下商品、服务,再到线下去享受服务。通过打折(例如团购)、提供信息、服务(例如预定)等方式,把线下商店的消息推送给互联网用户,从而将他们转换为自己的线下客户。这样线下服务就可以用线上来揽客,消费者可以用线上来筛选服务,还有成交可以在线结算。通俗点说,你在网上买个优惠券去麦当劳消费。

二、比赛目标

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

补充:
AUC的含义:area under ROC curve,ROC曲线下的面积
ROC:受试者工作特征,Receiver operating characteristic,分别以真正例率、假正例率为纵横轴,得到ROC曲线。具体地,给定m+个正例和m-个反例,根据学习器的预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点。然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+1/(m+));当前若为假正例,则对应标记点的坐标为(x+1/(m-),y),然后用线段连接相邻点即得。
具体计算方法:
假定ROC曲线是由坐标为{( x1 x 1 , y1 y 1 ), ( x2 x 2 , y2 y 2 ),…,( xm x m , ym y m )}的点按序连接而形成,则AUC可估算为:

AUC=12i=1m1(xi+1xi)(yi+yi+1) A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + y i + 1 )

三、数据分析

1、数据介绍
详细介绍见天池新人实战赛O2O优惠券使用预测
2、数据初分析
(1)训练集线下数据中user_id和merchant_id各有很多重复,说明有很多活跃用户和活跃商家
(2)训练集线上数据中coupon_id大部分为null,即无优惠券消费行为
(3)活跃用户更可能使用优惠券,活跃商家的优惠券更容易被使用
(4)用户在周末使用优惠券的可能性更大
3、数据划分
依据消费日期将数据集划分为多份训练集和测试集

- 特征区间 预测区间
训练集1 20160101-20160413 20160414-20160514
训练集2 20160201-20160514 20160515-20160615
测试集 20160315-20160630 20160701-20160731

4、特征工程

(1) 其他特征,8个,从训练集1、训练集2和测试集的预测区间提取:
this_month_user_receive_all_coupon_count # 这个月用户收取的所有优惠券数目
this_month_user_receive_same_coupn_count # 这个月用户收到的相同优惠券的数量
this_month_user_receive_same_coupon_lastone # 这个月优惠券最远接受时间
this_month_user_receive_same_coupon_firstone # 这个月优惠券最近接受时间
this_day_user_receive_all_coupon_count # 一天内用户接收到所有优惠券的数量
this_day_user_receive_same_coupon_count # 一天内用户接收到相同优惠券的数量
day_gap_before # 用户上一次领取优惠券的时间间隔
day_gap_after # 用户下一次领取优惠券的时间间隔

(2) 优惠券相关特征,8个,从训练集1、训练集2和测试集的预测区间提取:
discount_rate # 优惠券折扣率
discount_man # 显示满了多少钱后开始减
discount_jian # 显示满减的减少的钱
is_man_jian # 返回优惠券是否是满减券
day_of_week # 显示时间是第几周
day_of_month # 显示时间是几月
days_distance# 优惠券领取日期和截止日之间的间隔天数
is_weekend //优惠券领取日期是否属于周末

(3) 商户相关特征,9个,从训练集1、训练集2和测试集的特征区间提取:
total_sales # 显示每个商品的销售数量
sales_use_coupon # 显示使用了优惠券消费的商品
total_coupon # 显示了商品的优惠券的总数量
coupon_rate = sales_use_coupon/total_sales # 卖出商品中使用优惠券的占比
merchant_coupon_transfer_rate = sales_use_coupon/total_coupon # 优惠券的使用率

merchant_mean_distance # 所有使用优惠券消费的用户与商户的距离平均值
merchant_median_distance # 所有使用优惠券消费的用户与商户的距离中位值
merchant_min_distance # 所有使用优惠券消费的用户与商户的距离最小值
merchant_max_distance # 所有使用优惠券消费的用户与商户的距离最大值

(4) 用户相关特征,14个,从训练集1、训练集2和测试集的特征区间提取:
count_merchant # 用户消费商户数量
user_avg_distance # 所有使用优惠券消费的商户与用户的平均距离
user_min_distance # 所有使用优惠券消费的商户与用户的最小距离
user_max_distance # 所有使用优惠券消费的商户与用户的最大距离
user_median_distance # 所有使用优惠券消费的商户与用户的中位距离
buy_use_coupon # 每个用户使用优惠券消费次数
buy_total # 用户消费次数
coupon_received # 用户领取优惠券次数
avg_user_date_datereceived_gap # 用户从领取优惠券到消费的平均时间间隔
min_user_date_datereceived_gap # 用户从领取优惠券到消费的最小时间间隔
max_user_date_datereceived_gap # 用户从领取优惠券到消费的最大时间间隔
user_coupon_transfer_rate = buy_use_coupon/coupon_received # 用户优惠券转化为实际消费比例
buy_use_coupon_rate = buy_use_coupon/buy_total # 用户使用优惠券消费占总消费的比例
user_date_datereceived_gap # 接受到优惠券的日期和使用之间的间隔

(5)用户-商户相关特征,9个,从训练样本date,date_received提取特征:
user_merchant_buy_total # 用户在商户消费次数
user_merchant_received # 用户领取商户优惠券次数
user_merchant_buy_use_coupon # 用户在商户使用优惠券消费次数
user_merchant_any # 用户在商户的所有消费次数
user_merchant_buy_common # 用户在商户普通消费次数
user_merchant_coupon_transfer_rate # 用户对商户的优惠券转化率
user_merchant_coupon_buy_rate # 用户对商户使用优惠券消费占总消费比例
user_merchant_rate # 用户对商户消费占总交互比例
user_merchant_common_buy_rate # 用户对商户普通消费占总消费比例

四、模型训练

选择xgboost模型,它是一种迭代提升方法,由多个弱分类器组成,其中底层的弱分类器一般是由决策树实现的,每棵树所学习的是上一棵树的残差。

模型训练部分后续再补充。

参考资料

第一名代码
O2O优惠券预测——思路总结
『 天池竞赛』O2O优惠券使用预测思路总结
天池大赛o2o优惠券第一名代码笔记之_extral_feature(1)
天池大赛o2o优惠券第一名代码笔记之_extral_feature(2)
天池O2O优惠券使用预测比赛–总结

你可能感兴趣的:(竞赛,天池比赛)