【用户画像】用户偏好购物模型BP

一、前言

用户购物偏好模型BP(Buyer Preferences Model)旨在通过对用户购物行为的深入分析和建模,以量化用户对不同商品或服务的偏好程度。该模型对于电商平台、零售商以及其他涉及消费者决策的商业实体来说,具有重要的应用价值。

二、推荐系统

概述

推荐系统是一种利用电子商务网站、社交媒体平台等向用户提供个性化商品、内容或服务建议的系统。它通过分析用户的行为、兴趣、历史记录等信息,帮助用户快速找到符合其需求的物品,提高用户体验和满意度。

推荐引擎,作为网站不可或缺的后台智能核心,高度依赖用户行为日志。这些日志不仅是用户兴趣与偏好的宝贵记录,更是网站实现个性化服务的关键数据。通过深度分析用户的行为日志,推荐引擎能够精确捕捉每个用户的独特需求,并据此为用户呈现定制化的页面和信息。这种个性化的服务不仅极大地提升了用户的浏览体验,还显著提高了网站的点击率和转化率。

推荐系统原理

数据采集:收集用户的喜好、搜索历史、点击历史、服务偏好等数据,构建用户行为模型。
数据分析:对用户数据进行处理,分析用户之间的关系,建立用户属性档案和潜在需求模型。
内容过滤:从已收集的数据中抽取出与用户行为相关的部分,进行深度分析和统计,计算特征值,滤除不符合用户兴趣的内容。
推荐内容:根据内容过滤结果和相关参数,进行智能化筛选,推荐出最匹配用户兴趣的内容。
分类

推荐系统组成

推荐系统一般都由三个部分组成,前端的交互界面、日志系统以及推荐算法系统。

1.前端的交互界面

  • 交互界面是用户与推荐系统直接交互的窗口。
  • 它负责展示推荐系统生成的推荐结果,如商品列表、视频推荐、文章推荐等。
  • 交互界面还需要收集用户的反馈,如点击、浏览、购买、评分等行为,以便后续对推荐算法进行优化。

2.日志系统

  • 日志系统负责记录用户的行为数据,包括用户在网站或应用上的所有活动,如搜索、点击、购买、评价等。
  • 这些日志数据是推荐系统的基础,它们提供了关于用户兴趣和偏好的宝贵信息。
  • 日志系统还需要对原始数据进行清洗、整合和存储,以便后续的数据分析和推荐算法使用。

3.推荐算法系统

  • 推荐算法系统是推荐系统的核心,它负责根据用户的行为数据和其他相关信息,生成个性化的推荐结果。
  • 推荐算法可以采用多种技术,如基于内容的推荐、协同过滤推荐、深度学习推荐等。
  • 推荐算法系统需要不断地优化和调整,以适应用户兴趣的变化和市场的动态。

个性化推荐成功的两大关键条件:

  • 信息过载:用户面临海量信息,难以快速找到符合自己喜好的物品。

  • 需求不明确:用户没有明确的需求时,推荐系统能够预测潜在兴趣,主动推送相关内容。

一个完整的推荐系统一般存在3个参与方: 用户内容提供方和提供推荐系统的网站

一个出色的推荐系统不仅能够精准地预测用户的偏好和行为,更能够拓宽用户的视野,引领他们“发现”新奇而有趣的内容。

推荐系统基本思想

知你所想,精准推送:
利用用户和物品的特征信息,为用户推荐那些具有用户喜欢的特征的物品。这包括基于用户的历史行为、偏好标签、上下文信息(如浏览记录、购买记录等)来构建用户模型。
同时,对物品进行特征分析,如内容信息、分类标签、关键词等,以匹配用户兴趣。
物以类聚:
利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品。这通常基于物品的相似性度量,如基于内容的相似性或基于协同过滤的相似性。
人以群分:
利用和用户相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品。这主要基于社会化推荐或协同过滤推荐,通过分析用户之间的相似性来找到可能感兴趣的物品。

 推荐系统数据分析

推荐系统主要由用户数据物品数据用户对物品行为数据(评分数据、点击数据、购物数据等)构成

具体如下:

第一:物品的元数据

关键字、分类标签和基因描述(对物品的详细特征的描述,比如钢琴有什么详细特征,音色等)

第二:用户数据

性别、年龄、兴趣标签(构建用户画像,能够通过这些基本信息实现更精准的推送)

第三:用户对物品行为数据(或者说对物品或信息的偏好)

显式反馈:用户主动提供的反馈信息,如评分和评论,它们直接表达了用户对物品的喜好程度。
隐式反馈:用户在使用网站或应用时产生的数据,如浏览记录、购买记录等,它们间接地反映了用户的兴趣。隐式反馈在推荐系统中起着至关重要的作用,因为它们可以被大量获取,并用于实时更新用户模型。

推荐系统分类

推荐系统可以根据其工作原理和算法特点进行分类,主要包括以下几种:

基于内容的推荐:系统为用户推荐与他们过去的兴趣类似的物品,物品间的相似性基于被比较的特征来计算。
协同过滤:找到与用户有相同品味的用户,然后将相似的用户过去喜欢的物品推荐给用户。这种方法是推荐系统中最流行和最广泛实现的技术。
基于人口统计学的推荐:根据用户的人口统计信息(如语言、国籍、年龄等)进行推荐。
基于知识的推荐:根据特定领域的知识推荐物品,这些知识是关于如何确定物品能满足用户需要和偏好的。
基于社区的推荐:依赖用户朋友的偏好进行推荐,通常称为社会化推荐系统。
混合推荐系统:综合以上多种技术的推荐系统,以弥补单一技术的不足。

 应用:

亚马逊的个性化推荐系统:通过分析用户的购物历史、搜索记录、点击行为等大数据,利用协同过滤算法和机器学习技术,为用户推荐个性化的商品。
爱奇艺的视频推荐系统:基于用户的观看历史、评分、点赞等数据,利用深度学习和数据挖掘技术,为用推荐系统,又称智能推荐系统,是现代互联网服务中不可或缺的一部分。它利用信息技术、大数据和人工智能等先进技术,在海量信息中为用户提供个性化的内容推荐,极大地提升了用户体验。以下是对推荐系统的详细介绍:

三、标签模型开发 

评分数据

在这里我们使用用户对每个物品的点击次数来作为评分的标准:

想要获取点击次数,首先我们得获取物品的编号,也就是ItemId, 而这个编号我们从url中可以获得:

对于这些url我们使用正则匹配解析,具体代码如下

import scala.util.matching.Regex

object RegexUrlTest {
	
	def main(args: Array[String]): Unit = {
		// 访问url
		val locUrl = "http://www.eshop.com/product/10781.html?ebi=ref-i5-main-1-7"
		
		// 正则表达式
		val regex: Regex = "^.+\\/product\\/(\\d+)\\.html.+$".r
		
		// 正则匹配
		val optionMatch: Option[Regex.Match] = regex.findFirstMatchIn(locUrl)
		// 获取匹配的值
		val productId = optionMatch match {
			case None => println("没有匹配成功"); null
			case Some(matchValue) => matchValue.group(1)
		}
		println(s"productId = $productId")
	}
	
}

运行程序输出结果:

新建标签

新建 业务(4级)标签品牌偏好标签 ,相关字段信息如下:

标签名称:用户购物偏好
标签分类:电商-某商城-行为属性
更新周期:1天
业务含义:用户购物偏好
(商品/品牌偏好)
标签规则!
inType=hbase
zkHosts=bigdata-cdh01.itcast.cn
zkPort=2181
hbaseTable=tbl_tag_logs
family=detai1
selectFieldNames=global_user_id,loc_url

程序入口:
cn.itcast.tags.models.rmd.BpModel
算法名称:
ALS
算法引擎:
tags-model_2.11.jar
模型参数:
--driver-memory 512m --executor-memory 512m --num-executors 1 --
executor-cores 1

在标签管理平台创建【用户推荐】3级标签及【用户购物偏好】4级标签,用于方便管理模型:

模型开发

开发模型标准流程:继承基类 AbstractModel,实现标签计算方法 doTag

具体在:用户画像——使用模板方法(Template Pattern)构建标签抽象类AbstractModel

这篇文章中有讲到。

算法模型开发步骤:

1. 自定义函数,从url中提取出访问商品id

		val url_to_product: UserDefinedFunction = udf(
			(url: String) => {
				// 正则表达式
				val regex: Regex = "^.+\\/product\\/(\\d+)\\.html.+$".r
				// 正则匹配
				val optionMatch: Option[Regex.Match] = regex.findFirstMatchIn(url)
				// 获取匹配的值
				val productId = optionMatch match {
					case Some(matchValue) => matchValue.group(1)
					case None => null
				}
				// 返回productId
				productId
			}
		)
		

2. 从url中计算商品id

	val ratingsDF: Dataset[Row] = businessDF
			.filter($"loc_url".isNotNull) // 获取loc_url不为null
			.select(
				$"global_user_id".as("userId"), //
				url_to_product($"loc_url").as("productId") //
			)
			.filter($"productId".isNotNull) // 过滤不为空的数据
			// 统计每个用户点击各个商品的次数
			.groupBy($"userId", $"productId")
			.count()
			// 数据类型转换
			.select(
				$"userId".cast(DoubleType), //
				$"productId".cast(DoubleType), //
				$"count".as("rating").cast(DoubleType) //
			)

 3. 使用ALS算法训练模型(评分为隐式评分)

val alsModel: ALSModel = new ALS()
			// 设置属性
			.setUserCol("userId")
			.setItemCol("productId")
			.setRatingCol("rating")
    		.setPredictionCol("prediction")
			// 设置算法参数
			.setImplicitPrefs(true) // 隐式评分
			.setRank(10) // 矩阵因子,rank秩的值
			.setMaxIter(10) // 最大迭代次数
			.setColdStartStrategy("drop") // 冷启动
			.setAlpha(1.0)
			.setRegParam(1.0)
			// 应用数据集,训练模型
			.fit(ratingsDF)
		ratingsDF.unpersist()

 4. 模型评估

		import org.apache.spark.ml.evaluation.RegressionEvaluator
		val evaluator: RegressionEvaluator = new RegressionEvaluator()
			.setLabelCol("rating")
			.setPredictionCol("prediction")
			.setMetricName("rmse")
		val rmse: Double = evaluator.evaluate(alsModel.transform(ratingsDF))
		//  rmse = 1.0300179222180903
		println(s"rmse = $rmse")

5.模型推荐

		// 5.1 给用户推荐商品: Top5
		val rmdItemsDF: DataFrame = alsModel.recommendForAllUsers(5)

		
		// 5.2. 给物品推荐用户
		val rmdUsersDF: DataFrame = alsModel.recommendForAllItems(5)

四、总结

BP用户偏好购物模型通过交替最小二乘法(ALS)对大量用户-物品评分数据进行模型训练,从而实现给用户推荐商品(或者给物品推荐用户)的功能,在物品信息以及用户数据量大的时候起到了关键作用,但在数据量小的领域不适合构建推荐系统,因为小范围的数据用户不需要推荐也能满足自己高质量的需求。
 

(以上内容部分来自黑马程序员,侵删。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

尝试编译 AMD ROCm 的 llvm-project

0,环境 ubuntu 22.04 gcc-11 x86_64 18cores/36threads 256GB RAM rocm 6.0.2 Radeon VII 1,第一次尝试 构建命令: cmake -G "Unix Makefiles" ../llvm \ -DLLVM_ENABLE_PROJECTS"clang;lld;lldb;mlir;openmp" \…

TCP报头

TCP报头 一:TCP报头1.1: 16位源端口号 && 16位目的端口号1.2: 选项1.3: 4位首部长度1.4: 保留位1.5 :标志位1.6: 16位窗口大小1.7: 16位紧急指针1.8: 32位序号 && 32位确认序号1.9: 16位校验和二级目录 一级目录二级目录二级目录二级目录 一级目录一级目录一级…

[GeoServer系列]Shapefile数据发布

【GeoServer系列】——安装与发布shapefile数据-CSDN博客 将待发布数据放置指定目录下 webapps\geoserver\data\data 创建存储仓库 新建矢量数据源 发布图层 设置边框 设置样式 使用 方式1 let highRoad new Cesium.WebMapServiceImageryProvider({url: http://local…

一维时间序列信号的奇异小波时频分析方法(Python)

最初的时频分析技术就是短时窗傅里叶变换STFT,由于时窗变短,可供分析的信号量减少,采用经典的谱估算方法引起的误差所占比重会增加。且该短时窗一旦选定.则在整个变换过程中其时窗长度是固定的。变换后的时频分辨率也即固定&#…

分享两种论文降重最有效的方法(论文降重网站)

论文降重最有效的方法可以分为手动方法和使用降重网站两种方法。以下是详细的分析和归纳: 手动方法 删减冗余内容:对于论文中的某些内容,特别是信息冗余或不必要的描述,可以通过删减和简化来减少篇幅。确保每一段落和每一个例子都…

UI 自动化测试(Selenuim + Java )

关于 UI 自动化测试工具 selenuim Java 的环境搭建推荐看SeleniumJava 环境搭建 什么是自动化测试? 自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测…

AI大数据处理与分析实战--体育问卷分析

AI大数据处理与分析实战–体育问卷分析 前言:前一段时间接了一个需求,使用AI进行数据分析与处理,遂整理了一下大致过程和大致简要结果(更详细就不方便放了)。 文章目录 AI大数据处理与分析实战--体育问卷分析一、数据…

三十五、openlayers官网示例Dynamic Data——在地图上加载动态数据形成动画效果

官网demo地址: Dynamic Data 初始化地图 const tileLayer new TileLayer({source: new OSM(),});const map new Map({layers: [tileLayer],target: "map",view: new View({center: [0, 0],zoom: 2,}),}); 创建了三个样式 const imageStyle new Style(…

glibc backtrace backtrace_symbols 的应用示例

作用: 在一个函数调用栈中,输出 backtrace()函数返回时需要执行的下一条指令的地址,以及返回主调函数后的下一条指令的地址,递归上一步,直到从系统中链接进来的 _start() 为止。 1,示例先行 hello_glibc.…

动态sql set标签 , trim标签

set标签 来看例子 set标案解决了逗号问题(当if条件不满足时,逗号无处安放的问题),我认为set标签可以识别这个问题,并自动忽略这个问题 <update id"update">update employee<set><if test"name!null">name#{name},</if><if te…

vsode (Visual Studio Code) JS -- HTML 教程

vsode (Visual Studio Code) JS – HTML 教程 JavaScript 是什么 -JavaScript 是一种基于对象和事件驱动的脚本语言&#xff0c;广泛用于在网页上实现动态交互效果。JavaScript 可以嵌入到 HTML 页面中&#xff0c;通过在脚本标签中编写 JavaScript 代码来实现各种功能。它主要…

PCIe的链路状态

目录 概述 链路训练的目的 两个概念 下面介绍LTSSM状态机 概述 PCie链路的初始化过程较为复杂&#xff0c;Pcie总线进行链路训练时&#xff0c;将初始化Pcie设备的物理层&#xff0c;发送接收模块和相关的链路状态信息&#xff0c;当链路训练成功结束后&#xff0c;PCIe链…

心动(GDI+)

文章目录 前言实现步骤源代码心形坐标类心形函数定时器方法绘制函数完整源码 结束语 前言 近期学习了一段时间的GDI,突然想着用GDI绘制点啥&#xff0c;用来验证下类与方法。有兴趣的&#xff0c;可以查阅Windows GDI学习笔记相关文章。 效果展示 实现步骤 定义心形函数 。…

MobaXterm 连接时间太短,会自动断开

问题现象 MobaXterm成功连接到开发环境后&#xff0c;过一段时间会自动断开。 原因 配置MobaXterm工具时&#xff0c;没有勾选“SSH keepalive”或专业版MobaXterm工具的“Stop server after”时间设置太短。

C++ stack类与queue类

目录 0.前言 1.容器适配器 1.1容器适配器的特点 1.2容器适配器的实现 1.3使用容器适配器的场景 2.stack的介绍与使用 2.1介绍 2.2使用 3.queue的介绍与使用 3.1介绍 3.2使用 4.stack和queue的模拟实现 4.1 stack的模拟实现 4.2 queue的模拟实现 5.结语 &#xf…

探秘IPv6协议在车载网络的应用:打造智能出行新体验

绪论 1969年&#xff0c;互联网的前身——ARPANET成功地连接了四个关键节点&#xff1a;①加州大学洛杉矶分校、②斯坦福研究所、③加州大学圣巴巴拉分校、④犹他州大学。这四个节点的成功连接标志着分组交换&#xff08;Packet Switching&#xff09;网络的正式运行&#xff…

SpringBoot登录认证--衔接SpringBoot案例通关版

文章目录 登录认证登录校验-概述登录校验 会话技术什么是会话呢?cookie Session令牌技术登录认证-登录校验-JWT令牌-介绍JWT SpringBoot案例通关版,上接这篇 登录认证 先讲解基本的登录功能 登录功能本质就是查询操作 那么查询完毕后返回一个Emp对象 如果Emp对象不为空,那…

Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)

Android Studio开发项目图书管理系统项目视频展示&#xff1a; 点击进入图书管理系统项目视频 引 言 现在是一个信息高度发达的时代&#xff0c;伴随着科技的进步&#xff0c;文化的汲取&#xff0c;人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴…

wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题

直接给出解决办法,端口暴露的太多了,暴露了500个端口导致从3g---->11g 遇到的问题,直接使用镜像《648540858/wvp_pro:latest》在宿主机上运行,如我下面的博客 https://blog.csdn.net/weixin_41012767/article/details/137112338?spm=1001.2014.3001.5502 docker run …

ChineseChess.2024.06.03

ChineseChess.2024.06.03 中国象棋&#xff0c;我下得不是象棋&#xff0c;是娱乐&#xff0c;是想看看自己的程序。哈哈 看很多主播挂棋局&#xff0c;吹牛批&#xff0c;为了涨粉&#xff0c;挂着&#xff0c;蛮摆个残局 中国象棋残局模拟器ChineseChess.2024.06.03