天池O2O优惠券使用预测比赛--总结

1.        赛题简介

 以优惠券盘活老用户或吸引新客户进店消费是O2O的一种重要营销方式。然而随机投放的优惠券对多数用户造成无意义的干扰。对商家而言,滥发的优惠券可能降低品牌声誉,同时难以估算营销成本。 个性化投放是提高优惠券核销率的重要技术,它可以让具有一定偏好的消费者得到真正的实惠,同时赋予商家更强的营销能力。

本次大赛为参赛选手提供了O2O场景相关的丰富数据,希望参赛选手通过分析建模,精准预测用户是否会在规定时间内使用相应优惠券。

2.     数据

本赛题提供用户在201611日至2016630日之间真实线上线下消费行为,预测用户在20167月领取优惠券后15天以内的使用情况。




3.        数据分析

训练集所有用户中,约1/4的用户参与了线上及线下的活动,约1/4仅参与了线下,约1/2仅参与了线上

测试集中用户几乎被训练集中参与过线下活动的用户全部覆盖,有一小半是活跃用户<线上线下都参加>

线上与线下的商家完全没有交集

测试集中商家几乎被训练集中线下商家全部覆盖

测试集中全部是全新的优惠券<优惠券ID是不同的,所以对于优惠券的特征描述应当是其商家、折扣率等,与ID无关。

根据经验,我们知道活跃用户更可能使用优惠券,活跃商家所发出的优惠券更可能被使用,用户对某个商家的喜爱程度越高越可能使用这个商家发的优惠券

用户在周末更有时间更可能使用优惠券


4.        提取特征(pandas,numpy)

1)        优惠券相关特征,从预测样本的discount_rate,data_received提取:

Day_of_week //优惠券领取日期属于周几,使用独热编码

Is_weekend //优惠券领取日期是否属于周末

Day_of_month //优惠券领取日期属于一月中的哪天

Days_distance //优惠券领取日期离要预测的开始日期间隔天数

Discount_man //提取满减优惠券中满多少元

Discount_jian //提取满减优惠券中减多少元

Discout_rate //优惠券折扣率

2)        商户相关特征,从训练样本的distance,date_received,date提取:

Total_sales //商户被消费次数

Sales_use_coupon //商户使用优惠券被消费次数

Total_coupon //商户发放优惠券次数

Merchant_min_distance //所有使用优惠券消费的用户与商户的最小距离

Merchant_max_distance //所有使用优惠券消费的用户与商户的最大距离

Merchant_mean_distance //所有使用优惠券消费的用户与商户的平均距离

Use_coupon_rate //商户使用优惠券消费比例,等于sales_use_coupon/total_sales

Transfer_rate //商户优惠券转化率,等于sales_use_coupon/tatal_coupon

3)        用户相关特征,从训练样本的discount_rate, distance, data_received, data提取:

Count_merchant //用户消费商户数量

Buy_use_coupon //用户使用优惠券消费次数

Buy_total //用户消费次数

Coupon_received //用户领取优惠券次数

User_min_distance //所有使用优惠券消费的商户与用户的最小距离

User_max_distance //所有使用优惠券消费的商户与用户的最大距离

User_mean_distance //所有使用优惠券消费的商户与用户的平均距离

Avg_user_date_datereceived_gap //用户从领取优惠券到消费的平均时间间隔

Min_user_date_datereceived_gap //用户从领取优惠券到消费的最小时间间隔

Max_user_date_datereceived_gap //用户从领取优惠券到消费的最大时间间隔

Buy_use_coupon_rate //用户使用优惠券消费占总消费的比例

User_coupon_transfer_rate //用户优惠券转化为实际消费比例

4)        用户-商户相关特征,从训练样本date,date_received提取特征:

User_merchant_buy_total //用户在商户消费次数

User_merchant_received //用户领取商户优惠券次数

User_merchant_buy_use_coupon //用户在商户使用优惠券消费次数

User_merchant_buy_common //用户在商户普通消费次数

User_merchant_coupon_transfer_rate //用户对商户的优惠券转化率

User_merchant_rate //用户对商户消费占总交互比例

User_merchant_common_buy_rate //用户对商户普通消费占总消费比例

User_merchant_coupon_buy_rate //用户对商户使用优惠券消费占总消费比例

5. 训练模型(xgboost, sklearn)

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

它的优势主要有:

使用L1、L2范数进行正则化,防止过拟合;

实现树节点粒度的并行计算;

允许自定义损失函数和评价标准;

XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝。如果某个节点之后不再有正值,它会去除这个分裂。 这种做法的优点,当一个负损失(如-2)后面有个正损失(如+10)的时候,就显现出来了。XGBoost会继续分裂,然后发现这两个分裂综合起来会得到+8,因此会保留这两个分裂。

内置交叉验证,XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数


重要参数:


1、eta[默认0.3]
和GBM中的 learning rate 参数类似。 通过减少每一步的权重,可以提高模型的鲁棒性。 典型值为0.01-0.2。
2、min_child_weight[默认1]
决定最小叶子节点样本权重和。 和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。 这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。 但是如果这个值过高,会导致欠拟合。这个参数需要使用CV来调整。
3、max_depth[默认6]
和GBM中的参数相同,这个值为树的最大深度。 这个值也是用来避免过拟合的。max_depth越大,模型会学到更具体更局部的样本。 需要使用CV函数来进行调优。 典型值:3-10
4、max_leaf_nodes
树上最大的节点或叶子的数量。 可以替代max_depth的作用。因为如果生成的是二叉树,一个深度为n的树最多生成n2个叶子。 如果定义了这个参数,GBM会忽略max_depth参数。
5、gamma[默认0]
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。这个参数的值和损失函数息息相关,所以是需要调整的。
6、max_delta_step[默认0]
这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守。 通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的。 这个参数一般用不到,但是你可以挖掘出来它更多的用处。
7、subsample[默认1]
和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。 减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。 典型值:0.5-1
8、colsample_bytree[默认1]
和GBM里面的max_features参数类似。用来控制每棵随机采样的列数的占比(每一列是一个特征)。 典型值:0.5-1
9、colsample_bylevel[默认1]
用来控制树的每一级的每一次分裂,对列数的采样的占比。 我个人一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。但是如果感兴趣,可以挖掘这个参数更多的用处。
10、lambda[默认1]
权重的L2正则化项。(和Ridge regression类似)。 这个参数是用来控制XGBoost的正则化部分的。
11、alpha[默认1]
权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
12、scale_pos_weight[默认1]
在各类别样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。


参数调优(使用交叉验证):

1. 选择较高的学习速率(learning rate)。一般情况下,学习速率的值为0.1。但是,对于不同的问题,理想的学习速率有时候会在0.05到0.3之间波动。选择对应于此学习速率的理想决策树数量。XGBoost有一个很有用的函数“cv”,这个函数可以在每一次迭代中使用交叉验证,并返回理想的决策树数量。
2. 对于给定的学习速率和决策树数量,使用GridSearchCV进行决策树特定参数调优(max_depth, min_child_weight, gamma, subsample, colsample_bytree)。
3. xgboost的正则化参数的调优。(lambda, alpha)。这些参数可以降低模型的复杂度,从而提高模型的表现。
4. 降低学习速率,确定理想参数。


6、总结与收获

对大数据在实际场景的应用有了更深的了解

想要提高模型效果,特征很重要

熟悉如何运用python进行数据处理,特征提取

对使用的模型参数要了解

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值