关于jaccard相似度在竞品分析中的一点思考

Charlotte77 Charlotte77     2022-09-18     459

关键词:

  上个月对一个小项目的效果进行改进,时间紧,只有不到一周的时间,所以思考了一下就用了最简单的方法来做,效果针对上一版提升了5%左右,跟大家分享一下(项目场景用的类似的场景)

  项目场景:分析一个产品的竞品,譬如app的竞品、网站的竞品等等

  项目分析:简单来说就是竞品分析,竞品分析有很多比较成熟的方法,但是我认为,竞品分析其实和推荐有着很大的相关性。譬如我要分析一个技术网站的竞品有哪些,通俗点说,就是看一个用户经常访问哪些网站、不同类的用户访问网站的偏好是什么、在同类技术网站里与之定位想进,用户人群相似的网站有哪些等等。抽象来看,即可得出两个关键词:用户和物品(或者说物品和竞品)。这个关键词是不是很熟悉?在推荐里我们经常会遇到item和user之间的相似度,那么竞品分析其实也可以同类化于相似度的计算问题。

  具体做法:提到相似度计算,会想到很多方法,常见的欧几里得距离,余弦计算,皮尔逊距离等等,对于不同的距离计算,有不同的适用条件,之前总结过一个关于相似度计算的文章,只不过觉得不是很完善,所以一直没有发出来。这次做竞品分析的时候突然想起了Jaccard相似度。那么Jaccard相似度是什么呢?简单说下公式:

  给定两个集合A和B,A和B的Jaccard相似度 = |A与B的交集元素个数| / |A与B的并集元素个数|

  那么这样一个公式是来应用到竞品分析中的呢?我们假设一个场景:

  喜欢博客园的用户也喜欢浏览知乎、CSDN、Github等,喜欢知乎的用户也喜欢浏览Github、InfoQ、V2EX、SegmentDefault、博客园等,假设我们根据浏览次数来进行排序,得到两个集合,那么我们可以简化为博客园和知乎的竞品分别为:

  博客园=[知乎、CSDN、Github]

  知乎=[Github、InfoQ、V2EX、SegmentDefault、博客园]

  此时,第一版计算结果:博客园与知乎的Jaccard相似度为= 1 / 7=0.14

  这是最简单的Jaccard相似度计算,然而我们发现,逛博客园的经常逛知乎,且知乎权重很高,但是他们俩的相似度却很低,只有0.14,看起来好像并不符合常理,于是,我做了点修改,将需要计算的竞品本身也加入集合,即:

  博客园=[博客园、知乎、CSDN、Github]

  知乎=[知乎、Github、InfoQ、V2EX、SegmentDefault、博客园]

  这样我们再来计算,得到第二版计算结果:博客园与知乎的Jaccard相似度 = 3 / 7 = 0.42

  为什么我们要将竞品本身考虑进去呢?其实很简单,以博客园为例,我们的目的是找到博客园的竞品,分析出经常浏览博客园的用户还会经常浏览哪些同类技术网站,那么博客园的用户肯定是经常浏览博客园的,这点显而易见,一个物品本身也是自身的竞品。将要分析的竞品本身加入集合后就可避免我们第一次计算时出现的不符合常识的结果。

  但是,还得思考一个问题,博客园对知乎的Jaccard相似度与知乎对博客园的Jaccard相似度应该是一样的吗?按照前两次计算,我们认为是一样的,因为只是考虑的交集的个数,并没有考虑集合中元素所处的位置因素。然而实际上,集合中的元素位置其实是有先后之分的,按降序排列,即竞品相关度是越来越低的。此时未考虑元素的位置因素似乎也有悖尝试。举个例子:一个经常看博客园的用户,也会经常看知乎,那么一个经常看知乎的用户是否也代表也会经常看博客园呢?这个结论与我们给出的条件是相悖的:一个经常看知乎的用户,相比于博客园,更偏好于Github。所以我们得到结论:两个竞品A和B,A对B的重要性不一定等于B对A的重要性。

  所以,我们对此进行进一步改进,

  博客园=[博客园、知乎、CSDN、Github]            ====》博客园 = [1.0,0.6,0.3,0.1]

  知乎=[知乎、Github、InfoQ、V2EX、SegmentDefault、博客园]  ====》知乎 = [1.0,0.55,0.15,0.14,0.11,0.05]

  (注:竞品本身加入集合我设定权重为1,其他竞品元素总分为1)

  此时,计算得到第三版计算结果

      博客园对知乎的Jaccard相似度 = ( 两者交集的权重得分和/ 两者权重总和 ) * 知乎在博客园集合中所占的权重 = ( 1+0.6+0.1+1+0.55+0.05 / (2+2) )* 0.6 = ( 3.3 /4 )* 0.6 = 0.495

      知乎对博客园的Jaccard相似度 =  ( 两者交集的权重得分和/ 两者权重总和 ) * 博客园在知乎集合中所占的权重 =( 1+0.6+0.1+1+0.55+0.05 / (2+2) )* 0.05 = ( 3.3 /4 )*0.05 = 0.04

  由此可得,博客园与知乎的竞品相似度是不相同的,也符合常理

  总结:一开始我想到了很多方法来做,但是时间紧,又要有效果提升,所以尝试对最简单的计算公式做改进达到提升效果的目的,针对每一次计算的结果,结合常识,再来进行一步步改进,最后取得了不错的效果。其实最后的方案还可以做一些改进,如:如何设定权重,如何设定计算公式、是否可以用线性模型拟合等等,都可以去尝试,有兴趣的也可以去试一试。如果大家有更好的方法,也可以一起讨论一下:)

 

  

 

相似性分析之jaccard相似系数

Jaccard,又称为Jaccard相似系数(Jaccardsimilaritycoefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高公式:假设arr1=[11,2,3,8,10,0,2,0,0,2,1,0,0,2,0,0,0,0,0,0,0],长度为21假设arr2=[9,4,4,6,6,1,3,1,0,0,4,0,0,1,1,0,0... 查看详情

关于头文件定义的一点思考

...项目的时候,程序上遇到一个问题,困扰了我很长时间,关于关键字重定义的问题。我在一个包含了所有头文件的总头文件里面重定义了关键字,但是运行的时候还是报错,当我在这个报错的头文件里面在写一次关键字的重定义... 查看详情

周志华:关于机器学习的一点思考

周志华:关于机器学习的一点思考 https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw  演讲:周志华整理:肖琴、闻菲【新智元导读】机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AIWOR... 查看详情

你的竞品分析报告是否有深入思考

竞品分析应该是一个长期且深入的工作。既要观察竞品的演变过程,又要能对竞品做深入的分析。 分析竞品的目的无非是,竞品是否能给到我们借鉴的作用?而竞品的迭代,也无外乎两个,用户想要的(需求),产品想要的(... 查看详情

电影推荐的 MapReduce Jaccard 相似度计算

】电影推荐的MapReduceJaccard相似度计算【英文标题】:MapReduceJaccardSimilarityCalculationformovieRecommendations【发布时间】:2019-01-1614:16:15【问题描述】:我正在参加有关分布式系统的考试,我试图解决去年考试中的一个MapReduce问题。但... 查看详情

如何去做一份竞品分析报告

...(ID:yunyingkong),作者飞鱼船长。授权36氪转发。网络上关于写产品竞品分析的文章很多,做运营类竞品分析的文章比较少,所以今天抛砖引玉和大家分享一下,我在分析竞品运营中的思考和心得。每天发生在我们APP里各种变化... 查看详情

关于重构工作的一点思考

  最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考。起因:  本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,... 查看详情

关于异常的一点思考

一、异常的(检测)触发:编译器插入检查指令(对语言规定的检查项);二、异常的基本处理机制:类似中断,生成异常场景信息,然后执行转发操作。三、异常处理的上下文:由线程货其他结构保存的类似函数调用栈的上下文... 查看详情

关于ugc的一点思考

   ugc会使互联网繁荣,但依赖大众用户创造的内容质量上会存在参差不齐,这是ugc本身存在的问题。   就拿技术论坛或社区来说,好的内容不少,但质量不好的内容也很多。社区在引导用户发言的同时,也... 查看详情

关于函数执行过程的一点思考

  刚刚有一个同学问我下面的代码出现了什么问题?大家可以一起看看,这是初学者非常容易犯的错误。<!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title></head><body> <formac 查看详情

[转]周志华:关于机器学习的一点思考

...走之前给大家做一个报告。今天主要跟大家分享一下我们关于机器学习的一些非常粗浅的一些看法。只是代表我们自己的认识,谈一下现在机器学习取得的成功背后可能有一些什么样的问题,以及未来可能我们在关注一些什么样... 查看详情

数据库设计---关于建表的时候选择横标和竖表(纵表)的一点思考

 本文出处:http://www.cnblogs.com/wy123/p/6677073.html  在做数据统计类数据库设计的时候,在考虑数据存储的时候,经常会遇到逻辑上同一个BusinessID对应多个数据点的情况,比如工资表中的员工ID以及各项工资信息,财务表... 查看详情

关于交大二手市场的一点思考

关于交大二手市场项目的一些思考主要问题:是否应该叫做交大二手市场,这个名字如果给你推荐,你会不会选择使用这个app或登录这个网站呢?第一部分:产品应该是什么样的1.主要针对人群:大一大二新生为买方、大三大四... 查看详情

关于共享单车的一点思考

 市场环境(1)该类产品的市场生成状况如何,收益比例如何然后再决定是否加入    共享单车是共享经济的一个代表,从政治角度来看,符合节约环保的倡导;从经济角度看,经济高速发展必然需要资源的整... 查看详情

关于多线程编程的一点思考

多线程编程主要是为了解决处理慢的问题。使用多个线程进行并发处理资源,使用的模型最多的还是生产者消费者模型。------------------------------------------------------目前我遇到的问题或者体会主要有两个:1.生产者产生速度不能大... 查看详情

关于app测试的一点思考

1 系统入口部分要细化测试用例颗粒度 充分准备好测试数据  真实覆盖线上场景 比如注册验证码的获取 国内国外手机 一般国外手机发送短信打电话都要加上区号  2新版本发布  有新功能... 查看详情

关于js中函数的返回值的一点死思考

在Javascript中,函数总是会有一个返回值。即使我们没有显示的使用“return”,程序也会隐式的返回一个“undefined”。通过下面的小demo即可理解。demo1functionfn(){return1;}fn();运行结果:1 demo2functionfn(){console.log(1);}fn(); 运行结... 查看详情

pandas DataFrame 中文本的 Jaccard 相似性

】pandasDataFrame中文本的Jaccard相似性【英文标题】:JaccardSimilarityforTextsinapandasDataFrame【发布时间】:2018-03-0717:32:34【问题描述】:我想测量pandasDataFrame中文本之间的jaccard相似度。更准确地说,我有一些实体组,并且在一段时间内... 查看详情