PAC는 최근 때문에 자동화 플랫폼에 대한 수요의 테스트 구덩이 추천 시스템을 시작했다. 언뜻보기에 큰 알고리즘 하나님에 대한 끝없는 즐거움이 주제는 사람이 있습니다 :
나를 위해,이 지역에 새로운, 이것이다 :
구덩이 주변에 일주일 동안 방황 후에, 나는 예비 요약으로, 또한, 시작하는 몇 가지 아이디어를 제공하기 위해 파트너의 구덩이에 같은 생각 희망, 추천 시스템과 몇 가지 간단한 알고리즘 담당자의 기본 개념을 컴파일.
◆ ◆ ◆
권장 시스템은 무엇입니까
1. 권장 시스템은 무엇입니까?
권장 시스템은 무엇입니까?
당신이 (잘라 손) 자 다년간 전기 공급 업체 인 경우에, 당신은 이런 말을합니다 :
당신이 연극 음악 애호가의 전체 셀을 경우, 당신은 이런 말을합니다 :
당신이 주요 사회적 플랫폼 엄지 손가락을 마구에 약간의 활성 인 경우에, 당신은 이런 말을합니다 :
예, 당신은 또한 개성 노래 한 곡, 뜨거운 마이크로 블로깅이, 같은 수 있습니다, 이러한 권장 시스템 출력됩니다. 이러한에서 우리는 결국 추천 시스템은 무엇이라고 결론을 내릴 수있다.
1. 도움이 사용자의 목적은 긴 꼬리를 탐구하고자하는 상품 (뉴스 / 음악 / ...) 발견
도움말 사용자가 당신이 원하는 것을 찾을 수 있습니다, 쉽게는 말처럼. 광대 한 멀티 상품, 심지어 우리 자신, 종종 Taobao의 구매 해야할지 모르겠어 눈부신 할인의 얼굴을 엽니 다 가리 킵니다. 경제학, 롱 테일이라는 잘 알려진 이론 (롱테일)가있다.
자원의 나머지 많은 부분이 관심이 몇 사람있는 동안 인터넷 분야에 적용, 그것은 작은 관심의 대부분을 얻을 것이다 자원의 가장 뜨거운 부분을 말한다. 이것은 자원의 낭비가 발생뿐만 아니라, 많은 사용자들이 관심이 찾을 수없는 공공의 너무 작은 맛이다.
2. 정보 과부하를 줄이는 목적
이미 인터넷 폭발 국가의 시대에 정보의 양, 사용자가 읽을 수 없습니다 사이트 홈 페이지의 모든 내용, 이용 정보가 매우 낮은 것입니다 경우. 그래서 우리는 사용자가 낮은 값 정보를 필터링 할 수 있도록 시스템을 권장 할 필요가있다.
3. 사이트의 목적은 CTR / 전환율을 향상시키기 위해
좋은 추천 시스템은 사용자가 항상 자신이 상품을 구매하거나 사용자에 대해 읽기 원하는 것을 찾을 수 더 자주 사이트를 액세스하고 있습니다.
4. 사용자의 더 나은 이해의 목적은 맞춤형 서비스를 사용자에게 제공합니다
뒷면의 이미지는 우리의 관심의 크기는 점점 더 분명, 시스템이 성공적으로 사용자, 사용자의 취미 등 관심의 컨텐츠를 추천 할 때마다 상상할 수있다. 우리는 정확하게 그들이 사용자의 다양한 요구는 우리의 플랫폼에서 충족 될 수있을 수 있도록 다양한 서비스를 사용자 정의 할 수 있음을, 각 사용자의 이미지를 묘사 할 수 있습니다합니다.
◆ ◆ ◆
推荐算法
算法是什么?我们可以把它简化为一个函数。函数接受若干个参数,输出一个返回值。
算法如上图,输入参数是用户和item的各种属性和特征,包括年龄、性别、地域、商品的类别、发布时间等等。经过推荐算法处理后,返回一个按照用户喜好度排序的item列表。
推荐算法大致可以分为以下几类[1]:
-
基于流行度的算法
-
协同过滤算法
-
基于内容的算法
-
基于模型的算法
-
混合算法
2.1 基于流行度的算法
基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。
这种算法的优点是简单,适用于刚注册的新用户。缺点也很明显,它无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
2.2 协同过滤算法
协同过滤算法(Collaborative Filtering, CF)是很常用的一种算法,在很多电商网站上都有用到。CF算法包括基于用户的CF(User-based CF)和基于物品的CF(Item-based CF)。
基于用户的CF原理如下:
-
分析各个用户对item的评价(通过浏览记录、购买记录等);
-
依据用户对item的评价计算得出所有用户之间的相似度;
-
选出与当前用户最相似的N个用户;
-
将这N个用户评价最高并且当前用户又没有浏览过的item推荐给当前用户。
示意图如下:
基于物品的CF原理大同小异,只是主体在于物品:
-
分析各个用户对item的浏览记录。
-
依据浏览记录分析得出所有item之间的相似度;
-
对于当前用户评价高的item,找出与之相似度最高的N个item;
-
将这N个item推荐给用户。
示意图如下:
举个栗子,基于用户的CF算法大致的计算流程如下:
首先我们根据网站的记录计算出一个用户与item的关联矩阵,如下:
图中,行是不同的用户,列是所有物品,(x, y)的值则是x用户对y物品的评分(喜好程度)。我们可以把每一行视为一个用户对物品偏好的向量,然后计算每两个用户之间的向量距离,这里我们用余弦相似度来算:
然后得出用户向量之间相似度如下,其中值越接近1表示这两个用户越相似:
最后,我们要为用户1推荐物品,则找出与用户1相似度最高的N名用户(设N=2)评价的物品,去掉用户1评价过的物品,则是推荐结果。
基于物品的CF计算方式大致相同,只是关联矩阵变为了item和item之间的关系,若用户同时浏览过item1和item2,则(1,1)的值为1,最后计算出所有item之间的关联关系如下:
我们可以看到,CF算法确实简单,而且很多时候推荐也是很准确的。然而它也存在一些问题:
-
依赖于准确的用户评分;
-
在计算的过程中,那些大热的物品会有更大的几率被推荐给用户;
-
冷启动问题。当有一名新用户或者新物品进入系统时,推荐将无从依据;
-
在一些item生存周期短(如新闻、广告)的系统中,由于更新速度快,大量item不会有用户评分,造成评分矩阵稀疏,不利于这些内容的推荐。
对于矩阵稀疏的问题,有很多方法来改进CF算法。比如通过矩阵因子分解(如LFM),我们可以把一个nm的矩阵分解为一个nk的矩阵乘以一个k*m的矩阵,如下图:
这里的k可以是用户的特征、兴趣爱好与物品属性的一些联系,通过因子分解,可以找到用户和物品之间的一些潜在关联,从而填补之前矩阵中的缺失值。
2.3 基于内容的算法
CF算法看起来很好很强大,通过改进也能克服各种缺点。那么问题来了,假如我是个《指环王》的忠实读者,我买过一本《双塔奇兵》,这时库里新进了第三部:《王者归来》,那么显然我会很感兴趣。然而基于之前的算法,无论是用户评分还是书名的检索都不太好使,于是基于内容的推荐算法呼之欲出。
举个栗子,现在系统里有一个用户和一条新闻。通过分析用户的行为以及新闻的文本内容,我们提取出数个关键字,如下图:
将这些关键字作为属性,把用户和新闻分解成向量,如下图:
之后再计算向量距离,便可以得出该用户和新闻的相似度了。这种方法很简单,如果在为一名热爱观看英超联赛的足球迷推荐新闻时,新闻里同时存在关键字体育、足球、英超,显然匹配前两个词都不如直接匹配英超来得准确,系统该如何体现出关键词的这种“重要性”呢?这时我们便可以引入词权的概念。在大量的语料库中通过计算(比如典型的TF-IDF算法),我们可以算出新闻中每一个关键词的权重,在计算相似度时引入这个权重的影响,就可以达到更精确的效果。
sim(user, item) = 文本相似度(user, item) * 词权
然而,经常接触体育新闻方面数据的同学就会要提出问题了:要是用户的兴趣是足球,而新闻的关键词是德甲、英超,按照上面的文本匹配方法显然无法将他们关联到一起。在此,我们可以引用话题聚类:
利用word2vec一类工具,可以将文本的关键词聚类,然后根据topic将文本向量化。如可以将德甲、英超、西甲聚类到“足球”的topic下,将lv、Gucci聚类到“奢侈品”topic下,再根据topic为文本内容与用户作相似度计算。
综上,基于内容的推荐算法能够很好地解决冷启动问题,并且也不会囿于热度的限制,因为它是直接基于内容匹配的,而与浏览记录无关。然而它也会存在一些弊端,比如过度专业化(over-specialisation)的问题。这种方法会一直推荐给用户内容密切关联的item,而失去了推荐内容的多样性。
2.4 基于模型的算法
基于模型的方法有很多,用到的诸如机器学习的方法也可以很深,这里只简单介绍下比较简单的方法——Logistics回归预测。我们通过分析系统中用户的行为和购买记录等数据,得到如下表:
表中的行是一种物品,x1~xn是影响用户行为的各种特征属性,如用户年龄段、性别、地域、物品的价格、类别等等,y则是用户对于该物品的喜好程度,可以是购买记录、浏览、收藏等等。通过大量这类的数据,我们可以回归拟合出一个函数,计算出x1~xn对应的系数,这即是各特征属性对应的权重,权重值越大则表明该属性对于用户选择商品越重要。
在拟合函数的时候我们会想到,单一的某种属性和另一种属性可能并不存在强关联。比如,年龄与购买护肤品这个行为并不呈强关联,性别与购买护肤品也不强关联,但当我们把年龄与性别综合在一起考虑时,它们便和购买行为产生了强关联。比如(我只是比如),20~30岁的女性用户更倾向于购买护肤品,这就叫交叉属性。通过反复测试和经验,我们可以调整特征属性的组合,拟合出最准确的回归函数。最后得出的属性权重如下:
基于模型的算法由于快速、准确,适用于实时性比较高的业务如新闻、广告等,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是常说的Feature Engineering。而由于新闻的时效性,系统也需要反复更新线上的数学模型,以适应变化。
2.5 混合算法
现实应用中,其实很少有直接用某种算法来做推荐的系统。在一些大的网站如Netflix,就是融合了数十种算法的推荐系统。我们可以通过给不同算法的结果加权重来综合结果,或者是在不同的计算环节中运用不同的算法来混合,达到更贴合自己业务的目的。
2.6 结果列表
在算法最后得出推荐结果之后,我们往往还需要对结果进行处理。比如当推荐的内容里包含敏感词汇、涉及用户隐私的内容等等,就需要系统将其筛除;若数次推荐后用户依然对某个item毫无兴趣,我们就需要将这个item降低权重,调整排序;另外,有时系统还要考虑话题多样性的问题,同样要在不同话题中筛选内容。
◆ ◆ ◆
推荐结果评估
当推荐算法完成后,怎样来评估这个算法的效果?CTR(点击率)、CVR(转化率)、停留时间等都是很直观的数据。在完成算法后,可以通过线下计算算法的RMSE(均方根误差)或者线上进行ABTest来对比效果。
◆ ◆ ◆
改进策略
用户画像是最近经常被提及的一个名词,引入用户画像可以为推荐系统带来很多改进的余地,比如:
-
打通公司各大业务平台,通过获取其他平台的用户数据,彻底解决冷启动问题;
-
在不同设备上同步用户数据,包括QQID、设备号、手机号等;
-
丰富用户的人口属性,包括年龄、职业、地域等;
-
更完善的用户兴趣状态,方便生成用户标签和匹配内容。
另外,公司的优势——社交平台也是一个很好利用的地方。利用用户的社交网络,可以很方便地通过用户的好友、兴趣群的成员等更快捷地找到相似用户以及用户可能感兴趣的内容,提高推荐的准确度。
◆ ◆ ◆
总结
随着大数据和机器学习的火热,推荐系统也将愈发成熟,需要学习的地方还有很多,坑还有很深,希望有志的同学共勉~