最近做了件有意思的事情,顺便玩了一把强化学习。事实上,强化学习是决策智能,图像、语音、文本是感知智能,我觉得强化学习还可以玩5年以上。以前我也就看看强化学习的论文,跑跑游戏demo的,最近玩了一把落地。分享给大家。
首先明确下目标。
优惠券谁都会发,当初做这个项目的时候,小姑娘都说这哪需要啥算法?事实上,发放优惠券跟商品定价是一个类似的问题。存在以下几大疑难杂症:
1) 如何让不想买东西的买家买东西。刺激消费。
2) 如何让只想买100块钱东西的买家买200块东西。
3) 如何区分有强购买欲望的买家,这样的买家不要刺激消费,不要发coupon。
4) 有的人100减10才消费,有的100减5就消费,如何提高优惠券发放的ROI?
没有算法瞎发优惠券导致的问题是:我本来要买2000块的东西,你给我发了50减3块,感觉优惠额度太低了;我本来就要买50块的东西,你正好给我发了50减3的,没什么刺激,感觉就捡了个便宜;我本来就要买200块的东西,你发了10000减200的,我也用不了;我本来就不买东西,你们搞大促我过来看看,发现领优惠券太麻烦了,这个券只能在那个地方消费,浪费精力。
当然,这些都是业务上的痛点。解决这些痛点,技术上的挑战有以下方面:
1) 客单价是不能预测的。因为买家今天买鞋子,明天买包包,后天买手机,客单价跨度大。
2) 有的人100减10还是减5,这个没有监督信号,根本无从学起。
3) 怎么样发个靠谱的优惠券,能刺激消费,是门玄学。不知怎么建模。让买100块钱的买家花200块?
为了解决这些问题,我们构建了两层模型:
感知层:通过大数据挖掘,预测客单价和发放券的额度。当然,实际落地
还有预测在什么页面发放coupon更合适。
决策层:感知层生成的是一系列的coupon,需要根据实时数据动态调整。动态决策。这里玩了下强化学习。这个搜索树其实比较浅,但怎么说也是落地到实际商业场景里了。
接下来讲具体实现的技术细节。
整个项目的架构图流程是:买家在app上浏览商品,大数据团队通过flink采集实时数据流,统计好后推送到AI算法这边,同时,业务的java服务Q根据当前用户和需要发券的用户情况,调用我的实时在线python服务W,W给Q吐coupon信息,Q服务把数据通过消息队列或者其他方式传送到APP端。
算法层面
感知器:
我们按天(或者相邻2天或3天为单位)统计总订单金额,然后每个人聚类生成多个可能客单价,例如,一个人可能有[30,200,800,1000,2000,5000]。实际上,我们还分了类目,因为每个类目的客单价不一样,例如手机类目跟鞋子类目。
接下来,最关键的是确定额度了。
满减优惠券额度的确认是没有监督信号的。当然一开始有一个业务指定的最高限额,超过最高限额不挣钱的话发券没意义。然后,根据这个最高限额乘上一个比例系数。
有一个法子是根据核销券的概率预测一个值,把这个值当系数。但是这有个问题:历史上发的券都是逢300减20,满500减30这种整数的券,而没有510减31或者380减24这种,因为根据这种简单人工指定的整数设定的券建模,来预测一些从来没有出现过的优惠券门槛和额度的核销概率,是不靠谱的,两个分布不是同一分布。
我们首先构建了一个优惠券领取和核销的数据集,在这个上面可以训练一个核销的分类模型,然后将训练好的分类模型通过KOE算法转成一个评分系统,历史上那些P2P网贷公司的信用评分就是类似来的。这个评分系统建立好后,调整券的额度和门槛,这个人得到的分数会不一样,好比一个人贷款的额度不同,违约的风险也不一样。
OK。这样建立起了一个优惠券列表[100,3;500,20….],同时,
实时决策智能:
接收到flink里面的实时浏览数据后(事实上,大数据团队把实时数据存入了缓存,这样能拉长评判决策的时间窗口),构建了一个决策系统:
1、 状态条件是用户浏览商品的类目,浏览商品的价格和起订量,用户过往在该类目下的行为,用户历史的客单价。这些都是输入数据。
2、 Action就是发什么样的券。发还是不发。一个输出。
3、 反馈机制:用户对发放的券直接关闭是负反馈,用户领取是正向激励,用户领取未核销是负反馈,用户领取核销是正激励。
4、 如果用户没有领券,第二天来的时候,会根据第二天的实时行为和Model得到的反馈信号,去离线生成的优惠券列表中再匹配一个更贴切的优惠券。
产出
模型建立好后,效果还是非常明显的。整个GMV-ROI从30提升到了60,即之前需要花10块钱才能得到300美元交易量,现在10块钱能得到600美元交易量了。优惠券核销的比例也从5%提升到了8%,目前还没到优惠券过期的日子,预计后续还会有一波冲击消费。有几个明显凑单的订单
满减券,第一列是门槛,第二列是优惠额度,第三列是订单量,第四列是客单价。这个钱都是美元,客单价还是很高的,对不。
写了整个项目的思路,希望能帮助到大家。