O2O优惠券使用预测

一、背景

通过分析用户线上线下的消费行为,建立模型,预测现阶段用户是否会在规定时间内使用相应优惠券,以便商家个性化投放,提高优惠券核销率。

数据为用户在2016年1月1日至2016年6月30日之间真实线上线下消费行为,预测用户在2016年7月领取优惠券后15天以内的线下使用情况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们的目标是要预测用户优惠券的线下使用情况,线上数据我们重点关注与用户相关的特征(是作为线下数据的一个辅助),线下我们关注的特征数据就比较多了:用户特征、商户特征、优惠券特征、用户商户组合特征、用户优惠券组合特征。

数据分析:
1、预测集中的用户,是线下训练数据集里出现过的用户,也就是老用户。
2、根据经验,我们知道活跃用户更可能使用优惠券,活跃商家所发出的优惠券更可能被使用,用户对某个商家的喜爱程度越高越可能使用这个商家发的优惠券
3、用户在周末更有时间更可能使用优惠券
4、预测集中的商家,几乎都是线下训练数据集中出现过的商家。

二、数据预处理

本题所有数据记录的时间区间是2016.01.01至2016.06.30,需要预测的是线下2016年7月份用户领取优惠劵后15天内是否核销。根据这两份数据表,我们首先需要对数据集进行划分(采用滑窗的方式),特征区间为3.5个月,预测区间为一个月。要保证滑到最后,测试集的预测区间正好是7月。也可以用其他的方式划分,特征区间越小,得到的训练数据集越多。

特征区间(提取feature) 预测区间(预测label)
训练集 20160101~20160413 20160414~20160514
验证集 20160201~20160514 20160515~20160615
测试集 20160315~20160630 20160701~20160731

为什么要这样划分呢?第一,划分训练集和验证集,方便我们交叉验证;第二,我们的训练和预测是与时间有关系的,如果是用train_test_split随机划分,可能会导致训练数据是6月份,而预测数据却是5月份,这与现实是不符合的,这就是数据泄露:

数据泄露就是说用了不该用的数据,比如
(1)在训练模型时,利用了测试集的数据、信息
(2)在当前使用了未来的数据
(3)在交叉验证进行调参时,使用了验证集的信息参与模型建立
具体说下第三点,比如对特征进行标准化,正确的方法应该是在训练集上标准化,然后应用到验证集上,而非先标准化,再划分验证集。再比如说,要对数据进行pca降维,应该是在训练集上pca,然后作用到验证集上,而非对整个数据集进行pca。通常都忽略了这一点。

如果数据集划分的不好,可能会导致在训练数据上效果很好,线下测试也还不错,但是在线上表现却不好。

注意数据集的划分是不能只根据Date_Received(优惠券领取日期)来划分,否则划分出来的数据都是有优惠券的用户,没有领取优惠券的用户数据都被丢弃了。
因为我们要预测的是用户领取优惠券之后的使用情况,所以,预测区间可以根据用户领取优惠券时间来划分,特征区间麻烦一点,如果消费时间不为空,通过消费时间划分;如果消费时间为空,则根据优惠券领取时间划分。(不能单纯的用领取时间或消费时间划分,因为这两个时间都可能是空)

测试集的预测区间的划分是从ccf_offline_stage1_test_revised.csv中读取的。

#划分特征区间数据集,通过领取时间和消费时间
def filter_feature_data(data,start_time,end_time):
    return data[((data['Date'] > start_time) & (data['Date'] < end_time
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值