活动节假日促销等营销方式的因果效应评估——特征工程篇

Posted 悟乙己

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了活动节假日促销等营销方式的因果效应评估——特征工程篇相关的知识,希望对你有一定的参考价值。

本系列旨在挖掘活动、节假日、促销、优惠券、积分等营销权益因果效应评估,目前规划两个篇幅:

  • 第一篇:会收集活动、节假日、促销等营销权益在做一些建模项目中,可以构造成为的特征工程方式
  • 第二篇:使用各类模型、方法总结这些营销方式的几种效应评估方法

更多是文献整理,主要集中在预测类模型 - 营销方式入模的特征工程


文章目录


1 [竞赛] Corporación Favorita Grocery Sales Forecasting

Corporación Favorita Grocery Sales Forecasting

本篇是知乎的一个总结帖【kaggle销量预测冠军方案分析 】,还不错,可参考:

- 前16天与后16天的促销信息
- 前[14、60、140]天的促销次数
- 后[3、7、14]天内的促销次数
- [3, 7, 14, 30, 60, 140]
	- 内促销日期时的销量均值、指数加权平均;
	- 没有促销时的销量均值、加权平均
- 近[7、14、30、60、140]天内
	- 促销日子的总和
	- 最近促销距近的天数
	- 最远促销距今天的天数
- 后16天内
	- 促销次数总和
	- 最近促销日子距今天数
	- 最远促销日子距今天数
- 星期几

2 [竞赛] 天池新人实战赛o2o优惠券使用预测

本节参考文献:
干货 | 谈谈我是如何入门这场 AI 大赛的

比赛第一名方案:
wepe/O2O-Coupon-Usage-Forecast

2.1 优惠券特征

打折率(Discount_rate)

首先,第一个想到的特征应该是优惠卷的打折率。因为很显然,一般情况下优惠得越多,用户就越有可能使用优惠券。
处理方式可以构建 4 个函数,分别提取 4 种特征,分别是:

- 打折类型:getDiscountType()
- 折扣率:convertRate()
- 满多少:getDiscountMan()
- 减多少:getDiscountJian()

领劵日期(Date_received)

是还有一点很重要的是领券日期,因为一般而言,周末领取优惠券去消费的可能性更大一些。因此,我们可以构建关于领券日期的一些特征:

- weekday : null, 1, 2, 3, 4, 5, 6, 7 
- weekday_type : 1, 0(周六和周日为1,其他为0) 
- Weekday_1 : 1, 0, 0, 0, 0, 0, 0 
- Weekday_2 : 0, 1, 0, 0, 0, 0, 0 
- Weekday_3 : 0, 0, 1, 0, 0, 0, 0 
- Weekday_4 : 0, 0, 0, 1, 0, 0, 0 
- Weekday_5 : 0, 0, 0, 0, 1, 0, 0 
- Weekday_6 : 0, 0, 0, 0, 0, 1, 0 
- Weekday_7 : 0, 0, 0, 0, 0, 0, 1

优惠券相关的特征

优惠券类型(直接优惠为0, 满减为1)
优惠券折率
满减优惠券的最低消费
历史出现次数
历史核销次数
历史核销率
历史核销时间率
领取优惠券是一周的第几天
领取优惠券是一月的第几天
历史上用户领取该优惠券次数
历史上用户消费该优惠券次数
历史上用户对该优惠券的核销率

2.2 用户 - 领券行为特征

用户线下相关的特征

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

用户线上相关的特征

- 用户线上操作次数
- 用户线上点击率
- 用户线上购买率
- 用户线上领取率
- 用户线上不消费次数
- 用户线上优惠券核销次数
- 用户线上优惠券核销率
- 用户线下不消费次数占线上线下总的不消费次数的比重
- 用户线下的优惠券核销次数占线上线下总的优惠券核销次数的比重
- 用户线下领取的记录数量占总的记录数量的比重

2.3 商家 - 领券行为特征

商家相关的特征

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

2.4 用户-商家交互特征

用户领取商家的优惠券次数
用户领取商家的优惠券后不核销次数
用户领取商家的优惠券后核销次数
用户领取商家的优惠券后核销率
用户对每个商家的不核销次数占用户总的不核销次数的比重
用户对每个商家的优惠券核销次数占用户总的核销次数的比重
用户对每个商家的不核销次数占商家总的不核销次数的比重
用户对每个商家的优惠券核销次数占商家总的核销次数的比重

2.5 其他一些技巧性特征

队伍名 “诗人都藏在水底”有提到利用了赛题leakage,在预测区间提取的一些特征:

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

3 [竞赛] CCF2018-Top2-供应链预测

地址:https://www.datafountain.cn/competitions/313

赛题任务

供应链需求预测,对原问题做建模问题简化。考虑商品在制造,国际航运,海关清关,商品入仓的供应链过程,实际的产品准备时长不同。这里将问题简化,统一在45天内完成,供应链预测目标市场为沙特阿拉伯。赛题为运用平台积累最近1年多的商品数据预测45天后5周每周(week1~week5)的销量。

团队分享:https://github.com/luoda888/CCF2018-Top2-Demand-Forecast

整体活动特征是marketing表中所述全场活动,对整体销量影响极大,这部分特征由于我们数据集构造并没有连续划窗,所以我们并没有直接将其放入特征中,而是对历史销量进行平滑,平滑掉全场大促的活动对模型的偏移。

4 [竞赛] CCF BDCI 2019乘用车细分市场销量预测

答辩视频:
https://www.bilibili.com/video/av843991939/
文章:
CCF BDCI 乘用车销量预测 冠军方案

活动类特征比较少,只有一个节假日,可见:

另一个方案:
特殊日期的标注,因此对春节所在月份进行了标记,还有当前月距离最近的春节间隔了几个月
注:16年春节在二月、17年春节在一月、18年春节在二月
参考:CCF BDCI 乘用车销量预测 TOP3开源

5 JDATA如期而至-用户购买时间预测

JDATA如期而至-用户购买时间预测Rank9

一些极端异常的情况,比如618,会进行销售平滑,同时训练集不考虑这个月

618,双十一和双十二的流量出现异常,因此我们做s2时去掉了一些节日

放弃了6月,因为分析数据得知618出现流量异常,同时我们也用了去除流量异常的节日,发现效果不佳。

6 利用Prophet 抽取节日特征

来源:将梯度提升模型与 Prophet 相结合可以提升时间序列预测的效果

我们特征工程的第一步非常简单。我们只需要使用Prophet 模型进行预测:

def prophet_features(df, horizon=24*7):
  temp_df = df.reset_index()
  temp_df = temp_df[['datetime', 'count']]
  temp_df.rename(columns='datetime': 'ds', 'count': 'y', inplace=True)
   
  #take last week of the dataset for validation
  train, test = temp_df.iloc[:-horizon,:], temp_df.iloc[-horizon:,:]
   
  #define prophet model
  m = Prophet(
              growth='linear',
              seasonality_mode='additive',
              interval_width=0.95,
              daily_seasonality=True,
              weekly_seasonality=True,
              yearly_seasonality=False
          )
  #train prophet model
  m.fit(train)
   
  #extract features from data using prophet to predict train set
  predictions_train = m.predict(train.drop('y', axis=1))
  #extract features from data using prophet to predict test set
  predictions_test = m.predict(test.drop('y', axis=1))
  #merge train and test predictions
  predictions = pd.concat([predictions_train, predictions_test], axis=0)

  return predictions

上面的函数将返回一个给我们的 LightGBM 模型准备的新特征的DF:

我们使用 Prophet 提取了新特征,下一步就是进行特征的合并和使用 LightGBM 进行预测
执行上述代码后,我们将合并特征df,创建滞后的lag值,训练 LightGBM 模型,然后用我们训练的模型进行预测,将我们的预测与实际结果进行比较。输出将如下所示:


如果我们仔细观察结果我们的 MAE 为 28.665。这要比一般特征工程结果有很大的提高。

以上是关于活动节假日促销等营销方式的因果效应评估——特征工程篇的主要内容,如果未能解决你的问题,请参考以下文章

活动节假日促销等营销方式的因果效应评估——方法模型篇

活动节假日促销等营销方式的因果效应评估——方法模型篇

活动节假日促销等营销方式的因果效应评估——方法模型篇

扫码领红包精准营销活动方案

扫码送红包精准营销方案

扫码领红包营销系统 销量神器