来源: 早起Python
作者: 萝卜
推荐系统将成为未来十年里最重要的变革
社会化网站将由推荐系统所驱动
--- John Riedl明尼苏达大学教授
01前言
智能推荐和泛的营销完全不同,后者是将产品卖给客户作为最终目标;而智能推荐是以“客户需求”为导向的,是给客户带来价值的。常见的如淘宝的 “你可能还喜欢”,亚马逊的 “购买此商品的用户也购买了” 便是实例。本文就将详细介绍如何用Python实现智能推荐算法,主要将分为两个部分:
02常见的推荐系统与算法
常见的推荐系统分类有:
“ 京腾 ” 合作构建用户画像标签图
常见的推荐算法有:
本文将专注于理解起来最容易且又十分经典常用的基于关联规则的购物篮推荐。商品的关联度分析对于提高商品的活力、挖掘消费者的购买力、促进最大化销售有很大帮助。其建模理念为:物品被同时购买的模式反映了客户的需求模式,适用场景:无需个性化定制的场景;有销售记录的产品,向老客户推荐;套餐设计与产品摆放。
03购物篮简介
问:什么是购物篮?主要运用在什么场景?
答:单个客户一次购买商品的综合称为一个购物篮,即某个客户本次的消费小票。常用场景:超市货架布局:互补品与互斥品;套餐设计。
问:购物篮的常用算法?
答:常用算法有
问:求出互补品与互斥品后对布局有什么用?
答:根据关联规则求出的商品间的关联关系后,可能会发现商品间存在强关联,弱关联与排斥三种关系。每种清醒有各自对应的布局方式。
根据购物篮的信息来进行商品关联度的分析不仅仅只有如上三种关系,它们仅代表商品关联度分析的一个方面(可信度)。全面系统的商品关联分析必须有三度的概念,三度包括支持度,可信度和提升度。
04关联规则
直接根据关联三度所定义的概念去理解会有不少难度,尤其是可信度喝提升度中的“ 谁对谁 ”的问题。其实可以换一种方式来看:
为方便理解这些规则,我们通过下面五个购物篮的例子来练习一下
不难发现,支持度的分母都是5,也就是购物篮的数量,分子则是选取这个规则中的所有商品同时出现在一个篮子的次数。以A->D为例,同时包含A和D的篮子有2个,总的交易数量(篮子总数)有5个,所以规则A->D的支持度为2/5;有商品 A 的篮子个数为3,在这三个篮子中,其中2个篮子又包含商品D,所以该规则的置信度(可信度)为2/3。有关关联规则,还有以下两个问题想补充:
问:仅看支持度和置信度是否靠谱?
答:看一个案例:食堂卖饭,1000份打饭记录中,买米饭的有800人次,买牛肉的有600人次,两个共同买的有400人次,那么可以得出对于规则(牛肉 - > 米饭)Support=P(牛肉&米饭)= 400/1000=0.40;Confidence=P(米饭|牛肉)=400/600=0.67置信度和支持度都很高,但是给买牛肉的人推荐米饭有意义吗?显然是没有任何意义的。因为无任何条件下用户购买米饭的概率:P(米饭)=800/1000=0.8,都已经大过买了牛肉的前提下再买米饭的概率 0.67,毕竟米饭本来就比牛肉要畅销啊。
这个案例便引出了提升度的概念:提升度 = 置信度/无条件概率=0.67/0.8。规则 X(A→B) 的提升度为 n 时:向购买了 A 的客户推荐 B 的话,这个客户购买 B 的概率是 TA 自然而然购买 B 的 n × 100% 左右。生活理解:消费者平时较少单独购买桌角防撞海绵,可能偶尔想到或自己小孩碰到的时候才会想起购买,如果我们在桌子(书桌饭桌)的成功下单页面添加桌角防撞海绵的推荐,则很大程度上可以提高防撞海绵的销量。这也符合我们希望通过畅销商品带动相对非畅销商品的宗旨。
问:除了公式的含义,关联三度(支持度,置信度,提升度)还有什么关联吗?
答:可以这样理解:
所以 1.0 是提升度的一个分界值,刚才的买饭案例中给买了牛肉的用户推荐米饭的这种骚操作的提升度小于 1 也就不难理解了。另外,高置信度的两个商品(假设达到了 100%,意味着它们总是成双成对的出现),但如果支持度很低(意味着份额低),那它对整体销售提升的帮助也不会大。
05基于Apriori 算法的Python实战
由于有关Apriori等算法的研究已经很成熟,我们在用Python实战时无需一步一步计算,直接调用现有函数即可,主要是要明白背后的原理与不同算法的使用场景与优劣比较。
首先导入相关库并进行数据探索性分析
import pandas as pd import numpy as np df = pd.read_csv('bike_data.csv', encoding='gbk') df.info(); df.head()
数据参数解释
接着来看看商品的种类
print(f"数据集中共有{df['Model'].nunique()}种商品") model_names = df['Model'].unique() print("商品名分别为:") # 5 个为一行显示 for i in range(0, len(model_names), 5): print(model_names[i:i+5])
再来看看最畅销的 15 种商品
再进行一些简单的可视化
top_15 = grouped.sort_values(by='count', ascending=False).head(15) plt.figure(figsize=(8, 6)) sns.barplot(data=top_15, x='count', y='Model') plt.grid(True)
首先生成购物篮,并将同一个客户购买的所有商品放入同一个购物篮,需要提前使用pip install Apriori安装,之后我们使用 Apriori 包中的 dataconvert 函数,下面是需要传入的参数解释
注意:需要注意传入的参数类型,只要对了,直接套用就不是什么难事
import Apriori as apri # 需要稍微等待一下 baskets = apri.dataconvert(arulesdata=df, tidvar='OrderNumber', itemvar='Model', data_type='inverted') # 返回的购物篮是一个大列表,大列表中的每一个小列表表示一个篮子 # 购物篮个数刚好等于数据集中的客户数量 type(baskets), len(baskets) == df['OrderNumber'].nunique() # (list, True)
现在查看前五个购物篮中的物品
现在生成关联规则,根据排列组合,可知这些交易将会产生 21255×21254÷2 这么多个关联规则。首先就要满足支持度的要求,太小则直接被删去,支持度的大小可根据关联规则的多少调整 如果关联规则很少,可根据实际情况放宽支持度的要求。相关参数说明:
这里,minSupport 或 minConf 设定越低,产生的规则越多,计算量也就越大
结果说明: 以 result 第一行为例
现在我们筛选互补品和互斥品,代码如下
# 互补品 # lift 提升度首先要大于1,然后再排序选择自己希望深究的前 n 个 hubu = result[result['lift'] > 1].sort_values(by='lift', ascending=False).head(20) # 互斥品 huchi = result[result['lift'] < 1].sort_values(by='lift', ascending=True).head(20) hubu.head(5) # 结果也合情合理
对结果简单分析一些,不要期望每个规则都有意义,要结合业务思考,比如竞速型赛道自行车与运动水壶互斥实属正常,竞速讲究轻量化,还配个水壶干什么... 比如山地车配一个竞速公路车用的运动型头盔...互斥产品则是成对出现的!
需要结合业务需求
# 注意数据类型,frozenset,需要拆一下 result['lhs'][1], type(result['lhs'][1]) # (frozenset({'山地车内胎'}), frozenset)
以获得最高的营销相应率为目标
如果一个新客户刚刚下单了山地车英骑这个产品,如果希望获得最高的营销响应率,那在他付费成功页面上最应该推荐什么产品?
目标:获得最高的营销响应率
以最大化总体销售额为目标
如果一个新客户刚下单了山地英骑这个产品,如果希望最大化提升总体的销售额,那么在他付费成功的页面上应该推荐什么产品?
目标:最大化销售额
再次重申提升度通俗含义:提升度是相对于自然而然购买而言,A对B的提升度为4.0的理解如下:向购买了A的用户推荐B,则该用户购买B的概率是该用户单独(即自然而然的购买)购买B的概率的 400% 向购买了A的用户推荐B,则该用户购买B的概率比该用户单独(即自然而然的购买)购买B的概率高300%!
用户并未产生消费,为其推荐某样商品
最后总结一下,基于关联规则的 Apriori 算法是智能推荐领域十分经典的应用之一,简单易上手。其实推荐领域的难点不一定在于算法,而在于过大的客户量与其产生的数据,所以一般到了最后用的都是混合推荐。至于更深层次的序贯模型与协同过滤,几乎没有人使用 Python 或 R 来实现,大部分都是使用分布式框架如 Spark,后续也会推出相关文章。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数据驱动决策成为商业常态的今天,数据分析师这一职业正迎来前所未有的机遇与挑战。很多希望转行或初入职场的人士不禁询问:数 ...
2024-12-25数据分析师,这一近年来炙手可热的职业,吸引了大量求职者的注意。凭借在大数据时代中的关键作用,数据分析师不仅需要具备处理数 ...
2024-12-25在当今数字化变革的浪潮中,数据分析师这一职业正迎来前所未有的发展机遇。回想我自己初入数据分析行业时,那种既兴奋又略显谨慎 ...
2024-12-25在当今信息爆炸的时代,数据已经像空气一样无处不在,而数据分析则是解锁这些信息宝藏的钥匙。数据分析的过程就像是一次探险,从 ...
2024-12-25在职场上,拍脑袋做决策的时代早已过去。数据分析正在成为每个职场人的核心竞争力,不仅能帮你找到问题,还能提供解决方案,提升 ...
2024-12-24Excel是数据分析的重要工具,强大的内置功能使其成为许多分析师的首选。在日常工作中,启用Excel的数据分析工具库能够显著提升数 ...
2024-12-23在当今信息爆炸的时代,数据分析师如同一位现代社会的侦探,肩负着从海量数据中提炼出有价值信息的重任。在这个过程中,掌握一系 ...
2024-12-23在现代的职场中,制作吸引人的PPT已经成为展示信息的重要手段,而其中数据对比的有效呈现尤为关键。为了让数据在幻灯片上不仅准 ...
2024-12-23在信息泛滥的现代社会,数据分析师已成为企业决策过程中不可或缺的角色。他们的任务是从海量数据中提取有价值的洞察,帮助组织制 ...
2024-12-23在数据驱动时代,数据分析已成为各行各业的必需技能。无论是提升个人能力还是推动职业发展,选择一条适合自己的学习路线至关重要 ...
2024-12-23在准备数据分析师面试时,掌握高频考题及其解答是应对面试的关键。为了帮助大家轻松上岸,以下是10个高频考题及其详细解析,外加 ...
2024-12-20互联网数据分析师是一个热门且综合性的职业,他们通过数据挖掘和分析,为企业的业务决策和运营优化提供强有力的支持。尤其在如今 ...
2024-12-20在现代商业环境中,数据分析师是不可或缺的角色。他们的工作不仅仅是对数据进行深入分析,更是协助企业从复杂的数据信息中提炼出 ...
2024-12-20随着大数据时代的到来,数据驱动的决策方式开始受到越来越多企业的青睐。近年来,数据分析在人力资源管理中正在扮演着至关重要的 ...
2024-12-20在数据分析的世界里,表面上的技术操作只是“入门票”,而真正的高手则需要打破一些“看不见的墙”。这些“隐形天花板”限制了数 ...
2024-12-19在数据分析领域,尽管行业前景广阔、岗位需求旺盛,但实际的工作难度却远超很多人的想象。很多新手初入数据分析岗位时,常常被各 ...
2024-12-19入门数据分析,许多人都会感到“难”,但这“难”究竟难在哪儿?对于新手而言,往往不是技术不行,而是思维方式、业务理解和实践 ...
2024-12-19在如今的行业动荡背景下,数据分析师的职业前景虽然面临一些挑战,但也充满了许多新的机会。随着技术的不断发展和多领域需求的提 ...
2024-12-19在信息爆炸的时代,数据分析师如同探险家,在浩瀚的数据海洋中寻觅有价值的宝藏。这不仅需要技术上的过硬实力,还需要一种艺术家 ...
2024-12-19在当今信息化社会,大数据已成为各行各业不可或缺的宝贵资源。大数据专业应运而生,旨在培养具备扎实理论基础和实践能力,能够应 ...
2024-12-19