数据挖掘过程

在实施数据挖掘之前,先制定采取什么样的步骤,每一步都做什么,达到什么样的目标是必要的,有了好的计划才能保证数据挖掘有条不紊的实施并取得成功。很多软件供应商和数据挖掘顾问公司投提供了一些数据挖掘过程模型,来指导他们的用户一步步的进行数据挖掘工作。比如SPSS的5A--评估(Assess),访问(Access),分析(Analyze),行动(Act),自动化(Automate),和SAS的SEMMA--采样(Sample),探索(Explore),修正(Modify),建模(Model),评估(Assess)。

最近,一些软件供应商和用户组织成立了行业协会,包括NCR Systems Engineering Copenhagen(丹麦)Daimler-Benz AG(德国)SPSS/Internal Solutions Ltd.(英国),和OHRA Verzekeringen en Bank Grep B.V(荷兰)。这个组织的目的就是建立跨行业数据挖掘过程标准(CRISP-DM),在1999年9月的时候CRISP-DM仍在建立之中。

我们下面详细讨论Two Crows公司的数据挖掘过程模型,他与正在建立的CRISP-DM有许多相似之处。

数据挖掘过程模型

虽然我们把各个步骤按顺序排列,但要注意数据挖掘过程并不是线性的—要取得好的结果就要不断反复重复这些步骤。比如在“分析数据”时你可能觉得在“建立数据挖掘数据库”时作的不够好,要往里面添加一些新的数据。

这些基本数据挖掘步骤包括:

1.         定义商业问题

2.         建立数据挖掘模型

3.         分析数据

4.         准备数据

5.         建立模型

6.         评价模型

7.         实施

1.         定义商业问题。在开始知识发现之前最先的同时也是最重要的要求就是了解的你的数据和业务问题。如果事先没有这种了解,没有任何算法,不管他有多么复杂玄妙,能够为你提供有价值的结果,即使有也难以使人信赖他。缺少了这些背景知识,你就没办法明确定义要解决的问题,不能为挖掘准备数据,也很难正确的解释得到的结果。要想充分发挥数据挖掘的价值,必须要对你的目标有一个清晰明确的定义,即决定到底想干什么。比如你说你想提高直接邮件推销的用户回应时,你想做的可能是“提高用户响应率”,也可能是“提高一次用户回应的价值”,要解决这两个问题而建立的模型几乎是完全不同的,你必须做出决定。有效的问题定义还应该包含一个对你的知识发现项目得到结果进行衡量的标准。当然还应该有整个项目预算和理性的解释。

2.         建立数据挖掘库。连同下面的两个步骤,这三步构成了数据预处理的核心。这三步和在一起比其他所有的步骤加在一起所花得时间和精力还多。一旦你从数据挖掘的结果中学到一些什么之后,你很可能要修改数据以得到更好得结果,因此就需要把数据准备和数据挖掘不断的反复进行。数据准备工作大概要花去整个数据挖掘项目的50%-90%的时间和精力。

应该把要挖掘的数据都收集到一个数据库中。注意这并不是说一定要使用一个数据库管理系统。根据要挖掘的数据量的大小、数据的复杂程度、使用方式的不同,有时一个简单的平面文件或电子表格就足够了。

一般来说,直接在公司的数据仓库上进行数据挖掘是不合适的。你最好建立一个独立的数据集。数据挖掘会使你成为数据仓库非常活跃的用户,这可能会带来一些资源申请上的问题。你需要经常把许多表连接在一起,访问数据仓库的细节数据。一个简单的试验在数据仓库内都要很多步才能完成。

大部分情况下你肯定需要修改要挖掘的数据。而且还会遇到把企业外部的数据拿到数据仓库内和在原有的表中增加新的字段的情况。其他的数据挖掘用户可能也要对数据仓库进行与您相似或完全不同的修改。而对数据仓库管理员来说,这恐怕是他最不愿意遇到的事情。

需要建立独立的数据挖掘库的另一个理由是,数据仓库可能不支持你要对数据进行各种复杂分析所需的数据结构。这包括对数据进行统计查询,多维分析,和各种复杂的图表和可视化。

最后,你可能希望把这些要挖掘的数据存贮在与公司的数据仓库在物理设计上不同的DBMS上。人们越来越倾向于使用DBMS本身很好的支持数据挖掘的数据库程序,这样能使数据挖掘工作进行的更容易一些。当然如果你的数据仓库允许你建立一个在逻辑上独立的数据库并且在计算资源上也足够的话,那么在他上面进行数据挖掘也是可以的。

可以把建立数据挖掘库分成下面几个部分:

a.         数据收集

b.         数据描述

c.         选择

d.         数据质量评估和数据清理

e.         合并与整合

f.          构建元数据

g.         加载数据挖掘库

h.         维护数据挖掘库

注意这些步骤并不需要一定要按步骤执行,而应该按需要进行。比如你可能在收集数据时就开始构建元数据,并随着工作的进行不断的对其进行修改。在数据整合和数据质量评估过程中了解到得东西也有可能是你修改最初的数据选择。

a.         数据收集。确定要挖掘的数据源。可能一些外部的数据也是必须的,需要在公共数据库中获取(人口统计或天气数据)或向数据拥有者购买(比如信用卡使用数据)。

用以一个数据搜集报告把所需的各种不同的数据源的属性列出来。此报告至少应包含如下的内容:

²        数据源(内部数据库或外部提供者)

²        拥有者

²        负责维护此数据的人/组织

²        DBA

²        费用(如果需要购买)

²        存储方式(如:Oracle数据库、MSAM文件等)

²        表、字段、记录的数目

²        字节数

²        物理存储方式(CD-ROM、磁带、服务器等)

²        安全需求

²        使用上的限制

²        隐私上的需求
 

注意一旦应用了在安全和隐私上有特殊限制的数据,那么你的数据挖掘库在安全和隐私上也就继承了同样的限制。比如许多欧洲的数据在隐私上的限制要比美国严格的多。

b.         数据描述。描述每个文件和数据库表的内容。数据描述报告中应包含如下内容:

²        字段/列的数目

²        字段是空(缺值)的数目/百分比

²        字段的名字

对每个字段

²        数据类型

²        定义

²        描述

²        源

²        计量单位

²        所有不同值的个数

²        值的列表

²        值的范围

²        空值的百分比

²        收集信息(比如:怎么得到的,在哪,什么条件下)

²        时间频度(Timeframe)(每天,每周,还是每月)

²        特别时间数据(比如:每个周一或每个周三)

²        主键/外键关系
 

c.         选择。接下来就要选择用于数据挖掘的数据(源数据的子集)。这与对数据进行采样和选择预测变量是不同的,这里只是粗略的把一些冗余或无关的数据除去,或由于资源的限制、费用的限制、数据使用的限制、和质量问题而必须做出的选择。

d.         数据质量评估和数据清理。“龙生龙,凤生凤”对数据挖掘也是非常适用的,要想得到好的模型必须用好的数据。数据质量评估就是要确定数据的哪些性质会最终影响模型的质量。你不仅要保证数据值的正确性和一致性,还要保证这些值是按同样的方法记录的同一件事情。

由各种各样的数据质量问题。数据域中可能包含了不正确的值。比如,身份证号码被粗心的数据录入人员录入了年龄。即使每个单个域中包含的数据都是正确的,但这些域组合起来时可能就出现了错误的记录,如男性怀孕。有时域中的值为空。当从多个不同的源整合数据时一定要注意不同源之间数据的一致性。

缺值是一个非常有害的问题。如果只要有一个数据域缺值就把这个记录删除掉,那么最后可能得到一个很小的数据库,同时你得到的这个数据库很可能已经丢失了实际数据中蕴含的一些信息,因为你已经改变了原数据的组成。缺值这件事本身可能就是非常有意义的,比如也许只有富有的顾客才经常忽略“收入”这一项。你可以增加一个新的变量来标识这些缺值的记录,然后用它建立一个模型,然后与按其他方法建立的模型进行比较,看哪个准确度更高一些。

另一种方法是为缺失的值计算一个替代值。计算替代值的常用方法包括使用形式值(为名词变量),中间值(为可排序变量),平均值(为连续变量)。还有一个不是很常用的方法是按照数据库中值的分布规律为缺值的字段添值。比如如果数据库中包含40%男性和60%女性,那么在为那些性别子段缺失的记录添值时也按这个比例随机赋值。还有一种方法是为这个缺值的字段用数据挖掘技术建立一个预测模型,然后按照这个模型的预测结果添值,这种方法效果应该最好,当然也最花时间。

承认生活并不是十全十美是必要的,数据挖掘也是一样,你也不可能解决所有遇到的问题,只能做得尽量好一点。检查和修正数据质量问题是一项非常耗费时间和金钱的工作,对解决不了的问题,通常你只能采取折衷的办法,先用现有的数据建立一个模型,把问题放到将来去解决。

e.         合并与整合。如果幸运的话,你需要的所有数据都在同一个数据库中(比如数据仓库),但大部分情况下这些数据是分布在不同的数据库中。数据可能分布在公司不同的部门、不同的应用中,甚至在公司外(人口数据)。

数据合并与整合把来自不同数据源的数据合并到同一个数据挖掘库中,并且要使那些本来存在冲突和不一致的数据一致化。不恰当的一致化是数据质量问题的一个主要来源。不同的数据库间在数据定义和使用上通常都存在巨大的差异。有些不一致问题是容易解决的,如同一客户的不同住址问题。然而有些则非常棘手。例如同一个客户有不同的名字—甚至更遭的情况—多个不同的客户标识号码。同一个名字被用在不同的数据项上(同名异意),或同一个数据项用了不同的名字(同意不同名)。还有单位上的不统一。比如人民币和港元之间不能不做换算就直接加减。

f.          构建元数据。数据收集报告和数据描述报告是建立元数据的基础。本质上,这是一个描述数据库的数据库。他用于建立实际的数据库和为分析数据和建立模型提供辅助信息。

g.         加载数据挖掘库。大多数情况下,用于挖掘的数据应该放到他自己独立的数据库中。如果数据量大并且复杂,那么他通常是一个RDMS,反之只是一个简单的平面文件即可。经过前面所有的搜集、整理之后,现在开始把这些数据实际的加载过来了。依赖于所涉及的DBMS和操作系统,和数据库设计的复杂程度,有时这一步也可能变得很复杂,需要靠专家的帮助来完成。

h.         维护数据挖掘库。挖掘库一旦建好,就需要对他进行维护。需要定期备份;监视他的性能;不时的增加存储空间或提高性能。对存放在DBMS内的复杂的挖掘库来说,维护他需要计算机专业人员来完成。

3.         分析数据。请察看“描述型数据挖掘”以获得更详细的关于可视化、连结分析,及其他数据分析方法。分析的目的是找到对预测输出影响最大的数据字段,和决定是否需要定义导出字段。

如果数据集包含成百上千的字段,那么浏览分析这些数据将是一件非常耗时和累人的事情,这时你需要选择一个具有好的界面和功能强大的工具软件来协助你完成这些事情。

4.         准备数据。这是建立模型之前的最后一步数据准备工作。可以把此步骤划分成4个部分:

a.         选择变量

b.         选择记录

c.         创建新变量

d.         转换变量

a.         选择变量。理想情况下,你可以选择你所有的全部变量,把他们输入到数据挖掘工具中,让他来帮你选择哪些是最好的预测变量。实际上这样做并不是很好,一方面是由于随着变量个数的增加,模型的建立时间也随之上升;另一方面盲目的把所有的变量都加进去会导致建立错误的模型。比如,建立预测模型的一个常见错误就是把一个依赖于目标变量的变量(由目标变量导出)作为预测变量,像用生日来“预测”年龄。

在原理上说,一些数据挖掘算法自动忽略不相关的变量、自动计算相关的(协)变量,在实际应用中完全依赖这些工具是不明智的,毕竟最了解你的数据的还是你自己。利用你的领域知识,你会做出大部分正确的选择。例如,用身份证号或人名做预测变量要么不会有任何用处,要么甚至降低了其他重要变量的影响力。

b.         选择记录。与选择变量类似,你可能也想用你所有的数据行来建立模型,然而如果你的数据量确实非常巨大的话,要么要花费很长的时间来建立这个模型,要么买一台计算能力非常强大的机器。

因此,如果数据量特别大,进行抽样就是一个很好的主意。如果做的足够仔细,保证抽样是按真正的随机来进行的,采样对大部分商业问题来说都不会丢失信息。你可以用所有的数据建立一个模型;你还可以用采样的方法根据不同得采样方法建立几个模型,然后评价这几个模型选择一个最好的。我们认为后面这种方法得到的方法更准确、更健壮。

你可能选择数据中明显的异常数据删除掉。然而在某些情况下,这些看来异常的数据可能包含了你要建立模型的重要信息。基于你对问题的理解方式的不同,通常可以把这些异常忽略掉。比如可以把异常认为是人为的录入错误。

有时也需要向数据中添加一些新的数据(如,那些没有做出购买得客户)。

c.         创建新变量。很多情况下需要从原始数据中衍生一些新的变量作为预测变量。比如,用负债占收入百分比来预测信用风险比直接用负债和收入做预测变量更准确一些,也更容易理解一些。很多变量如果组合起来(加、减、比率等)会比这些变量自身影响力更大。一些变量如果扩大它的范围也会成为一个非常好的预测变量,比如用一段时间内收入变化情况代替一个单一的收入数据。

d.         转换变量。你所选择的算法和工具决定了都要对数据做哪些转换工作。如神经网络要求所有的变量都在0-1之间,因此在这些数据被提交到算法之前就必须先对不在[0,1]内的变量进行映射。同样一些决策树算法不接受数值型变量作为输入,在使用他们之前也要把这些数值映射到“高、中、低”等。当然你的转换方式也在一定程度上影响了模型的准确度。

5.         建立模型。对建立模型来说要记住的最重要的事是它是一个反复的过程。你需要仔细考察不同的模型以判断哪个模型对你的商业问题最有用。你在寻找好的模型的过程中学到的的东西会启发你修改你的数据,甚至改变最初对问题的定义。

一旦决定了预测的类型之后(分类还是回归),就需要为这个预测选择模型的类型。可能是一棵决策树、神经网络、甚至传统的数学统计。选择什么样的模型决定了你需对数据做哪些预处理工作。如神经网络需要做数据转换,有些数据挖掘工具可能对输入数据的格式有特定的限制,等。一旦所有的数据准备好之后,就可以开始训练你的模型了。

为了保证得到的模型具有较好的精确度和健壮性,需要一个定义完善的训练—验证协议。有时也称此协议为带指导的学习。他的主要思想就是先用一部分数据建立模型,然后再用剩下的数据来测试和验证这个得到的模型。有时还有第三个数据集,称为验证集,因为测试集可能受模型的特性的影响,这时需要一个独立的数据集来验证模型的准确性。

训练和测试数据挖掘模型需要把数据至少分成两个部分:一个用于模型训练,另一个用于模型测试。如果不使用不同的训练和测试集,那么模型的准确度就很难使人信服。用训练集把模型建立出来之后,就可以先在测试集数据上先试验一把,此模型在测试集上的预测准确度就是一个很好的指导数字,它说明如果将来与训练集和测试集类似的数据用此模型预测时,正确的百分比会有多大。这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。

简单验证。最基本的测试方法是被称为简单验证的方法。做法是从原始数据中拿出一定百分比的数据作为测试数据,这个百分比大概在5%到33%之间。注意在把数据库分成几部分时,一定要保证选择的随机性,这样才能使分开的各部分数据的性质是一致的。

先用数据库的主体把模型建立起来,然后用此模型来预测测试集中的数据。出现错误的预测与预测总数之间的比,称为错误率。正确的预测与总数的比,是准确率(准确率=1 - 错误率)。对回归模型来说,可以用方差来描述准确的程度。

在一次模型的建立过程中,即使这种最简单的验证就要执行几十次。例如在训练神经网络时,有时每一个训练周期就要求在测试集上运行一次,不断的训练测试,直到在测试集上的准确率不再提高为止。

交叉验证。如果数据不是很多(比如只有几千条),那么你可能承受不了再把一部分数据拿到一边不用,单用来做简单验证。交叉验证提供了一种让你使用全部数据的方法。首先把原始数据随机平分成两份,然后用一部分做训练集另一部分做测试集计算错误率,做完之后把两部分数据交换再计算一次,得到另一个错误率,最后再用所有的数据建立一个模型,把上面得到的两个错误率进行平均作为最后用所有数据建立的模型的错误率。

更通用的算法是n-维交叉验证。先把数据随机分成不相交的n份。比如,如果把数据分成10份,先把第一份拿出来放在一边用作模型测试,把其他9份合在一起来建立模型,然后把这个用90%的数据建立起来的模型用上面放在一边的第一份数据做测试。这个过程对每一份数据都重复进行一次,得到10个不同的错误率。最后把所有数据放在一起建立一个模型,模型的错误率为上面10个错误率的平均。

自举法是另一种评估模型错误率的技术。在数据量很小时尤其适用。与交叉验证一样模型是用所有的数据建立。

依据所得到的模型和你对模型的预期结果,你可能修改参数用同样的算法再建立新的模型,甚至采用其他的算法建立模型。别的方法说不定能提高预测的准确度。当然,没有一种算法或工具适应所有的数据,通常也很难在开始决定那种算法对你所面临的问题来说是最好的,因此很多情况下,需要建立用不同的方法(参数或算法)几个模型,从中选择最好的。

 

6. 评价和解释。

a. 模型验证。模型建立好之后,必须评价他的结果、解释他的价值。记住从测试集中得到的准确率只对用于建立模型的数据有意义。在实际应用中,随着应用数据的不同,模型的准确率肯定会变化。更重要的是,准确度自身并不一定是选择最好模型的正确评价方法。你需要进一步了解错误的类型和由此带来的相关费用的多少。

无序矩阵。对分类问题来说,无序矩阵是理解结果的非常好的工具。如图9所示,无序矩阵把预测的结果与实际的情况进行对比。它不仅说明了模型预测的准确情况,也把模型究竟在哪里出了问题也展示了出来。下表是一个简单的无序矩阵,其中的列代表数据的实际分类情况,行是预测的结果。在这张表值中,可以看到此模型在总共46个B类数据中成功预测了38个,8个出了问题:2个预测成了A,6个成了C。显然这比简单的说模型总体准确度是82%要更详细的多(123个成功预测除以总共150)。

 

在实际应用中,如果每种不同的预测错误所需付出的代价(金钱)也不同的话,那么代价最小的模型(而不一定是错误率最小的模型)就是我们所要选择的。例如,上面的无序矩阵中,如果每个准确的预测会带来¥10的收益,错误的预测A要付出¥5的代价,B是¥10,C是¥20,那么整个模型的纯价值是:

(123*¥10)-(5*¥5)-(12*¥10)-(10*¥20)=¥885

然而考察下面的无序矩阵(图10),虽然准确度降低到79%(118/150),但纯价值却升高了:

(118*¥10)-(22*¥5)-(7*¥10)-(3*¥20)=¥940

 

收益表(图11)也是一种描述模型价值的方法。它显示了通过应用模型响应(如直接邮件推销)的变化情况。变化的比率称为lift。例如,如果用随机抽取的方法选择10%的客户响应率是10%,而通过模型选取10%的用户响应率是30%,则lift值为3。


模型解释的另一个重要组成部分是确定模型的价值。一个模型可能看起来很有意义,但要实施它的话很有可能花的钱比赚的钱多。图12是一个描述模型投资回报率(ROI)的图表(这里定义 ROI为利润与开销的比值)。注意图中当选取比例超过80%时,ROI变成了负数,ROI最高是在横坐标为2时。

当然,也可以直接看利润的变化情况(利润为收入与花费的差值):

 
注意到我们上面的例子中,最大lift在第一个1/10处(10%),最大ROI在第2个1/10(20%),而最大利润在第3、4个1/10处。

理想情况下,应该按照利润表行事,但很多情况下利润表并不能很容易的计算出来。

b.  外部验证。如前面指出的,无论我们用模拟的方法计算出来的模型的准确率有多高,都不能保证此模型在面对现实世界中真实的数据时能取得好的效果。经验证有效的模型并不一定是正确的模型。造成这一点的直接原因就是模型建立中隐含的各种假定。例如,在建立用户购买模式的模型时,可能没有考虑通货膨胀的影响,但实施模型时通货膨胀率突然由3%增加为17%,这显然会对人们的购买意向产生重大影响,因此再用原来的模型来预测客户购买情况必然会出现重大失误。

因此直接在现实世界中测试模型很重要。先在小范围内应用,取得测试数据,觉得满意之后再向大范围推广。

7.   实施。模型建立并经验证之后,可以有两种主要的使用方法。第一种是提供给分析人员做参考,由他通过察看和分析这个模型之后提出行动方案建议。比如可以把模型检测到的聚集、模型中蕴含的规则、或表明模型效果的ROI图表拿给分析人员看。

另一种是把此模型应用到不同的数据集上。模型可以用来标示一个事例的类别,给一项申请打分等。还可以用模型在数据库中选择符合特定要求的记录,以用OLAP工具做进一步的分析。

通常情况下,模型是某个商业过程的组成部分,如风险分析,信用授权,或欺诈检测。在这些情况下,模型一般都合并到应用程序的内部。例如,在抵押贷款应用程序内部可能集成了一个预测模型,来向贷款官员提供一项贷款申请风险大小的建议。或在定购系统中,当预测到库存有可能降低到一个最低限度时自动发出购买订单。

数据挖掘模型通常一次只能处理一个事件或一个事务。每个事务的处理时间和事务到达的速度,决定了模型运行所需的计算能力,和是否要用并行技术来加快速度。比如,贷款申请程序可能PC机上就运行的很好,而用于信用卡欺诈的模型则需要在服务器上用并行算法才能应付每天的大量事务。

当提交一个复杂的应用时,数据挖掘可能只是整个产品的一小部分,虽然可能是最关键的一部分。例如,常常把数据挖掘得到的知识与领域专家的知识结合起来,然后应用到数据库中的数据。在欺诈检测系统中可能既包含了数据挖掘发现的规律,也有人们在实践中早已总结出的规律。

模型监控。在应用了模型之后,当然还要不断监控他的效果。即使你在开始使用这个模型之后觉得他非常成功,也不能放弃监控,因为事物在不断发展变化,很可能过一段时间之后,模型就不再起作用。销售人员都知道,人们的购买方式随着社会的发展而变化。因此随着使用时间的增加,要不断的对模型做重新测试,有时甚者需要重新建立模型。

 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值