发明名称 一种商品候选集推荐方法
摘要 本发明公开了一种商品候选集推荐方法,包括以下步骤:频率矩阵的计算,包括关联矩阵和频率矩阵的计算,其中频率矩阵中的每个元素表示商品i跳转到商品j占商品i跳转到其他商品的比值。商品推荐候选集的推荐策略,在分析了一种基于阈值的传统方法与一种前K项最大值的方法的优缺点之后,提出了一种综合的推荐策略。该推荐策略使用用户浏览的会话序列作为推荐规则的条件,既考虑到了用户的历史浏览商品,又考虑到了当前浏览商品,综合了前两种推荐策略的优点。
申请公布号 CN103839167A 申请公布日期 2014.06.04
申请号 CN201210475495.4 申请日期 2012.11.21
申请人 大连灵动科技发展有限公司 发明人 梅昱婷;刘博
分类号 G06Q30/02(2012.01)I;G06F17/30(2006.01)I 主分类号 G06Q30/02(2012.01)I
代理机构 大连东方专利代理有限责任公司 21212 代理人 曲永祚
主权项 1.一种商品候选集推荐方法,其特征在于包括以下步骤:A、频率矩阵的计算推荐模型要完成的任务就是发现商品中商品集之间的关联;更确切的说,就是通过量化的数字描述所有商品集P子集B的出现对子集R的出现有多大的影响;其中P={p<sub>1</sub>,p<sub>2</sub>,....p<sub>n</sub>},B={b<sub>1</sub>,b<sub>2</sub>,....b<sub>n</sub>},R={r<sub>1</sub>,r<sub>2</sub>,....r<sub>n</sub>}是商品的集合,其中P包含所有的商品,B和R是P的两个子集,n、p、q分别是P、B、R三个集合中商品的数量;B是系统的输入数据,P是系统的输出数据;一个推荐规则可以表示成<img file="FDA00002444674400011.GIF" wi="161" he="48" />这里<img file="FDA00002444674400012.GIF" wi="349" he="44" />并且<img file="FDA00002444674400013.GIF" wi="232" he="52" />一般而言,如果把事务作为规则分析的最小单位,那么得到的推荐结果就应该是更加精确的;原因在于:在一次连续的访问过程中,用户的兴趣都是稳定不变的,每一个事务都体现了用户当时的兴趣所在,针对事务进行分析相当于针对兴趣进行分析;同一个用户可能会有多次访问的经历,会存在多个不同的事务,但是这多个事务恰好反映了该用户在不同时刻,不同环境下不同的兴趣和爱好;针对访问事务进行分析就可以发现用户当前的兴趣所在,而以用户为基本单位进行分析得到的结果往往都是该用户以前感兴趣的产品,也就无法为用户提供更好的推荐服务;通过扫描事务集中的全部事务可以构造商品浏览的“关联矩阵”A,由于矩阵A是基于全部事务生成的,所以其包含了所有用户的浏览模式和兴趣信息;关联矩阵中的每一项都表示商品i与商品j之间的关联性;<maths num="0001"><![CDATA[<math><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>A</mi><mn>1,1</mn></msub></mtd><mtd><mrow><msub><mi>A</mi><mn>1,2</mn></msub><mtext></mtext></mrow></mtd><mtd><mtext>&CenterDot;&CenterDot;&CenterDot;&CenterDot;&CenterDot;&CenterDot;</mtext></mtd><mtd><msub><mi>A</mi><mrow><mn>1</mn><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>A</mi><mn>2,1</mn></msub></mtd><mtd><msub><mi>A</mi><mn>2,2</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>A</mi><mrow><mn>2</mn><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>A</mi><mrow><mi>N</mi><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>A</mi><mrow><mi>N</mi><mo>,</mo><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>A</mi><mrow><mi>N</mi><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr></mtable></mfenced></math>]]></maths>关联矩阵A中的下标i,j都是商品的简化表示,在预处理环节识别出日志包含的所有页面中的商品,并采用商品代码简化表示,方便后续步骤的关联规则分析;单元格A(1,2)=80表示所有用户在浏览过程中从商品1跳转到商品2的次数为80;根据关联矩阵A计算得到各商品之间的频率矩阵F;<maths num="0002"><![CDATA[<math><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>F</mi><mn>1,1</mn></msub></mtd><mtd><mrow><msub><mi>F</mi><mn>1,2</mn></msub><mtext></mtext></mrow></mtd><mtd><mtext>&CenterDot;&CenterDot;&CenterDot;&CenterDot;&CenterDot;&CenterDot;</mtext></mtd><mtd><msub><mi>F</mi><mrow><mn>1</mn><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>F</mi><mn>2,1</mn></msub></mtd><mtd><msub><mi>F</mi><mn>2,2</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>F</mi><mrow><mn>2</mn><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>F</mi><mrow><mi>N</mi><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>F</mi><mrow><mi>N</mi><mo>,</mo><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>F</mi><mrow><mi>N</mi><mo>,</mo><mi>N</mi></mrow></msub></mtd></mtr></mtable></mfenced></math>]]></maths>频率矩阵F中下标为(i,j)的元素F(i,j)由下述公式计算得到:<maths num="0003"><![CDATA[<math><mrow><mi>F</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>A</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow><msub><mi>A</mi><mi>i</mi></msub></mfrac><mo>,</mo><mn>1</mn><mo>&le;</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>&le;</mo><mi>n</mi></mrow></math>]]></maths>其中<maths num="0004"><![CDATA[<math><mrow><msub><mi>A</mi><mi>i</mi></msub><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mi>A</mi><mrow><mo>(</mo><mi>i</mi><mo>,</mo><mi>j</mi><mo>)</mo></mrow></mrow></math>]]></maths>F(i,j)表示由商品i跳转到商品j占所有从商品i跳转到其它商品的比率;B、商品推荐候选集的推荐策略根据F(i,j)可以得到用户访问了商品i之后接着访问商品j的概率,由此便可以根据抓取的用户当前访问的页面,以频率矩阵F为根据向用户进行商品推荐;可以使用三种推荐策略:B1、传统的方法是规定一个推荐阈值β,抓取到当前用户访问的商品编号为P1,把F(P<sub>1</sub>,j)≥β的商品作为推荐集;但是这种方法存在很大的弊端,β很难确定;对同一个商品而言,β确定过小就会得到大量的推荐商品,用户还要从大量的推荐商品集中查找自己喜欢的商品,不仅分散了用户的注意力,而且用户的选择负担仍然很重;β确定过大,计算出的推荐商品数量少,有可能会出现用户无从选择的情况,从而无法满足用户的需求;对多个商品而言,为了达到较好的推荐效果,就要为每个商品确定合适的β,但是随着商品的数量增大,这个方案的难度也在不断的加大,还要有管理人员的干预;更进一步是,频率矩阵F中的数值是随着用户的浏览而不断变更的,如果是由人工来确定β的话也是不可能的,所以说这种基于阈值的推荐选择方法是不可取的;本文使用的方法是假设抓取到当前用户访问的商品编号为P1,那么从矩阵F中选出F(P<sub>1</sub>,j)数值最大的前k个商品编号,记做R1,R1={r<sub>1</sub>,r<sub>2</sub>,r<sub>3</sub>,...r<sub>i</sub>,...r<sub>k</sub>},把R1作为推荐候选集,即<img file="FDA00002444674400024.GIF" wi="218" he="43" />包含k个推荐商品;这种方法的优势是:在任何情况下,给用户的推荐商品数量都是固定的,只要确定一个合适的k值就可以方便的为用户推荐k个商品,至少在数量上是稳定的;B2、假设抓取到当前用户访问的商品为P1,那么从频率矩阵F中选出F(P<sub>1</sub>,j)数值最大的前x个商品,记做R1,假设R1={r<sub>1</sub>,r<sub>2</sub>,r<sub>3</sub>,...,r<sub>x</sub>},再把R1作为一个输入数据,把R1中的任意元素r<sub>i</sub>(0&lt;i&lt;x)看作P2,分别选出F(P<sub>2</sub>,j)排名靠前的y个商品代码R2,求R2<sub>l</sub>(0&lt;l&lt;x)的并集记做R2,这样推荐候选集就是R1和R2的并集:<img file="FDA00002444674400031.GIF" wi="383" he="53" />最多包含x+x×y个推荐商品;就可以根据实际的要求确定x和y的值,从而获得不同数量的推荐商品;B3、上面提出的两个方案都是仅仅依据用户当前浏览的商品作为条件进行推荐,不足之处:输入数据B只有一个商品,虽然推荐的方法有所不同,但是推荐的结果都是固定不变的;即所有的用户在浏览同一商品时,他们看到的推荐商品都是相同的;系统是完成了推荐的任务,但是无法根据用户的浏览状态不同推荐不同的商品;存在的缺点也带来了优点,既然所有条件的推荐结果固定不变,就可以在线下计算出所有的推荐结果,也会提高商品推荐的实时性;针对以上两种方案的不足,提出了第三种方案;抓取到用户当前浏览的商品编号P1和上一个商品编号P0,组成会话序列(P0,P1);从频率矩阵中选出F(P1,j)数值最大的前x个商品,记做R1;假设R1={r<sub>11</sub>,r<sub>22</sub>,r<sub>33</sub>,...,r<sub>xx</sub>},把R1作为一个输入数据,另外把r<sub>11</sub>,r<sub>22</sub>,r<sub>33</sub>,...,r<sub>xx</sub>看作i,分别选出F(i,j)排名靠前的y个商品,记做R2;除此之外从矩阵F中选出F(P0,j)数值最大的z个商品,记做R3;这样推荐候选集结果就是R1,R2和R3的并集,即<img file="FDA00002444674400032.GIF" wi="649" he="50" />最多有x+x×y+z个推荐商品;之所以还要选择R3是因为R3包含的商品和P0有很高的关联度,而且具有相似兴趣的用户访问了P0之后有很高比例的用户都访问了R3,既然当前用户访问了P0,那么假设他可能也对R3感兴趣;调整x,y和z的大小,就可以调整推荐商品的数量;该推荐策略使用用户浏览的会话序列作为推荐规则的条件,考虑到了用户的历史浏览商品和当然浏览商品;用户浏览的序列不同,推荐的商品也就不同,基本可以达到个性化推荐的要求;该策略只选择了长度为二的商品浏览序列,没有选择更长序列的原因在于,P0代表着用户浏览的历史商品,通过它可以推测出商品集R3,如果增加历史商品的数量,推荐的结果受历史商品的影响较大,对用户兴趣的转移不敏感;P1是用户当前浏览商品,通过它推测出商品集R2和R3,R2和R3已经是猜测的结果了,如果再用它们来推荐商品,推荐出的结果集合误差会比较大,影响商品的推荐的准确度,也会间接影响用户的感觉。
地址 116023 辽宁省大连市高新区火炬路1号506室