标签归档:数据挖掘

基于KNN的相关内容推荐

  如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化。相关内容推荐最常见的两块就是“关联推荐”和“相关内容推荐”,关联推荐就是我们常说的购物篮分析,即使用购买了某商品的用户同时购买了什么这个规则来发现商品间的潜在联系,之前有相关的文章介绍——向上营销、交叉营销与关联推荐;关联推荐是基于用户行为分析的推荐,而相关内容推荐是基于内容固有特征的推荐,只与内容本身有关,与用户的行为完全无关,所以相关内容推荐的模型是一种“冷启动”的算法,不需要任何历史浏览访问数据的支持。

内容固有属性

  相关内容推荐因为完全不借助用户浏览行为的数据,所以底层数据不依赖于网站的点击流日志,唯一的基础数据就是内容的固有属性及完整信息。我们以豆瓣网的几大块内容为例来看看对于这些内容一般包含哪些固有属性:

书籍 书名、作者、出版时间、出版社、分类、标签
音乐 专辑名、歌手、发行时间、发行方、风格流派、标签
电影 电影名称、导演、演员、上映时间、制片方、类型、标签

  豆瓣很多地方都使用了“标签”这个词,用贴标签的形式来完成内容的分类和标识,但其实标签又分为很多种,有些标签是在内容生成时就被贴上的,有些可能是后续用户贴上去的,而且豆瓣一般为内容和标签定义了原始分类,如书籍分为文学、流行、文化……既然分类和标签内容源生就带有,那同样可以作为内容的固有属性。

  还需要说明的是,这里不涉及文本挖掘和字符切分模糊匹配等问题,因此内容的标题、简介和全文不参与文本相似度的分析,虽然这些可能在构建完整的相关内容模型中不可缺少,但这里只考虑一些固有属性是否相同实现简单应用。基于上述豆瓣几类内容的属性特征,选择和整理适合分析的内容属性如下:

attributes-of-content

  “作者”就是指内容的创造者,“来源”指内容的发布方或获取渠道,“分类”为内容归属的类别,“标签”可以包含对内容的各类描述信息和关键词等。这里为了能够尽可能清晰地描述整个分析模型和思路只选取了大部分内容都包含的一些属性,如果要构建更加高效的相关内容分析模型,需要更完整的内容属性,可以根据自身内容的特征进行属性的定义和选取。

KNN算法及应用

  KNN(K-Nearest Neighbor algorithm),K最近邻算法,通过计算样本个体间的距离或者相似度寻找与每个样本个体最相近的K个个体,算法的时间复杂度跟样本的个数直接相关,需要完成一次两两比较的过程。KNN一般被用于分类算法,在给定分类规则的训练集的基础上对总体的样本进行分类,是一种监督学习(Supervised learning)方法。

KNN

  这里我们不用KNN来实现分类,我们使用KNN最原始的算法思路,即为每个内容寻找K个与其最相似的内容,并推荐给用户。相当于每个内容之间都会完成一次两两比较的过程,如果你的网站有n个内容,那么算法的时间复杂度为Cn2,即n(n-1)/2。但是用内容固有属性有一个好处就是因为固有属性一旦创建后基本保持不变,因此算法输出的数据一旦计算好之后不需要重复计算去刷新,也就是对于网站内容而言,原有内容的数据在首次初始化之后可以不断重复使用,只要更新新增内容的数据就可以,数据的统计计算可以使用增量更新的形式,这样可以有效地减少服务器的计算压力。

相关内容模型

  有了基础数据和算法的支持,我们就可以创建数据模型了。先看下基础数据的类型,作者、分类、来源和标签都是字符型,其中作者、分类、来源基本可以当做是单个值的属性,标签一般包含多个值。首先由于都是字符可以确定属性之间相似性的判定只能通过“是否相同”,无法体现数值上的差异,所以对于作者、分类、来源这几个单值属性而言,比较的结果就是一个布尔型的度量,相同或者不相同;对于标签这个多值属性可以考虑使用Jaccard相关系数,但因为每个内容标签的个数存在较大差异,使用验证后的结果并不理想,所以不考虑使用(当然,如果内容的标签个数比较固定,Jaccard相关系数是有效的)。因此,直接创建加权相似度模型如下,首先是标签的相似度分值设定:

相同标签数 图书比例 相似度分值
0 70% 0
1 20% 1
2 6% 2
3 3% 4
>=4 1% 5

  再结合作者、分类和来源,通过加权设定总体的相似度分值:

属性 相同时分值 不同时分值 权重 加权分值分布
作者 1 0 25 [0,25]
分类 1 0 10 [0,10]
来源 1 0 15 [0,15]
标签 [1,5] 0 10 [0,50]

  将所有属性加权相似度分值的结果相加应该分布在[0,100],分值越高说明内容间的相似度越高。对于这种简单的加权相似度评分模型,估计又有很多人要问权重是怎么确定的,确实,这里的权重并没有通过任何定量分析模型的方法去计算,只是简单的经验估计,但估计的过程经过反复地调整和优化,也就是不断地尝试调整各属性的权重系数并输出结果,抽样检验结果是否符合预期、是否有提升优化的空间。

  基于上述内容间相似度的计算结果,套用KNN的原理实现相关内容推荐就异常简单了,只要根据每个内容与之比较的所有内容的相似度分值降序排列取前K个内容作为该内容的最相关内容推荐给用户就可以了。当然中间可能会涉及相同相似度分值的内容如何排序的问题(因为模型的关系分值分布可能不会很离散),建议如果相似度分值相同使用随机排序,以保证推荐结果有一定的变化,均匀内容的曝光。

  好了,所有的分析流程介绍完了,好像跟前一篇的距离和相似度度量完全没有关系,其实距离和相似度度量是KNN的基础算法,因为KNN的个体相似度或邻近的距离都会选择距离度量和相似度度量中的某种方法进行计算,但这里考虑到了现实的数据情况和应用环境,并不是KNN就一定要硬套欧氏距离,其实换一种简单的方法可能反而更加适合整个模型,而且模型的最终效果可能会更理想。所以一切的数据挖掘算法的选择和使用都是基于数据模型的有效性和输出结果的效果来决定的,并不是简单的算法效果就一定不好,而高级复杂的算法一定更加有效。对了,如果你已经做了相关内容推荐,那么优化相关内容推荐这篇文章里面介绍的一些方法将是检验推荐效果的一个很好的参考。

距离和相似度度量

  在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)。当然衡量个体差异的方法有很多,最近查阅了相关的资料,这里整理罗列下。

  为了方便下面的解释和举例,先设定我们要比较X个体和Y个体间的差异,它们都包含了N个维的特征,即X=(x1, x2, x3, … xn),Y=(y1, y2, y3, … yn)。下面来看看主要可以用哪些方法来衡量两者的差异,主要分为距离度量和相似度度量。

距离度量

  距离度量(Distance)用于衡量个体在空间上存在的距离,距离越远说明个体间的差异越大。

欧几里得距离(Euclidean Distance)

  欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。公式如下:

Euclidean Distance

  因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

明可夫斯基距离(Minkowski Distance)

  明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述。公式如下:

Minkowski Distance

  这里的p值是一个变量,当p=2的时候就得到了上面的欧氏距离。

曼哈顿距离(Manhattan Distance)

  曼哈顿距离来源于城市区块距离,是将多个维度上的距离进行求和后的结果,即当上面的明氏距离中p=1时得到的距离度量公式,如下:

Manhattan Distance

切比雪夫距离(Chebyshev Distance)

  切比雪夫距离起源于国际象棋中国王的走法,我们知道国际象棋国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1, y1)走到B格(x2, y2)最少需要走几步?扩展到多维空间,其实切比雪夫距离就是当p趋向于无穷大时的明氏距离:

Chebyshev Distance

  其实上面的曼哈顿距离、欧氏距离和切比雪夫距离都是明可夫斯基距离在特殊条件下的应用。

马哈拉诺比斯距离(Mahalanobis Distance)

  既然欧几里得距离无法忽略指标度量的差异,所以在使用欧氏距离之前需要对底层指标进行数据的标准化,而基于各指标维度进行标准化后再使用欧氏距离就衍生出来另外一个距离度量——马哈拉诺比斯距离(Mahalanobis Distance),简称马氏距离。

相似度度量

  相似度度量(Similarity),即计算个体间的相似程度,与距离度量相反,相似度度量的值越小,说明个体间相似度越小,差异越大。

向量空间余弦相似度(Cosine Similarity)

  余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。公式如下:

Cosine Similarity

皮尔森相关系数(Pearson Correlation Coefficient)

  即相关分析中的相关系数r,分别对X和Y基于自身总体标准化后计算空间向量的余弦夹角。公式如下:

Pearson Correlation Coefficient

Jaccard相似系数(Jaccard Coefficient)

  Jaccard系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下:

Jaccard Coefficient

调整余弦相似度(Adjusted Cosine Similarity)

  虽然余弦相似度对个体间存在的偏见可以进行一定的修正,但是因为只能分辨个体在维之间的差异,没法衡量每个维数值的差异,会导致这样一个情况:比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,余弦相似度对数值的不敏感导致了结果的误差,需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值,比如X和Y的评分均值都是3,那么调整后为(-2,-1)和(1,2),再用余弦相似度计算,得到-0.8,相似度为负值并且差异不小,但显然更加符合现实。

欧氏距离与余弦相似度

  欧氏距离是最常见的距离度量,而余弦相似度则是最常见的相似度度量,很多的距离度量和相似度度量都是基于这两者的变形和衍生,所以下面重点比较下两者在衡量个体差异时实现方式和应用环境上的区别。

  借助三维坐标系来看下欧氏距离和余弦相似度的区别:

distance and similarity

  从图上可以看出距离度量衡量的是空间各点间的绝对距离,跟各个点所在的位置坐标(即个体特征维度的数值)直接相关;而余弦相似度衡量的是空间向量的夹角,更加的是体现在方向上的差异,而不是位置。如果保持A点的位置不变,B点朝原方向远离坐标轴原点,那么这个时候余弦相似度cosθ是保持不变的,因为夹角不变,而A、B两点的距离显然在发生改变,这就是欧氏距离和余弦相似度的不同之处。

  根据欧氏距离和余弦相似度各自的计算方式和衡量特征,分别适用于不同的数据分析模型:欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异;而余弦相似度更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分用户兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦相似度对绝对数值不敏感)。

  上面都是对距离度量和相似度度量的一些整理和汇总,在现实的使用中选择合适的距离度量或相似度度量可以完成很多的数据分析和数据挖掘的建模,后续会有相关的介绍。

数据仓库的基本架构

  数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。其实数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。因此数据仓库的基本架构主要包含的是数据流入流出的过程,可以分为三层——源数据数据仓库数据应用

data-warehouse-frame

  从图中可以看出数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自上而下流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

  数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。

  下面主要简单介绍下数据仓库架构中的各个模块,当然这里所介绍的数据仓库主要是指网站数据仓库。

数据仓库的数据来源

  其实之前的一篇文章已经介绍过数据仓库各种源数据的类型——数据仓库的源数据类型,所以这里不再详细介绍。

  对于网站数据仓库而言,点击流日志是一块主要的数据来源,它是网站分析的基础数据;当然网站的数据库数据也并不可少,其记录这网站运营的数据及各种用户操作的结果,对于分析网站Outcome这类数据更加精准;其他是网站内外部可能产生的文档及其它各类对于公司决策有用的数据。

数据仓库的数据存储dw-data-storage

  源数据通过ETL的日常任务调度导出,并经过转换后以特性的形式存入数据仓库。其实这个过程一直有很大的争议,就是到底数据仓库需不需要储存细节数据,一方的观点是数据仓库面向分析,所以只要存储特定需求的多维分析模型;另一方的观点是数据仓库先要建立和维护细节数据,再根据需求聚合和处理细节数据生成特定的分析模型。我比较偏向后面一个观点:数据仓库并不需要储存所有的原始数据,但数据仓库需要储存细节数据,并且导入的数据必须经过整理和转换使其面向主题。简单地解释下:

  (1).为什么不需要所有原始数据?数据仓库面向分析处理,但是某些源数据对于分析而言没有价值或者其可能产生的价值远低于储存这些数据所需要的数据仓库的实现和性能上的成本。比如我们知道用户的省份、城市足够,至于用户究竟住哪里可能只是物流商关心的事,或者用户在博客的评论内容可能只是文本挖掘会有需要,但将这些冗长的评论文本存在数据仓库就得不偿失;

  (2).为什么要存细节数据?细节数据是必需的,数据仓库的分析需求会时刻变化,而有了细节数据就可以做到以不变应万变,但如果我们只存储根据某些需求搭建起来的数据模型,那么显然对于频繁变动的需求会手足无措;

  (3).为什么要面向主题?面向主题是数据仓库的第一特性,主要是指合理地组织数据以方面实现分析。对于源数据而言,其数据组织形式是多样的,像点击流的数据格式是未经优化的,前台数据库的数据是基于OLTP操作组织优化的,这些可能都不适合分析,而整理成面向主题的组织形式才是真正地利于分析的,比如将点击流日志整理成页面(Page)、访问(Visit或Session)、用户(Visitor)三个主题,这样可以明显提升分析的效率。

  数据仓库基于维护细节数据的基础上在对数据进行处理,使其真正地能够应用于分析。主要包括三个方面:

数据的聚合

  这里的聚合数据指的是基于特定需求的简单聚合(基于多维数据的聚合体现在多维数据模型中),简单聚合可以是网站的总Pageviews、Visits、Unique Visitors等汇总数据,也可以是Avg. time on page、Avg. time on site等平均数据,这些数据可以直接地展示于报表上。

多维数据模型

  多维数据模型提供了多角度多层次的分析应用,比如基于时间维、地域维等构建的销售星形模型、雪花模型,可以实现在各时间维度和地域维度的交叉查询,以及基于时间维和地域维的细分。所以多维数据模型的应用一般都是基于联机分析处理(Online Analytical Process, OLAP)的,而面向特定需求群体的数据集市也会基于多维数据模型进行构建。

业务模型

  这里的业务模型指的是基于某些数据分析和决策支持而建立起来的数据模型,比如我之前介绍过的用户评价模型、关联推荐模型、RFM分析模型等,或者是决策支持的线性规划模型、库存模型等;同时,数据挖掘中前期数据的处理也可以在这里完成。

数据仓库的数据应用dw-data-application

  之前的一篇文章——数据仓库的价值中介绍过数据仓库的四大特性上的价值体现,但数据仓库的价值远不止这样,而且其价值真正的体现是在数据仓库的数据应用上。图中罗列的几种应用并未包含所有,其实一切基于数据相关的扩展性应用都可以基于数据仓库来实现。

报表展示

  报表几乎是每个数据仓库的必不可少的一类数据应用,将聚合数据和多维分析数据展示到报表,提供了最为简单和直观的数据。

即席查询

  理论上数据仓库的所有数据(包括细节数据、聚合数据、多维数据和分析数据)都应该开放即席查询,即席查询提供了足够灵活的数据获取方式,用户可以根据自己的需要查询获取数据,并提供导出到Excel等外部文件的功能。

数据分析

  数据分析大部分可以基于构建的业务模型展开,当然也可以使用聚合的数据进行趋势分析、比较分析、相关分析等,而多维数据模型提供了多维分析的数据基础;同时从细节数据中获取一些样本数据进行特定的分析也是较为常见的一种途径。

数据挖掘

  数据挖掘用一些高级的算法可以让数据展现出各种令人惊讶的结果。数据挖掘可以基于数据仓库中已经构建起来的业务模型展开,但大多数时候数据挖掘会直接从细节数据上入手,而数据仓库为挖掘工具诸如SAS、SPSS等提供数据接口。

元数据管理

  元数据(Meta Date),其实应该叫做解释性数据,即数据的数据。主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。一般会通过元数据资料库(Metadata Repository)来统一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。

  最后做个Ending,数据仓库本身既不生产数据也不消费数据,只是作为一个中间平台集成化地存储数据;数据仓库实现的难度在于整体架构的构建及ETL的设计,这也是日常管理维护中的重头;而数据仓库的真正价值体现在于基于其的数据应用上,如果没有有效的数据应用也就失去了构建数据仓库的意义。

向上营销、交叉营销与关联推荐

  我们会发现很多网站都具备了内容推荐的功能,不仅是像B2C电子商务类的卓越的图书推荐,也包括兴趣类网站像豆瓣的豆瓣猜等。这类功能无疑在帮助用户发现需求,促进商品购买和服务应用方面起到了显著性的效果。那么这类的推荐是怎么得到的呢?其实跟网站数据分析不无相关,我们可以来简单看一下它的原理和实现。

  关联推荐在营销上被分为两类:

  向上营销(Up Marketing):根据既有客户过去的消费喜好,提供更高价值或者其他用以加强其原有功能或者用途的产品或服务。

  交叉营销(Cross Marketing):从客户的购买行为中发现客户的多种需求,向其推销相关的产品或服务。

  向上营销是基于同类产品线的升级或优化产品的推荐,而交叉营销是基于相似但不同类的产品的推荐。举个简单的例子,可以看一下苹果的产品线:

Apple-products-compare

当你购买一个ipod nano3的时候,向你推荐升级产品nano4、nano5或者功能类似的itouch就叫做“向上营销”;而推荐Iphone、Mac或ipad的时候就是“交叉营销”了。

  而关联推荐在实现方式上也可以分为两种:以产品分析为基础的关联推荐和以用户分析为基础的关联推荐。产品分析的关联推荐指的是通过分析产品的特征发现它们之间的共同点,比如《Web Analytics》和《Web Analytics 2.0》的作者都是Avinash Kaushik,而且书名都包含Web Analytics,都是网站分析类的书籍,同时也可能是同一个出版社……那么基于产品的关联就可以向购买了《Web Analytics》的用户推荐《Web Analytics 2.0》。而基于用户分析的推荐是通过分析用户的历史行为数据,可能会发现购买了《Web Analytics》的很多用户也买了《The Elements of User Experience》这本书,那么就可以基于这个发现进行推荐,这种方法就是数据挖掘中的关联规则(Association Rules)挖掘,其中最经典的案例就是沃尔玛的啤酒和尿布的故事。

beer-and-diapers

  目前很多的关联推荐还是基于产品层面的,因为实现上更为简单(对于网站而言,产品数据明显少于用户行为数据,而且可能相差好几个数量级,所以分析工作就会轻很多),基于产品的推荐更多地以上面所述的两种营销手段来实现,更偏向于传统的“推式”营销(个人对这种营销方式比较没有好感,尤其“捆绑销售”之类)。

基于用户行为分析的关联推荐

  所以个人更偏向于基于用户分析的实现方式,这样更有利于发现用户的潜在需求,帮助用户更好的选择它们需要的产品,并由用户决定是否购买,也就是所谓的“拉式”营销。通过向用户推荐产品或服务,激发用户的潜在需求,促使用户消费,更加符合“以用户为中心”的理念。所以下面主要简单描述下以用户行为分析为基础的关联推荐,无论你是电子商务网站或是其他任何类型的网站,其实都可以实现这个功能,只要你具备以下前提:

  1. 能够有效地识别网站用户;
  2. 保留了用户的历史行为数据(点击流数据(clickstream)或运营数据(outcomes));
  3. 当然还需要一个不错的网站数据分析师。

  这里以电子商务网站为例来说明一下关联规则的具体实现。目前大部分电子商务网站都提供用户注册的功能,而购物的用户一般都是基于登录的条件下完成的,所以这里为用户识别提供了最为有效的标示符——用户ID(关于用户识别的方法,请参考这篇文章——网站用户的识别);同时网站会把所有用户的购物数据储存在自己的运营数据库里面,这个为用户行为分析提供了数据基础——用户历史购物数据。所以满足了上述的前两个条件,我们就可以着手进行分析了。

  关联规则的实现原理是从所有的用户购物数据中(如果数据量过大,可以选取一定的时间区间,如一年、一个季度等),寻找当用户购买了A商品的基础上,又购买了B商品的人数所占的比例,当这个比例达到了预设的一个目标水平的时候,我们就认为这两个商品是存在一定关联的,所以当用户购买了A商品但还未购买B商品时,我们就可以向该类用户推荐B商品。如下图:

Relevance-Recommendation

  从上图可以看到其中牵涉3个集合:所有购买过商品的用户全集U、购买了A商品的用户集合A以及在购买了A商品之后又购买了B商品的用户集合G。基于这3个集合可以计算关联规则挖掘中的2个关键指标——支持度(Support)置信度(Confidence)

  支持度=购买了A和B商品(集合G)的人数/所有购买过商品(集合U)的人数

  置信度=购买了A和B商品(集合G)的人数/购买了A商品(集合A)的人数

  得到这两个指标之后,需要为这两个指标设立一个最低门槛,即最小支持度和最小置信度。因为在用户的购买行为中,购买A商品的用户可能不仅购买B商品,还购买了C、D、E……等一系列商品,所以我们需要分别算出所有这些组合的支持度和置信度,只有满足比如支持度>0.2,置信度>0.6的这些商品组合才可以认为是有关联的,值得推荐的。

  当然,如果你的网站不是电子商务网站,你同样可以用用户浏览网站的点击流数据实现关联推荐的功能。同样是基于用户历史行为,比如浏览了A页面的用户也浏览的B页面、观看了A视频的用户也观看了B视频、下载了A文件的用户也下载了B文件……

  数据挖掘中的关联规则挖掘一般采用基于频繁集的Apriori算法,是一个较为简单有效的算法,这里就不具体介绍了,有兴趣的朋友可以去查下资料。

在进行关联规则分析时需要注意的一些问题

  • 注意关联推荐的适用范围和前提条件,并不是每一类网站都适合或需要进行关联推荐的;
  • 最小支持度和最小执行度的设立需要根据网站运营的特征设定,不宜偏高或偏低,建议基于实验或实践的基础上不断优化,寻找一个最佳的权衡点。
  • 需要特别注意的是,在关联规则中A商品与B商品有关联,并不意味着B商品与A商品的关联也成立,因为两者的置信度算法是不同的,关联方向不可逆。
  • 关联规则分析在算法上其实并不难,但是要将其在网站上真正实现好,在满足上面3个前提的基础上还需要持续地优化算法,而更主要的是需要网站各部门的协作实现。

  所以,基于用户行为分析的关联推荐完全从用户的角度进行分析,比单纯地比较产品间的关联更为深入和有效,更加符合用户的行为习惯,有利于发现用户的潜在需求,不妨尝试一下。

你找到答案了吗?

unlock  博客自发布第一篇文章以来,到今天刚好有一个月时间了,所以这里对开篇中提出的几个问题做一个解答,如果你还没有阅读过该文章,建议先阅读开篇

  也许很多朋友已经找到了答案,也有可能你们的解答与我下面的描述会有差异,当然只要都能解释问题,符合问题的条件,一切答案都是可以被接受的,问题的答案可能并非唯一的。其实这些问题只是想对网站数据分析做一些简单的解释,阐述作者个人对网站数据分析的一些认识,同时让这个过程更具趣味性。

1、趋势分析与预测

  从表面看,寻找数字规律中的这串数字可能毫无规律,但只要把它们放到图表上,你就会惊奇地发现它们呈一条完美的曲线排列了起来:

digits-trend

  这是在excel里面以1-20的序列为横坐标,以那串20个数字为纵坐标一一对应画出的散点图,可以看到这是一条比较规范的类S型曲线,也是最典型的一类成长曲线,也许你的网站的用户访问量或者销售额正是以类似这种趋势增长的。发现这种规律之后,就可以用数据统计的方法对其进行分析,对于这类有规律线性曲线,最常用的方法就是回归分析:

  首先可以根据S曲线确定其基本表达式为:

            S-function1S-function2

  表达式因为包含三个未知参数,无法直接通过回归分析求得,所以首先需要根据S曲线的特征和已知的数字观察到曲线无限接近于100,可以先暂定α的值为0.01,则该表达式变为:

S-function-converted

  可以将其转化为线性表达式:

linear-function

            其中y*=ln(1/y-0.01); x*=x; α*=lnβ; β*=-θ

  然后就可以用标准一元线性回归的方法进行拟合和分析,计算得到拟合度R2=0.998,显著性系数接近于0,拟合度非常高,结果可以被接受。算出α和β的值约为0.7381和-0.5066,代入原方程得到:

S-function-result

  再根据改方程当x=9是代入,得y约为31.35,预测得到那个缺失的数字约为31。

  当然这可能只是其中一种分析和预测的方法,如果可以找到另外的拟合度足够高的表达式,那么用该表达式预测得到的数字一样有效,答案并非唯一的。这个题目是作者自己编的,自然计算得到的拟合度十分理想,在现实中可能并没有这么完美的曲线存在,但只要用类似的方法去思考和分析,一样也能找到需要的答案。

  这里已经完成了对该题的解释,想顺带说一下成长曲线。大家都知道成长曲线存在着无法达到的极值,获取对于生物界来说该曲线确实是无法突破的,那么对已企业或者网站来说类似的流量增长曲线或者利润增长曲线是否可以被突破呢?答案是肯定的。任何失误的发展都会遇到瓶颈,网站也是这样,关键是如何发现和认识自身的瓶颈,只有真正地了解自身的问题,才能通过不断地优化、创新和市场拓展突破瓶颈,当瓶颈一旦被突破,原先无法逾越的极值点将变成新成长曲线的起始点继续向上攀升,而数据分析正是网站发现瓶颈的最有力武器。

2、识别用户

  关于那道逻辑题,也许很多朋友已经发现这个就是根据爱因斯坦的那题经典的逻辑题改编而来的,答案如下:

次序  A B D E C
穿着 
城市  广州 青岛 北京 上海 杭州
职业  律师 工程师 教授 医生 作家
饮料 牛奶 咖啡 啤酒

  其实对于网站分析来说,识别用户是极其重要的一个过程,网站分析中有一个重要的指标——Unique Visitor(UV),用以标识唯一的访问用户,而如何从网站的底层日志中识别每次访问是否是同一用户一直是网站分析中的一个难点,因为某些时候用户访问是未登录的,或是匿名的,甚至连cookie都是被禁用的。而对于网站分析来说,识别唯一用户又是十分有用的,它直接影响到针对每个用户的网站行为分析、用户细分及定向营销等多个方面,所以之后会有专门的对如何更好地识别网站用户的相关介绍。

3、学会细分

  细分是网站分析中一个十分重要的技巧和方法,无论是用户、产品、页面等都可以通过细分更好地发现其特征。其实图形题中的两个问题正是细分中的两种基本的方法:一种是已知类别,将类别未明的事物归类;另一种是已知存在这么多的事物,将这些食物分成若干类,我对这两个问题的解答如下(当然这个答案并非唯一,只要归类有所依据的答案都是可以被接受的):

  1)先观察2、4、8三个图形所拥有的相同特征:4条边、左右对称、上下对称、重心在同一水平线上、序号都是偶数,根据这些特征去寻找共同特征最多的图形,可以看到6号的圆形是最为接近的:左右对称、上下对称、重心在同一水平线上、序号都是偶数,所以我的答案是选择6号的圆形;

  2)与第一题类似,从所有的图形中选择拥有最多共同特征的归为一类,并使各类别间的特征差异最大,我是从这几个角度进行区分的:边数、轴对称、中心对称、重心分布、序号,分成四类如下:

    A类:2、4、8(4条边、左右对称、上下对称、重心都在水平中间线、序号都为偶数);

    B类:1、3、5(左右对称、重心都在水平中间线以下、序号都是奇数);

    C类:6(中心对称、任意轴对称、重心在水平中间线);

    D类:7(4条边、中心对称、重心在水平中间线);

  其实这两个问题也是数据挖掘中两个方法的简单体现:

分类

  分类就是把一些新的事物映射到给定类别的中的某一个类别,用于描述事物或预测。常见的分类方法有:决策树、KNN法(K-Nearest Neighbor)、SVM法(Support Vector Machine)、VSM法(Vector Space Model)、神经网络等。

聚类

  聚类就是将数据对象分组成多个类或者簇,划分的原则是在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大。聚类算法可以分为划分方法、层次方法、基于密度方法、基于网格方法和基于模型方法。

4、互联网发展趋势

Moshe

  对于最后一个问题,其实大家可以各抒己见,这里也只是作者的个人看法,也许阐述和对比的网站不一定恰当,这里只是想说明作为一个网站分析师,必须时刻关注互联网的发展趋势,而Alexa上面排在TOP前几位的网站正是互联网不断发展和进步的指向标。

  正如前几天有人预测2010年facebook的流量将超越google,成为全球最受欢迎的网站,结果我上Alexa一比较,果然facebook在数据上除了用户量不及google外,几乎所有数据都持平或超越了google,其中页面访问量目前两个网站已不相上下,而网站访问时间facebook甚至已经达到了google的3倍(当然这跟网站本身的服务性质有关);但确实不得不佩服facebook的实力,流量一路飙升,过关斩将,到现在能够觊觎互联网老大的宝座,但是要真正坐上去还得在用户量上超越google。其实很多人看好facebook也不无道理,因为毕竟facebook是信息的创造者,而google只是信息的整合者,创造者掌握着信息的信息竞争力。