《基于某淘鞋网的商品个性化推荐毕业论文.doc》由会员分享,可在线阅读,更多相关《基于某淘鞋网的商品个性化推荐毕业论文.doc(30页珍藏版)》请在三一办公上搜索。
1、基于某淘鞋网的商品个性化推荐 作者:杨怡 黄依凡 吴昕 吴清 马柔萍班 级:计算机1102指 导 老 师:蒋盛益报告提交时间:2013-12-20 目录摘要3一、绪论41.1、项目背景41.2、数据挖掘在个性化推荐系统中的意义61.3、数据挖掘在个性化推荐系统中的应用现状61.4、数据挖掘技术主要方法71.5、数据挖掘在个性化推荐系统中的数据处理过程:81.6、目标与可行性方法9二、数据分析102.1、本次数据挖掘所用到的属性及解释:102.2、对各分类信息进行统计:11112.3、各分类信息统计结论13三、推荐系统设计143.1、系统设计流程143.2、生成全国热门表算法:153.3、生成省
2、份热门表算法:173.4、生成随机推荐表算法183.5、抽取历史记录生成推荐表算法:193.6、生成新用户推荐列表算法:193.7、生成老用户推荐列表算法:203.8、评价指标算法:21四、系统个性化推荐的实现254.1、输入模块254.2、输出模块26五、局限性分析275.1、个性化推荐在电子商务中应用的局限性:275.2本个性化推荐系统软件的局限性:27六、总结与体会28附录30附录1网上购鞋情况调查问卷30摘要“基于某淘鞋网的商品个性化推荐”项目是根据数据挖掘研究方法以及当前个性化推荐技术现状,通过对得到的数据进行处理,提取出三个关键属性。通过将“根据ip判断所在省份的热门、访问日期的全
3、国热门、浏览记录、随机”推荐这四者,计算并比较权重,按照一定的标准进行合适的结合,得出7条推荐数据,其中每条推荐数据中包括了“品牌、类型、男/女”这三个最重要的商品属性,使得该商品个性化推荐系统更智能、更准确。关键词:某淘鞋网、个性化推荐、历史记录、热门表摘要要体现选题的背景,如何做?得到什么结论。关键词重新提炼一、绪论1.1、项目背景中国互联网络信息中心(CNNIC)在北京发布的第 29 次中国互联网络发展状况统计报告显示:电子商务类应用继续保持稳步发展,其中网络购物用户规模达到 1.94 亿人,增长率达到 20.8%。随着电子商务的迅猛发展,提供电子商务的网站数量和电子商务网站上的商品信息
4、数量都呈现出指数增长的态势。面对如此海量的商品信息,如何便捷、快速地获取到用户感兴趣的商品信息已经成为了一个热门研究课题。本项目是对某一特定的淘鞋网进行研究,主要为购买鞋的网购者推荐相应的“品牌、类型、男/女”的鞋子。在项目启动前,我们做了网上购鞋情况调查问卷(见附录1),发放问卷20份,收回问卷20份,量太少!问卷收回率100%,问卷覆盖范围为广外大三信息学院部分学生。调查结果显示:由此可知,绝大部分消费者是经常浏览购物网站的。但消费者网购的商品中是否曾经购过鞋子呢?我们的调查问卷调查结果显示如下:调查结果显示,大约85%的网购者曾经在网上购买过鞋子,由此可见,我们项目所研究的针对淘鞋网推荐
5、特定的“品牌、类型、男/女”具有重大的意义。项目启动前主要考虑的问题重点如下:不同品牌之间是否存在互斥?针对品牌互斥问题,我们进行了网上购鞋情况调查问卷,设计的问题是:您是否对特定的品牌有强烈偏好以至排斥相同类型的其他牌子(如阿迪达斯和耐克)?统计结果如下图: 分析结果得出以下结论: 大约90%的人不会强烈偏好特定品牌而排斥其他品牌 就目前中国人民的消费水平而言,购买者更在乎的是价格、质量,而不是特定的某一牌子。 绝大多数网购者反应,品牌之间的竞争只是他们公司的竞争,并不会影响到他们购买的选择。网购者可以接受由其他人介绍的各种品牌,也可以接受商品个性化自主为他们推荐的品牌。 所以,联系已有的相
6、关参考文献,就国内消费形势而言,商品个性化推荐系统没有必要考虑品牌的互斥。1.2、数据挖掘在个性化推荐系统中的意义往后几节再整合个性化推荐系统这个概念包含两部分的含义:推荐和个性化。推荐实质上是替用户评估他从来没见过的商品,这些商品可以是电影、书、笑话、网页、甚至还可以是旅游、音乐、电子产品等等;对用户来说,推荐根本上就是一个让用户自身对商品信息从未知到已知的过程。“基于某淘鞋网的商品个性化推荐”是为网购者推荐鞋子的,所推荐的商品属性包括“品牌、类型、男/女”,例如:耐克男运动鞋,阿迪达斯女板鞋,达芙妮女高跟鞋等等。所谓个性化,它体现出的是一种用户个体的个性,也就是这个用户不同的其他用户的地方
7、;在推荐领域中,个性化就要求推荐系统能针对不同的用户分析他的行为和兴趣然后在现有的商品中推荐用户感兴趣的商品,这个推荐结果对不同用户注定是不同的,是有针对性的,这些就体现出了推荐系统的个性化。在用户决定一个电子商务网站的前途的今天,个性化推荐系统就是一个为用户而生的系统,商品个性化推荐具有以下重大意义: 用户在访问海量商品信息时个性化推荐系统能帮助用户快速获取他感兴趣的商品,避免用户陷于到“信息超载”问题中而不能自拔。 优质的个性化推荐系统能为用户发掘用户新的兴趣点,为用户推荐一些他感兴趣但他从没听说过的商品。 商品个性化推荐,为用户节省大量的购买时间。帮助用户轻松地找到所想要购买的商品。 个
8、性化推荐系统在为用户带来个性、便捷的服务的同时,也为电子商务商家带来巨大的经济利益,引导用户购买本不打算购买的商品,既为本网站的商品做了宣传,也强烈地刺激的用户的消费欲望。1.3、数据挖掘在个性化推荐系统中的应用现状近十几年,随着科学技术飞速的发展,经济和社会都取得了极大的进步,与此同时,在各个领域产生了大量的数据,如人类对太空的探索,银行每天的巨额交易数据显然在这些数据中丰富的信息,如何处理这些数据得到有益的信息,人们进行了有益的探索。计算机技术的迅速发展使得处理数据成为可能,这就推动了数据挖掘技术的极大发展。近年来,如何提高商业网站的有效性,尤其是如何运用个性化推荐技术实现电子商务个性化服
9、务已逐渐成为一个能引起广泛兴趣的热点课题。但目前国内大多数电子商务网站的商品推荐通常是:推荐热门产品(即根据当前的购买量推荐);推荐相关产品(推荐相似的产品);根据用户浏览历史的推荐(较常见的是显示该用户曾经购买的商品)。可以说,前两种推荐由于根本未考虑不同用户的个性特点,因此推荐完全不具备个性化的特点,第三种推荐有一定的个性化成份,但多数网站还仅仅停留在仅针对该用户一个人的购买历史,只是为每个用户建立了一个个人购买档案,没有横向进行信息综合,因此没有协作推荐价值,所以也无法实现商品的实时综合推荐。传统的搜索算法只能帮助我们去检索商品信息,然后将同样的与关键字相关的商品信息呈现给所有用户。实质
10、上,传统的搜索算法是从海量的商品信息中过滤出与关键字相关的相关信息,针对特定用户自身的特定需求,它就显得无能为力了。因此针对特定网站进行相关产品推荐显得相当有必要。1.4、数据挖掘技术主要方法后续用到什么就介绍什么数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下几类分析方法: (1)关联分析关联分析就是从大量数据中发现项集之间有趣的关联或相关联系。随着大量数据不停地收集和存储,许多业界人士对于从他们的数据库中挖掘关联规则越来越感兴趣。从大量商务事务记录中发现有趣的关联关系,可以帮助许多商务决策的制定。关联分析的主要方法有Apriori算法等。(2)分类和预测分类和预测是两种数据分
11、析形式,可以用于提取描述重要数据类的模型或预测数据未来的趋势。就是研究已分类资料的特征,分析对象属性,据此建立一个分类函数或分类模型,然后运用该模型计算总结出的数据特征,将其他未经分类或新的数据分派到不同的组中。计算结果通常简化为几个离散值,常用来对资料作筛选工作。分类和预测的应用十分广泛, 例如,可以建立一个分类模型,对银行的贷款客户进行分类,以降低贷款的风险;也可以通过建立分类模型,对工厂的机器运转情况进行分类,用来预测机器故障的发生。分类的主要方法有ID3算法、C4.5算法、SLIQ算法、神经网络方法等。(3)聚类分析当要分析的数据缺乏描述信息,或是无法组成任何分类模式时就采用聚类的方法
12、,将异质母体区隔为较具同构性的群,即将组之间的差异识别出来,并对个别组内的相似样本进行挑选,实现同组数据相近,不同组数据相异。分类功能和聚类功能是不同的,分类是根据预先定好的一些特征值对对象分组,组或类是预先确定好的,而聚类是事先不知道的条件下根据对象的一些相似特征分组。聚类也便于将观察到的内容组织成分层结构,把类似的事件组织在一起。聚类分析的主要方法有划分方法、层次方法、基于网格的方法、统计学和神经网络方面的方法。(4)孤立点分析数据库中可能包含一些数据对象,它们与数据的一般行为或模式不一致。这些数据对象就是孤立点。许多数据挖掘算法试图使孤立点的影响最小化,或者排除它们。但在一些应用中孤立点
13、本身可能是非常重要的信息。例如在欺诈探测中,孤立点可能预示着欺诈行为。(5)时间序列分析在时间序列分析中,数据的属性值是随着时间不断变化的。这些数据一般在相等的时间间隔内取得,但是也可以在不相等的时间间隔内取得。通过时间序列图可以将时间序列数据可视化。时间序列分析目前有三个基本功能:一是模式挖掘,即通过分析时间序列的历史形态来研究事务的行为特征;二是趋势分析,即利用历史时间序列预测数据的未来数值;三是相似性搜索,即使用距离度量来确定不同时间序列的相似性。1.5、数据挖掘在个性化推荐系统中的数据处理过程:我们项目组所得到的原始数据大约有6万条,剔除与鞋子无关的数据后,并且经过预处理,得到有用的数
14、据约28000条。从得到的有用数据中抽出出数据的三个关键属性“品牌、类型、男女”,数据处理过程如下:从所得到的28000条数据中随机抽取5%作为测试集,剩下的95%作为训练集。测试集中所包含的数据包括了IP、IP所在的省份、品牌、类型、男女、访问日期。1.6、目标与可行性方法目标:“基于某淘鞋网的商品个性化推荐”精确地为用户推荐鞋子的“类型、品牌、男/女”这三个属性,力求精确率达到80%。用于帮助网店经营者提高营销及服务质量,更好地挖掘潜在客户及客户的购买潜能。我们项目的“基于某淘鞋网的商品个性化推荐”对热门商品、相似产品、浏览历史以及随机这四者结合,进行特地鞋子“品牌、类型、男/女”进行精确
15、的推荐。针对特定的淘鞋网站,实现的可行性方法如下:情况一:没有浏览历史的新IP: 立足于购买时间所处的全国热门鞋子品牌、类型, 以及访问IP所处的省份对应的热门鞋子品牌、类型,两者重叠呢? 随机挑选情况一:有浏览历史记录的旧IP: 在情况一的基础上,再加上根据浏览记录的推荐二、数据分析2.1、本次数据挖掘所用到的属性及解释:名称解释备注省份根据访问淘鞋网用户所用IP地址判断的来源省份品牌根据搜索的标题判断出的用户有意向购买的鞋子的品牌类型根据搜索的标题判断出的用户有意向购买的鞋子的类型男女根据用户的标题判断出用户有意向购买鞋子的男女属性访问日期用户访问淘鞋网的日期时用户访问淘鞋网的时间的小时部
16、分2.2、对各分类信息进行统计:省份属性统计条状图品牌属性统计条状图类型属性统计条状图男女属性统计条状图访问时间属性统计条状图2.3、各分类信息统计结论再整理 在本次统计中,共出现了34个省份,计样本总数为28103. 在本次统计中北京和广东省以12.3%和12.1%的绝对优势占据省份统计的前两名,分别高出第三名的浙江54.5%, 53.7%。? 在本次统计中,共出现了168个品牌,计样本总数为19038. 在这些品牌中,耐克,阿迪达斯,新百伦,安踏,特步,乔丹,达芙妮这六个品牌统计总和为15202,占总数79.8%。 在这168个品牌中搜索量小于10的有76各品牌,占品牌总数45.2%。 在
17、本次统计中,共出现了17种类型,计样本总数为10887. 在这其中,运动鞋所占比例为43.1%。 在本次统计中,共分为24个小时,计样本总数为28103. 在这其中,类型为空的占86.3%。 男女比例相近。 在本次统计中,访问时计样本总数为27289. 在这其中,网站访问量呈波动趋势,2023时之间访问量总和为7668,占28.1%。 凌晨35点时访问量处于低谷。 18点之后访问量一直处于较高的状态。结论:网站的访问显著增加在18点之后,即为下班之后的时间,与晚上21点达到高潮,一直保持在较高的状态,于凌晨3到5点处于低谷。所以网站进行网络广告投放时应注意时间,并且在网络访问高峰期加强对服务器
18、的维护,避免出现问题。用户搜索的时候多数不会加上男女属性的值,会从搜索结果界面再次进行选择,所以要优化搜索结果界面,让用户可以较快的找到自己想要的鞋子的男女属性。在男女偏好方面并没有太大差别,所以网站要保持男女鞋的比例均衡。用户对于运动鞋的需求量较大,并且倾向在网站上购买运动鞋。所以网站应加大对于运动鞋的品牌,类型颜色等种类的丰富,并且在做活动的时候以运动鞋为卖点可能取到较好的效果。在用户有搜索倾向的品牌中,少部分品牌占据了大部分的搜索量,大部分品牌仅有少数人搜索。网站可以着重加强对搜索量较大的品牌的议价能力,丰富这些品牌的品种并且使价格具有竞争力。对于搜索量较小的小众品牌要丰富品牌线,争取做
19、到用户搜索想要的品牌不会搜索不到的情况北京与广东是淘鞋网的两大购鞋大省,为购鞋主力,并且这两个省份的购买力较强,应加强对这两个省份的广告如线下实体广告的投放以增加用户忠诚。三、推荐系统设计3.1、系统设计流程步骤一:比对数据库,判断访问该淘鞋网站的IP是新IP还是曾经有历史记录的旧IP,并判断该IP所在的省份。步骤二:将数据进行预处理,筛选出IP所在的省份热门的品牌、类型,并选出访问日期那时候,筛选出全国热门的品牌、类型。步骤三:对于一个新IP,通过比较权重,分别从省份热门、全国热门、随机挑选,选出前3条、2条、2条数据作为品牌以及品牌所对应的类型推荐数据。步骤四:对于一个旧IP,通过比较权重
20、,分别从浏览历史记录、省份热门、全国热门、随机挑选,选出4条、1条、1条、1条作为品牌以及品牌对应的类型作为推荐数据。具体算法流程图如下 3条省热门2条全国热门2条随机1条随机1条全国热门1条省热门4条浏览历史新IP?输入IP开始 Y结束处理方法15天访问历史3-15天访问历史0-3天访问历史N3.2、生成全国热门表算法:算法源码不放在文档中,算法思想描述清楚就可以了算法一:生成每日全国热度表输入:近十五日数据集D;输出:全国热度表;ArrayList brand_listgetCount(brand)2;for(int i=0;igetCount(brand);i+) brand_listi
21、1 = countbrand(D); sort(brand_listi1);/品牌频数和排序;ArrayList type_listgetCount(type)2;for(int i=0;igetCount(type);i+) type_listi1 = counttype(D); sort(type_listi1);/类型频数和排序;ArrayList hot_temp55;for(int i=0;i5;i+) for(int j=0;j5;j+) hotij=brand_listi0,type_listj0; ArrayList hot252;for(int i=0;i25;i+)for(
22、int j=0;j5;j+) hoti0=hot_tempj0+,hot_temp0j; /产生无排序的热度备选数组;ArrayList brand_frequency52;for(int i=0;i5;i+) brand_frequencyi0=brand_listi0; brand_frequencyi1=getfrequency(brand_listi1); /品牌前五名的频率ArrayList type_frequency52;for(int i=0;i5;i+) type_frequencyi0=type_listi0; type_frequencyi1=getfrequency(t
23、ype_listi1); /类型前五名的频率for(int i=0;i25;i+) for(int j=0;j5;j+) hoti1=weight(brand_frequencyj1,type_frequencyj1); /产生热度表条目的权重sort(hot);/根据权重产生全国热度表procedure weight(brand_frequencyj1,type_frequencyj1)double result;result=brand_frequencyj1*type_frequencyj1;return result;3.3、生成省份热门表算法:算法二:生成每日省份热度表输入:近十五日
24、某省份数据集Di;输出:该省份热度表;ArrayList brand_listgetCount2;for(int i=0;igetCount;i+) brand_listi1 = countbrand(D); sort(brand_listi1);/品牌频数和排序;ArrayList type_listgetCount2;for(int i=0;igetCount;i+) type_listi1 = counttype(D); sort(type_listi1);/类型频数和排序;ArrayList hot_temp55;for(int i=0;i5;i+) for(int j=0;j5;j+
25、) hotij=brand_listi0,type_listj0; ArrayList hot252;for(int i=0;i25;i+)for(int j=0;j5;j+) hoti0=hot_tempj0+,hot_temp0j; /产生无排序的热度备选数组;ArrayList brand_frequency52;for(int i=0;i5;i+) brand_frequencyi0=brand_listi0; brand_frequencyi1=getfrequency(brand_listi1); /品牌前五名的频率ArrayList type_frequency52;for(in
26、t i=0;i5;i+) type_frequencyi0=type_listi0; type_frequencyi1=getfrequency(type_listi1); /类型前五名的频率for(int i=0;i25;i+) for(int j=0;j5;j+) hoti1=weight(brand_frequencyj1,type_frequencyj1); /产生热度表条目的权重sort(hot);/根据权重产生该省份热度表procedure weight(brand_frequencyj1,type_frequencyj1)double result;result=brand_fr
27、equencyj1*type_frequencyj1;return result;3.4、生成随机推荐表算法算法三:产生随机推荐表输入:品牌数据集D_brand,各品牌对应类型数据集Di_type;输出:随即推荐数据表ArrayList random_list = brand_list;for(int i=0;igetCount(brand);i+) random_listi1 = find_TopData_itemset(Di_Type); /产生随机推荐表3.5、抽取历史记录生成推荐表算法:算法四:产生随机推荐表输入:品牌数据集D_brand,各品牌对应类型数据集Di_type;输出:随即
28、推荐数据表ArrayList random_list = brand_list;for(int i=0;igetCount(brand);i+) random_listi1 = find_TopData_itemset(Di_Type); /产生随机推荐表3.6、生成新用户推荐列表算法:算法四:产生新人推荐表输入:该搜索日期全国热度表D,该搜索日期新人所在省份热度表Di,随机推荐表D_random,品牌及其男女属性对应表D_gender输出:新人推荐列表ArrayList recommend_list73;recommend_list01=find_item(D,1);recommend_li
29、st11=find_item(D,2);/抽取全国热门表前两条数据;recommend_list21=find_item(Di,1);recommend_list31=find_item(Di,2);recommend_list41=find_item(Di,3);/抽取省份热门表前三条数据;number1 = Math.random(0,getCount(random_list);number2 = Math.random(0,getCount(random_list);recommend_list51=find_item(D_random,number1);recommend_list61
30、=find_item(D_random,number2);/抽取随机推荐表两条数据for(int i=0;i7;i+) recommend_listi2=getGender(recommend_listi0,D_gender);/根据品牌及其男女属性对应表得出男女属性;procedure getGender(recommend_listi0,D_gender):int number;when brand = recommend_listi0)get gender = D_gender(brand);switch(gender) case 0: number = Math.random(1,2)
31、; if(number = 2) return 男; else return 女; break; case 1: return女; break; case 2: return男; break;3.7、生成老用户推荐列表算法:算法六:产生老客户推荐表输入:该搜索日期全国热度表D,该搜索日期老客户所在省份热度表Di,随机推荐表D_random,品牌及其男女属性对应表D_gender,四条推荐列表recommend_search;输出:老客户推荐列表ArrayList recommend_list73;recommend_list01=find_item(D,1);/抽取全国热门表第一条数据;rec
32、ommend_list11=find_item(Di,1);/抽取省份热门表第一条数据;number1 = Math.random(0,getCount(random_list);recommend_list21=find_item(D_random,number1);/抽取随机推荐表两条数据recommend_list31=find_item(recommend_search,1);recommend_list41=find_item(recommend_search,2);recommend_list51=find_item(recommend_search,3);recommend_li
33、st61=find_item(recommend_search,4);for(int i=0;i7;i+) recommend_listi2=getGender(recommend_listi0,D_gender);/根据品牌及其男女属性对应表得出男女属性;procedure getGender(recommend_listi0,D_gender):int number;when brand = recommend_listi0)get gender = D_gender(brand);switch(gender) case 0: number = Math.random(1,2); if(n
34、umber = 2) return 男; else return 女; break; case 1: return女; break; case 2: return男; break;3.8、评价指标算法:算法七:评价推荐结果准确性输入:推荐结果列表recommend_list,实际输入数据集D_true_search;输出:评价结果assess_result;double assess_result;ArrayList assess_brand&type72;ArrayList assess_brand&gender72;ArrayList assess_type&gender72;ArrayL
35、ist true_searchList32;true_searchList0=getBrand(D_true_search),getType(D_true_search);true_searchList1=getBrand(D_true_search),getGender(D_true_search);true_searchList0=getType(D_true_search),getGender(D_true_search);int i;for(i=0;i7;i+) assess_brand&typei=getBrand(recommend_list),getType(recommend_
36、list); assess_brand&genderi=getBrand(recommend_list),getGender(recommend_list); assess_type&genderi=getType(recommend_list),getGender(recommend_list);int count = 0;for(i=0;i7;i+) if (assess_brand&typei = true_searchList0) count +; break; else continue;for(i=0;i7;i+) if (assess_brand&genderi = true_s
37、earchList1) count +; break; else continue;for(i=0;i7;i+) if (assess_type&genderi = true_searchList2) count +; break; else continue;assess_result = count/3;/当用户3条属性均输入时的评估标准。*if(get_Null_Brand) ArrayList true_searchList32;true_searchList0=null,getType(D_true_search);true_searchList1=null,getGender(D_
38、true_search);true_searchList0=getType(D_true_search),getGender(D_true_search); int count = 0;for(i=0;i7;i+) if (assess_brand&typei1 = true_searchList01) count +=0.5; break; else continue;for(i=0;i7;i+) if (assess_brand&genderi1 = true_searchList11) count +=0.5; break; else continue;for(i=0;i7;i+) if
39、 (assess_type&genderi = true_searchList2) count +; break; else continue;assess_result = count/3;/当缺省品牌时的评估标准*if(get_Null_Type) ArrayList true_searchList32;true_searchList0=null,getType(D_true_search);true_searchList1=null,getGender(D_true_search);true_searchList0=getType(D_true_search),getGender(D_t
40、rue_search); int count = 0;for(i=0;i7;i+) if (assess_brand&typei1 = true_searchList01) count +=0.5; break; else continue;for(i=0;i7;i+) if (assess_brand&genderi1 = true_searchList11) count +; break; else continue;for(i=0;i7;i+) if (assess_type&genderi1 = true_searchList11) count +=0.5; break; else c
41、ontinue;assess_result = count/3;/当缺省类型时的评估标准if(get_Null_Gender) ArrayList true_searchList32;true_searchList0=null,getType(D_true_search);true_searchList1=null,getGender(D_true_search);true_searchList0=getType(D_true_search),getGender(D_true_search); int count = 0;for(i=0;i7;i+) if (assess_brand&typei1 = true_searchList01) count +; break; else continue;for(i=0;i7;i+) if (assess_brand&genderi1 = true_searchList11) count +=0.5; break; else continue;for(i=0;i7;i+) if (assess_type&genderi1 = true_searchList11) count +=0.5; break; else