最近正在研究个性化推荐相关的知识,本文以电商平台为例,逐步探讨有关个性化推荐的知识。 研究一个事物,首先要了解这个事物,才能深刻理解它。个性化推荐系统包括:用户、推荐平台以及推荐内容三个方面。如图所下: 上图可知,在一个推荐系统中,平台是内容的载体,同时收集了用户的一些属性和行为,用户是内容的消费者,完成浏览、购买等行为,同时也产生了PV、订单量等指标。内容是用户和平台之间的桥梁。 先从网站架构方面来分析推荐系统 方便大家进一步了解,本文先从网站架构方面来分析推荐系统,网站分前台和后台。下面着重从前台和后台逐步探讨。 1.前台 前台通过HTML搭建推荐内容的基本框架,通过CSS装饰被推荐的内容,通过JS完成了用户和平台的交互。这是技术底层知识,需要前端开发工程师参与。 如何设计前台推荐内容样式、摆放以及用户体验等,需要产品经理的参与,文字选择以及图片颜色等设计,需要UI设计人员参与。前台有效地展示了推荐的内容。 对于用户而言,推荐的内容无非是符合需求或者不符合而已。所以说,前台的核心是将推荐的内容按照某种排列、颜色搭配等方式展现给了用户,当然,有一些内容性网站(今日头条等)还加入了交互行为(例如,不感兴趣、重新新闻等标签),以便完善推荐算法。 2.后台 后台主要完成相关逻辑的处理,例如,用户A在前台提交了报名表单。后台将会处理来自前台的表单。具体流程: 用户在前台完成表单的填写(form表单)→ 提交给以PHP等结尾的后台文件(通常用action=".php’)→ 操作数据库(增、删、查、改等操作) 同样,推荐系统是基于数据中的用户表和商品表,通过表与表进行某种关系(例如通过潜在因子算法),给用户推荐感兴趣的商品。后台的核心在于处理用户和商品之间的关系,给用户和商品构建画像,将画像与画像建立关系,进而构建推荐系统。 以上从网站架构分析的,主要目的让用户了解整个推荐系统底层架构是什么,方便从宏观方面了解。下面,本文从推荐系统发展史深入探讨。 再从推荐系统发展史深入探讨 1. 单因子推荐 单因子推荐是什么?也就是整个推荐系统基于某个核心因子给用户推荐。单因子推荐分为被动推荐和主动推荐两种。 (1)被动推荐 所谓被动推荐就是在用户参与下而产生的某种结果。例如,淘宝网的按照销量推荐以及价格从高到低等就是按照单因子推荐,用户点击按照销量推荐,就会看到销量从高到低商品列表(具体技术实现是这样的:用户点击按照销量排序-触发点击事件(事件内包含后端代码)-操作数据库(select 语句)-结果渲染到前端)。 如图1,淘宝按销量从高到低所示: 图1 淘宝从高到低排序 当然,这种推荐是被动推荐,需要用户参与后(例如,点击按价格从高到低排序,PHP或其他后端语言操作数据库,进而返回值到前端,当然,个别网站不需要后端参与,在客户端将结果缓存),才可以看到排序结果。 (2)主动推荐 除此之外,还有基于单因子的主动推荐。常见的热销排行榜,是基于销售量这一因子对商品在某段时间内排序(当然,热销排行榜可能还会牵扯到商品浏览量、好评量等因子,这个会在多因子推荐细说)。如图 2 中国轿车销量排行榜(部分截图): 图 2 中国轿车销量排行榜(部分截图) 图2汽车销量排行榜是基于10月这一时间刻度对中国轿车销售数量而进行的排名。 以上是基于单因子而进行的推荐,分为主动和被动两种推荐模式。这种推荐只是基于商品属性(销售量、浏览量、点击量等维度)而给用户进行的推荐,不过,在一定程度上会导致"马太效应’,使得销售量好的商品获得更多的流量和销量。随着个性化推荐技术的发展以及用户消费行为逐渐改变,一些不太常见或销售量低的商品反而成为用户的喜爱,于是,如何结合商品属性和用户属性(性别、年龄、职业、收入以及偏好等)构建用户和商品画像,给用户推荐感兴趣的商品是下文着重研究的重点。说了单因子推荐,接着说多因子推荐。 2. 多因子推荐 所谓多因子推荐就是基于多个因子而进行的推荐。多因子推荐同样分为基于商品自身的多因子推荐和基于商品和用户属性的多因子推荐两种。同样以电商为例(本人过往工作主要在电商企业,所以就从熟悉的领域切入了),商品首页通常有综合排行榜(基于商品自身属性(销量、好评等多因子)构建商品画像)和猜你喜欢(基于商品属性和用户属性而个性化推荐)两种,这也是下文研究的重点。 (1)基于商品自身属性多因子推荐 所谓基于商品自身属性多因子推荐,仍是以商品为推荐核心,构建商品画像,例如,商品包括月销售量20万、化妆品、价格400-600、月PV 30万等属性,可为其打上热销品标签。当然,这样看起来比较定性化,为了方便大家了解这一过程,我细说构建商品画像。 为了研究方便,仍以上文商品为例,影响商品的因子有销售量、价格、月PV、好评,差评等(注意:上述指标本文并没有做线性回归分析,正常情况下,需要对各个指标做线性方程回归分析,确定各个指标具有独立性后,再做权重分析),假如,销售量月20万,权重为1,价格400-600,权重为0.3,月PV为30万,权重为0.4,好评数为4万,权重为0.6,差评为3000,权重为0.7,根据指标值*权重相加得出一个商品综合值,根据其对商品排序。如表1 因子权重排行榜 表 1因子权重排行 首先,计算综合权重值,商品综合权重值=销售量20万*1+价格500(取中间值)*0.3+月PV30万*0.4+好评数4万*0.6+差评数*0.7 然后,将计算出来的数值保存到数据库中,然后可根据sort、冒泡等排序算法对商品进行排序。这是一种比较简单的推荐方式,通过对多因子转化单因子进行排序,提升排序效率。不过这种方法也存在一些需要注意的地方: 1)因子权重如何确定? 目前常见的是头脑风暴法和机器学习(数据建模)两种方式。所谓头脑风暴法就是产品经理或运营等人员根据自己经验确定各个指标确定权重大小,上文中各个权重大小就是我根据自身经验确定的。这种方式很直接,不过在准确度方面还存在一定的问题。另一种就是机器学习方法了,也就是对各个数据建模,确定各个因子的指标大小,比较常见的数据建模方式采用SPSS主成分因子分析法或用Python数据建模,进而确定各个因子的权重大小(本文从宏观方面阐述,下篇文章将着重论述如何采用SPSS主成分分析以及如何用Python数据建模)。 2)如何处理指标值和权重值? 确定好各个因子权重后,如何处理指标值以及权重值是需要面临的问题。通常两种方式: 数据加权:上文所列举的事例就采用了数据加权模式,这种模式较为简单,不过,在实际工作中往往存在较大偏差。 直接建模:就是将得到的指标值和权重值直接建模,得出各个商品对应的数值,然后通过sort、冒泡等排序算法对商品排序,输出到前台。 基于商品自身属性多因子推荐仍没有将用户属性加入到推荐系统中,往往会导致一定程度上"马太效应"。下文将讲述如何将用户属性和商品属性结合起来,根据用户画像个性化推荐商品。 (2)基于商品和用户属性个性化推荐 既然是基于用户画像推荐,那么,在推荐之前首先要对用户建立用户画像。什么是用户画像?用户画像也被称为人物角色,或者用户特征,是真实用户的虚拟代表,是建立在一系列真是数据之上的目标用户模型。如何建立用户画像?主要分为以下步骤: 获取用户数据:获取数据的方式主要有问卷调查、SDK或日志系统等方式。 数据处理(整理、清洗等工作):数据处理的过程主要是对数据整理、清洗等过程,主要处理一些缺失或不正确的字段。 数据建模(定性):数据建模是创建用户画像的核心部分。既然是数据建模,那么就从数据开始研究,用户数据包括静态数据和动态数据。 静态数据主要包括用户基础属性:年龄、性别、城市、工作等属性。 动态数据主要是用户的行为特征:频繁浏览男装频道、喜欢去知乎、收藏很多手机店铺等。 有了这些数据后,如何建模? 针对静态属性可以通过描述性分析,给用户打标签。动态属性可通过 WHO、WHEN、WHERE以及WHAT方式给动态数据打标签。 如何构建用户画像,将在以后的文章中着重论述。 既然知道了如何构建用户画像,那么,我们就可以以表格形式展现出来。表2 某用户画像标签。 表2 某用户画像标签 同样,我们要对商品构建商品画像,表3为耐克鞋—商品画像标签。 表3 耐克-商品画像标签 确立好用户画像标签和商品画像标签后,下一步需要针对用户和商品建立用户-商品模型,表4 用户-商品模型 表4用户-商品模型 确立好相应地用户-商品模型后,下一步可运用欧几里得度量等算法对用户-商品模型建模。 注意:因为这张图是二维的,所以在同一时间内你只能看到两项评分,但是这一规则对于更多数量的评分项而言也是同样适用的。 通过以上图形制作,可以分析出相应用户-商品的可视化偏好,进而针对用户做个性化运营和分析。