百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

探索推荐系统(附R语言实战案例) 探索推荐系统

bigegpt 2024-10-12 06:42 4 浏览

引言

在生活中我们怎样给别人推荐呢?是根据我们过去的经验。

现在想象一下,如果现在在现实生活中我们依据数据做我们及时的推荐会怎么样?首先,我们会感觉像一个明智的建议者。其次,我们不再是人类。因此,我们的目的是构建聪明的软件,这个软件要能给我们提供一些令人信服的推荐。

当我们访问像亚马逊、Netflix、imdb等网站时,我们下意识的暴露在推荐系统中。很显然,他们已经变成了网上营销不可缺少的一部分(在线推销产品)。我们在这里对他们做一下进一步的了解。

在这篇文章里,我已经利用了一个真实生活的例子解释推荐系统的工作方法,就是要告诉你不局限于在线营销。而且,通过在R中的实际练习,我们会学习它的各种各样的类型。“推荐引擎&推荐系统”这个短语已经被互换的使用了。不要混淆!

银行的推荐系统-举例

现在,每个企业都充分利用他们定制版本的推荐系统。我们以银行为例。

银行X想要利用交易信息来给现有的信用卡和借记卡用户提供定制的优惠。下面是这个问题的分析最终状态:

顾客Z走进一个披萨店。他通过银行X的卡付了食物的账单。通过过去的交易信息,银行X知道顾客Z在吃完披萨后喜欢吃一个冰淇淋。利用在披萨店的交易信息,银行已经定位了顾客的具体位置。接下来,它找到了5个离顾客足够近的冰淇淋店,其中3个和银行有联系。

这是很有趣的部分。现在,这里是和冰淇淋店的协议:

商店1:银行利润-$2,顾客花费-$10,顾客选择的可能性-20%

商店2:银行利润-$2,顾客花费-$10,顾客选择的可能性-20%

商店3:银行利润-$5,顾客花费-$12,顾客选择的可能性-20%

商店4:银行利润-$6,顾客花费-$12,顾客选择的可能性-20%

商店5:银行利润-$4,顾客花费-$11,顾客选择的可能性-20%

我们假设顾客买冰淇淋的需求和冰淇淋价格是均衡的,因此顾客纠结于是花额外的钱来满足他的需求还是买便宜点的冰淇淋。银行X想要顾客去商店3、4或者5(更高的利润)。如果给他一个合理的协议,它能提高顾客花费的数目。我们假设折扣总是整数。现在,期望值是

期望值=20%*[2+2+5+6+4]=$19/5=$3.8

我们能通过打折提高期望值么?商店(3,4,5)的花费变化:

商店3:花费增加了5%多$1的折扣,增加了7.5%多$2的折扣,增加了10%多$3的折扣

商店4:花费增加了25%多$1的折扣,增加了30%多$2的折扣,增加了35%多$3的折扣,增加了80%多$4的折扣

商店5:任何的折扣都没有改变

期望值=50%/4*(2+2+5+4)+50%*5=$13/8+$2.5=$1.6+$2.5=$4.1

思考:

还有更好的可行性建议能保证银行更高的利润么?我很想知道!

你看,做推荐,不是提取数据,编写代码并实现它。反而,它需要数学(很显然),逻辑思维和使用编程语言的天赋。相信我,第三个是这里面最简单的。感觉到自信了么?我们继续。

推荐引擎的工作具体是什么?

之前的例子会给你一个合理的想法。是时候把它弄清楚了。让我们解释这个例子(银行X)中一个推荐引擎能做的所有的事:

1.在顾客购买了某件东西之后,找到顾客可能会感兴趣的零售商/物品。

2.如果许多竞争性物品都被推荐给顾客,它可以估计利益和损失。现在依据顾客的利益,推荐一个以顾客为中心或以产品为中心的用品。对于高价值客户,其他银行也有兴趣获得钱包份额,你可能要给出你最好的报价。

3.通过提供报价来提升顾客互动,能够吸引客户。这样,他(她)不论以何种方式购买商品,但只要有额外优惠,银行就可能知道他/她这种属性的客户的兴趣。

搜索引擎的类别是什么?

大体上有两种类别的搜索引擎,根据我们的企业做选择。在之前的文章里我们已经解释了每一个算法,但是在这里我尝试给出一个实际的解释来帮助你们更好的理解。

我已经在它们应用的行业里面解释了这些算法还有什么使它们对这个行业是恰当的。

基于上下文的算法

1

正如其名称所示,这些算法强烈依赖于推动商品的环境。一旦你收集了这个商品的环境信息,你尝试去找相似的商品并且推荐它们。比如在Youtube上,你能够找到一个视频的类型,语言,主演。现在依据这些信息,我们能找到和这个视频类似的视频。一旦我们有了相似的,我们可以轻易地把它推荐给原来只看这个视频的顾客。这样的算法在视频在线频道,歌曲在线商店等是很普遍的。这是一个很有道理的,当这个产品/项目能够被低维所解释的话,这样的环境信息是很容易得到的。

协同过滤算法

2

这是最普遍使用的算法之一,因为它不依赖于附加信息。你所需要的所有的东西就是行业的交易水平信息。例如,像亚马逊这样的电子商业角色、美国运通这样的银行经常使用这些算法来推荐批发商/产品。更进一步,有几种类型的协同过滤算法。

用户-用户协同过滤算法:这里我们给每个顾客寻找面貌相似的顾客,并且提供第一个面貌相似顾客在过去购买过的东西。这个算法是有效的但它花费了大量的时间和资源,因为它需要计算每一个顾客的用户匹配信息。因此,对于大的基础平台,没有一个很强壮的平行系统,这个算法是很难实施的。

商品-商品协同过滤算法:它和之前的算法是很相似的,但不是寻找相似的顾客,我们转而寻找相似的商品。一旦我们找到了相似商品矩阵,那么可以很轻易推荐相似物品给那些已经从这个商店购买了哪些物品的顾客。这个算法比基于用户的协同过滤算法占更少的资源。因此对于一个新的顾客,这个算法比基于用户的协同过滤算法花费更少的时间,因为我们不需要比较顾客的所有相似点。利用固定数量的物品,商品-商品相似矩阵在一定时间就可以完成。

其他更简单的算法:有其他的方法,例如购物篮分析,和上一个算法相比它通常不需要更高的预测能力。

我们如何决定搜索引擎的性能指标??

好问题!我们必须知道,性能指标在很大程度上受到业务目标驱动的。一般来说,您可能要优化三种可能的指标:

1.依据金钱价值:如果你全部的目标是使用推荐引擎增加利益/收益绩效,那么你的评估方法应该是每一个推荐等级的增长收益/利润/销量。每一个等级应该有一个完整的顺序,并且平均的收益/利润/销量应该在付出的花费和期望利益之上。

2.依据做出回馈的倾向:如果目的仅仅是使顾客活跃,或者是顾客探索新的商品/零售商,这个绩效可能会有用。在这里你需要追踪每一个等级顾客的回馈率。

3.依据交易数量:有的时候你对顾客的活跃度感兴趣。为了更高的活跃度,顾客需要实现更高数量的交易。所以我们追踪推荐等级的交易量。

4.其他度量:有一些其他的度量你可能会感兴趣,比如满意度或者是电话服务中心接受的电话数量。这些指标很少使用因为他们通常不会给你整个结果而是样本。

使用R构建一个商品-商品协同过滤算法

让我们动手建立一个搜索引擎。在这里我已经演示了构建一个商品-商品协同过滤算法的推荐引擎。数据仅仅包含两列,也就是单独-供货商和单独-顾客。这里的数据在这里下载(http://www.analyticsvidhya.com/wp-content/uploads/2016/03/data.csv)。

代码很容易理解。因此我没有很明确的解释。如果你发现任何部分的代码很难理解,可以在下方的评论区问我

#load libraries
> library(plyr)

> library("arules")

> library(readr)

#load data

#This file has two columns inidividual_merchant and inidividual_customer

> input <- read_csv("Transaction_file.csv")

#Get the list of merchants/items

> merchant <- unique(input$individual_merchant)

> merchant <- merchant[order(merchant)]

> target_merchants <- merchant

> sno <- 1:length(target_merchants)

> merchant_ident <- cbind(target_merchants,sno)

#Create a reference mapper for all merchant

> colnames(merchant_ident) <- c("individual_merchant","sno")


# Create a correlation matrix for these merchants

> correlation_mat = matrix(0,length(merchant),length(target_merchants))

> correlation_mat = as.data.frame(correlation_mat)

> trans = read.transactions("Transaction_file.csv", format = "single", sep = ",", cols =
c("inidividual_customer", "individual_merchant"))

> c <- crossTable(trans)

> rowitem <- rownames(c)

> columnitem <- colnames(c)

> correlation_mat <- c[order(as.numeric(rowitem)),order(as.numeric(columnitem))]

> for(i in 1:9822) {

correlation_mat[i,] <- correlation_mat[i,]/correlation_mat[i,i]

}

> colnames(correlation_mat) <- target_merchants

> rownames(correlation_mat) <- merchant


# Now let's start recommending for individual customer

> possible_slots <- 20

> avail <- 21

> merch_rec <- matrix(0, nrow = length(target_customers), ncol = avail)

> merch_rec[,1] <- unique(input3$Cust_map)

> correlation_mat <- as.matrix(correlation_mat)

> position <- 1

> for (i in 1:length(target_customers)) {

been_thr <- input[position : (position + customer_merch_ct[i] - 1),'individual_merchant']

merging <- as.data.frame(merchant_ident[merchant_ident[,'individual_merchant'] %in% been_thr,])

corel_subset <- correlation_mat[merging$sno,]

will_go <- colSums(corel_subset)

will_go_merch <- target_merchants[order(-will_go)]

not_been_there <- will_go_merch[!will_go_merch %in% been_thr]

will_go_propensity <- will_go[order(-will_go)][!will_go_merch %in% been_thr]

merch_rec[i,2:avail] <- not_been_there[1:possible_slots]

position <- position + customer_merch_ct[i]

}

尾注

推荐引擎已经变得极其普遍,因为它们是解决所有行业常见的商业案例之一。替代这样的搜索引擎是非常困难的,它们同时预测多种商品/供应商。分类算法很难吸收这个多输出变量。

在本文中,我们学习了银行推荐系统的用法。也看了实施R推荐引擎的案例,他们正在整个行业的所有部门使用,而共同目标,就是提升客户体验。

数据分析网原创编译,翻译小组成员—于海燕,一名数学系研究生,正在学习SPSS、R语言等。

你喜欢阅读这篇文章么?

你过去构建过推荐系统么?

在下方的评论区分享你的经验/建议吧?

点击文字查看精选热文

相关推荐

Linux gron 命令使用详解(linux gminer)

简介gron是一个独特的命令行工具,用于将JSON数据转换为离散的、易于grep处理的赋值语句格式。它的名字来源于"grepableon"或"grepable...

【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu

学习Linux并掌握Java环境配置及SpringBoot项目部署是一个系统化的过程,以下是从零开始的详细指南,帮助你逐步掌握这些技能。一、Linux基础入门1.安装Linux系统选择发行版:推荐...

Linux常用的shell命令汇总(linux中shell的作用)

本文介绍Linux系统下常用的系统级命令,包括软硬件查看、修改命令,有CPU、内存、硬盘、网络、系统管理等命令。说明命令是在Centos6.464位的虚拟机系统进行测试的。本文介绍的命令都会在此C...

零成本搭建个人加密文件保险柜(适用于 Win11 和 Linux)

不依赖收费软件操作简单,小白也能跟着做支持双系统,跨平台使用实现数据加密、防删除、防泄露内容通俗无技术门槛,秒懂秒用使用工具简介我们将使用两个核心工具:工具名用途系统支持Veracrypt创建加密虚...

如何在 Linux 中使用 Gzip 命令?(linux怎么用gzip命令)

gzip(GNUzip)是Linux系统中一个开源的压缩工具,用于压缩和解压缩文件。它基于DEFLATE算法,广泛应用于文件压缩、备份和数据传输。gzip生成的文件通常带有.gz后缀,压缩效率...

Linux 必备的20个核心知识点(linux内核知识点)

学习和使用Linux所必备的20个核心知识点。这些知识点涵盖了从基础操作到系统管理和网络概念,是构建扎实Linux技能的基础。Linux必备的20个知识点1.Linux文件系统层级标...

谷歌 ChromeOS 已支持 7z、iso、tar 文件格式

IT之家6月21日消息,谷歌ChromeOS在管理文件方面进行了改进,新增了对7z、iso和tar等格式的支持。从5月的ChromeOS101更新开始,ChromeOS...

如何在 Linux 中提取 Tar Bz2 文件?

在深入解压方法之前,我们先来了解.tar.bz2文件的本质。.tar.bz2是一种组合文件格式,包含两个步骤:Tar(TapeArchive):tar是一种归档工具,用于将多个文件或目录打包...

如何在 CentOS 7/8 上安装 Kitematic Docker 管理器

Kitematic是一款流行的Docker图形界面管理平台,适用于Ubuntu、macOS和Windows操作系统。然而,其他发行版(如CentOS、OpenSUSE、Fedora、R...

Nacos3.0重磅来袭!全面拥抱AI,单机及集群模式安装详细教程!

之前和大家分享过JDK17的多版本管理及详细安装过程,然后在项目升级完jdk17后又发现之前的注册和配置中心nacos又用不了,原因是之前的nacos1.3版本的,版本太老了,已经无法适配当前新的JD...

爬虫搞崩网站后,程序员自制“Zip炸弹”反击,6刀服务器成功扛住4.6万请求

在这个爬虫横行的时代,越来越多开发者深受其害:有人怒斥OpenAI的爬虫疯狂“偷”数据,7人团队十年心血的网站一夜崩溃;也有人被爬虫逼到极限,最后只好封掉整个巴西的访问才勉强止血。但本文作者却走...

Ubuntu 操作系统常用命令详解(ubuntu必学的60个命令)

UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...

Linux面板8.0.54 测试版-已上线(linux主机面板)

Linux面板8.0.54测试版【增加】[网站]Java项目新增刷新列表按钮【增加】[网站]PHP项目-Apache-服务新增守护进程功能【增加】[网站]Python项目创建/删除网站时新增同时创建...

开源三剑客——构建私有云世界的基石

公共云原生的浪潮正在席卷这个世界,亚马逊AWS、谷歌GCP和微软的Azure年收入增长超过了30%,越来越多的公司和个人开始将自己的服务部署到云环境中,大型数据中心的规模经济带来了成本的降低,可以在保...

2.2k star,一款业界领先的私有云+在线文档管理系统

简介kodbox可道云(原KodExplorer)是业内领先的企业私有云和在线文档管理系统,为个人网站、企业私有云部署、网络存储、在线文档管理、在线办公等提供安全可控,简便易用、可高度定制的私有云产品...