博客 你的双11优惠券领了吗?基于算法的优惠券发放

你的双11优惠券领了吗?基于算法的优惠券发放

   花袋鼠   发表于 2021-11-10 11:40  503  0


又到躁动的双十一了



准备好买买买了吗




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/ae814441338ffcf778f677ebc8ef57cb..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


算出省钱小妙招了吗



优惠券有没有用起来呢





平常购物中,“双11”、“618”购物节、外卖的满减、商家会员等都会给消费者发放优惠券。当消费者有优惠券可用时,购买东西的冲动会增大很多。许多商家基于用户这种心理,会发放优惠券来进行促销。那商家的优惠券的发放机制是怎样的呢?





有的是普惠性质,到达一定金额后可用;有的优惠券靠抢;还有的是定向发放。最后一种方式一般来说既可以节省成本,也可以达到比较好的促销效果,提升用户活跃度。





今天我们来看下基于算法怎么进行定向优惠券发放。





通过算法模型,提升营销准确率

        ——以某个面包店为例





1.业务目标



根据某面包店历史6个月的用户交易记录,通过RFM模型对用户分群,并建立模型预测用户的购买概率,实现对不同用户群不同购买概率的用户实行不同的发券策略,以此提升营销的准确率,实现ROI(收益与成本控制)的最大化。





知识点1:RFM模型



RMF模型是衡量客户价值和创新能力的一个重要工具和手段,通过用户的最近一次消费时间(Recency)、消费频率(Frequency)、消费金额(Monetary)三项指标将客户划分为重要价值客户、重要发展客户、重要保持客户、重要挽留客户、一般价值客户、一般发展客户、一般保持客户、一般挽留客户等八个象限,针对不同群组的客户采取不同的运营策略,该模型常用于企业商品单价不高、交易频次高的业务中。





2.数据准备



获取面包店6个月的用户历史交易表,表信息如下:



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/7d8a58a7d14fa10ea6d63da5d9c938a6..jpg
data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



 该表中共包含21293条数据,共960个用户的交易记录。真实业务场景中,数据特征会比这个举例多很多,今天我们通过删减后的数据来看一下整个过程。





3.算法模型搭建



我们采用数栈的算法开发(AIWorks)平台进行算法模型的搭建:



1)数据分析



首先从Hive库中读取到原始数据(即上面提到的表),算法工程师需要对数据质量进行评估,分析每个特征的数据缺失情况、分布情况、异常值校验、列与列之间的相关性等,如某些列的数据缺失较大,需要进行缺失值填充或删除;标签列分布不均匀,需要通过采样方法进行数据采用;若两个特征之间的相关性过大则不适合作为模型的输入。





我们以“user_id(用户id)”这个特征列来看一下数据分布情况:




  • 数据基本特征 





http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/a15115da980482d8b60215301c76d63b..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


可看到用户id列的ID-ness(数据差异性:字段中不同取值的数量/总行数)、Stability(数据稳定性:字段中出现频率最高且非空值的单元格数/总行数)、Missing(数据缺失率:该段中缺失的单元格数/总行数)指标都比较正常,反映出此分数据集用户数量足够、没有同一个用户的大量交易记录、数据分析均匀、无缺失数据,符合我们的期望。






  • 数据分布情况





http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0082bd62e12d18e048d7274f999605c8..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


数据分布均匀,数据质量较好。






  • 数据相关性





http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/29cf37d9a6852b99f99369f1908c36a6..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


可分析列与列之间的相关性,作为模型特征选择的参考。



其他特征的数据与用户id同理,此处不再赘述。接下来进行特征处理。





2)数据处理



a.RFM用户分群



利用AIWorks封装好的数据处理组件搭建RFM分层模型,计算每个用户的RFM参数,如下图左侧分支:



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/62ca77e8b6b976fd0cdf6113ee674131..gif
data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



· 聚合函数_F:基于6个月交易数据,对user_id(用户id)进行groupby,并对transcation(订单号)求nunique,得到每个用户的历史交易次数;



· 聚合函数_M:基于6个月交易数据,对user_id(用户id )进行groupby,并对price(商品价格)求sum,得到每个用户的历史交易总金额



· 聚合函数_R:基于6个月交易数据,对user_id(用户id )进行groupby,并对date(交易日期)取最大值,取得每个用户最后一次交易时间



· Python脚本:将上述组件计算的R、F、M值通过Python组件合并到一张表中,输出结果如下图所示:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/cccf090564de9fab951ea1160ed3b4c2..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




b.用户购买情况计算



右侧分支中,利用Python脚本进行数据处理:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/20f6c8674479adbf4f8d29e5817c56e5..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


· Python脚本_标签列:求每个用户每天的交易金额、以及是否进行消费、R、F、M值。是否进行消费作为这份数据集的标签列,用lable标识,当每天交易金额为0时,则label=0;当每天交易金额为>0时,label=1。





3)特征处理



一般算法建模中,特征处理包含:



(1)通用特征处理:如数据缺失值填充、数据采样、类型转化等;



(2)数值型特征处理:如归一化、标准化等;



(3)字符型特征处理:字符类型的字段不能作为模型的输入,需要将这类特征先数值化,如one-hot编码、label编码等。



在当前算法场景中的RFM分层模型、用户购买率预测模型中,我们采用的模型特征都是R(最近一次消费时间)、F(消费频率)、M(消费金额)3个字段,无缺失值,都是数值类型字段,暂无需做其他特征处理。





4)特征选择



特征选择一般需要根据具体的业务场景和专家经验,选择模型的特征列,且需计算特征与特征之间的相关性(高相关性的特征选择其中一个便好,否则不容易判断该模型的特征重要性),及特征与标签列之间的相关性(选择影响标签的特征,若特征对标签无显著影响,则无需选择)。





该算法场景中,将用户的原始属性转化成R、F、M值作为模型的特征输入。可分析一下特征之间的相关性:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/0b2c1603d249323df28d313c9517135b..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


特征间相关性较低,可作为模型输入。





知识点2:特征与标签



算法模型一般表达的是一个数学关系,即y(标签列)和x(特征列)的关系,y是模型的输出结果,x是影响模型的因素。如下图所示:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/012104d8fcf8c028ee92e7d9fefec7ae..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




5)模型选择与训练



a.RFM用户分群



由于在RFM分群模型的搭建中,历史数据没有标签列,即没有一个业务字段来表示该用户属于哪个群体,所以该算法问题是一个聚类问题,我们采用机器学习聚类算法中的KMeans聚类模型进行分群。



KMeans聚类模型以样本间距离为基础,将n个对象分为k个簇,使群体与群体之间的距离尽量大,而簇内具有较高的相似度。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/967a021f1e23587f01a02f2350bc3679..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




· KMeans聚类:模型进行数据处理,将用户分成3类,输出如下:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/28ef04817f948f1b3957155a8e0bc5de..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


b.用户购买概率预测



用户购买预测需要预测出未来用户是否会购买以及购买的概率,属于一个二分类问题,此处采用机器学习分类模型中的XGB分类模型进行用户分类。



XGBoost是经过优化的分布式梯度提升库,计算非常高效、且灵活与可移植性高。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/4986c6c0c34898632276284c591faef3..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


· Python脚本_训练集:将历史月的用户数据作为训练集



· Python脚本_测试集:将当月的用户数据作为测试集;



· XGB分类:用训练集进行模型训练;



· 预测:用训练好的XGB模型预测今天的用户是否会购买,以及购买的概率,模型运行结果如下:



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/62ca77e8b6b976fd0cdf6113ee674131..gif
data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



6)模型评估



采用模型评估组件评估模型的好坏。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/3d6c6aca2a688ec7bcecf0ef1fb17986..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


针对XGB分类模型,我们采用混淆矩阵和二分类模型评估组件进行模型评估,可查看模型的性能指标,如下图:




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/b908ce9fd4b83e298c4a0202653f5a9c..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/32bad1739496ad060f0bb91daa7ff8ac..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/688be2ed8794b5558016cec101e45adc..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




模型评估结果:



· 准确率:模型预测正确的结果,占所有样本的比例;



· 精确率:模型预测出正确的会购买用户/预测出的会购买用户(无论是否正确),来表示是否筛选出正确的结果,宁可没有预测出来,但不能预测错误。



· 召回率:模型预测出正确的会购买用户/真实的会购买用户,来表示模型识别的广度。



· F1值:综合反映精确率与召回率,F1越高,在精确率与综合率的表现越好。



· AUC值:AUC是ROC曲线的面积,AUC越高代表模型的区分能力越好



该模型的各项评估指标符合期望,可对外使用。





7)输出发券用户列表




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/002a538cddbf12965352fd2a06ce9e13..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==


· Python脚本_目标用户:将KMeans聚类模型划分出属于“1”类别(重要价值客户:购买金额高、购买频率高、购买时间近),且XGB分类模型预测出来的今天不会购买的用户筛选出来,针对这部分人群发放优惠券,进行定向营销,该组件输出的用户列表如下,共238个用户。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/10ed74f809e5e68a772ad743c5dd1ab1..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==



http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/d98d84b5f2713fbfed08b368c61c26cc..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




由此,便得出一个可定向精准营销的用户列表,可进行后续的营销活动,以此提升营销的准确率,实现ROI的最大化。





8)模型周期性运行



若该模型正式投入线上使用,可每天定时跑批,输出最新的RFM分群用户,以及该用户在明天是否会购买的信息,从而提供给业务人员进行差异化的营销。





9)模型在线预测



除模型周期性跑批之外,也可以把该算法模型进行pipeline部署,以数据API的方式对外提供服务。外部业务系统在线调用模型,模型预测出结果,实时返回给业务系统该用户是否会购买的结果。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/24b6d954cef8be4dc53b9af618c445ad..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




AIWorks-企业级算法开发平台



AIWorks是集可视化建模与交式代码编写于一体的企业级算法开发平台,支持从数据接入、算法建模、模型训练、任务运维到模型部署全链路流程,帮助企业快速构建高效、安全、稳定的分布式算法运行环境,提升算法服务能力。




http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/c0f9fc2e8a7f88254e0d615a8a3c2d30..png


data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==




算法挖掘项目持续深耕数据智能化应用领域,目前已交付金融、政府、制造、地产等多个行业,感兴趣的小伙伴欢迎联系。


0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群