老板问我,完全没有用户历史行为记录,怎么做推荐?
前几天和老板通俗的介绍了协同过滤(Collaborative Filtering)和基于内容的推荐(Content-based Recommendation),但都必须分析用户的历史行为数据(例如电影点击数据,职位查看数据等),针对不同的用户进行个性化推荐。
老板问我,如果系统没有用户的历史行为数据积累,就不能实施推荐了吗?
今天讲讲“相似性推荐”。
什么是“相似性推荐”?
答:对于新用户A,没有ta的历史行为数据,在ta点击了item-X的场景下,可以将与item-X最相似的item集合推荐给新用户A。
问题转化为,如何用一种通用的方法,表达item之间的相似性。
仍以电影推荐为例,新用户A进入了《我不是潘金莲》电影详情页,如何对A进行电影推荐呢?
先看二维空间的点N,如何推荐与其最近的点?
答:可以用二维空间中,点与点之间的距离,表示点之间的远近。
对于全集中的任何一个点M(xi, yi),它与点N(x1, y1)的距离:
distance = (x1-xi)^2 + (y1-yi)^2
所以,只要计算全集中所有点与N的距离,就能计算出与它最近的3个点。
再看三维空间的点N,如何推荐与其最近的点?
答:可以用三维空间中,点与点之间的距离,表示点之间的远近。
对于全集中的任何一个点M(xi, yi, zi),它与点N(x1, y1, z1)的距离:
distance = (x1-xi)^2 + (y1-yi)^2 + (z1-zi)^2
所以,只要计算全集中所有点与N的距离,就能计算出与它最近的3个点。
循序渐进,对于一部电影《我不是潘金莲》,假设它有10个属性,则可以把它看做一个十维空间中的点:
点N《我不是潘金莲》
{
导演:冯小刚
女主:范冰冰
男主:郭涛
女配:张嘉译
男配:大鹏
类型:剧情
地区:中国大陆
语言:普通话
日期:2016
片长:140
}
对于电影全集中的任何一部电影,都可以计算与点N《我不是潘金莲》之间的距离。二维三维中的点,可以用直线距离计算远近,10维空间{导演, 女主, 男主, 女配, 男配, 类型, 地区, 语言, 日期, 片长}中的两个点的距离,需要重新定义一个距离函数,例如:
distance = f1(导演) + f2(女主) + … +f10(片长)
这个距离,通俗的解释,就是每个维度贡献分值的总和。
分值可以这么定义:
f1(导演){
如果两部电影导演相同,得1分;
如果导演不同,得0分;
}
例如,现在10维空间中,有另一个点M《芳华》
{
导演:冯小刚
女主:苗苗
男主:黄轩
女配:NULL
男配:NULL
类型:剧情
地区:中国大陆
语言:普通话
日期:2017
片长:140
}
要计算点M《芳华》与点N《我不是潘金莲》的距离,代入distance距离计算公式:
distance = f1(导演) + f2(女主) + … +f10(片长)
=1 + 0 + … + 1
=5
即:导演、类型、地区、语言、片长相同各得1分,其他维度不同得0分。
遍历电影全集中的10w部电影,就能找到与点N《我不是潘金莲》最相近的3部电影,当用户点击《我不是潘金莲》的详情页时,直接推荐这3部最相近的电影即可。
相似性推荐,原理大致如上,要说明的是:
(1)由于没有用户历史行为积累,不是个性化推荐,所以所有用户的推荐结果都是相同的;
(2)一般来说,距离公式确实是线性的;
(3)一般来说,每个维度的权重不一样;
(4)这个线性公式,以及维度的权重,都可以通过机器学习训练出来;
相似性推荐原理如上,希望这1分钟,大家没浪费。
架构师之路-分享可落地的技术文章
相关文章:
《架构师之路,20年干货精选》
老板问我,完全没有用户历史行为记录,怎么做推荐?相关推荐
- 产品思考 - 当当老用户历史订单记录无法找回的迷雾
在群里有个朋友,咨询谁在当当网工作,有个事情寻求帮助,他是当当网早年用户,在上面购买了很多纸质书籍,后来工作繁忙生活奔跑,就再也没有登录过当当网,最近发现老用户再也无法登录,拨打热线电话客服也没解决问 ...
- 【机器学习项目实战】Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐
说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 电子商务网站数量迅速上升,将电子商务网站浏览者变为实际消费者,满 ...
- 使用redis存储用户的浏览记录
用户历史浏览记录:1).什么时候添加历史浏览记录:访问商品的详情页面的时候,添加历史浏览记录2).什么时候获取历史浏览记录:访问用户中心个人信息页的时候获取历史浏览记录3).历史浏览记录需要存储在哪里 ...
- GitHub/GitLab/Gitee中项目互拷贝后仍保留历史提交记录的方法
GitHub.GitLab.Gitee等在同一个网站中执行复制或拷贝一个已有项目到一个新项目比较简单,因为它们在每一个项目上都有一个Fork按钮,直接点击此Fork按钮即可,Fork后的新项目会保留原 ...
- 数据分析师被老板问住了——场面一度非常尴尬。
你是不是经常被老板问的一脸懵逼? 比如-- "上周环比周活明显下降,怎么办?" "互动率下降,如何提升上来?" "要提升新客 ARPU 值,如何优化现 ...
- php记录用户搜索历史记录,PHPCookei记录用户历史浏览信息的代码
[基础] Cookie常用方法: $_COOKIE['RecordLuHuiDUDU'] 得到Cookie setcookie('RecordLuHuiDUDU',",time()-3600 ...
- 老板问:多长时间搞定?开发说3天,測试说2天,然后……
有朋友问到: 老板问搞定这一堆事情要多久:开发说3天.測试说2天. 然后老板第五天来要货.測试提了一堆bug给开发......开发继续解决bug,測试继续測, 直到递归结束-- 有什么流程能够解决这 ...
- last 命令 – 显示用户历史登录情况
last 命令的功能是用于显示用户历史登录情况,通过查看系统记录的日志文件内容,进而使管理员可以获知谁曾经或者试图连接过服务器. 通过读取系统登陆历史日志文件(/var/log/wtmp)并按照用户名 ...
- centos查看历史指令记录_CentOS 显示历史执行过的命令以及用户历史命令缓存文件...
1.history命令用于显示历史执行过的命令 执行 history命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录. 如果觉得 1000 不够用,还可以自定义/etc/profi ...
最新文章
- 专访趋势科技CEO陈怡桦:病毒行业需要反省
- oracle--表,用户,授权
- mysql分库分表事务控制_数据库分库分表之后,你是如何解决事务问题?
- zigbee看门狗综合实验_2.5KW风光互补发电教学实验系统,风能太阳能发电实训装置_搜狐汽车...
- c语言与python的区别
- Linux学习命令总结个人及个人心得
- java 泛型重载_Java泛型编程与多态、重载的同与不同
- LeetCode第12题 整数转罗马数字
- [Ext JS 7]7.6 内存泄露及处理
- 如何改变炒股频繁交易的毛病?
- 011—MySQL 事务
- 这场直播,我们把 Apache 顶级项目盛会搬来了!
- Windows tablet数位板数位屏开发出现的问题
- 疫情影响下普惠金融风险与对策
- s32k144 isystem linux,S32K144之时钟配置
- 2022 极术通讯-从CPU、DSA到软硬件融合
- Mysql Workbench connection ssl not enable问题解决
- MFC中单文档程序框架
- sftp命令上传本地文件到服务器,使用sftp命令上传文件夹方法
- Unity3D中如何制作天空盒
热门文章
- C语言入门经典(第5版)之编程初步
- Vue组件间传值详解
- 前端基础,html,css,浏览器基础知识
- Content type ‘multipart/form-data;boundary=解决方案
- .Net Core-做一个微信公众号的排队系统
- 站​内​搜​索​代​码
- linux汇编格式化磁盘,如何进行硬盘格式化命令操作【详解】
- Android电量优化--实战
- 一个文本翻译工具的实现
- 项目实战--传智健康