数据挖掘(Data Mining),也叫数据开采、数据采掘等,是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,自动提取隐含在其中的、人们事先不知道的,但又是潜在有用的信息的过程。这些信息的表现形式为规则、概念、规律及模式等。
从上述定义可见数据挖掘明显有别于传统数据处理技术(如事务处理,OLTP)。首先数据挖掘面对的是大量的不完全的数据,所谓不完全指的是一个数据集合中的样本或观测数据。数据挖掘就是要通过对已知样本的分析发现规律,使用算法建立模型,再用模型预测未来的样本外数据的观测结果。其次输入的观测数据是有噪声的、模糊的和随机的。这里的随机指数据样本的选取方式,噪声简单说就是数据集合中无法解释的随机数据误差,即一些和其它数据不一致的数据。数据挖掘要能够在随机数据样本中识别和消除噪声,仅利用有助于实现挖掘目标的数据,从而提高模型的准确性。最后数据挖掘需要从数据中发现先前未知的有用信息,并且这个发现过程是自动的。
企业里的数据量非常大,而其中真正有价值的信息却很少,因此从大量数据中经过深层分析,获得有利于商业运作、提高竞争力的信息,就像从矿石中淘金一样,数据挖掘也因此得名。这种新式的商业信息处理技术,可以按商业既定业务目标,对大量数据进行探索和分析,揭示隐藏的、未知的或验证已知的规律性,并进一步将其模型化。在较浅的层次上,它利用现有数据库管理系统的查询、检索及报表功能,与多维分析、统计分析方法相结合,进行联机分析处理(OLAP),从而得出可供决策参考的统计分析数据。在深层次上,则从数据中发现前所未有的、隐含的知识。OLAP的出现早于数据挖掘,它们都是从数据中抽取有用信息的方法,就决策支持的需要而言两者是相辅相成的。OLAP可以看作是一种广义的数据挖掘方法,它旨在简化和支持联机分析,而数据挖掘的目的是使这一过程尽可能自动化。
并非所有的信息发现都被视为数据挖掘。例如,使用数据库管理系统查找个别的记录,或通过互联网搜索引擎查找特定的Web页面,则是信息检索(information retrieval)领域的任务。虽然这些任务非常重要,可能涉及使用复杂的算法和数据结构,但是它们主要依赖传统的计算机科学技术和数据的明显特征来创建索引结构,从而有效地组织和检索信息。下面列举一些属于或不属于数据挖掘任务的活动,帮助加深对数据挖掘概念的理解。
数据挖掘起始于20世纪下半叶,是在当时多个学科的基础上发展起来的。随着数据库技术的广泛应用,数据的积累不断膨胀,导致简单的查询和统计已经无法满足企业的商业需求,急需一些革命性的技术去挖掘数据背后的信息。同时,这期间计算机领域的人工智能(Artificial Intelligence)也取得了巨大进展,进入了机器学习的阶段。因此,人们将两者结合起来,用数据库管理系统存储数据,用计算机分析数据,并且尝试挖掘数据背后的信息。这两者的结合促生了一门新的学科,即数据库中的知识发现(Knowledge Discovery in Databases,KDD)。1989年8月召开的第11届国际人工智能联合会议的专题讨论会上首次出现了知识发现这个术语,到目前为止,KDD的重点已经从发现方法转向了实践应用。数据挖掘则是知识发现(KDD)的核心部分。进入21世纪,数据挖掘已经成为一门比较成熟的学科,并且数据挖掘技术也伴随着信息技术的发展日益成熟起来。
KDD是将未加工的数据转换为有用信息的整个过程,包括一系列转换步骤,从数据的预处理到数据挖掘结果的后处理。数据挖掘在由数据转化为知识的过程中,所处的位置如图1所示。
图1 数据转化为知识的过程
输入数据以各种形式存储,如平面文件、电子表格或数据库表等,基于的数据库类型主要有关系型数据库、面向对象数据库、事务数据库、演绎数据库、时态数据库、多媒体数据库、空间数据库及数据仓库(Data Warehouse)等。数据可以驻留在集中的数据存储库中,也可以分布在多个节点上。数据预处理(preprocessing)的目的是将未加工的输入数据转换成适合分析的形式。数据预处理的步骤包括融合来自多个数据源的数据,清洗数据以消除噪声和重复的观测值,选择与当前数据挖掘任务相关的记录和特征。由于收集和存储数据的方式多种多样,数据预处理可能是整个知识发现过程中最费力、最耗时的步骤。
数据挖掘后获得的知识包括关联规则、特征规则、区分规则、分类规则、总结规则、偏差规则、聚类规则、模式分析及趋势分析等。数据挖掘是一门交叉学科,它把人们对数据的应用从低层次的简单查询,提升到从数据中挖掘知识,提供决策支持。例如,在商业应用中,数据挖掘的结果所揭示的规律可以结合商业活动管理工具,从而开展或测试有效的商业促销活动。这样的结合需要后处理(postprocessing)步骤,确保只将那些有效的和有用的结果集成到决策支持系统中。后处理的一个例子是可视化,它使得数据分析者可以从各种不同的视角探查数据挖掘的结果。在后处理阶段,还能使用统计度量或假设检验,删除虚假的数据挖掘结果。
数据挖掘与传统的数据分析(如查询、报表、联机应用分析)的本质区别是数据挖掘是在没有明确假设的前提下去挖掘信息、发现知识,包括不公开的数据。数据挖掘使数据库技术进入了一个更高级的阶段。数据挖掘是要发现那些不能靠直觉发现的信息或知识,甚至是违背直觉的信息或知识,挖掘出的信息越是出乎意料,就可能越有价值。能够比市场提前知道这种信息,提前做出决策就有机会获得更多利润。
相对于传统数据分析,概括来说,数据挖掘技术具有以下几个特点:
数据本身只是数据,直观上并没有表现出任何有价值的知识。当我们用数据挖掘方法,从数据中挖掘出知识后,这种知识是否值得信赖呢?为了说明这种知识是可信的,有必要了解一下数据挖掘的原理。
数据挖掘其实质是综合应用各种学科,对于业务相关的数据进行一系列科学的处理,这个过程中需要用到数据库、统计学、应用数学、机器学习、模式识别、数据可视化、信息科学、程序开发等多个领域的理论和技术,如图2所示。其核心是利用算法对处理好的输入和输出数据进行训练,并得到模型。然后再对模型进行验证,使得模型能够在一定程度上刻画出数据由输入到输出的关系。最终利用该模型,对新输入的数据进行计算,从而得到新的输出,对这个输出就可以进行解释和应用了。所以这种模型虽然不容易解释或很难看到,但它是基于大量数据训练并经过验证的,因此能够反映输入数据和输出数据之间的大致关系,这种关系也即模型,就是我们需要的知识。可以说,这就是数据挖掘的原理,从中可以看出,数据挖据是有一定科学依据的,这样挖掘的结果也是值得信任的。
图2 数据挖据与其它学科的关系
通常可将数据挖掘任务分为预测和描述两大类。预测任务的目标是根据其它属性的值,预测特定属性的值。被预测的属性一般称为目标变量(target variable)或因变量(dependent variable),而用来做预测的属性称为说明变量(explanatory)或自变量(independent variable)。描述任务的目标是导出概括数据中潜在联系的模式(关联、趋势、聚类、轨迹和异常)。本质上,描述性数据挖掘任务大都是探查性的,并且常常需要后处理技术验证和解释结果。
对学术研究和产业应用进行归纳,会发现数据挖掘的任务总是集中在几个方面,即回归、分类、预测、关联、聚类、异常检测六个方面,前三个属于预测性任务,后三个属于描述性任务。它们不仅在挖掘的目标和内容上不同,所使用的技术也差别较大,所以通常也将数据挖掘的技术按照这六个方面分类。下面将逐一简要介绍这六类数据挖掘任务及相应的算法。
回归是确定两种或两种以上变量间相互定量关系的一种统计分析方法。回归是数据挖掘中最为基础的方法,也是应用领域和应用场景最多的方法,只要是量化型问题,我们一般都会先尝试用回归方法来研究或分析。比如要研究某地区钢材消费量与国民收入的关系,那么就可以直接用这两个变量的数据进行回归,然后看它们之间的关系是否符合某种形式的回归关系。回归可用于预测连续的目标变量。
根据回归方法中因变量的个数和回归函数的类型(线性或非线性)可将回归方法分为以下几种:一元线性、一元非线性、多元线性、多元非线性。另外还有两种特殊的回归方式,一种是在回归过程中可以调整变量数的回归方法,称为逐步回归,另一种是针对因变量为定性变量(如0、1二值)的回归方法,称为Logisitic回归。
分类是一个常见的问题,在我们的日常生活中就会经常遇到分类问题,比如垃圾分类。数据挖掘中的分类也是最为常见的问题,其典型的应用是根据事物在数据层面表现的特征,对事物进行科学的分类。分类可用于预测离散的目标变量。
对于分类问题,人们已经研究并总结出了很多有效的方法。到目前为止,已经研究出的分类方法包括:决策树方法(经典的决策树算法主要包括ID3算法、C4.5算法和CART算法等)、神经网络方法、贝叶斯分类、K-近邻算法、判别分析、支持向量机等分类方法。不同的分类方法有不同的特点。这些分类方法在很多领域都得到了成功的应用,比如决策树方法已经成功地应用到医学诊断、贷款风险评估等领域;神经网络则因为对噪声数据有很好的承受能力而在实际问题中得到了非常成功的应用,比如识别手写字符、语音识别和人脸识别等。但是由于每一种方法都有缺陷,再加上实际问题的复杂性和数据的多样性,使得无论哪一种方法都只能解决某一类问题。近年来,随着人工智能、机器学习、模式识别和数据挖掘等领域中传统方法的不断发展以及各种新方法和新技术的不断涌现,分类方法得到了长足的发展。
预测是预计未来事件的一门科学,它包含采集历史数据并用某种数学模型来预测未来,它也可以是对未来的主观或直觉的预期,还可以是上述的综合。在数据挖掘中,预测是基于既有数据进行的,即以现有数据为基础,对未来的数据进行预测。
预测的重要意义就在于它能够在自觉地认识客观规律的基础上,借助大量的信息资料和现代化的计算手段,比较准确地揭示出客观事物运行中的本质联系及发展趋势,预见到可能出现的种种情况,勾画出未来事物发展的基本轮廓,提出各种可以互相替代的发展方案,这样就使人们具有了战略眼光,使得决策有了充分的科学依据。
预测方法有很多,可以分为定性预测方法和定量预测方法。从数据挖掘角度,我们用的方法显然属于定量预测方法。定量预测方法又可分为时间序列分析和因果关系分析两类,其中常用的时间序列分析法有移动平均(ARIMA)、指数平滑等,因果关系分析法有回归方法、计量经济模型、神经网络预测法、灰色预测法、马尔科夫预测法等。
关联分析用来发现描述数据中强关联特征的模式。所发现的模式通常用蕴涵规则或特征子集的形式表示。由于搜索空间是指数规模的,关联分析的目标是以有效的方式提取最有趣的模式。购物篮分析就是一种典型的关联分析。“尿布与啤酒”的故事大家都听过,它们之间属于关联关系,是通过对交易信息进行关联挖掘而得到的,这种类型的规则可以用来发现各类商品中可能存在的交叉销售的商机。
数据关联是一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据之间隐藏的关联关系。关联分析生成的规则带有可信度,通过可信度来描述这种关系的确定程度。
关联规则挖掘就是要发现数据中项集之间存在的关联关系或相关关系。按照不同情况,关联挖掘可以分为以下几种情况:
(1)基于规则中处理的变量的类别,关联规则可以分为布尔型和数值型。
布尔型关联规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系;而数值型关联规则可以和多维关联或多层关联规则结合起来,对数值型字段进行处理,将其进行动态地分隔,或者直接对原始的数据进行处理,当然数值型规则中也可以包含种类变量。例如:性别 = “女” => 职业 = “秘书”,是布尔型关联规则;性别 = “女” => avg(收入)=2300,涉及的收入是数值类型,所以是一个数值型关联规则。
(2)基于规则中数据的抽象层次,可以分为单层关联规则和多层关联规则。
在单层的关联规则中,所有的变量都没有考虑到现实的数据是具有多个不同层次的;而在多层关联规则中,对数据的多层性进行了充分的考虑。例如:IBM台式机 => Sony打印机,是一个细节数据上的单层关联规则;台式机 => Sony打印机,是一个较高层次和细节层次之间的多层关联规则。
(3)基于规则中涉及的数据的维数,关联规则可以分为单维的多维的。
在单维的关联规则中,我们只涉及数据的一个维,如用户购买的物品;而在多维的关联规则中,要处理的数据将会涉及多个维。换言之,单维关联规则是处理单个属性中的一些关系;多维关联规则是处理各个属性之间的某些关系。例如:啤酒 => 尿布,这条规则只涉及用户购买的物品;性别 = “女” => 职业 = “秘书”,这条规则就涉及两个字段的信息,是两个维上的一条关联规则。
常用的关联算法有Apriori、FP-tree、HotSpot等。
聚类分析又称群分析,是根据“物以类聚”的道理,对样品进行分类的一种多元统计分析方法。它讨论的对象是大量的样品,要求能合理地按各自特性来进行合理的分类,没有任何模式可供参考或依循,是在没有先验知识的情况下进行的。聚类是将数据分类到不同的类或者簇的过程,旨在发现紧密相关的观测对象群组,使得与属于不同簇的对象相比,属于同一簇的对象相互之间尽可能类似。
聚类分析起源于分类学,在古老的分类学中,人们主要依靠经验和专业知识来实现分类,很少利用数学工具进行定量的分类。随着人类科学技术的发展,对分类的要求越来越高,以至有时仅凭经验和专业知识难以确切地进行分类,于是人们逐渐地把数学工具引用到了分类学中,形成了数值分类学,之后又将多元分析的技术引入到数值分类学形成了聚类分析。更直接地说,聚类是看样品大致分成几类,然后再对样品进行分类,也就是说,聚类是为了更合理地分类。
在不同应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。在商业上,聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同客户群的特征;在生物上,聚类分析被用来进行动植物分类和对基因进行分类,获取对种群固有结构的认识;在保险行业上,聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型、价值、地理位置来鉴定一个城市的房产分组;在因特网应用上,聚类分析被用来在网上进行文档归类。
聚类问题的研究已经有很长的历史。迄今为止,为了解决各领域的聚类应用,已经提出的聚类算法有近百种。根据聚类原理,可将聚类算法分为以下几种:划分聚类、层次聚类、基于密度的聚类、基于网络的聚类和基于模型的聚类。虽然聚类的方法很多,在实践中用得比较多的还是K-means、层次聚类、神经网络聚类、模糊C-均值聚类、高斯聚类等几种常用的方法。
异常检测的任务是识别其特征显著不同于其它数据的观测对象。这样的观测对象称为异常点(anomaly)或离群点(outlier)。离群点是不符合一般数据模型的点,它们与数据的其它部分不同或不一致。离群点可能是度量或执行错误所导致的。例如,一个人的年龄为-999可能是由于对年龄的缺省设置所产生的。离群点也可能是固有数据可变性的结果,例如,一个公司的首席执行官的工资远远高于公司其他雇员的工资,成为一个离群点。异常检测算法的目标是发现正真的异常点,而避免错误地将正常的对象标注为异常点。换言之,一个好的异常检测器必须具有高检测率和低误报率。
许多数据挖掘算法试图使离群点的影响最小化,或者排除它们。但是这可能导致重要的隐藏信息丢失,因为有时离群点本身可能是非常重要的,例如,信用卡公司记录每个持卡人所做的交易,同时也记录信用限度、年龄、年薪和地址等个人信息。由于与合法交易相比,欺诈行为的数目相对较少,因此异常检测技术可以用来构造用户的合法交易的轮廓。当一个新的交易达到时就与之比较,如果该交易的特性与先前所构造的轮廓很不相同,就把交易标记为可能是欺诈。这样,离群点探测和分析就是一个有趣的数据挖掘任务。
离群点检测有着广泛的应用。像上面所提到的,它能用于欺诈监测,如探测不寻常的信用卡使用或电信服务。此外,它在市场分析中可用于确定极低或极高收入的客户的消费行为,或者在医疗分析中用于发现对多种治疗方式的不寻常的反应。
目前,人们已经提出了大量关于离群点检测的算法。这些算法大致可以分为以下几类:基于统计学或模型的方法、基于距离或邻近度的方法、基于偏差的方法、基于密度的方法和基于聚类的方法,这些方法一般称为经典的离群点检测方法。近年来,有不少学者从关联规则、模糊集和人工智能等其它方面提出了一些新的离群点检测算法,比较典型的有基于关联的方法、基于模糊集的方法、基于人工神经网络的方法、基于遗传算法或克隆选择的方法等。
数据挖掘的过程是数据挖掘项目实施的方法论。数据挖掘能够从一堆杂乱的数据中挖掘出有价值的知识,但也需要一个过程。很多数据挖掘工具的厂商都对这个过程进行了抽象和定义,使之更加清晰。比如,SAS将数据挖掘过程划分为五个阶段:抽样(Sample)、探索(Explore)、处理(Manipulate)、建模(Model)、评估(Assess),即所谓的SEMMA过程模型;SPSS则提出了5A模型,即评估(Assess)、访问(Access)、分析(Analyze)、行动(Act)、自动化(Automate)。但对于商业项目,业界普遍采用CRISP-DM(Cross-Industry Standard Process for Data Mining)过程,所谓的“跨行业数据挖掘过程标准”,或者在其基础上改进的过程。CRISP-DM模型为一个KDD工程提供了完整的过程描述。一个数据挖掘项目的生命周期包含六个阶段:业务理解(Business Understanding)、数据理解(DataUnderstanding)、数据准备(Data Preparation)、建模(Modeling)、评估(Evaluation)、部署(Deployment)。
纵观这几个过程模型,大家会发现,其实质是一致的,所以也不必在意到底该用哪个数据挖掘流程,适合自己的就好。但从便于理解和操作的角度,可将数据挖掘过程描述为:1.挖掘目标的定义;2.数据的准备;3.数据的探索;4.模型的建立;5.模型的评估;6.模型的部署,简称为DPEMED(Definition、Preparation、Explore、Modeling、Evaluation、Deployment)模型,它们之间的关系如图3所示。
图3 数据挖掘过程示意图
企业或组织机构当想要实施数据挖掘时,十有八九是因为觉得积累的业务数据里有些有价值的东西,也就是说在潜意识里面已经有了大致的目标了。这种目标在无形之中会给随后的数据挖掘过程给出明确的目标,所谓有的放矢,这样数据挖掘就可以有意义地进行下去。因此,实施数据挖掘的第一步要确定数据挖掘的目标。
但要确定目标,就必须要了解数据和相关业务。比如,要分析电信领域的客户呼叫行为,需要了解电信的业务构成、业务运营以及其他诸多的行业知识。有关业务问题,指的是在业务过程中需要解决的问题、想要知道的答案并且认为这些问题的答案蕴藏在大量的数据中,但并不知道它们在哪里。可能涉及的业务问题很多,从数据挖掘的角度,所需要了解的业务问题至少包含以下三个方面:
(1)有关需要解决问题的明确定义;
(2)对有关数据的理解;
(3)数据挖掘结果对业务作用效力的预测。
如果无法确定哪些问题可用数据挖掘解决,一个好的方法是看它们的成功案例,不论所在行业是否相同。许多业务和研究的领域都被证实是数据挖掘能够得以成功应用的领域。它们包括金融服务、银行、保险、电信、零售、制造业、生物、化工等。
当对业务和数据有了一定的了解之后,就可以很容易地定义挖掘的目标,一般可以从以下两个方面定义数据挖掘的目标:
(1)数据挖掘需要解决的问题;
(2)数据挖掘完成后达到的效果,最好给出关键的评估参数及数值,比如数据挖掘结果在3个月内使得整体收益提高5个百分点。
数据的准备是数据挖掘中耗时最多的环节,因为数据挖掘的基础就是数据,所以足够、丰富、高质量的数据对数据挖掘的结果至关重要。数据的准备包括数据的选择、数据的质量分析和数据的预处理三个环节。
(1)数据的选择
选择数据就是从数据源中搜索所有与业务对象有关的内部和外部数据信息,并从中选择出适用于数据挖掘应用的数据。内部数据通常指的是现有数据,例如交易数据、调查数据、Web日志等。外部数据通常指需要购买的一些数据,比如股票实时交易数据。
从选择的数据类型来看,在大多数商业应用中都会包括交易数据、关系数据、人口统计数据三种类型的数据。交易数据是业务对象发生业务时产生的操作数据。它们一般有明显的时间和顺序特征,与业务发生有关联,如投资人的证券交易、客户的购物、电话的通话等。关系数据则是相对较少变化的数据,表达了客户、机构、业务之间的关系,如投资人与交易所,客户与电信公司等。人口统计数据表达与业务主题相关的描述信息,这些数据可能来自外部的数据源。这三种数据类型反映了三种数据信息,在数据挖掘的过程中,对知识的发现非常重要,所以选择数据的时候尽量包括业务相关的这三种类型的数据。
(2)数据的质量分析
数据几乎没有完美的。事实上,大多数数据都包含代码错误、缺失值或其它类型的不一致现象。一种避免可能出现缺陷的方法是在建模前对可用数据进行全面的质量分析。数据质量分析的目的是评估数据质量,同时为随后的数据预处理提供参考。数据的质量分析通常包括以下几个方面的内容:
(3)数据的预处理
经过数据质量分析往往会发现,数据总是存在这样或那样的问题,为了得到准确性、完整性和一致性较好的数据,必须要对数据进行预处理。根据数据质量的不同,数据预处理所用的技术也会有所不同,但通常会包括数据清洗、数据集成、数据规约和数据变换四个步骤,这四个步骤的作用效果如图4所示。
图4 数据预处理的内容
探索数据是对数据进行初步研究,以便更好地了解数据的特征,为建模的变量选择和算法选择提供依据。在数据挖掘的过程中,数据的准备和数据的探索是个双向的过程,也就是说,数据探索的结果也可以指导数据的准备,尤其是数据的预处理。更具体地说,在数据挖掘过程中,先进行数据的准备,包括收集、质量分析和预处理,然后进行数据的探索,如果在探索阶段发现数据量太少或数据质量不好或者区分度不好,那么就会返回数据的准备,重新进行数据的收集、质量分析和预处理,通常是直接返回到预处理环节,如对数据进行归一化等预处理操作。然后继续对数据进行探索,直到通过探索对数据比较满意为止,这样就可以转入到下个阶段了。
从广义上说,很少或没有得到理论支撑的数据分析均可以视为数据探索的范畴。数据探索更多的是对数据进行初步分析,有助于针对不同类型的数据或条件进行统计分析的一种技术。数据探索或探索性数据分析具有启发式、开放式等特点。
启发式在于,我们可能对数据的类型或特点知之甚少,需要通过统计技术来探索数据内部的东西,就是通常我们所说的“让数据说话”。这时一般是由于某种原因我们可能对数据背后的理论信息掌握得很少,或缺少这方面的资料等。
开放式在于数据探索以数据清理为先导。数据清理工作往往要参考学科背景知识,例如对缺失值的处理,如果该学科数据对异常值的反应很灵敏,这时如果使用均值去填补,可能会丢失大量的信息(假如缺失值很多)。所以如果仅仅是数据探索,则很少需要考虑上述情况,可以完全根据数据特点来选择相应的处理方法,开放性也体现于此。
下面从几个大的方向上来了解数据探索的方法:
(1)描述统计
描述统计包括均值、频率、众数、中位数、极差、方差和百分位数等,一般来说描述统计均可以用来探索数据结构,它们均用于探索数据的不同属性。
(2)数据可视化
数据可视化也是数据探索阶段常用的一种技术,这种技术概括起来就是将数据的总体特点以图形的方式呈现,用以发现其中的模式。并可以根据一定的规则(标准差、百分数等信息)去拆分、合并等进一步的处理。
毫无疑问图形简明易懂,很多难以表达的情况使用图表顿时使问题变得简单,这也许就是所谓的一图胜千言,这在数据探索中起到很重要的作用,比如常用的频次图、散点图、箱体图等。
(3)数据探索的建模活动
一切可以用于建模的统计方法或计量模型均可以用于数据探索,不过模型之所以是模型,是因为其背后的理论或学科性质的支撑,所以从这层意义上说,数据探索更多是为分析人员提供感性的认识,所有的结果都有待于理论的验证,而只有在认识的边缘,理论才渐渐被淡化。
模型的建立是数据挖掘的核心,在这一步要确定具体的数据挖掘模型(算法),并用这个模型原型训练出模型的参数,得到具体的模型形式。模型建立的操作流程如图5所示,在这一过程中,数据挖掘模型的选择往往是很直观的,例如对股票进行分类,则要选择分类模型。问题是分类模型又有多种模型(算法),这时就需要根据数据特征、挖掘经验、算法适应性等方面确定较为合适的算法,如果很难或不便选择哪种具体的算法,不妨对可能的算法都进行尝试,然后从中选择最佳的算法。
图5 模型建立的流程
数据挖掘的主要内容就是研究模型建立过程中可能用到的各种模型和算法,即关联、回归、分类、聚类、预测和异常检测六大类模型。如果从实现的角度,根据各种模型在实现过程中的人工监督(干预)程序,这些模型又可分为有监督模型和无监督模型。数据挖掘过程中,常用的模型结构如图6所示,根据这一结构,我们可以很清晰地知道模型建立过程中可供选择的模型。
图6 数据挖掘常用的模型(算法)结构图
此处提到模型也提到算法,这两个概念容易混淆。一谈到算法就会想到通过历史数据建立模型,其实数据挖掘算法是创建挖掘模型的机制,对产生的最终挖掘输出结果有很大的决定性。随着数据挖掘新技术的层出不穷和商业数据挖掘产品的成熟与完善,对同一商业问题,通常在产品中有多种算法可供选择,而为特定的任务选择正确的算很有挑战性。可以使用不同的算法来执行同样的业务任务,每个算法会生成不同的结果。而且算法可以进行复合使用,在一个数据挖掘解决方案中可以使用一些算法来探析数据,而使用其它算法基于该数据预测特定结果。例如,可以使用聚类分析算法来识别模式,将数据细分成多少有点相似的组,然后使用分组结果来创建更好的决策树模型。也可以在一个解决方案中使用多个算法来执行不同的任务。例如,使用回归树算法来获取财务预测信息,使用基于规则的算法来执行购物篮分析。由此看出数据挖掘项目中,在明确挖掘目的和了解各种算法特点后,如何正确选择使用算法,得到期望的结果才是关键环节。
在模型建立这一环节,还有一项重要的工作是设置数据的训练集和测试集,训练集的数据用于训练模型,而测试集的数据则用于验证模型。因为这个环节的模型验证是在模型的训练过程中进行的验证,所以这部分模型的验证工作一般也认为隶属于模型的建立过程。为了保证得到的模型具有较好的准确度和健壮性,需要先用一部分数据建立模型,然后再用剩下的数据来测试得到的模型。有时还需要第三个数据集,称为验证集。因为测试集可能受模型特性的影响,还需要一个独立的数据集来验证模型的准确性。
训练和测试数据挖掘模型至少要把数据分成两个部分:一个用于模型训练,另一个用于模型测试。如果使用相同的训练和测试集,那么模型的准确度就很难使人信服。用训练集把模型建立出来之后,可以先在测试集数据上做实验,此模型在测试集上的预测准确度就是一个很好的指导数据,它表示将来与数据集合测试集类似的数据用此模型预测时正确的百分比。但并不能保证模型的正确性,它只是说明在相似数据集合的情况下用此模型会得出相似的结果。
常用的验证方法包括简单验证、交叉验证和N-维交叉验证。
(1)简单验证
简单验证是最基本的测试方法。它从原始数据集合中拿出一定百分比的数据作为测试数据,这个百分比在5%~33%。注意:在把数据集合分成几部分时,一定要保证选择的随机性,这样才能使分开的各部分数据的性质是一致的。先用数据集合的主体把模型建立起来,然后用此模型来预测测试集中的数据。出现错误的预测与预测总数之间的比称为错误率。对于分类问题,我们可以简单的下结论:“对”与“错”,此时错误率很容易计算。回归问题不能使用简单的“对”或“错”来衡量,但可以用方差来描述准确的程度。比如,用三年内预计的客户增长数量同三年内实际的数据进行比较。
在一次模型的建立过程中,这种最简单的验证通常要执行几十次。例如,在训练神经网络时,几乎每一个训练周期都要在测试集上运行一次,不断地训练测试,直到在测试集上的准确率不再提高为止。
(2)交叉验证
交叉验证(Cross Validation,CV)是用来验证模型性能的一种统计分析方法,其基本思想是在某种意义下将原始数据(DataSet)进行分组,一部分作为训练集(Training Set),另一部分作为验证集(Test Set)。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(Model),以此来作为评价模型的性能指标。交叉验证在实际应用中非常普遍,适应性非常广,根据不同的交叉方式,又可分为以下三种情况:
① Hold-Out Method
将原始数据随机分为两组,一组作为训练集,一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-Out Method下分类器的性能指标。此种方法的好处是处理简单,只需随机把原始数据分为两组即可,其实严格意义上来说,Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机地将原始数据分组,所以最后验证集分类准确率的高低与原始数据分组有很大的关系,因此这种方法得到的结果其实并不具有说服性。
② K-fold Cross Validation(记为K-CV)
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合量小的时候才会尝试取2。K-CV可以有效地避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。
③ Leave-One-Out Cross Validation(记为LOO-CV)
如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此LOO-CV分类器的性能指标。相比于前面的K-CV,LOO-CV有两个明细的优点:一是每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠;二是实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。但LOO-CV的缺点则是计算成本高,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当多时,LOO-CV就会非常困难,除非每次训练分类器得到模型的速度很快,或可以用并行化计算减少计算所需的时间。当然也可以认为,全集验证是一种特殊的交叉验证方式。
我们可以依据得到的模型和对模型的预期结果修改参数,再用同样的算法建立新的模型,甚至可以采用其它算法建立模型。在数据挖据中,要根据不同的商业问题采用效果更好的模型,在没有行业经验的情况下,最好用不同的方法(参数或算法)建立几个模型,从中选择最好的。通过上面的处理,就会得到一系列的分析结果和模式,它们是对目标问题多侧面的描述,这时需要对它们进行验证和评价,以得到合理的、完备的决策信息。对产生模型结果需要进行对比验证、准确度验证、支持度验证等检验以确定模型的价值。这个阶段需要引入更多层面和背景的用户进行测试和验证,通过对几种模型的综合比较,产生最后的优化模型。
模型评估阶段需要对数据挖掘过程进行一次全面的回顾,从而确定是否存在重要的因素或任务由于某些原因而被忽视,此阶段的关键目的是确定是否还存在一些重要的商业问题仍未得到充分的考虑。验证模型是处理过程中的关键步骤,可以确定是否成功地进行了前面的步骤。模型的验证需要利用未参与建模的数据进行,这样才能得到比较准确的结果。可以采用的方法有直接使用原来建立模型的样本数据进行检验,或另找一批数据对其进行检验,也可以在实际运行中取出新的数据进行检验。检验的方法是对已知客户状态的数据利用模型进行挖掘,并将挖掘结果与实际情况进行比较。在此步骤中若发现模型不够优化,还需要回到前面的步骤进行调整。
模型的预测精确度是检验模型好坏的一个重要指标,但不是唯一指标。一个良好的数据挖掘模型,在投入实际应用前,需要经过多方面的评估,从而确定它完全达到了商业目标。评估数据挖掘模型优劣的指标有许多,比如精确度、LIFT、ROC、Gain图等。
精确度是最基本和最简单的指标。但是要让用户接受一个模型的结果,仅靠这些评估指标是不够的,还需要从模型结果的可用性上进一步阐述,即数据挖掘模型到底能带来什么业务上的价值。这实际上也就是数据挖掘模型的可解释性。在实际数据挖掘项目中,模型的可解释性往往比评估指标更为重要。
在对模型进行评估时,既要参照评估标准,同时也要考虑到商业目标和商业成功的标准。片面地追求预测正确率就会忽视了数据挖掘的初衷。我们不是为了建立一个完美的数学模型而进行挖掘,而是为了解决实际商业问题。所以挖掘产生结果的可解释性与实用性,才是最根本的标准。例如,在解决客户流失问题中,预测模型捕获越多的流失客户,不一定就代表能够协助挽留较多的客户。关键在于预测结果对挽留营销活动的制定有多大的帮助。
模型的部署一般是数据挖掘过程的最后一步,是集中体现数据挖据成果的一步。顾名思义,模型的部署就是将通过验证的评估模型,部署到实际的业务系统中,这样就可以应用在数据中挖掘到的知识。
一般而言,完成模型创建并不意味着项目结束。模型建立并经验证后,有两种主要的使用方法。一种是提供给分析人员做参考,由分析人员通过查看和分析这个模型后提出行动方案建议;另一种是把此模型开发并部署到实际的业务系统中。在部署模型后,还要不断监控它的效果,并不断改进之。
通常,数据集可以看作数据对象的集合。数据对象有时也叫做记录、点、向量、模式、事件、案例、样本、观测或实体。数据对象用一组刻画对象基本特征(如物体质量或事件发生时间)的属性描述。属性有时也叫做变量、特性、字段、特征或维。基于记录的数据集存储在平面文件或关系数据库系统中是最常见的。
(1) 属性与度量
属性(attribute)是数据对象的性质或特性,它因对象而异,或随时间变化。例如,眼球颜色因人而异,而气温随时间变化。眼球颜色是一种符号属性,具有少量可能的值,而温度是数值属性,可以取无穷多个值。属性并非数字或符号,但为了讨论和精细分析对象的特性,我们为它们赋予了数字或符号。为了用一种明确定义的方式做到这一点,需要定义测量标度。
测量标度(measurement scale)是将数值或符号值与对象的属性相关联的规则(函数)。形式上,测量过程是使用测量标度将一个值与一个特定对象的特定属性相关联。显然,属性的性质不必与用来度量它的值的性质相同。或者说,用来代表属性的值可能具有不同于属性本身的性质,反之亦然。例如,用户ID和年龄这两个属性都可以用整数表示,但是讨论用户的平均年龄是有意义的,而用户的平均ID却毫无意义。
属性的类型告诉我们,属性的哪些性质反映在用于测量它的值中。知道属性的类型是重要的,因为它告诉我们测量值的哪些性质与属性的基本性质一致,从而使得我们可以避免诸如计算用户平均ID的行为。通常将属性的类型称作测量标度的类型。
(2) 属性的类型
一种指定属性类型的简单方法是,确定对应属性基本性质的数值的性质。例如,长度的属性可以有数值的许多性质。按照长度比较对象,确定对象的排序,或讨论长度的差和比例都是有意义的。数值的如下性质(操作)常常用来描述属性。
给定这些性质,我们可以定义四种属性类型:标称(nominal)、序数(ordinal)、区间(interval)和比率(ratio)。表1给出了这些类型的定义,以及每种类型上有哪些合法的统计操作等信息。每种属性类型拥有其上方属性类型上的所有性质和操作,即属性类型的定义是累积的。
属性类型 |
描述 |
操作 |
|
分类的 (定性的) |
标称 |
标称属性的值仅仅是不同的名字,即标称值只提供足够的信息以区分对象(=,!=) |
众数、熵、列联相关、检验 |
序数 |
序数属性的值提供足够的信息确定对象的序(<,>) |
中值、百分位、秩相关、游程检验、符号检验 |
|
数值的 (定量的) |
区间 |
对于区间属性,值之间的差是有意义的,即存在测量单位(+,-) |
均值、标准差、皮尔森相关、t和F检验 |
比率 |
对于比率变量,差和比率都是有意义的(*,/) |
几何平均、调和平均百分比变差 |
表1 不同的属性类型
标称和序数属性统称为分类的(categorical)或定性的(qualitative)属性。定性属性不具有数的大部分性质,即便使用数表示,也应当像对待符号一样对待它们。其余两种类型的属性,即区间和比率属性,统称为数值的(numeric)或定量的(quantitative)属性。定量属性用数表示,并且具有数的大部分性质。
属性的类型也可以用不改变属性意义的变换来描述。对特定属性类型有意义的统计操作是这样一些操作,当使用保持属性意义的变换对属性进行变换时,它们产生的结果相同。表2给出表1中四种属性类型的允许的(保持意义的)变换。
属性类型 |
变换 |
|
分类的 (定性的) |
标称 |
任何一对一变化,例如值的一个排列 |
序数 |
值的保序变换,即:新值=f(旧值),其中f是单调函数 |
|
数值的 (定量的) |
区间 |
新值=a*旧值+b,其中a、b是常数 |
比率 |
新值=a*旧值 |
表2 定义属性的变换
区分属性的一种独立方法是根据属性可能取值的个数来判断。
从理论上讲,任何测量标度类型(标称、序数、区间和比率)都可以与基于属性值个数的任意类型(二元、离散和连续)组合,但有些组合并不常出现,或者没有什么意义。通常,标称和序数是二元的或离散的,而区间和比率属性是连续的。然而,计数属性(count attribute)是离散的,也是比率属性。
(3) 数据集的类型
数据集的类型有多种,并且随着数据挖掘的发展与成熟,会有更多类型的数据集用于分析。为了便于说明,我们将常见的数据集类型分成三组:记录数据、基于图形的数据和时序数据。大部分数据挖掘算法都是以记录数据或其变体设计的。通过从数据对象中提取特征,并使用这些特征创建对应于每个对象的记录,针对记录数据的技术也可以用于非记录数据。
数据集合的一般特性
在提供特定类型数据集的细节之前,我们先讨论适用于数据集的三个一般特性,即维度、稀疏性和分辨率,它们对数据挖掘技术具有重要影响。
记录数据
许多数据挖掘任务都假定数据集是记录(数据对象)的汇集,每个记录包含固定的数据字段(属性)集。对于记录数据的大部分基本形式,记录之间或数据字段之间没有明显的联系,并且每个记录(对象)具有相同的属性集。记录数据通常存放在平面文件或关系数据库中。下面介绍不同类型的记录数据。
基于图形的数据
有时图形可以方便而有效地表示数据。我们考虑两种特殊情况:(1)图形捕获数据对象之间的联系;(2)数据对象本身用图形表示。
时序数据
时序数据(sequential data)也称时间数据(temporal data),可以看作记录数据的扩充,其中每个记录包含一个与之相关联的时间。考虑存储事务发生时间的零售事务数据,时间信息可以帮助我们发现与时间相关的特定商品的销售峰值,从而利用这类模式进行促销活动。时间也可以与每个属性相关联,例如,每个记录可以是一位客户的购物历史,包含不同时间购买的商品列表。使用这些信息,就有可能发现购买商品时间顺序之类的模式。
时间序列数据(time series data)是一种特殊的时序数据,其中每个记录都是一个时间序列(time series),即一段时间以来的测量序列。例如,金融数据集可能包含各种股票每日价格的时间序列对象。