二、数据探索分析
对原始数据中的网页类型、点击次数和网页排名等各个维度进行分布分析,获得其内在的规律,并通过验证数据,解释其出现结果的可能原因。
(一)网页类型分析
首先,针对原始数据中用户点击的网页类型进行统计。网页类型是指“网址类型”中的前 3 位数字(它本身有 6/7 位数字)。此处处理的要义在于“分块进行”,必要时可以使用多线程甚至分布式计算。所以,代码清单 2 所给出的例子,已经展示了处理大数据的要义所在。后面的各项统计均按照类似的方法进行,不再赘述。
代码清单 2:Python 访问数据库并进行分块统计。
counts = [ i [ * fullURLId* ] . value_counts () for i in sql] #逐块统计
counts = pd.concat(counts).groupby(level=0).sum() #合并统计结果,把相同的统计项
合并(即按 index 分组并求和)
counts = counts. reset_index () #重新设置 index,将原来的 index 作为 counts 的一列
counts . columns = [ * index',* num* ] #重新设置列名,主要是第二列,默认为 0
counts [ * type * ] = counts [' index * ]. str. Extract [(\d{ 3})]# 提取前三个数字作为类别id
counts_ — counts [ 1 type ' ,' num * ] . groupby (1 type *). sum () #按类别合并
count s_. sort ('num',ascending = False) #降序排列
结果见表 4-2-1,从中发现点击与咨询相关(网页类型为 101,http://www. * * * * .com/ask/)的记录占了 49.16%,其次是其他的类型(网页类型为 199)占比 24%左右,然后是知识相关(网页类型为 107,http://www. * * * * .com/info/)占比 22%左右。
表 4-2-1 网页类型统计
因此,可以得到用户点击的页面类型的排行榜为咨询相关、知识相关、其他方面的网页、法规(类型为 301)、律师相关(类型为 102)。可以初步得出相对于长篇的知识,用户更加偏向于查看咨询或者进行咨询。进一步对咨询类别内部进行统计分析,其结果见表 4-2-2。其中,浏览咨询内容页(101003)记录最多,其次是咨询列表页(101002)和咨询首页(101001)。结合上述初步结论,可以得出用户都喜欢通过浏览问题的方式找到自己需要的信息,而不是以提问的方式或者查看长篇知识的方式得到所需信息。
表 4-2-2 咨询类别内部统计
统计分析知识类型内部的点击情况,因知识类型中只有一种类型(107001),所以利用网址对其进行分类,获得知识内容页(http://www.****.com/info/*/数字.html,其中数字部分可能带有下划线 _ )、知识首页( http://www.****.com/infb/*/ )和知识列表页(http://www.****.com/info/*.html,是除了知识内容页外的 html 页面)的分布情况,其结果
见表 4-2-3。
表 4-2-3 知识类型内部统计
分析其他(199)页面的情况,其中网址中带有“?”的占了 32%左右,其他咨询相关与法规专题占比达到 43%,地区和律师占比 26%左右。在网页的分类中,有律师、地区、咨询相关的网页分类,为何这些还会存在其他类别中?进行数据查看后,发现大部分是以下面网址的形式存在。
□ http:// www. * * * * .com/guangzhou/p21awfirm 地区律师事务所。
□ http://www. * * ** .com/guangzhou 地区网址。
□ http://www. * * ** .com/ask/ask.php。
□ http://www.****.com/ask/midques_l 0549897.html 中间类型网页。
□ http://www.****.com/ask/exp/4317.html 咨询经验。
□ http://w ww.* * * * .com/ask/onl ine/13 8.html 在线咨询页。
带有标记的 3 类网址本应该有相应的分类,但是由于分类规则的匹配问题,没有相应的匹配。带有 lawfirm 关键字对应的是律师事务所,带有 ask/exp、ask/online 关键字对应的是咨询经验和在线咨询页。所以,在处理数据过程中将其进行清楚分类,便于后续数据分析。
综上分析 3 种情况,可以发现大部分用户浏览的网页的情况为:咨询内容页、知识内容页、法规专题页、咨询经验(在线咨询页)。因此,在后续的分析中,选取其中占比最多的两类(咨询内容页和知识内容页)进行模型分析。
上述在其他类别中,发现网址中存在带“?”的情况,对其进行统计,一共有 65 492 条记录,占所有记录的 7.8%,统计分析此情况,其结果见表 4-2-4;可以从表中得出网址中带有“?”的情况不仅仅出现在其他类别中,同时也会出现在咨询内容页和知识内容页中。但其他类型中(1999001)占了 98.8%,因此需要进一步分析其类型内部的规律。
表 4-2-4 带问号字符网址类型统计表

统计分析结果见表 4-2-5,在 1999001 类型中,标题为快车-律师助手的这类信息占比 77%,通过对业务了解,这是律师的一个登录页面。标题为咨询发布成功页面,是自动跳转的页面。其他剩下的带有“?”的页面记录,占其记录的 15%左右,占所有记录的 1%左右。其他类型中的大部分为“http://www.****.com/ask/question_9152354. html?&from=androidqq”,这种类型的网页是被分享过的,可以对其进行处理,截取“?”前面的网址,还原其类型。因为快搜和免费发布咨询网址中,类型很混杂,不能直接采用“?”进行截取,无法还原其原来类型,且整个数据集中占比很小,因此在处理数据环节可以对这部分数据进行删除。网址中不包含主网址、不包含关键字的网址有 101 条记录。
表 4-2-5 其他类型统计表
在查看数据的过程中,发现存在这样一部分用户,他们没有单击具体的网页(以.html后缀结尾),他们单击的大部分是目录网页,这样的用户可以称为“瞎逛”,总计有 7 668 条记录。分析其中的网页类型,统计结果见表 4-2-6。可以从中看出,小部分是与知识、咨询相关,大部分是与地区、教育和事务所相关的。这部分用户有可能是找律师服务的,或者是“瞎逛”的。
表 4-2-6 “瞎逛”用户点击行为分析
从上述网址类型分布分析中,可以发现一些与分析目标无关数据的规则:① 咨询发布成功页面;② 中间类型网页(带有 midques_关键字);③ 网址中带有“?”类型,无法还原其本身类型的快搜页面与发布咨询网页;④ 重复数据(同一时间同一用户访问相同网页);⑤ 其他类别的数据(主网址不包含关键字);⑥ 无点击.html 页面行为的用户记录;⑦ 律师的行为记录(通过快车-律师助手判断)。记录这些规则,有利于在数据清洗阶段对数据进行清洗操作。
上述过程就是对网址类型进行统计得到的分析结果,针对网页的点击次数也可进行下述分析。
(二)点击次数分析
统计分析原始数据用户浏览网页次数(以“真实 IP”区分)的情况,其结果见表 4-2-7,可以从表中发现浏览一次的用户占所有用户总量的 58%左右,大部分用户浏览的次数在 2~7次,用户浏览的平均次数是 3 次。
表 4-2-7 用户点击次数统计表
从表 4-2-7 中可以看出大约 80%的用户(不超过 3 次)只提供了大约 30%的浏览量(几乎满足二八定律)。在数据中,点击次数最大值为 42 790 次,对其进行分析,发现是律师的浏览信息(通过律师助手进行判断)。表 4-2-8 是对浏览次数达到 7 次以上的情况进行的分析,可以从中看出大部分用户浏览 8~100 次。
表 4-2-8 用户浏览 7 次以上情况
针对点击一次的用户浏览的网页进行统计分析,其结果见表 4-2-10。可以看出排名靠前的都是知识与咨询页面,因此可以猜测大量用户的关注都在知识或咨询方面。
表 4-2-10 点击一次用户浏览网页统计
(三)网页排名
由分析目标可知,个性化推荐主要针对以 html 为后缀的网页(与物品的概念类似)。从原始数据中统计以 html 为后缀的网页的点击率,其点击率排名的结果见表 4-2-11。从表中可以看出,点击次数排名前 20 名中,“法规专题”占了大部分,其次是“知识”,然后是“咨询”。
但是,从前面分析的结果中可知,原始数据中与咨询主题相关的记录占了大部分。在其 html后缀的网页排名中,“专题与知识”占了大部分。通过对业务了解,专题是属于知识大类里的一个小类。在统计以 html 为后缀的网页点击排名时,出现这种现象的原因见表 4-2-12。其中,知识页面相对咨询的页面要少很多,当大量用户在浏览咨询页面时,呈现一种比较分散的浏览次数,即其各个页面点击率不高,但是其总的浏览量高于知识。所以造成网页排名中咨询方面的排名比较低。
表 4-2-11 点击率排名表
表 4-2-12 类型点击数
从原始 html 的点击率排行榜中可以发现如下情况,排行榜中存在这样两种类似的网址“http://www.****.com/infb/hunyin/lhlawlhxy/201107071376932.html”和“http://www.****.com/
info/hunyin/lhlawlhxy/20110707137693.html”。通过访问其网址,发现两者属于同一网页,但由于系统在记录用户的访问网址的信息时会将其记录在数据中。因此,在用户访问网址的数据中存在这些翻页的情况,针对这些翻页的网页进行统计,结果见表 4-2-13。
表 4-2-13 翻页的网页统计结果
通过了解业务,同一网页中登录次数最多都是从外部搜索引擎直接搜索到的网页。对其中的浏览翻页的情况进行分析,平均 60%~80%的人会选择看下一页,基本每一页都会丢失20%~40%的点击率。同时,对知识类型网页进行检查,发现页面上并无全页显示功能,但是知识页面中大部分都存在翻页的情况。这样就造成了大量的用户基本选择浏览 2~5 页后,很少会选择浏览完全部的内容。因此,用户就会直接放弃此次搜索,从而增加网站的跳出率,降低了客户的满意度,不利于企业的长期稳定发展。
(四)数据预处理
本案例在原始数据探索分析的基础上,呈现与分析目标无关或模型需要处理的数据,针对此类数据进行处理。其中涉及的数据处理方式有:数据清洗、数据集成和数据变换。通过这几类处理方式,将原始数据处理成模型需要的输入数据,其数据处理流程图如图 4-2-1所示。
图 4-2-1 数据处理流程
1. 数据清洗
从探索分析的过程中发现与分析目标无关的数据,归纳总结其数据满足如下规则:中间页面的网址、咨询发布成功页面、律师登录助手的页面等。将其整理成删除数据的规则,其清洗的结果见表 4-2-14。从表中可以发现,律师用户信息占了所有记录的 22%左右。其他类型的数据,占比很小,大概 5%。
表 4-2-14 规则清洗表

经过上述数据清洗后的记录中仍然存在大量的目录网页(可理解为用户浏览信息的路径),在进入推荐系统时,这些信息的作用不大,反而会影响推荐的结果,因此需要进一步筛选以 html 为后缀的网页。根据分析目标以及探索结果可知,咨询与知识是其主要业务来源,故需筛选咨询与知识相关的记录,将此部分数据作为模型分析需要的数据。
针对数据进行清洗操作,Python 实现的代码清单(部分)如下:
代码清单 3:Python 访问 MariaDB(MySQL)数据库进行清洗操作。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine ( 'mysql+pymysql: / /root: 123456@ 127.0.0.1: 3306/test?
charset=utif 8 ') sql = pd.read_sql(* all_gzdata',engine,chunksize = 10000)
for i in sql:
d = i [ [ ' reallP',' fullURL1 ] ] #只要网址列
d = d[d [' fullURL' ] . str. contains (* \ .html') ] . copy () #只要含有.html 的网址
#保存到数据库的 cleaned_gzdata 表中(如果表不存在则自动创建)
d.to_sql(* cleaned_gzdaengine,index = False,if_exists = * append')
2. 数据变换
由于在用户访问知识的过程中,存在翻页的情况,不同的网址属于同一类型的网页,见表 4-2-15。数据处理过程中需要对这类网址进行处理,最简单的处理方法是将翻页的网址删掉。但是,用户访问页面是通过搜索引擎进入网站的,所以其入口网页不一定是其原始类别的首页,采用删除的方法会损失大量的有用数据,在进入推荐系统时,会影响推荐结果。因此,针对网页需要还原其原始类别,处理方式为首先识别翻页的网址,然后对翻页的网址进行还原,最后针对每个用户访问的页面进行去重操作,其操作结果见表 4-2-16。
表 4-2-15 用户翻页网址表
表 4-2-16 数据变换后的用户翻页表

有关用户翻页的数据处理代码清单如下:
代码清单 4:Python 访问 MariaDB(MySQL)数据库进行数据变换。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine ('mysql+pymysql:/ /root:1234560127.0.0.1:3306/test?charset=utf
8 *) sql = pd.read_sql(*cleaned_gzdata',engine,chunksize = 10000)
for i in sql:#逐块变换并去重
d = i . copy ()
d[ *fullURL' ] = d[ 'fullURL' ] .str. replace (*_\d{0,2} .html*,1 .html1) # 将下划线后面部 分去掉,规范为标准网址
d = d. drop_duplicates () #删除重复记录
d.to_sql('changed_gzdata *,engine,index = False,if_exists = * append') #保存 代码
详见:demo/code/ sql data change.py
由于在探索阶段发现有部分网页的所属类别是错误的,需对其数据进行网址分类,且分析目标是分析咨询类别与知识类别,因此需对这些网址进行手动分类,其分类的规则和结果见表 4-2-17。其中对网址中包含“ask”“askzt”关键字的记录人为归类至咨询类别,对网址中包含“zhishi”“faguizt”关键字的网址归类为知识类别。
表 4-2-17 网页类别规则
因为目标是需要为用户提供个性化的推荐,在处理数据的过程中需要进一步对数据进行分类,其分类方法如图 4-2-2 所示,图中知识部分是由很多小的类别组成。由于所提供的原始数据中知识类别无法进行内部分类,故从业务上进行分析,可以采用其网址的构成对其进行分类。对表 4-2-18 中的用户访问记录进行分类,其分类的结果见表 4-2-19。
图 4-2-2 网页分类图
表 4-2-18 网页分类表
表 4-2-19 网页分类结果表

网址分类的数据处理代码清单如下:
代码清单 5:Python 访问 MariaDB(MySQL)数据库进行网址分类。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine ( ' mysql+pymysql : //root : 1234560127.0.0.1 : 3306/test ?charset=utf8 *) sql = pd.read_sql(* changed_gzdata *,engine,chunksize = 10000)
for i in sql:#逐块变换并去重
d = i.copy()
d[ * type_l' ] = d[' fullURL' ] #复制一列
d[ Ttype_l1 ] [d[ 'fullURL* ] . str. contains('(ask)|(askz 7t),)]='zixun ' # 将含有 ask、
ask7t 关键字的网址的类别归为咨询(后面的规则就不详细列出,实际问题自己添加即可)
d. to sql(' splited gzdata ',engine,index = False,if exists = ' append*) #保存代码详见:demo/code/ sql data split.py
统计分析每一类中的记录,以知识类别为例进行统计分析,见表 4-2-20。可见其网页的点击率基本满足二八定律,即 80%的网页只占了浏览量的 20%左右。通过这个规则,按点击
行为进行分类,20%的网页是热点网页,其他 80%的页面属于点击次数少的。因此在进行推荐过程中,需要将其分开进行推荐,以达到最优的推荐效果。
表 4-2-20 知识点击次数统计表

3. 属性规约
由于推荐系统模型的输入数据需要,需对处理后的数据进行属性规约,提取模型需要的属性。本案例中模型需要的数据属性为用户和用户访问的网页。因此删除其他属性,只选择用户与用户访问的网页,其输入数据集见表 4-2-21。
表 4-2-21 模型输入数据集

4. 模型构建
在实际应用中,构造推荐系统时,并不是采用单一的推荐方法进行推荐。为了实现较好的推荐效果,大部分都结合多种推荐方法将推荐结果进行组合,最后得出推荐结果。在组合推荐结果时,可以采用串行或者并行的方法。本例所展示的是并行的组合方法,如图 4-2-3 所示。
图 4-2-3 推荐系统流程
针对此项目的实际情况,其分析目标的特点为:长尾网页丰富、用户个性化需求强烈、推荐结果的实时变化;结合原始数据的特点:网页数明显小于用户数。本例采用基于物品的协同过滤推荐系统对用户进行个性化推荐,以其推荐结果作为推荐系统结果的重要部分。因其利用用户的历史行为为用户进行推荐,可以令用户容易信服其推荐结果。
基于用户和基于物品的协同过滤算法的区别在于:基于用户的协同过滤回答的是“将物品 A 推荐给哪个用户?”(假设答案是用户 B),基于物品的协同过滤回答的是“将哪个物品推荐给用户 B?”(在前面的假设下,答案是 A)。也就是说,两者的问法并不一样,但是最终的推荐结果是相同的。基于用户的协同过滤是用在用户少、物品多的场景,反之,基于物品的协同过滤就是用在用户多、物品少的场景。总的来说,都是为了减少计算量。而在数学上,两者的区别是在输入的用户-物品评分矩阵中,要不要进行转置,换句话说,只要对用户-物品评分矩阵进行转置,就可以将基于用户和基于物品的协同过滤相互转换。
基于物品的协同过滤系统的一般处理过程:分析用户与物品的数据集,通过用户对项目的浏览与否(喜好)找到相似的物品,然后根据用户的历史喜好,推荐相似的项目给目标用户。图 4-2-4 是基于物品的协同过滤推荐系统图。从图中可知用户 A喜欢物品 A 和物品 C,用户 B 喜欢物品 A、物品 B和物品 C,用户 C 喜欢物品 A。从这些用户的历史喜好可以分析出物品 A 和物品 C 是比较类似的,喜欢物品 A 的人都喜欢物品 C,基于这个数据可以推断用户 C 很有可能也喜欢物品 C,所以系统会将物品 C 推荐给用户 C。
图 4-2-4 基于物品的协同过滤推荐系统图
根据上述处理过程可知,基于物品的协同过滤算法主要分为两步。
(1)计算物品之间的相似度。
(2)根据物品的相似度和用户的历史行为给用户生成推荐列表。
其中,关于物品相似度计算的方法有:① 夹角余弦;② 杰卡德(Jaccard)相似系数;③ 相关系数等。将用户对某一个物品的喜好或者评分作为一个向量,例如所有用户对物品 1的评分或者喜好程度表示为 ,所有用户对物品 M 的评分或者喜好程度表示为 ,其中 为物品, 为用户数。可以采用上述几种方法计算两个物品之间的相似度。由于用户的行为是二元选择(0-1 型),因此本例在计算物品的相似度过程中采用杰卡德相似系数法。
在协同过滤系统分析的过程中,用户行为存在很多种,例如浏览网页与否、是否购买、评论、评分、点赞等行为。如果要采用统一的方式表示所有行为是很困难的,因此,只能针对具体的分析目标进行具体表示。在本例中,原始数据只记录了用户访问网站的浏览行为,因此用户的行为是浏览网页与否,并没有进行类似电子商务网站上的购买、评分和评论等用户行为。
完成各个物品之间的相似度的计算后,即可构成一个物品之间的相似度矩阵,类似于表4-2-22。通过采用相似度矩阵,推荐算法会给用户推荐与其物品最相似的 个物品。采用公式 ,度量了推荐算法中用户对所有物品的感兴趣程度。其中,R 代表用户对物品的兴趣,S/M 代表所有物品之间的相似度,为用户对物品感兴趣的程度。因为用户的行为是二元选择(是与否),所以在用户对物品的兴趣 R 矩阵中只存在 0 和 1。
表 4-2-22 相似度矩阵
由于推荐系统是根据物品的相似度以及用户的历史行为对用户的兴趣度进行预测并推荐,因此在评价模型的时候需要用到一些评测指标。为了得到评测指标,一般是将数据集分成两部分:大部分数据作为模型训练集,小部分数据作为测试集。通过训练集得到的模型,在测试集上进行预测,然后统计出相应的评测指标,通过各个评测指标的值可以知道预测效果的好与坏。
本例采用随机打乱数据的方法完成模型的评测,具体方法为:首先用随机函数打乱原始数据的顺序(用 random 库的 shuffle()函数可以轻松做到),然后将用户行为数据集按照均匀分布随机分成 M 份(本例取 M=10),挑选一份作为测试集,将剩下的份作为训练集。然后在训练集上建立模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。为了保证评测指标并不是过拟合的结果,需要进行多次重复,由于开始时的随机函数打乱顺序保证了测试的随机性,因此,仅需要少数几次试验,就可以得出比较稳定可靠的评测结果,最后将试验测出的评测指标的平均值作为最终的评测指标。
5. 基于物品的协同过滤
基于协同过滤推荐算法包括两部分:基于用户的协同过滤推荐和基于物品的协同过滤推荐。本例结合实际情况,选择基于物品的协同过滤算法进行推荐,其模型构建的流程如图 4-2-5所示。
图 4-2-5 基于物品协同过滤建模流程
其中,训练集与测试集是通过交叉验证的方法划分后的数据集。通过协同过滤算法的原理可知,在建立推荐系统时,建模的数据量越大,越能消除数据中的随机性,得到的推荐结果对比数据量小要好。但是数据量越大,模型建立以及模型计算耗时就越久。因此,本例选择数据处理后的婚姻与咨询的数据,其数据分布情况见表 4-2-23。在实际应用中,应当以大量的数据进行模型构建,得到的推荐结果相对会好些。
表 4-2-23 模型数据统计表
在实际数据中,物品数目过多,建立的用户物品矩阵与物品相似度矩阵是一个很庞大的矩阵。因此,在用户物品矩阵的基础上采用杰卡德相似系数的方法,计算出物品相似度矩阵。通过物品相似矩阵与测试集的用户行为,计算用户的兴趣度,获得推荐结果,进而计算出各种评价指标。
为了对比个性化推荐算法与非个性化推荐算法的好坏,本例选择了两种非个性化算法和一种个性化算法进行建模,并对其进行模型评价与分析。两种非个性化算法为:Random 算法和 Popular 算法。其中,Random 算法是每次都随机挑选用户没有产生过行为的物品并推荐给他。Popular 算法是按照物品的流行度,为用户推荐他没有产生过行为的物品中最热门的物品。个性化算法为基于物品的协同过滤算法。利用 3 种算法,采用相同的交叉验证的方法,对数据进行建模分析,获得各个算法的评价指标。
6. 模型评价
如何去评价一个推荐系统的优劣?一般可以从如下几个方面整体进行考虑:用户、物品提供者、提供推荐系统网站。好的推荐系统能够满足用户的需求,推荐其感兴趣的物品。同时在推荐的物品中,不能全部是热门的物品,也需要用户反馈意见帮助完善其推荐系统。因此,好的推荐系统不仅能预测用户的行为,而且能帮助用户发现可能会感兴趣,但却不易被发现的物品。同时,推荐系统还应该帮助商家将长尾中的好商品发掘出来,推荐给可能对它们感兴趣的用户。在实际应用中,评测推荐系统对三方影响是必不可少的。评测指标主要来源于 3 种评测推荐效果的试验方法,即离线测试、用户调查和在线测试。
离线测试是通过从实际系统中提取数据集,然后采用各种推荐算法对其进行测试,获得各个算法的评测指标。这种试验方法的好处是不需要真实用户参与。离线测试的指标和实际商业指标存在差距,比如预测准确率和用户满意度之间就存在很大差别,高预测准确率不等于高用户满意度。所以,当推荐系统投入实际应用之前,需要利用测试的推荐系统进行用户调查。
用户调查利用测试的推荐系统调查真实用户,观察并记录他们的行为,并让他们回答一些相关的问题。通过分析用户的行为和他们反馈的意见,判断测试推荐系统的好坏。
顾名思义,在线测试就是直接将系统投入实际应用中,通过不同的评测指标比较不同的推荐算法的结果,如点击率、跳出率等。
由于本例中的模型是采用离线的数据集构建的,因此在模型评价阶段采用离线测试的方法获取评价指标。
在某些电子商务的网站中,存在对物品进行打分的功能。在此种数据情况下,如果要预测用户对某个物品的评分,就需要用预测准确度的数据表现方式,其中测评的指标有均方根误差(RMSE)、平均绝对误差(MAE)。
在电子商务网站中,用户只有二元选择,如喜欢与不喜欢、浏览与否等。针对这种类型的数据预测,就要用到分类准确度。其评测指标有准确率(P,precesion),它表示用户对一个被推荐产品感兴趣的可能性。召回率(R,recall)表示一个用户喜欢的产品被推荐的概率。指标表示综合考虑准确率与召回率因素,更好地评价算法的优劣。
由于本例用户的行为是二元选择,因此在对模型进行评价的指标为分类准确度指标。针对婚姻知识类与咨询类的数据进行模型构造,通过 3 种推荐算法,以及不同 K 值(推荐 K 取值为 3、5、10、15、20、30)的情况下所得出的准确率与召回率的评价指标。婚姻知识类的评价指标如图 4-2-6 所示。从图中可看出,Popular 算法是随着推荐个数 K 的增加,其召回率R 将变大,准确率 P 将变小。基于物品的协同过滤算法的不同,随着推荐个数 K 的增加,其召回率 R 变大,准确率 P 也会上升。当达到某一临界点时,其准确率 P 随着 K 的增大而变小。在此数据下,随机推荐的结果最差,但是随着 K 值的增加,其 F1 值也在增加,而 Popular 算法的推荐效果随着 K 值的增加会越来越差,其 F1 值一直在下降,相对协同过滤算法,在 K = 5 时,其 F1 值最大,然后会随着 K 值增加而下降。比较不同算法之间的差异,从表中可以看出,随机推荐的效果最差。当 K 取值 3 和 5 时,Popular 算法优于协同过滤算法。但是当 K值增加时,其推荐效果就不如协同过滤算法。
图 4-2-6 知识类准确率-召回率
对于咨询类的数据,3 种算法得出的准确率与召回率的结果如图 4-2-7 所示。可以看出Popular 算法、随机算法的准确率和召回率都很低。但是协同过滤算法推荐的结果比其他算法推荐要好得多。产生这种结果主要是因为数据问题:① 咨询类的数据量不够;② 业务上分析咨询的页面会很多,很少存在大量访问的页面。在此数据下,Popular 算法与随机推荐算法的结果要差,其 F1 值基本上是 0。在协同过滤算法中,当 K = 5 时,其 F1 值最大,然后会随着 K 值增加而下降。针对这种情况,协同过滤算法优于其他两种算法。
4-2-7 咨询类准确率-召回率