浅析一种基于深度学习的商品复购推荐模型实现
本文主要讨论商品复购推荐问题,提出一种商品复购推荐模型的实现过程。基于深度学习的商品推荐问题的研究有很多,复购推荐的区别在于更加关注用户购买时序行为信息,通过历史订单交易时间分布和商品分布情况,对用户的再次购买行为进行预测。
二、模型选择
现有的基于深度学习的时序序列研究大部分基于RNN神经网络处理序列信息。但由于RNN存在梯度消失的问题,1997年由学者提出了LSTM长短时记忆网络,LSTM 是一种特殊的RNN模型,其中引入了权重的概念,每一层的输入作为下一层的输出,学习长时间的依赖信息。
因此,在时序问题研究中深受青睐。但是,由于LSTM 存在的依赖关系,导致基于LSTM 模型的计算并行性比较差。所以,CNN卷积神经网络再次回到研究者的视野中,在此基础上进行结构创新的TCN时序卷积神经网络更多地应用于时序研究的生产场景中。TCN 在处理大量的任务时比相同容量的循环卷积神经网络性能更好。TCN具有更灵活的接收域,可变的输入长度和训练所需更低内存的特点。本文将结合LSTM 神经网络模型和TCN网络模型,提出TLSTM时序卷积循环网络作为商品复购推荐模型。
**
2.1 TCN时序卷积网络**
TCN时序卷积网络的优点:
(1)内存占用率低。TCN不需要保存每步的信息,因此不需要在内存中占用大量的空间来存储历史时 序,因为它的卷积核是共享的。
(2)梯度稳定。梯度消失和梯度爆炸的问题对TCN影响很小,因为没有在不同时间节点共用参数的现象。
(3)并行性能力强。不受到像RNN那样必须顺序的计算影响,TCN具有很好的并行处理能力。
(4)感受野很灵活。可依据各异的应用场景来灵活地选择加权平均计算时权值大小、网络层级数等,感受野很灵活。
TCN时间卷积网络的缺点:
(1)在迁移学习领域的转换能力有些弱。原因在于不同领域的特征学习,通常需要处理的过往信息量是不同的,将一个处理较少信息量的模型应用于需要更多信息的长记忆问题时,效果可能不是很理想。
(2)单向结构的TCN适用于语音识别和语言合成领域,不大适用于文本处理的问题。文本处理大多是采用双向的结构。
(3)TCN尽管感受野很灵活,但是使用扩展卷积扩大感受野程度有限,相比于那些可以抓取任意长度信息的神经网络模型特性还有一定的差距。
2.1.1 因果卷积
下图直观地对因果卷积网络进行了展示,可以发现在某个时刻t,该时间点的值只取决于前一层这个时刻的值和比这个更早时刻的值。相比CNN卷积神经网络,因果卷积只有单向的结构且无法对未来的数据进行见。明显可
因果卷积网络
以看出前面的值是“因”导致了后面的值“果”,数据严格受到时间层面的约束,所以命名为因果卷积。
2.1.2 残差连接
残差连接(Skip Connect)在深度学习领域很常见,具体实现如下图所示。利用一个不是线性变化函数来说明一个模型的输入变量和输出变量,输入为X,输出为F(x),F是行为,通常包括了卷积、激活等操作。Skip Connect 的思想是针对一个新的输入X,输出结果虽然可以直接用G(x)表示但也可以将输出拆分为F(x)和X的线性叠加。这其中没有新的理论和公式,只是一种新的表达方式。然而,这却解决了深度学习网络训练中因层级较多导致的梯度消失问题。
三、数据集构建
分析该商品复购推荐系统的需求可以知道,数据需要涉及多个业务系统,分别有订单交易系统、商品信息系统、用户信息系统,需要分别对这些系统的数据进行清洗、抽取,处理一些不规则的数据或者不标准的异常数据。
(1)订单交易系统数据处理。订单交易OMS系统系统是一个新零售电商平台的核心系统,业务表众多,包括订单主表order_header,订单明细表order_detail,订单地址表order_address等,主要详细展示订单主表和订单详情,需要对这些表数据进行聚合、抽取,获得重购系统需要的订单交易数据表,最终得到经过ETL 抽取后的大宽表。
订单主表
order_no | order_tag | buy_userid | buy_username | discount | create_time |
订单编号 | 订单标记 | 买家id | 买家用户名 | 折扣金额 | 创建时间 |
mfy_time | order_status | pay_order_no | pay_money | buy_platform | product_amount |
变更时间 | 订单状态 | 外部支付编号 | 付款金额 | 购买平台 | 商品价格 |
订单明细表
order_detail_no | order_no | num | spu_id | sku_id |
订单明细编号 | 订单编号 | 数量 | 商品spu | 商品sku |
create_time | status | mfy_time | cat_id | seller_id |
明细创建时间 | 明细状态 | 明细更新时间 | 商品类目 | 卖家ID |
ETL后的订单信息表
user_id | order_code | series_id | cat_root_id | status | buy_mount | buy_day |
用户id | 订单编号 | 商品系列id | 商品一类目 | 订单状态 | 购买数量 | 购买时间 |
(2)商品系统数据处理。商品系统分别记录了商品类目、品牌、系列等各个维度的关系,主要关注的是t_sku 表和t_category表。抽取聚合后的宽表为商品名称为sku名称,商品id 为商品三级类目id。
表名称 | 含义 |
t_brand | 商品品牌信息表 |
t_brand_series | 商品品牌系列表 |
t_category | 商品类目信息表 |
t_sku_barcode | 商品sku条码关系表 |
t_spu | 商品spu信息表 |
t_sku | 商品sku信息表 |
t_spu_art | 商品sku货号关系表 |
t_category | 商品spu类目关系表 |
t_image | 商品图片信息表 |
ETL后的商品信息表
sku_id | spu_id | spu_name | cat_id | cat_name |
skuid | spuid | spu名称 | 类目ID | 类目名称 |
(3)用户信息系统数据处理。用户系统表结构相对简单,主要为用户详情信息表,因为本文研究商品复购推荐,所以针对刚注册不久的用户数据量大概率会比较少,会影响推荐模型的训练结果,所以剔除注册不满两个月的用户和用户账号状态注销的数据作为数据集。因为复购推荐不关心用户具体年龄性别等信息,所以经过ETL后的表只包括用户名和用户ID两方面信息,如表下表所示。
user_id | user_name | regist_time | status | age | sex |
用户id | 用户名 | 注册时间 | 账号状态 | 年龄 | 性别 |
ETL后的用户信息表
3.2 数据集生成模块
在训练商品复购推荐模型前需要对数据进行进一步处理,得到可靠的数据集,通过在上节ETL 返回的基础数据进行一系列处理得到最终模型训练需要的数据集。保证算法输入数据的品质,是提高算法质量的关键步骤。数据可能存在一些不规范的问题,如数据内容,不符合要求,存在异常数据等。因此,为了得到适用于算法使用的数据集,保证数据的高可用性和高品质,根据商品数据的特点和复购推荐模型的特点,针对订单详情表和用户信息表做数据预处理。
(1)处理具有异常行为的用户。分析用户的购买行为,例如有的用户只是重复购买同一种商品,却很少购买其他种类的商品。这些用户不同于正常用户的购买行为,很可能是抓取信息的爬虫留下的购买记录,或者是某些店家找人刷单的用户账号留下的购买记录。这两种用户都不具有实际购买分析的意义,在商品重购分析方面不具可参考性。另外,这些账号也不会关心重购推荐的结果。所以,在预处理过程种需要排除此类账号,防止这些不同寻常的账号数据干扰模型训练的可靠性。
处理某时段的异常购买行为。针对某一用户,可能在某一个时段,出现大量购买某一种类商品的行为,而这一时段可能是商品有某种促销活动,由此导致的集中的购买行为。这种数据的产生,往往是由于商家举办了某些促销活动,比如发放优惠券或者满减活动,用来刺激用户进行消费。这部分的购买行为往往是价格方面因素导致的,不能代表用户的真实购买意愿,导致重购该商品的可能性具有太多不确定因素。因此,预处理过程要根据这些促销活动的时间信息,剔除数据中的这一类集中大量购买商品的数据,使重购推荐算法可以真正根据用户的意愿预测重复购买概率。
(2)处理用户重复的行为。用户在平台购上商品,可能会存在较小的时间间隔再次购买的重复行为。这种行为很可能是用户在第一次遗忘了某件商品,后面立刻补购,在预处理数据集中,要以天为维度把订单信息打平,作为一个订单的购买商品序列。这样可以减少重复订单信息,同时也最大程度地保证复购推荐的有效性。
四、模型构建
LSTM在RNN循环神经网络基础上,采用权重的概念来选择处理某个时间步长数据,在时序问题建模中得到了很好的效果。但LSTM模型中的遗忘门会丢弃某个历史时间数据,也就无法在预测时针对某个时间以前的全部时间步长信息进行整体检索,在一定程度上这个特点会影响商品重购推荐的准确性。此外,LSTM模型每一层的输入都依赖上一层的输出,这就意味这上一层运算完毕才能进行下一层计算,导致并行计算能力很不理想。时序卷积网络TCN模型通过一维全卷积,可以检索所有的历史输入数据弥补LSTM遗忘门的缺点,可以使隐藏层的长度与输入层相等。
所以,本文研究新零售领域重购预测是将TCN模型与LSTM模型的适用场景和优点进行提取,基于这之上产生的本文针对新零售领域的重购推荐模型,简称TLSTM,如图下图所示。
TLSTM时序卷积循环网络模型
4.2 向量表示层
生产系统数据经过ETL和进一步处理后产生的数据集已经在逻辑上最大限度保证来数据的规整性和合理性。但是这些数据并不是重购预测模型所能识别的数据,所以需要进一步对数据集进行处理,生产模型能够直接计算的输入数据。通常输入数据为一维矩阵向量,因为商品ID和用户ID都是没有规律的离散数据,所以本文采用一位有效的方式对不同的商品ID和用户ID进行编码,基于二进制来表示,例如想要表示商品ID为1的商品,输入向量就是第一个位置元素为1,其余位置元素都为0。数据集预处理的具体流程如下图所示。
首先读取数据集中用户历史订单购买记录,然后转化为<用户,商品>列的格式,最后将订单商品序列中每一种商品用向量表示。其中将用户历史购买商品序列用向量表示的方法如图4-3所示。
4.3 特征学习层
本文提出的TLSTM重购推荐模型的特征学习层是由LSTM模型和TCN模型的特征学习相结合,通过共享embedding层与输出层实现的。下面分别介绍LSTM模型特征学习的优缺点,以及LSTM与TCN模型相结合在特征学习上的优点,阐明TLSTM复购预测模型的理论根据。
4.3.1 基于LSTM的特征学习
首先在用户再次购买预测中数据集样本都是用户和商品共同组成的二元组,而且复购推荐的性质决定了我们只考虑用户买过的商品,即用户与商品组成的二元组中,该商品一定是这个用户购买过的,否则用户与该商品组成的二元组是无效的。本文将订单详情表中的每一条记录都定义为一个时间步长,所以时间步长与商品数量无关。单个时间步长设计,包含用户ID与商品ID组合转换的向量、表示当前订单与上一次订单时间间隔的向量,表示当前订单商品是否在上一次订单中的向量,具体说明如下表所示。
说明 | |
嵌入向量 | 用户ID向量 |
商品ID向量 | |
当前订单具体信息 | 距前一订单时间间隔 |
当前订单交易发生时刻 | |
当前订单交易发生星期 | |
前一订单的统计信息 | 该商品ID是否在前一订单中购买 |
前一订单中的商品数量 | |
前一订单中被复购的商品数量 |
单个时间步长的特征描述说明
一个时间间的输入输出相互依赖,时序信息关键,这是商品复购模型的典型特点。各个时间节点的输入包含了商品ID的向量,另外还包含与交易行为相关的其他信息,比如历史订单间隔时间信息。
基于LSTM的再次购买行为预测模型信息提取更为全面和高效:首先,模型在学习用户历史订单中商品序列信息的基础上能够获取用户历史订单的间隔时间。其次,该模型能够基于输入信息挖掘出与交易行为相关其他信息,比如商品在订单中的时间分布。
**
4.3.2 基于LSTM与TCN的特征学习**
TCN能通过膨胀卷积能够达到短时间摘取较长历史信息的效果,在复购推荐问题上能够不断检索所有的历史时间步长信息。而且该模型能做到不再依赖高级层的存储信息进行重购预测,在用户间的属性关联特征学习效率得到了提升,类似的商品间的属性关联特征学习也比之前高效。在TLSTM模型中,LSTM网络和TCN网络在Embedding 层进行聚合,同时输出层也经过聚合。二者首先各自接受输入向量来独立产生各时间节点的输出,随后将二者的输出向量按时间维度进行聚合,聚合后的结果为最终的预测推荐商品序列。用于进行训练和预测。TLSTM能够很好的利用二者的偏好,取长补短,有效的解决商品重购过程中的问题,对用户周期性购买行为的特征学习具有很好的效果。
(1) 输入输出。hi 表示LSTM在任意i时刻的输出向量。ci表示TCN在任意i 时刻的输出;根据公式,oi 表示TLSTM网络在任意i时刻的输出。
有权重的序列损失函数。通常平均序列损失函数是序列相关课题模型训练的首选函数,就是先计算各自时间输入向量上的损失,然后计算所有时间输入向量损失的均值。在重购模型训练中,不会一刀切统一取平均损失,而是使用权重。也就是公式中的W,每个时间节点的损失都会有一个权重,根据权重设置的不同,强化或者弱化某个时间节点的损失。本文仍采用大部分模型使用的 Softmax损失函数,另外每个时间节点向量上的损失权重都设置各不相同的值。本文重购推荐模型将时间步长前6个损失权重设置为0,即不考虑前六步的损失,达到消除无效损失的目标。
**4.3.3 模型输出预测层
**
代表用户历史购买商品记录的输入向量源自处理后的生产数据集,归一化处理后输入到重购模型中,经过本文重购模型Embedding层处理后,再使用Softmax作为输出层的激活函数,将多分类的输出值转换到0与1之间,得到各个的商品重购推荐的概率结果,如下图所示。预测复购的商品和概率信息以输出向量表示,每个向量元素的下标表示商品的ID,每个元素的值表示商品预测会被重购的概率,按照概率依次排序从高到低,第一个元素是最大概率会重购的商品,依次类推,商品重购概率逐渐降低。
商品输入输入表示
五、总结
本文的推荐模型主要是通过已产生交易记录对用户的购买习惯进行提取,最终构建了复购推荐模型。但交易订单记录只是用户最终的一个购买结果,还有其他一些方面数据能够更加直观的反映出用户的购买偏好,例如购买评价和浏览某个商品的时长,这些用户行为的上下文信息某种程度能更确切地反映出用户的购买意愿。在今后的学习中,相信能够接触到更优的深度学习模型,在保证推荐效果良好的前提下能够有效降低运算时间,提高用户实际使用体验。
*文/张洁
关注得物技术,每周一三五晚18:30更新技术干货
得物技术
要是觉得文章对你有帮助的话,欢迎评论转发一键三连~