阵法师等级:数据挖掘及其建模:一个热门话题的解惑_Borjigin-Somiya

来源:百度文库 编辑:中财网 时间:2024/04/27 20:41:53

转自(http://blogger.org.cn/blog/more.asp?name=haonan917&id=27615)

数据挖掘及其建模:一个热门话题的解惑
  
   宇宙之大,万事万物概莫变化无常。模型作为一种抽象的工具,远在几千年前我们的老祖宗就已经意识到其作用,人们制造瓷器、陶器、铜器、金器、银器等等,都要首先制作各种“模子”。进而推广之,自古以来,人们就提出了各种非实物的形式模型。中国古代人们提出的“阴阳互补模式”、“五行生克模式”、“天人合一模式”、“易经卦象模式”等等,用这些思维模式去尝试解决多种多样的问题。
   数据挖掘作为近年来新兴的一门计算机边缘学科,在我国也逐渐引起了越来越多人的关注,各种学术及应用文章如汗牛充栋,令人眼花缭乱。但数据挖掘究竟是什么?人们常常挂在嘴边的数据挖掘建模本质上又指的什么?笔者得到的反馈常是模棱两可、凌乱抽象的时髦词汇的堆砌。本文及后续的系列专栏文章无意也无力于澄清所有的概念,仅作为抛砖引玉,为渴望入门或跟作者一样曾经陷于学界高深莫测的概念泥潭中不能自拔的理想青年尽微薄之力。我将从以下五个方面探讨。
     (一)数据挖掘是什么
     (二)数据挖掘不是什么
     (三)数据挖掘建模的任务
     (四)数据挖掘建模的思维框架
     (五)数据挖掘VS统计学
后序将介绍数据挖掘常用的研究方法;建模的技巧;常用的工具;权威的教材与论文及该领域目前活跃的研究人员。

 

(一)数据挖掘是什么
定义某个名词特别是某个学科总是特别容易引起争论的事情,不同的教材、不同的学者从不同的关注角度和研究领域出发总会侧重不同的理解。为了不纠缠于细枝末节,我引用了David Hand在“Principles of Data Mining”中的定义:
     数据挖掘就是对观测到数据集合进行分析,目的是发现未知的关系和以数据拥有者可以理解并对其有价值的新颖方式来总结数据。

注脚:上述定义中有几个问题需要思考。第一,对观测到的数据进行分析。什么样的数据?如何分析?化学试验的数据及分析也是观测到的数据及分析,这里的数据有什么不同?分析有什么特别?实际上,没什么不同,数据挖掘本身是高于具体的领域的一种方法论,物理的,化学的问题都可以套到这个定义上,用这个方法去“分析”
       第二,未知的关系。这是关键所在。如果一个模型分析得到的结果是已知的东西,那是验证。而数据挖掘重在“探索”,也就是一种unsupervised learning。我举个自己的切身例子,某次,本人的移动话费出奇地高,在朋友规劝下,索取了话费的清单,定神一看,密密麻麻叁张打印纸全是通话记录。有这么多电话吗?打给谁的。我自己都搞不清楚了,也就是说,我首先知道这里肯定有问题,但问题在哪,到底是因为哪些因素导致我这个月话费不“正常”我是不清楚的。在定睛一看,每天是午夜的时候都有一个同样的电话,时间点变动很小,号码偶尔变化,但稀奇古怪,拿朱笔重重一圈,再看,问题就清楚了。(略去若干字......)
      第三,以数据拥有者可以理解并对其有价值的新颖方式来总结数据。通俗一点说,就是最终的模型还得回归到具体问题来展示其结果。比如,无论你是聚类算法还是分类算法,还是关联规则分析,最终无非要回答:哪些商品售出的时候最有可能也售出其它哪些商品?哪些人最容易买了手机很快又换?
     文章结束的时候讲一个笑话,笔者的一个朋友,为某大型通迅公司作一个数据挖掘项目时,分析得出这样一个结论:16-24岁年龄段的人最容易流失。聪明的读者,你笑了吗?为什么笑?
     待续.....


实际上昨天开始下决心动笔写这个专栏的时候,我已经能想像到一定会有热心的朋友关注-毕竟文章起了这么一个不大不小的颇能吸引人眼球的东西(千万别联想到北京地铁里高声叫卖的小报,标题动辄就是中国XX日已向XX宣战云云)。责任心也好、虚荣心也好,都让我不得不诚惶诚恐、认认真真把这个系列写下去。raconteur 博友提的意见已经虚心采纳,相信不会让你失望的。还有Beta1和Yubin ,谢谢你们的鼓励。需要跟大家解释一下的是:写这篇文章的最初目的,是想让那些已经看过一些有关数据挖掘的书籍或文章,但还不知所云的读者澄清一些认识上的误区,因此一些名词和术语没有给出定义,这也是我没有写作经验的缘故,见谅!

(二)数据挖掘不是什么

         提出这个问题很容易,回答却没有看起来那么简单。比如,我可以说,数据挖掘不是售货机,投入一个硬币,吐出来一筒可乐-输入一堆数据,产生一个方程......等等都无助于正确回答这个问题。那我们就索性从前文“数据挖掘是什么”,数据挖掘能干什么入手看看双刃剑的另一面。

        第一部分“数据挖掘是什么”实际上写的比我计划要写的简单。仅仅给出了一个定义及几条注脚而已。但不管怎样最核心的东西毕竟写出来了。数据挖掘说到底是一种方法,“对观测到数据集合进行分析,目的是发现未知的关系和以数据拥有者可以理解并对其有价值的新颖方式来总结数据。”也就是说,它是对观测数据的次级处理,往往是数据的副产品。比如,物流中心的批销单(可以理解成订单)历史数据,本身的目的是为了处理发货和配送,但用数据挖掘,可以对客户进行分类或聚类,进而也许有助于销售预测。这样,“不是什么”的问题也就来了,它的确不是专门性进行的一项完整工作,也就是说,没有人会说:老王,我们准备预测一下下个月营业高峰什么时候出现,你弄些数据来挖一挖。没有数据,挖掘是扯淡的。很多数据挖掘项目失败,不在于实施者不懂算法,也往往不在于模型建立不合理不正确,而在于源头的数据就不准确不“原始”,为挖掘而挖掘。

        定义的后一部分要求产生的结果是“新颖的”,那我们不多说,又一条“不是什么”可以这么理解:数据挖掘不是你先看一眼批销单,然后说我猜买《克林顿与莱温斯基》的人一定会买《希拉里自传》,我们挖一挖批销单库看看。当然这么说有的时候不能完全算错,因为毕竟科学探索还得要有想像力-但数据挖掘一般说来结果都可能会让你大跌眼镜,不是你想当然想出来然后验证。

最后再从另一个维度“数据挖掘能作什么”出发回答“数据挖掘不是什么”。

任何严肃的数据挖掘教科书(我列几本,大家可以找找。J.Han ,Micheline Kambr,"Data Mining-Concepts and Techniques";David Hand "Principles of Data Mining"; Michael J.A.Berry,"Mastering Data Mining-The Art and Science of Customer Relationship Management";Adriaans,P.,and Zantige "Data Mining")都覆盖到以下几个区域(后续文章会详细阐述):

1 分类(Classification)
分类首先要对一个新的客观事物特征进行描述,然后将客观事物的观察值分配到事先确定的类别之中。
因此,数据挖掘不是先知,能预知新的类别(异常探测是另一个话题),必须是事先明确的类别,经过训练后将待分类数据归到类别标签下去。
2 估计(estimaiton)
分类处理的是离散的结果:如“是”与“不是”,“中国”,“日本”,而估计处理的是连续的结果,因此也可以看成分类的扩展,二者在实践中常常结合使用,比如银行要决定该给哪些顾客贷款,考虑的做法是将所有顾客放入一个模型,给每个客户一个从0到1的分数,即对贷款的响应概率。分类的任务转换成建立一个分数临界数值,根据对顾客响应概率的估计来对他分类。
因此这一点不再阐述。
3 预测(Prediction)
有人认为预测不是一种独立的方法,任何预测都是分类或者估计,关键在于你强调什么。我的理解是区别点在于检验。分类理论上你是可以检验的,而预测你只能等到事情发生之后。
但记住,数据挖掘同样不是未卜先知,一切的神秘都在数据里,玄机是跟分类和估计一样,都得通过训练数据建立先验的某种模型(如树或贝叶斯网络),然后在此基础和前提下预测。想想也是有道理的,现实生活中,我们太相信一些专家,学者的话,老吃哑巴亏,人家说今年房价一定升,咱就把攥的紧紧的钱拿出来去买房,结果好像别人的升,你的房子按兵不动啊。“专家”们的预测也是有前提和模型的,只是他的模型,只在书本或他脑子里,我们这些老百姓无缘听到,也可能人家根本不屑讲给我们这些听不懂的人。
4 关联(AssociationRules)
这是数据挖掘中最常见的一类问题。几乎所有的介绍数据挖掘概念的文章中动辄都拿这个为例,“啤酒和尿布”,“菜篮子分析”,“购物车”分析都是这一类问题的通俗说法。
我先提醒大家一句,数据挖掘运算的结果,即便是frequent item(也就是有意义的那些关联项目)也可能是数目非常庞大的,需要进一步分析。不是挖一通然后眼睛一亮泪流满面向全世界宣布:买香烟最多的人买打火机也最多!!
5 聚类(clustering)
聚类跟分类不同,对于数据会归于哪一“类”,事先是不知道的,完全是unsupervised学习过程,自然也就没有什么样本的概念。但同样提醒大家的是,学习的时候注意,任何的聚类方法仍然有隐性的前提在里面,就是聚类的依据,总
归是某种“长度”,“距离”,“相似性”之类的概念或角度,而绝不是挖出来白人黑人黄种人一目了然。不同的计算方法结果会有不同。
待续.......

 

三 数据挖掘建模的任务
    数据挖掘功能可能是目标性的,也可以是描述性的,其差异取决于指导数据挖掘实践的目标。目标性数据挖掘的首要任务是创建一个可以预测,指定标记,以及估计数值的预测模型,从而可以自动实现决策过程。通常目标性挖掘的结果可以直接应用在行动中,例如
依照预测模型的结果,可以决定是否给某个申请贷款客户发放贷款。在这种情况下,模型的好坏与否主要在于其判断的准确性。
    但多数情况下数据挖掘是描述性的。所谓“描述”的任务是通过各种直观或有效的方式对数据得到更深入的理解,进而了解数据所反映的领域背景情况。当然描述性的数据挖掘也产生一些挖掘结果,但这些结果并非由模型自动生成。此时,模型的好坏并不取决于预测的准确与否,而在于通过模型所得到的对数据的认知。
     我们来看两个数据挖掘的例子,数据挖掘在这两个项目中用来分析用户对某移动运营服务商促销活动的响应程度。两个项目所输入的原始数据几乎相同:客户所在地域、身份、年龄段、性别等,某些客户已标明加入了该公司网络。第一个项目的任务是建立一个模型,从未来类似的潜在客户中找出可能加入该公司网络的群体,根据新客户接受服务的可能性进行打分,得分高于一定阀值的选定为最可能接受服务的重点客户群体。另一个项目的任务不同,目的是寻找那些已经选择该公司网络客户的特征及原因,以改进日后的促销活动。由于两个项目的建模目标不同,因而处理过程采用的技术和方法也大不一样。
     两个项目都是对潜在客户的研究,对于移动公司来说,可用的数据只有客户的姓名和地址(不包括那些不需要实名入网的客户)及是否通过促销入网的标记。通常的处理方法是将这些数据转到第三方通过一些人口资料和生活形态等变量加以丰富和扩展。但生活形态(如每月购买奢侈品占消费额比例等消费习惯)变量中的噪声和缺失现象非常严重,因此很难利用这个变量来构造理想的模型。不管用神经网络还是决策树模型,都很难从这种稀疏数据中发现有价值的规律,因而模型的预测能力很差。
     但在第二个项目中,类似消费习惯这样的变量就比较有用。尽管这类变量分布比较稀疏,但对于稀有案例的预测较为准确。原因就在于第一个项目假定用来训练的样本数据是潜在客户总体的代表,而第二个项目从另一个角度看问题:如果有异常兴趣和习惯的人对促销感兴趣的话,那么我们所应作的就是找出这个新的群体,从该群体中找出未来客户的特征。第二个项目对有意象的客户进行聚类,并且把这些类的变量与总体变量进行比较。不管总体的稀少程度如何,只要有特殊兴趣和习惯,公司就会与相关的机构或组织联系从中找出有关的列表提供进一步信息,这样该群体的比例就可能上升。

四 数据挖掘学科的分析框架
各个成熟的学科都有其分析、解决问题的框架和方法论,一般称之为分析框架。譬如研究经济学,常使用的分析框架有交易成本、博弈论、代理人等等。在数据挖掘学科当中,由于不同问题领域的背景不同,因此不存在一个放之四海都皆准的研究框架。因此这里我们给出一个抽象的一般性框架仅供参考。
1 理解商业问题
这个阶段在我看来是整个分析处理过程中最重要最关键的一环,但往往被很多人轻视了。 这个环节的根本目的在于理解业务问题,可以通过以下问题列表来帮助你明确目标:
     是否有必要选用数据挖掘?
     是否有一些感兴趣的客户群资料?
     在了解客户资料的时候应该注意哪些约束性问题?
     领域专家对数据的了解程度如何?是否存在无效的数据资源?某些特别的数据可以从哪里得到?
     根据领域专家的意见,哪些问题是最重要的?
     哪些数据现在得不到,但一旦得到就可以立即行动?

2 数据准备
      (1)确认和获取数据。构建模型的第一步是确认是获取数据。通常情况下,所谓合适的数据是可用于分析的、逻辑清楚的、易获取的数据。其次,数据应当尽可能完整,使用抽样调查之类的数据集合显然不行。当然不排除个别应用当中专门针对抽样调查数据进行挖掘,但此时就不能简单将结果模型用于未回答调查问卷的对象。
    如果进行数据挖掘分析的目的是进行预测,则数据中应包括预期的输出。举以前的一个老案例,某通讯公司准备为其客户制定一份促销优惠的服务政策列表,例如月通话时长超过100小时折扣比例、团体入网折扣比例等等。该公司目前拥有下列数据资料:对所有客户的销售资料;按促销政策清单入网接受相应服务的客户名单;反映客户购买情况的详细资料。但恰恰遗漏的是到底哪些客户收到(或看到)促销清单这个数据,因此根据这些数据构建预测响应模型毫无意义。


    (2)生成有效数据、探索数据(Data Exploring)、数据清洁(Data Cleaning)  
    数据挖掘成功与否取决于数据质量的好坏。考虑下列问题列表:
    字段是否充分?
   缺失数据是否严重?
    字段值是否合法?
   字段值是否符合逻辑?
   单个字段的分布是否有说明?
    引起数据不准确的原因有很多,在通常的商业活动里,重要字段比如价格、数量会比较准确。但一些不太常用的数据,如性别、所在区域可能不准确。
      数据探索是指在清洁数据、正式建模前通过各种方法查看数据的分布,以了解数据的质量和特性。常用的方法有散点图、卡方检验等工具。在常用数据挖掘工具如SAS的Enterprise Miner、CART中都有Data Explorer工具。
     如果发现数据中存在缺失、错误、冗余等不合理现象,应通过数据清洁手段进行处理。具体的方法可参阅相关文献,不一一列举。
(3)粒度转换
      粒度是建模数据的级别大小。通常情况下我们都针对原始数据的行级别进行分析。例如同一客户的资料放入一行进行分析;但另外一种情形下,如有关车辆保险的分析中,每辆车虽然都有其型号、索赔次数、索赔金额、设备估价等数据,但保险公司不大可能对每辆车感兴趣,此时会将以年-车辆形式生成数据,转换成按报单格式汇总的数据。
如:
     报单   年份   车辆   理赔次数 金额
         00001 1998 京GF0001 1      1000
         00001   1998 京GF0002
         00002   1998 京GF0003
         00002   1999 京GF0004
         00002   1999 京GF0002
合并后
     报单   几年期   车龄   理赔次数 金额
         00001   1      1          1       1000
         00002   2      2         0        0
(4)加入衍生变量。衍生变量值是合并原始数据生成的结果。例如
    所有交易数量和交易资金的总额;通话费用为0的月份总数;从开始使用到使用完毕使用率的变化;国际长途、普通长途、市话分布比例等。
       通过OLAP系统可以生成这些衍生变量,从这点也可以理解OLAP与数据挖掘之间的关系。
(5)准备建模数据集
     也就是用于建立数据挖掘模型的数据。在数据清理、数据转换及添加衍生变量后还有一些问题需要考虑。当根据历史数据建立预测模型的时候,在建模数据集中,稀疏数据的比例是多少?通常我们选取15-30%的比例来建模。又比如欺诈诊测模型的建立中,那些有欺诈记录的数据所占比例不到1%。不难推测,由这样的数据集建立的几乎所有模型中,预测成功的可能性达到99%-成功预测没有欺诈的可能性。模型非常精确,但可能完全没有用。因此,我们需要将建模数据集分成三部分:训练数据集、测试数据集、评估数据集