MADlib——基于SQL的数据挖掘解决方案(1)——数据挖掘入门

一、什么是数据挖掘

        数据挖掘(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)步骤,确保只将那些有效的和有用的结果集成到决策支持系统中。后处理的一个例子是可视化,它使得数据分析者可以从各种不同的视角探查数据挖掘的结果。在后处理阶段,还能使用统计度量或假设检验,删除虚假的数据挖掘结果。

        数据挖掘与传统的数据分析(如查询、报表、联机应用分析)的本质区别是数据挖掘是在没有明确假设的前提下去挖掘信息、发现知识,包括不公开的数据。数据挖掘使数据库技术进入了一个更高级的阶段。数据挖掘是要发现那些不能靠直觉发现的信息或知识,甚至是违背直觉的信息或知识,挖掘出的信息越是出乎意料,就可能越有价值。能够比市场提前知道这种信息,提前做出决策就有机会获得更多利润。

        相对于传统数据分析,概括来说,数据挖掘技术具有以下几个特点:

  • 处理的数据规模十分庞大,达到GB、TB数量级,甚至更大。
  • 查询一般是决策制定者(用户)提出的即时随机查询,往往不能形成精确的查询要求,需要靠系统本身寻找其可能感兴趣的东西。
  • 在一些应用(如商业投资等)中,由于数据变化迅速,因此要求数据挖掘能快速做出相应反应以随时提供决策支持。
  • 数据挖掘中,规则的发现基于统计规律。因此,所发现的规则不必适用于所有数据,而是当达到某一临界值时,即认为有效。因此,利用数据挖掘技术可能会发现大量的规则。
  • 数据挖掘所发现的规则是动态的,它只反映了当前状态的数据具有的规则,随着新数据的不断加入,需要随时对其进行更新。

三、数据挖掘的原理

        数据本身只是数据,直观上并没有表现出任何有价值的知识。当我们用数据挖掘方法,从数据中挖掘出知识后,这种知识是否值得信赖呢?为了说明这种知识是可信的,有必要了解一下数据挖掘的原理。

        数据挖掘其实质是综合应用各种学科,对于业务相关的数据进行一系列科学的处理,这个过程中需要用到数据库、统计学、应用数学、机器学习、模式识别、数据可视化、信息科学、程序开发等多个领域的理论和技术,如图2所示。其核心是利用算法对处理好的输入和输出数据进行训练,并得到模型。然后再对模型进行验证,使得模型能够在一定程度上刻画出数据由输入到输出的关系。最终利用该模型,对新输入的数据进行计算,从而得到新的输出,对这个输出就可以进行解释和应用了。所以这种模型虽然不容易解释或很难看到,但它是基于大量数据训练并经过验证的,因此能够反映输入数据和输出数据之间的大致关系,这种关系也即模型,就是我们需要的知识。可以说,这就是数据挖掘的原理,从中可以看出,数据挖据是有一定科学依据的,这样挖掘的结果也是值得信任的。

图2 数据挖据与其它学科的关系

四、数据挖掘的任务

        通常可将数据挖掘任务分为预测和描述两大类。预测任务的目标是根据其它属性的值,预测特定属性的值。被预测的属性一般称为目标变量(target variable)或因变量(dependent variable),而用来做预测的属性称为说明变量(explanatory)或自变量(independent variable)。描述任务的目标是导出概括数据中潜在联系的模式(关联、趋势、聚类、轨迹和异常)。本质上,描述性数据挖掘任务大都是探查性的,并且常常需要后处理技术验证和解释结果。

        对学术研究和产业应用进行归纳,会发现数据挖掘的任务总是集中在几个方面,即回归、分类、预测、关联、聚类、异常检测六个方面,前三个属于预测性任务,后三个属于描述性任务。它们不仅在挖掘的目标和内容上不同,所使用的技术也差别较大,所以通常也将数据挖掘的技术按照这六个方面分类。下面将逐一简要介绍这六类数据挖掘任务及相应的算法。

1. 回归(regression)

        回归是确定两种或两种以上变量间相互定量关系的一种统计分析方法。回归是数据挖掘中最为基础的方法,也是应用领域和应用场景最多的方法,只要是量化型问题,我们一般都会先尝试用回归方法来研究或分析。比如要研究某地区钢材消费量与国民收入的关系,那么就可以直接用这两个变量的数据进行回归,然后看它们之间的关系是否符合某种形式的回归关系。回归可用于预测连续的目标变量。

        根据回归方法中因变量的个数和回归函数的类型(线性或非线性)可将回归方法分为以下几种:一元线性、一元非线性、多元线性、多元非线性。另外还有两种特殊的回归方式,一种是在回归过程中可以调整变量数的回归方法,称为逐步回归,另一种是针对因变量为定性变量(如0、1二值)的回归方法,称为Logisitic回归。

2. 分类(classification)

        分类是一个常见的问题,在我们的日常生活中就会经常遇到分类问题,比如垃圾分类。数据挖掘中的分类也是最为常见的问题,其典型的应用是根据事物在数据层面表现的特征,对事物进行科学的分类。分类可用于预测离散的目标变量。

        对于分类问题,人们已经研究并总结出了很多有效的方法。到目前为止,已经研究出的分类方法包括:决策树方法(经典的决策树算法主要包括ID3算法、C4.5算法和CART算法等)、神经网络方法、贝叶斯分类、K-近邻算法、判别分析、支持向量机等分类方法。不同的分类方法有不同的特点。这些分类方法在很多领域都得到了成功的应用,比如决策树方法已经成功地应用到医学诊断、贷款风险评估等领域;神经网络则因为对噪声数据有很好的承受能力而在实际问题中得到了非常成功的应用,比如识别手写字符、语音识别和人脸识别等。但是由于每一种方法都有缺陷,再加上实际问题的复杂性和数据的多样性,使得无论哪一种方法都只能解决某一类问题。近年来,随着人工智能、机器学习、模式识别和数据挖掘等领域中传统方法的不断发展以及各种新方法和新技术的不断涌现,分类方法得到了长足的发展。

3. 预测(forecasting)

        预测是预计未来事件的一门科学,它包含采集历史数据并用某种数学模型来预测未来,它也可以是对未来的主观或直觉的预期,还可以是上述的综合。在数据挖掘中,预测是基于既有数据进行的,即以现有数据为基础,对未来的数据进行预测。

        预测的重要意义就在于它能够在自觉地认识客观规律的基础上,借助大量的信息资料和现代化的计算手段,比较准确地揭示出客观事物运行中的本质联系及发展趋势,预见到可能出现的种种情况,勾画出未来事物发展的基本轮廓,提出各种可以互相替代的发展方案,这样就使人们具有了战略眼光,使得决策有了充分的科学依据。

        预测方法有很多,可以分为定性预测方法和定量预测方法。从数据挖掘角度,我们用的方法显然属于定量预测方法。定量预测方法又可分为时间序列分析和因果关系分析两类,其中常用的时间序列分析法有移动平均(ARIMA)、指数平滑等,因果关系分析法有回归方法、计量经济模型、神经网络预测法、灰色预测法、马尔科夫预测法等。

4. 关联(association)

        关联分析用来发现描述数据中强关联特征的模式。所发现的模式通常用蕴涵规则或特征子集的形式表示。由于搜索空间是指数规模的,关联分析的目标是以有效的方式提取最有趣的模式。购物篮分析就是一种典型的关联分析。“尿布与啤酒”的故事大家都听过,它们之间属于关联关系,是通过对交易信息进行关联挖掘而得到的,这种类型的规则可以用来发现各类商品中可能存在的交叉销售的商机。

        数据关联是一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据之间隐藏的关联关系。关联分析生成的规则带有可信度,通过可信度来描述这种关系的确定程度。

        关联规则挖掘就是要发现数据中项集之间存在的关联关系或相关关系。按照不同情况,关联挖掘可以分为以下几种情况:

(1)基于规则中处理的变量的类别,关联规则可以分为布尔型和数值型。

        布尔型关联规则处理的值都是离散的、种类化的,它显示了这些变量之间的关系;而数值型关联规则可以和多维关联或多层关联规则结合起来,对数值型字段进行处理,将其进行动态地分隔,或者直接对原始的数据进行处理,当然数值型规则中也可以包含种类变量。例如:性别 = “女” => 职业 = “秘书”,是布尔型关联规则;性别 = “女” => avg(收入)=2300,涉及的收入是数值类型,所以是一个数值型关联规则。

(2)基于规则中数据的抽象层次,可以分为单层关联规则和多层关联规则。

        在单层的关联规则中,所有的变量都没有考虑到现实的数据是具有多个不同层次的;而在多层关联规则中,对数据的多层性进行了充分的考虑。例如:IBM台式机 => Sony打印机,是一个细节数据上的单层关联规则;台式机 => Sony打印机,是一个较高层次和细节层次之间的多层关联规则。

(3)基于规则中涉及的数据的维数,关联规则可以分为单维的多维的。

        在单维的关联规则中,我们只涉及数据的一个维,如用户购买的物品;而在多维的关联规则中,要处理的数据将会涉及多个维。换言之,单维关联规则是处理单个属性中的一些关系;多维关联规则是处理各个属性之间的某些关系。例如:啤酒 => 尿布,这条规则只涉及用户购买的物品;性别 = “女” => 职业 = “秘书”,这条规则就涉及两个字段的信息,是两个维上的一条关联规则。

        常用的关联算法有Apriori、FP-tree、HotSpot等。

5. 聚类(cluster)

        聚类分析又称群分析,是根据“物以类聚”的道理,对样品进行分类的一种多元统计分析方法。它讨论的对象是大量的样品,要求能合理地按各自特性来进行合理的分类,没有任何模式可供参考或依循,是在没有先验知识的情况下进行的。聚类是将数据分类到不同的类或者簇的过程,旨在发现紧密相关的观测对象群组,使得与属于不同簇的对象相比,属于同一簇的对象相互之间尽可能类似。

        聚类分析起源于分类学,在古老的分类学中,人们主要依靠经验和专业知识来实现分类,很少利用数学工具进行定量的分类。随着人类科学技术的发展,对分类的要求越来越高,以至有时仅凭经验和专业知识难以确切地进行分类,于是人们逐渐地把数学工具引用到了分类学中,形成了数值分类学,之后又将多元分析的技术引入到数值分类学形成了聚类分析。更直接地说,聚类是看样品大致分成几类,然后再对样品进行分类,也就是说,聚类是为了更合理地分类。

        在不同应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。在商业上,聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同客户群的特征;在生物上,聚类分析被用来进行动植物分类和对基因进行分类,获取对种群固有结构的认识;在保险行业上,聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型、价值、地理位置来鉴定一个城市的房产分组;在因特网应用上,聚类分析被用来在网上进行文档归类。

        聚类问题的研究已经有很长的历史。迄今为止,为了解决各领域的聚类应用,已经提出的聚类算法有近百种。根据聚类原理,可将聚类算法分为以下几种:划分聚类、层次聚类、基于密度的聚类、基于网络的聚类和基于模型的聚类。虽然聚类的方法很多,在实践中用得比较多的还是K-means、层次聚类、神经网络聚类、模糊C-均值聚类、高斯聚类等几种常用的方法。       

6. 异常检测(anomalydetection)       

        异常检测的任务是识别其特征显著不同于其它数据的观测对象。这样的观测对象称为异常点(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.  挖掘目标的定义

        企业或组织机构当想要实施数据挖掘时,十有八九是因为觉得积累的业务数据里有些有价值的东西,也就是说在潜意识里面已经有了大致的目标了。这种目标在无形之中会给随后的数据挖掘过程给出明确的目标,所谓有的放矢,这样数据挖掘就可以有意义地进行下去。因此,实施数据挖掘的第一步要确定数据挖掘的目标。

        但要确定目标,就必须要了解数据和相关业务。比如,要分析电信领域的客户呼叫行为,需要了解电信的业务构成、业务运营以及其他诸多的行业知识。有关业务问题,指的是在业务过程中需要解决的问题、想要知道的答案并且认为这些问题的答案蕴藏在大量的数据中,但并不知道它们在哪里。可能涉及的业务问题很多,从数据挖掘的角度,所需要了解的业务问题至少包含以下三个方面:

(1)有关需要解决问题的明确定义;

(2)对有关数据的理解;

(3)数据挖掘结果对业务作用效力的预测。

        如果无法确定哪些问题可用数据挖掘解决,一个好的方法是看它们的成功案例,不论所在行业是否相同。许多业务和研究的领域都被证实是数据挖掘能够得以成功应用的领域。它们包括金融服务、银行、保险、电信、零售、制造业、生物、化工等。

        当对业务和数据有了一定的了解之后,就可以很容易地定义挖掘的目标,一般可以从以下两个方面定义数据挖掘的目标:

(1)数据挖掘需要解决的问题;

(2)数据挖掘完成后达到的效果,最好给出关键的评估参数及数值,比如数据挖掘结果在3个月内使得整体收益提高5个百分点。

2.  数据的准备

        数据的准备是数据挖掘中耗时最多的环节,因为数据挖掘的基础就是数据,所以足够、丰富、高质量的数据对数据挖掘的结果至关重要。数据的准备包括数据的选择、数据的质量分析和数据的预处理三个环节。

(1)数据的选择

        选择数据就是从数据源中搜索所有与业务对象有关的内部和外部数据信息,并从中选择出适用于数据挖掘应用的数据。内部数据通常指的是现有数据,例如交易数据、调查数据、Web日志等。外部数据通常指需要购买的一些数据,比如股票实时交易数据。

        从选择的数据类型来看,在大多数商业应用中都会包括交易数据、关系数据、人口统计数据三种类型的数据。交易数据是业务对象发生业务时产生的操作数据。它们一般有明显的时间和顺序特征,与业务发生有关联,如投资人的证券交易、客户的购物、电话的通话等。关系数据则是相对较少变化的数据,表达了客户、机构、业务之间的关系,如投资人与交易所,客户与电信公司等。人口统计数据表达与业务主题相关的描述信息,这些数据可能来自外部的数据源。这三种数据类型反映了三种数据信息,在数据挖掘的过程中,对知识的发现非常重要,所以选择数据的时候尽量包括业务相关的这三种类型的数据。

(2)数据的质量分析

        数据几乎没有完美的。事实上,大多数数据都包含代码错误、缺失值或其它类型的不一致现象。一种避免可能出现缺陷的方法是在建模前对可用数据进行全面的质量分析。数据质量分析的目的是评估数据质量,同时为随后的数据预处理提供参考。数据的质量分析通常包括以下几个方面的内容:

  • 缺失数据:包括空值或编码为无业务处理的缺省值(例如$null$、?或999)。
  • 数据错误:通常是在输入数据时造成的人为错误。
  • 度量标准错误:包括正确输入但却基于不正确的度量方法的数据。
  • 编码不一致:通常包含非标准度量单位或不一致的值,例如同时使用M和male表示性别。
  • 无效的元数据:包含字段的数据含义和字段名称或定义中陈述的意思不匹配。

(3)数据的预处理

        经过数据质量分析往往会发现,数据总是存在这样或那样的问题,为了得到准确性、完整性和一致性较好的数据,必须要对数据进行预处理。根据数据质量的不同,数据预处理所用的技术也会有所不同,但通常会包括数据清洗、数据集成、数据规约和数据变换四个步骤,这四个步骤的作用效果如图4所示。

图4 数据预处理的内容

3.  数据的探索

        探索数据是对数据进行初步研究,以便更好地了解数据的特征,为建模的变量选择和算法选择提供依据。在数据挖掘的过程中,数据的准备和数据的探索是个双向的过程,也就是说,数据探索的结果也可以指导数据的准备,尤其是数据的预处理。更具体地说,在数据挖掘过程中,先进行数据的准备,包括收集、质量分析和预处理,然后进行数据的探索,如果在探索阶段发现数据量太少或数据质量不好或者区分度不好,那么就会返回数据的准备,重新进行数据的收集、质量分析和预处理,通常是直接返回到预处理环节,如对数据进行归一化等预处理操作。然后继续对数据进行探索,直到通过探索对数据比较满意为止,这样就可以转入到下个阶段了。

        从广义上说,很少或没有得到理论支撑的数据分析均可以视为数据探索的范畴。数据探索更多的是对数据进行初步分析,有助于针对不同类型的数据或条件进行统计分析的一种技术。数据探索或探索性数据分析具有启发式、开放式等特点。

        启发式在于,我们可能对数据的类型或特点知之甚少,需要通过统计技术来探索数据内部的东西,就是通常我们所说的“让数据说话”。这时一般是由于某种原因我们可能对数据背后的理论信息掌握得很少,或缺少这方面的资料等。

        开放式在于数据探索以数据清理为先导。数据清理工作往往要参考学科背景知识,例如对缺失值的处理,如果该学科数据对异常值的反应很灵敏,这时如果使用均值去填补,可能会丢失大量的信息(假如缺失值很多)。所以如果仅仅是数据探索,则很少需要考虑上述情况,可以完全根据数据特点来选择相应的处理方法,开放性也体现于此。

        下面从几个大的方向上来了解数据探索的方法:

(1)描述统计

        描述统计包括均值、频率、众数、中位数、极差、方差和百分位数等,一般来说描述统计均可以用来探索数据结构,它们均用于探索数据的不同属性。

(2)数据可视化

        数据可视化也是数据探索阶段常用的一种技术,这种技术概括起来就是将数据的总体特点以图形的方式呈现,用以发现其中的模式。并可以根据一定的规则(标准差、百分数等信息)去拆分、合并等进一步的处理。

        毫无疑问图形简明易懂,很多难以表达的情况使用图表顿时使问题变得简单,这也许就是所谓的一图胜千言,这在数据探索中起到很重要的作用,比如常用的频次图、散点图、箱体图等。

(3)数据探索的建模活动

        一切可以用于建模的统计方法或计量模型均可以用于数据探索,不过模型之所以是模型,是因为其背后的理论或学科性质的支撑,所以从这层意义上说,数据探索更多是为分析人员提供感性的认识,所有的结果都有待于理论的验证,而只有在认识的边缘,理论才渐渐被淡化。

4.  模型的建立

        模型的建立是数据挖掘的核心,在这一步要确定具体的数据挖掘模型(算法),并用这个模型原型训练出模型的参数,得到具体的模型形式。模型建立的操作流程如图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就会非常困难,除非每次训练分类器得到模型的速度很快,或可以用并行化计算减少计算所需的时间。当然也可以认为,全集验证是一种特殊的交叉验证方式。

        我们可以依据得到的模型和对模型的预期结果修改参数,再用同样的算法建立新的模型,甚至可以采用其它算法建立模型。在数据挖据中,要根据不同的商业问题采用效果更好的模型,在没有行业经验的情况下,最好用不同的方法(参数或算法)建立几个模型,从中选择最好的。通过上面的处理,就会得到一系列的分析结果和模式,它们是对目标问题多侧面的描述,这时需要对它们进行验证和评价,以得到合理的、完备的决策信息。对产生模型结果需要进行对比验证、准确度验证、支持度验证等检验以确定模型的价值。这个阶段需要引入更多层面和背景的用户进行测试和验证,通过对几种模型的综合比较,产生最后的优化模型。

5.  模型的评估

        模型评估阶段需要对数据挖掘过程进行一次全面的回顾,从而确定是否存在重要的因素或任务由于某些原因而被忽视,此阶段的关键目的是确定是否还存在一些重要的商业问题仍未得到充分的考虑。验证模型是处理过程中的关键步骤,可以确定是否成功地进行了前面的步骤。模型的验证需要利用未参与建模的数据进行,这样才能得到比较准确的结果。可以采用的方法有直接使用原来建立模型的样本数据进行检验,或另找一批数据对其进行检验,也可以在实际运行中取出新的数据进行检验。检验的方法是对已知客户状态的数据利用模型进行挖掘,并将挖掘结果与实际情况进行比较。在此步骤中若发现模型不够优化,还需要回到前面的步骤进行调整。

        模型的预测精确度是检验模型好坏的一个重要指标,但不是唯一指标。一个良好的数据挖掘模型,在投入实际应用前,需要经过多方面的评估,从而确定它完全达到了商业目标。评估数据挖掘模型优劣的指标有许多,比如精确度、LIFT、ROC、Gain图等。

        精确度是最基本和最简单的指标。但是要让用户接受一个模型的结果,仅靠这些评估指标是不够的,还需要从模型结果的可用性上进一步阐述,即数据挖掘模型到底能带来什么业务上的价值。这实际上也就是数据挖掘模型的可解释性。在实际数据挖掘项目中,模型的可解释性往往比评估指标更为重要。

        在对模型进行评估时,既要参照评估标准,同时也要考虑到商业目标和商业成功的标准。片面地追求预测正确率就会忽视了数据挖掘的初衷。我们不是为了建立一个完美的数学模型而进行挖掘,而是为了解决实际商业问题。所以挖掘产生结果的可解释性与实用性,才是最根本的标准。例如,在解决客户流失问题中,预测模型捕获越多的流失客户,不一定就代表能够协助挽留较多的客户。关键在于预测结果对挽留营销活动的制定有多大的帮助。

6.  模型的部署

        模型的部署一般是数据挖掘过程的最后一步,是集中体现数据挖据成果的一步。顾名思义,模型的部署就是将通过验证的评估模型,部署到实际的业务系统中,这样就可以应用在数据中挖掘到的知识。

        一般而言,完成模型创建并不意味着项目结束。模型建立并经验证后,有两种主要的使用方法。一种是提供给分析人员做参考,由分析人员通过查看和分析这个模型后提出行动方案建议;另一种是把此模型开发并部署到实际的业务系统中。在部署模型后,还要不断监控它的效果,并不断改进之。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

人工智能进行连续决策的关键——强化学习入门指南

832
来自专栏QQ大数据团队的专栏

用户增长分析——用户分群分析

29211
来自专栏大数据文摘

小白学数据 | 除了计算大姨妈周期,时间序列分析还有什么用

1485
来自专栏智能算法

外部存档指导的多目标进化算法简略版

正值毕业季,小编这里简洁明了地讲述一下自己毕业设计相关的算法。 当初之所以跟着导师学习进化算法,首先很有意思的一点是,进化算法是一种种群类算法,设计算法思路的时...

2879
来自专栏专知

【论文笔记】强化学习+对抗,面向任务的神经对话模型新思路

Adversarial Learning of Task-Oriented Neural Dialog Models

1102
来自专栏机器之心

2017年,机器之心贡献过的开源项目

2505
来自专栏数据派THU

独家 | 一文读懂推荐系统知识体系-上(概念、结构、算法)

? 本文主要阐述: 推荐系统的3个W 推荐系统的结构 推荐引擎算法 浏览后四章的内容请见下篇。 1. 推荐系统的3个W 1.1 是什么(What is it?...

5897
来自专栏机器之心

解读 | 通过拳击学习生成对抗网络(GAN)的基本原理

选自 KDnuggets 机器之心编译 作者:Michael Dietz 参与:Jane W、晏奇、吴攀 生成对抗网络(GAN)近来在研究界得到了很大的关注。在...

3556
来自专栏QQ大数据团队的专栏

神盾推荐——MAB算法应用总结

3274
来自专栏大数据文摘

为什么说GANs是一个绝妙的艺术创作工具?

我是一个艺术家,同时也是一位开发者。艺术和软件在我的生活中曾经是两个平行的轨道,直到我发现了GANs(Generative Adversarial Networ...

842

扫码关注云+社区