第 3 章 预测建模导论:从相关性到有监督的划分

第 3 章 预测建模导论:从相关性到有监督的划分

基本概念:富信息属性识别;通过逐步属性选择划分数据

示例方法:相关性度量;属性 / 变量选择;树型归纳

前两章概述了模型和建模的概念,本章将深入研究数据科学中的一个重要课题:预测建模。本章将接着使用 1.3 节的数据挖掘示例。首先本章会把预测建模视为有监督的数据划分,也就是根据某个值得关注的量,将整个总体划分为不同的群组。具体来讲,就是根据某个希望预测或估计的值对总体进行分组。预测的目标可以是某个想避免的事件,比如哪些用户合约期满时会流失、哪些账户遭受了诈骗、哪些潜在用户会无法结清账户(即不良贷款,如电话账单或信用卡账单的违约)或哪些网页的内容会令人不适等;预测目标也可以是希望发生的事件,比如哪些用户最可能响应某个广告或优惠活动,以及哪些网页最符合某个搜索请求。

在探讨有监督的数据划分的过程中,本章将引入数据挖掘的一条基础理念:寻找或选择数据所描述的实体的重要且富含信息(“富信息”)的变量或“属性”。虽然“富信息”的含义要视应用场景而定,但一般而言,信息是能够降低某事件不确定性的量。比如,假设有个老海盗把关于他藏宝地点的信息告诉了我,这并不意味着我确切地知道宝藏的所在位置,而仅仅意味着对我而言,藏宝地点的不确定性降低了。而告诉我的信息的质量越高,这种不确定性就越小。

现在请读者回想一下前一章中谈到的数据挖掘中“有监督”的概念。进行有监督的数据挖掘的关键,是要有一个想要预测的或希望更深入地理解的目标变量。而该变量在真正需要决策时往往是未知或不可知的,比如某个用户是否会在合约到期后很快离开,或哪个账户遭受了欺诈。目标变量能够让我们更清晰地了解什么是“寻找富信息属性”,即是否存在一个或多个能够减小目标变量的不确定性的变量。同时,关于上文所讨论的相关性的一般性概念,这里给出了一个常见的分析型应用:我们希望找到与目标变量相关的可知属性,以减小该目标变量的不确定性。而仅是寻找这些相关变量的过程本身,就有助于更加深入地理解这个商业问题。

寻找富信息属性有助于处理体量日益庞大的数据库和数据流。当需要对过于庞大的数据集进行分析时,计算将成为一个巨大的挑战。在分析师缺少高性能计算机的情况下,这个问题尤为突出。针对这个问题,一个经过实践检验的解决方法就是先从数据集中选出一个子集来分析。而选择富信息属性则为选择富含信息的数据子集提供了一种“聪明”的办法。另外,如果在数据驱动建模前先选择变量,也有助于提升建模的精度,本书会在第 5 章探讨其原因。

寻找富信息属性也是一种被称作树型归纳的预测模型的基础。该模型应用广泛,3.6 节将把它作为预测模型这一基本概念的一项应用加以介绍。树型归纳能通过一种巧妙的方式,即不断重复选择富信息属性,对数据进行有监督的划分。学完本章,你将能够理解:预测建模的基本概念、寻找富信息属性的基本概念和一项具体的演示性实践技术、树形结构模型的基本概念,以及从数据集中获取树形结构模型的流程(即实施有监督的数据划分的过程)。

3.1 建模、归纳与预测

一般而言,模型就是一种为特定目的服务的、简化了的对现实世界的表现。这种简化往往基于某些假设(也就是对上述特定目的而言,哪些问题重要,哪些问题不重要),但有时也基于信息或处理方面的限制。例如,地图就是真实世界的一个模型。制图师舍去了大量与地图目的无关的信息,仅仅保留与其目的相关的信息,有时甚至还会进一步简化它们。比如,公路图仅会保留和突出每条公路、公路的基本拓扑结构、公路与旅行目的地的关系,以及其他相关信息。各行业中都有不同种类的著名的模型,如建筑蓝图、工程原型和 Black-Scholes 期权定价模型等。它们都舍弃了与主要目的无关的细节而仅保留了相关的信息。

在数据科学中,预测模型是一种用来预测我们感兴趣的未知值(即目标变量)的公式。这个公式既可以是数学表达式,也可以是逻辑表达式(如规则),但通常表现为两者的混合体。由于我们把有监督型数据挖掘分为分类和回归两大类,故而接下来也将分别考虑分类模型(以及类概率估计模型)和回归模型。

 术语:预测

通常,预测是指预报一个未来要发生的事件,而在数据科学中,其更常见的含义是估计一个未知量。该未知量既可以是未来发生的事件(即通常含义的“预测”),也可以是当前或过去发生过的事件。实际上,由于数据挖掘所处理的通常是历史数据,所以模型的建立和验证往往也是基于历史事件的。例如,信用评分的预测模型估计的是潜在的用户违约(即产生不良贷款)风险;垃圾邮件过滤预测模型估计的是某封邮件是否为垃圾邮件;欺诈检测的预测模型判断的则是某个账户是否遭受了欺诈。关键在于,预测模型所估计的是某个未知量。

这样看来,预测建模与描述建模截然不同。后者的主要目的不是估计某个值,而是试图了解某个现象或过程背后的本质。比如,用户流失行为的描述模型可以告诉我们,流失的用户具有哪些典型特征。1 在某种程度上,描述模型的评估标准是其可理解性,我们可能倾向于选择一个精度不够高,但比较好理解的模型。而对于预测模型而言,可理解性固然很重要,但其评估标准却是预测能力。这两种模型的区别并没有以上所说的那么严格:它们会共用某些技术,而且一个模型通常可以兼顾预测和描述两个目的(尽管有时效果欠佳)。有时候,预测模型的价值不在于预测结果本身,而主要在于观察预测模型时所获得的对问题的理解。

1描述建模通常用来帮助人们理解数据产生过程中的因果关系(如:用户为什么流失)。

在深入讨论预测模型之前,有必要先引入一些术语。有监督学习是一个建立模型的过程,该模型描述了一系列所选变量(属性特征)和一个预先确定的变量(目标变量)之间的关系。预测模型就像是特征变量的函数(一般是概率函数),被用来估计目标变量的值。因此,在用户流失预测问题中,可以建立一个用户流失倾向模型,即一个函数。其自变量可以是用户账户的属性,如年龄、收入、就业时间、呼叫客服次数、超额费用、用户地理分布、数据使用量,等等。

图 3-1 通过展示一个极简的信贷不良贷款预测示例,阐释了刚刚介绍的一些术语。一个实例示例表示一个事件或一个数据点,在此例中即为一个曾被发放信贷的历史用户;在数据库或电子表格中这也被称为一。一个实例由一系列属性(又称域、列、变量或特征)所描述。因为它可以表示为一组长度固定且有序的特征值(向量),所以有时候实例也被称为特征向量。除非特别声明,否则本书将默认数据中所有属性都有相应的值(目标变量除外)。

图 3-1:有监督分类问题的数据挖掘术语。一个问题之所以是“有监督”的,是因为该问题中含有一个目标变量,以及一些目标变量值已知的“训练”数据。它之所以是一个分类问题(而非回归问题),是因为其目标变量是类别型的(是或否)而非数值型的

一物多名

历史上,由于许多不同领域(包括机器学习、模式识别、统计学和数据库等)都对数据科学的原理和技术进行了研究,所以数据科学中的同一个概念往往具有多个名称。人们常说的数据集,其形式与数据库中的和电子制表软件中的工作表是一致的。数据集包含一系列示例实例,而实例既是数据库中的表里的行,也是统计学中的案例

特征(即表中的列)也有许多不同的名称;在统计学中,作为输入,属性被称为独立变量预测变量,在运筹学研究中则叫作解释变量;目标变量,因为其值需要被预测,所以在统计学中常被称为依赖变量。这种命名方式很容易造成混淆,因为独立变量不一定相互独立(或与其他元素独立),而依赖变量也不一定总是依赖于所有的独立变量。因此,本书回避了这种命名方式。一些专家认为目标变量也属于特征,另一些人则不这么认为。但有一点显然非常重要:目标变量不能用来预测它自己。不过预先给定的目标变量的值,会对预测未来的目标变量有巨大的帮助,因此这些预先值也可以被视作特征。

根据数据建立模型的过程也叫模型归纳。归纳是一个哲学术语,表示将具体案例推广为一般性规则(或规律、真理)。既然模型就是统计意义上的一般性规则(一般来说,它们并非 100% 正确,有时其正确率很低),那么根据数据进行建模的程序就叫作归纳算法或学习器。大多数归纳过程被转化为分类模型或回归模型。不过由于分类在统计学的其他领域中被讨论得较少,而它又与许多商业问题密切相关(因此数据科学中的许多工作都聚焦于分类),所以后文将主要讨论分类问题。

 术语:归纳和演绎

与归纳相对的概念叫作演绎。演绎可以从一般性规律和具体事实出发,推演出其他具体事实。使用模型的过程就是一个(概率)演绎过程。本书将很快讲到这一点。

归纳算法所输入的数据被称作训练数据,可以用来归纳出模型。第 2 章中提到过,由于训练数据中的目标变量(即标签)的值已知,所以训练数据也叫标注数据。

现在回到用户流失示例中。根据在第 1 章和第 2 章学到的知识,在建模环节我们可能会想建立一个“有监督的划分”的模型,依据合约期满后流失(平均)概率高低,把样本数据划分为两部分。至于如何做到这一点,请读者思考本书的基本概念之一:如何选择出一个或者多个属性 / 特征 / 变量作为依据,尽可能地把样本数据按照我们感兴趣的目标变量进行划分?

3.2 有监督的划分

预测模型主要用来估计我们关心的目标变量的值。用有监督方法获取数据中所含模式最直观的方法,就是尝试把总体划分成目标变量值不同的子群(同时让子群内的目标变量值相近)。如果在目标变量值未知时,能知道用哪些变量值来做上述数据集划分,那么这样的划分就可以用来预测目标变量值。而且,这样的划分还能提供一系列很好理解的划分模式。举例说明:“居住在纽约市的中年专业人士的平均用户流失率为 5%”,其中“居住在纽约市的中年专业人士”是划分的标准(表示某些特定属性),“流失率为 5%”则是该划分中目标变量的预测值。2

2接下来本书将讲到,有多种基于数据的方式可用来预测目标变量值,而现在读者可以先大致把它视为训练数据集中划分到每个分组的某种平均值。

当问题中有很多属性,却不确定如何划分数据时,我们往往会倾向于应用数据挖掘。在用户流失的预测问题中,用来预测流失倾向的最佳划分是未知的。假如数据中真的有某种划分方法,能将目标变量划分为(平均值)明显不同的几类,我们就需要找到自动获取这种划分方法的办法。

这就引出了本书的基本概念:如何判断某变量是否包含关于目标变量的重要信息?如果包含,那么信息量有多大?我们希望能自动选择和手头任务有关的、信息量更大的变量(换言之,即预测目标变量值)。更进一步,我们甚至希望可以按照预测目标变量的准确程度对这些变量进行排序。

现在,本书仅考虑如何选择信息量最大的那个富信息属性。本书将通过解决这个问题来介绍第一项具体的数据挖掘技术。该技术虽然简单,却易于扩展且非常有用。在用户流失示例中,关于未来总体中的用户流失率,哪个变量提供的信息最多?专业人士的身份?年龄?住所?收入?向客服投诉的次数?还是超额费用数额?

接下来,本书将仔细研究一种选择富信息属性的有效方法。在此之后本书会展示如何通过重复地使用该技术来构建有监督的数据划分。尽管直接使用多个变量进行有监督划分的方法非常有用且易于理解,但请记住,它仅是选择富信息变量这个基本观点的一种应用而已。而这个概念应该成为一项理论工具,以便于在更加广泛的层面上思考数据科学。比如,之后本书会逐步研究其他建模方法,而这些方法中并不直接包含变量选择。当你面对的数据集包含极多的属性时,不妨回顾并应用这条极其有用的概念来选出一个富信息属性子集。这样做不仅可以将庞大笨重的数据集大幅度缩小,而且我们往往会发现,从中生成的模型的精度会随之显著提高。

3.2.1 选取富信息属性

如果给定一个大的示例集,那么应该如何选择一个属性,使得依据它进行划分之后,数据集所含的信息量最大呢?思考一个具体的二元(两类)分类问题,想一想从中能够得出什么。在如图 3-2 所示的简单的数据划分问题中,图中的 12 个火柴人脑袋有两种形状(方形和圆形),而他们的身体不仅有两种形状(长方形和椭圆形),还有两种颜色(灰色和白色)。

图 3-2:图中所展示的是一群需要分类的人。他们头顶的标签为目标变量值(是否有不良贷款),而他们身体或脑袋的颜色和形状则代表不同的预测变量属性

我们将用以上这些属性来描述这些人。他们头顶上的二元()标签表示此人是否有不良贷款。我们可以像下面这样描述有关这群人的数据。

  • 属性
    • 脑袋形状:方形 / 圆形
    • 身体形状:长方形 / 椭圆形
    • 身体颜色:灰色 / 白色
  • 目标变量
    • 是否有不良贷款:是 / 否

试问:哪个属性能最明确地把这些人中有不良贷款的和无不良贷款的划分开?我们想在结果中看到尽可能的分组。这里的是指目标变量值的同质性。如果一个组内所有成员的目标变量值都相同,那么该分组就是纯的;如果组内至少有一个成员的目标变量值与其他成员不同,那么该分组就是不纯的。

可惜在现实中极少能找到能把数据划分得绝对纯的变量。但是,只要能显著降低分组的不纯度,就可以对数据(以及与之对应的总体)多一分了解。而对于本章而言,更重要的是我们还能将该属性应用于预测模型,比如在该示例中,我们需要预测其中一组出现不良贷款的可能性与另一组相比孰高孰低。如果可以做到这一点,我们就可以为预测结果中产生不良贷款可能性低的用户提供信用贷款,或根据用户产生不良贷款的可能性大小来给他们提供不同额度的信用贷款。

从技术角度来看,分类问题有几个复杂之处。

(1) 我们很难根据各种属性将数据集完美地划分开来。即便有一个子组碰巧是纯的,其他的也未必纯。比如,假设图 3-2 中的第二个人不存在,那么身体颜色 = 灰色这个部分就是纯的(是否有不良贷款 = 否),但随之产生的另一个部分身体颜色 = 白色,却仍不纯。

(2) 在上一个例子中,条件身体颜色 = 灰色通过去掉一个数据点而分出了纯子集。倘若存在另一种划分方式,不产生任何纯子集,却能更广泛地降低各个子集的不纯度,那么这两种划分方式孰优孰劣?

(3) 不是所有属性都是二元的;有的属性存在三个或更多不同的值。必须考虑到:某个属性可以将数据集分为两个子集,而另一个属性则可能将数据集分为三个甚至七个子集。这样一来,我们如何比较这些子集呢?

(4) 某些属性是数值型的(连续的或整数的)。那么对每个数值都进行划分是否有意义?(答案是否定的。)这种情况下,要如何对数值型属性进行有监督的划分?

幸运的是,对于分类问题而言,我们可以通过一个公式来解决上述所有问题。该公式可以用于测量基于每个属性所进行的划分的好坏程度(对特定目标变量而言)。这个公式的功能称作纯度测量

最常见的划分数据的指标被称为信息增益,它基于一个被称作的纯度测量指标。以上两个概念皆由信息论先驱 Claude Shannon 首创,其作品在该领域具有开创性地位(Shannon, 1948)。

熵可以用于测量集合中的无序程度,见上文例子中的个体的划分问题。试想,一个集合中的各个成员具有一组性质,每个成员有且只有这组性质中的一种。在有监督的划分中,成员的性质就相当于目标变量的值。混乱则指的是某个分组中这些性质的混合(或不纯)程度。所以,打个比方,一个混合了许多有不良贷款者和无不良贷款者的分组就具有较高的熵值。

严格意义上,熵定义如下。

公式 3-1:熵

其中,p_i 是集合中性质 i 的概率(相对百分比),其取值范围是 0 到 1(1 表示集合中所有成员都有性质 i,0 则表示所有成员都没有性质 i)。省略号仅表示性质可能多于两个(在技术领域中,通常取 2 作为对数的底)。

熵的公式本身可能不太直观,因此难以理解。图 3-3 展示了一个测量熵的例子,其中每个集合包含 10 个二元分类(“+”和“–”)实例。从中可以看出,从 0 到 1,熵的值测量的是集合的整体混乱程度。其中 0 代表最小的混乱程度(集合中所有个体的性质相同),而 1 代表最大的混乱程度(即不同的性质均匀地混合)。由于这是二元分类,因此 p_+=1-p_-。从左下角全为“–”的集合看起,该集合满足 p_+=0,混乱程度达到最小(极纯),熵值为 0。当开始把集合中个体的类标签从“–”转换为“+”时,熵值也随之增加了。当集合中的个体的类别分布均衡(即“+”“–”各 5 个)时,熵值达到最大,这时 p_+=p_-=0.5。随着更多的标签发生转换,“+”开始占多数,此时熵值再度减小。到所有个体都为“+”时,p_+=1,熵值又达到了最小值 0。

图 3-3:二元集合的熵用 p(+) 的函数表示

举一个具体例子,试想,集合 S 中有 10 个人,其中包含 7 个无不良贷款者和 3 个有不良贷款者,那么:

熵的定义和计算只是所要讨论的一部分,我们想要知道的是如何测量属性的(关于目标变量的)信息量,即该属性能给(关于目标变量的)信息量带来多少提升。一个属性可以将一个实例集合划分为几个子集,而熵却只能告诉我们单个子集的不纯度。幸运的是,在用熵测量任意一个集合混乱程度的基础上,可以定义信息增益(IG)这一概念,并用它来测量一个属性(在依据其所做出的划分中)对熵值提高(降低)的影响。严格地讲,信息增益测量的是加入新信息后熵值的改变;而在有监督的划分的情形中,我们考虑的却是根据单一属性对数据集进行划分后的信息增益。假设用于划分的属性有 k 个不同的值,记原集合为父集,则划分后得到 k子集。从这个角度看,信息增益就是父集和子集的函数——该属性提供了多少信息量?这取决于子集的纯度相对于父集提高了多少。在预测模型的语境下讲,就是:如果知道了一个属性的值,那么这个信息能在多大程度上提高对目标变量值的认识?

信息增益的明确定义如下。

公式 3-2:信息增益

显然,每个子集(c_i)的熵的权重是各子集中所含实例数的比例 p(c_i)。这对上文的问题做了回答:与其去除一个实例以制造一个纯子集,不如把父集分为两个比较大的、相对较纯的子集——哪怕这两个子集都不纯。

图 3-4 展示了一个二元分类问题(●和★)。以之为例,图中的子集看起来显然比父集更“纯”。父集中含有 30 个实例,包括 16 个“●”和 14 个“★”,所以:

左侧子集的熵是:

右侧子集的熵是:

由公式 3-2 可知,该划分的信息增益是:

因此该划分能大幅降低熵。用预测模型的术语说,该属性提供了大量有关目标变量值的信息。

图 3-4:根据(账户余额)账户余额是否少于 5 万,将“有不良贷款”样本的数据分为两组

再举一个例子。图 3-5 候选人分类示例中的父集与图 3-4 中的相同,但现在我们考虑的是按“居住方式”将数据集分为三类:自有、租赁及其他。熵的计算结果如下:

变量“居住方式”的信息增益虽然的确为正,但比变量“账户余额”的信息增益要低。直观地看,这是因为,虽然子集“自有”显著降低了熵值,但另外两个子集“租赁”和“其他”的纯度却较父集有所下降。因此基于这些数据,变量“居住方式”比“账户余额”所含的信息量要少。

图 3-5:根据三值属性“居住方式”产生的分类树

我们在前文中对分类问题进行有监督的划分的所有担心,都随着信息增益的出现而化解。信息增益不追求绝对的纯度,而且可以应用在子集为任意数量的问题上。它还考虑到了子集的相对规模问题,给予了规模较大的子集相对较大的权重。3

3严格来讲,这里仍有一个问题:当用于划分的属性含有很多不同值的时候,可能会出现某种划分方法的信息增益很大但预测效果却很差的情况。这个问题(“过拟合”问题)是第 5 章的主题。

 数值型变量

我们还未讨论如何处理数值型的属性。我们可以将数值型变量“离散化”,即选择一个(或多个)划分点划分数值,然后将划分后的结果作为一个类别型变量的问题来处理。例如,收入可以被划分成两个或多个区间。我们可以用信息增益来测量数值型变量离散化后的划分结果。不过,如何选择数值型属性离散化的划分点的问题尚未解决。理论上,可以尝试所有合理的划分点,最终选出信息增益最大的一个点。

最后,如何对回归问题进行有监督的划分呢?这个类型的问题的目标变量可是数值型的!虽然我们仍然需要关注如何降低子集的不纯度,但信息增益这个测量指标已不适用于这种情况。这是因为它是基于熵得出的,即根据不同性质在划分结果中的分布计算出的。因此,需要寻找一个能够度量子集中数值型变量的纯度的方法。

方差就是一个专门用来衡量数值型变量不纯度的指标。本书在此省略对这个指标的算法的推导,读者目前只需记住,这个基本概念非常重要。如果子集内所有个体的目标变量值都相同,那么该子集就是纯的,这时方差为零;如果子集内所有个体的目标变量值差别很大,那么该子集的方差就会非常高。我们可以把父集和子集的方差的减少量当作一个类似于信息增益的指标来使用,这个处理过程完全可以类比上文中信息增益的推导过程。给定一个数值型目标变量,其最佳划分应使得加权平均方差减小的幅度最大。这其实意味着我们仍需要找到与目标变量关系最密切的变量,换句话说,也就是要找到最具预测性的变量。

3.2.2 示例:基于信息增益进行属性选择

现在我们做好了准备,可以应用第一项具体的数据挖掘技术了。一个数据集之中的每个实例都由若干属性和一个目标变量描述,我们可以判断哪个属性对于准确估计目标变量值而言是信息量最大的(将在下文中深入探讨)。我们还可以根据这种信息量,尤其是根据它们的信息增益,对属性进行排序。因此它不仅有助于更好地理解数据,或者预测目标变量,还有助于在不想或无法处理全部数据集的时候,选出一组属性以减小数据集的规模。

为了演示信息增益的用法,本章将使用一个简单但真实的数据集。它来自加州大学欧文分校机器学习数据仓库 4。该数据集取自“The Audubon Society Field Guide to North American Mushrooms”,其中包含了可食用蘑菇和毒蘑菇的信息。其描述如下:

4详见加州大学欧文分校的机器学习仓库网页。

该数据集描述了伞菌属和环柄菇属(第 500 ~ 525 页)的 23 种伞菌假定样本。每个品种都被定义为“确定可食用”“确定有毒”“可食性未知”或“不推荐食用”。最后一种定义可以视为有毒。该指南明确表示,关于蘑菇可食性的判断,并不存在像毒橡树和毒常春藤那样“三出复叶,勿食勿动”的简单规则。

每个数据点(实例)都代表一个蘑菇样本,每个样本都由其可观察到的属性(或称特征)进行描述。表 3-1 列举了 20 余个属性及属性值。每个实例中每个属性仅取一个值,如菌褶颜色 = 黑。我们选取了数据集中的 5644 个实例,其中包含了 2156 种毒蘑菇和 3488 种可食用蘑菇。

这是一个分类问题。这是因为存在目标变量可食性,而其取值为(可食用)或(有毒)两类。在训练数据集中,每一行的目标变量都有一个值。我们将用信息增益来回答“哪个属性能最好地区分蘑菇的可食性(可食性 = 是可食性 = 否)”。这是一个基本的属性选择问题,在规模更大的问题中,可能需要从成百上千的属性中选出最有用的 10 个或 50 个属性。这么做是因为,对于某些数据挖掘问题来说这些属性数目太多,或其中无用的属性太多。为了简化,我们只选择一个而非 10 个最有用的属性。

表3-1:蘑菇数据集的属性

属性名称

可能取的值

菌盖形状

钟形、圆锥形、凸形、平展形、圆球形、凹形

菌盖表面

纤维状、带凹槽、带鳞片、光滑

菌盖颜色

棕色、浅黄色、浅黄褐色、灰色、绿色、粉色、紫色、红色、白色、黄色

是否有斑点

有、无

气味

杏仁味、茴香味、木焦油味、鱼腥味、腐臭味、霉味、无味、刺鼻气味、辣味

菌褶与菌柄连接方式

直生、延生、离生、弯生

菌褶间隔

紧密、拥挤、较远

菌褶尺寸

宽、窄

菌褶颜色

黑色、褐色、浅黄色、巧克力色、灰色、绿色、橙色、粉色、紫色、红色、白色、黄色

菌柄形状

上细下粗、上粗下细

茎根

球状、棒状、杯状、等粗、根状、具根、无根

蘑菇圈以上的菌柄表面

纤维状、带鳞片、覆有丝状软毛、光滑

蘑菇圈以下的菌柄表面

纤维状、带鳞片、覆有丝状软毛、光滑

蘑菇圈以上的菌柄颜色

褐色、浅黄色、浅黄褐色、灰色、橙色、粉色、红色、白色、黄色

蘑菇圈以下的菌柄颜色

褐色、浅黄色、浅黄褐色、灰色、橙色、粉色、红色、白色、黄色

菌幕类型

内菌幕、外菌幕

菌幕颜色

褐色、橙色、白色、黄色

蘑菇圈数

无、1 个、2 个

蘑菇圈类型

蛛网型、隐失型、发光型、大型、无蘑菇圈、下垂型、外壳型、区域型

孢子印颜色

黑色、褐色、浅黄色、巧克力色、绿色、橙色、紫色、白色、黄色

居群

丰富的、群居的、许多的、散落的、较少的、独居的

栖息地

草丛、落叶、草地、小径、城市、荒地、森林

可食性(目标变量)

是、否

由于我们已经知道衡量信息增益的方法,所以目前的任务变得很直观:找出能产生最大信息增益的属性。

为此,我们需要先分别计算按每个属性进行分类后得到的信息增益。公式 3-2 中的信息增益由父集和一组子集来计算。对于每次计算而言,父集指的是整个数据集。首先需要计算的是熵 (父集),即整个数据集的熵。如果目标变量的两个取值在数据集内完美地均匀分布,那么这个数据集熵值为 1。而由于目前的数据集存在轻微的不平衡(可食用蘑菇略多于毒蘑菇),所以其熵值为 0.96。

为了形象地展示熵值减小的过程,本书将使用一系列关于蘑菇分类的熵图(见图 3-6 至图 3-8)。由于可以根据不同的属性对整个数据集做出不同的划分,所以每张图仅从两个维度来描述该划分下的整个数据集的熵。x 轴表示当前数据集占整个数据集的比例(从 0 到 1),y 轴表示给定数据集的熵(同样从 0 到 1)。阴影区面积则表示根据不同属性划分后的(或未划分前的,见图 3-6)整个数据集的熵值。要找到最低熵值,就要使图中阴影区的总面积尽可能地小。

图 3-6 展现了整个数据集的熵。在此图中,熵值取理论上的最高值时,图中全部区域被阴影覆盖;熵值取理论上的最低值时,图中全部区域为空白。这种图可以很好地使数据在不同划分方式下的信息增益可视化,因为任何一种划分方式都能表现为图中的一组矩形区域:矩形的宽度代表划分后的子集在数据集中的比例,而其高度则代表子集的熵值。划分后的数据集的信息增益的加权和恰好为图中阴影区面积的总和。

图 3-6:整个蘑菇数据集的熵图。因为整个数据集的熵是 0.96,所以有 96% 的区域是阴影区

因为整个数据集的总熵值是 0.96,所以在图 3-6 中,阴影区面积的上边界为横线 y=0.96。我们可以把该值作为初始熵值,而任何用富信息属性导出的熵图中阴影区的面积都应该更小。下面,我们比较三个样本属性所对应的熵图。由于单个属性的不同取值在数据集中出现的频率不同,所以基于每个属性产生的数据划分方式也不同。

图 3-7 按菌褶颜色对数据集进行了划分,属性值包括 y(黄色)、u(紫色)和 n(褐色)等。每个值对应的矩形宽度代表了菌褶颜色为该值的数据点在整个数据集中所占比例,而其高度则为这个数据子集的熵值。可以看出,菌褶颜色这一属性降低了整体的熵值,因为图 3-7 中的阴影区面积明显小于图 3-6 中的阴影区面积。

类似地,图 3-8 展示了如何利用孢子印颜色这个属性降低信息的不确定性(熵值)。属性值中的一小部分,如 h(巧克力色),恰好可以对目标变量值进行明确的划分,因此产生了熵值为 0 的矩形阴影区。但请注意,这部分数据子集仅占整个数据集的 30%,并不是很多。

图 3-7:按菌褶颜色分类时的蘑菇数据集的熵图。阴影区面积相当于熵值的加权总和,每个矩形阴影区对应根据不同菌褶颜色划分出的子集,矩形阴影区的高度为该数据子集的熵,矩形阴影区的宽度则代表该数据子集在全体数据中所占的比例

图 3-8:按孢子印颜色分类时的蘑菇数据集的熵图。阴影区面积相当于熵值的加权总和,每个矩形阴影区对应根据不同孢子印颜色所划分的数据子集,矩形阴影区的高度为该数据子集的熵,矩形阴影区的宽度则代表该数据子集在全体数据中所占的比例

图 3-9 按气味对数据集进行了划分。该属性的大部分值,如 a(杏仁味)、c(木焦油味)和 m(霉味),都产生了熵值为 0 的划分。仅有 n(无味)的熵值较大(约为 0.2)。实际上,气味这个属性在整个蘑菇数据集中具有最大的信息增益。它能够将数据集的整体熵值降到 0.1,因而其信息增益为 0.96 – 0.1 = 0.86。这意味着什么呢?许多种气味完全可以用于区分蘑菇是有毒的还是可食的,因而气味对于分辨蘑菇的可食性是一个非常好的富信息属性。5 如果你想仅仅根据一个特征来构建模型以判断蘑菇的可食性,那么气味就是最好的选择;如果你想建立一个更复杂的模型,那么最好也先从气味这个属性开始,随后再考虑加入其他属性。而这正是下一节的主题。

5当然,这一切的前提是气味可被精确地测量。如果你的嗅觉较差,那么最好不要冒险。坦白地讲,你最好不要把自己的生命押在本书示例的数据挖掘结果上。当然,这并不妨碍我们把它作为一个不错的学习示例。

图 3-9:按气味分类时的蘑菇数据集的熵图。阴影区的面积相当于熵值的加权总和,每个矩形阴影区对应根据不同气味所划分的数据子集,矩形阴影区的高度为该数据子集的熵,矩形阴影区的宽度则代表该数据子集在全体数据中所占的比例

3.2.3 使用树形结构模型进行有监督的划分

本书已经介绍过数据科学的一个基本概念:从数据中选择富信息属性。接下来将继续讨论如何构建有监督的划分,因为选择属性虽然非常重要,但是单单进行这一步并不足以解决数据挖掘的问题。如果只选择出信息增益最大的一个变量,我们会得到一个非常简单的划分方式;但如果要选择多个信息增益较大的属性,我们却还不清楚怎么把它们组合在一起。前文的例子中,我们尝试过使用多个属性进行数据划分,如“居住在纽约市的中年专业人士的平均用户流失率为 5%”。现在我们将巧妙地应用之前探讨过的关于选择重要属性的概念,来引出一个多变量(或多属性)的有监督的划分方法。

试想将数据的划分以树状的形式呈现。如图 3-10 所示,图中的树根在上,树冠朝下。这棵树由节点(包括内部节点和终端节点)和内部节点间的分支构成。树状图中的每个内部节点都会对某一个属性进行检验,并将该属性不同的值或者其值的不同区间分为不同的分支。从根节点沿分支向下看(即顺着箭头方向看),每条路径的末端都会有一个终端节点,称为叶节点。这棵树构建了一种数据划分方法,任意一个数据点在该树中对应并仅对应一条路径,也就是仅对应一个叶节点。换句话说,每个叶节点对应一个分组,而通向其的路径上的各个属性及其取值则给出了该分组的特征。因此,图 3-10 中最右边的路径所对应的分组为“年长、未就业、账户余额较多”。因为每个叶节点都包含了一个目标变量值,所以这棵树是有监督的划分。由于讨论的是分类问题,所以此处每个叶节点包含的是该分组的分类类别。我们称这样的树为分类树,或通俗点,称为决策树

图 3-10:一个简单的分类树

分类树通常被用作预测模型,即“树形结构模型”。实际应用中,当拿到一个分类未知的实例时,我们可以寻找它对应的分组,并使用叶节点所对应的类别值来预测其类别。其实现方法是,从根节点开始,根据实例的具体属性的值来选择分支,向下遍历内部节点。树的非叶节点往往被称为“决策节点”,因为在向下遍历时,在每个节点上,都需要根据某个属性的值选择向哪个分支遍历。沿着这些分支,最终会抵达终端节点。而根据其所对应的分类类别,就可以给出最终的分类预测结果。树中任意一个子节点有且仅有一个父节点,树中也不会出现闭环。树中的分支永远“指向下方”,故而每个实例最终都将到达某个叶节点,被赋予某个类别值。

思考一下,该如何使用图 3-10 中的分类树对图 3-1 中叫 Claudio 的人进行分类。Claudio 的属性分别为:账户余额 = 11.5 万是否就业 = 否年龄 = 40 岁。从检验变量是否就业的根节点开始,其值为,则选择右侧分支。下一个接受检验的变量是账户余额,其值为 11.5 万美元,大于 5 万美元,则选择右侧分支。再下一个变量是年龄,其值为 40,则选择左侧分支。最终我们来到类别 = 无不良贷款的叶节点,因此预测 Claudio 贷款不会违约。换句话说,我们把 Claudio 划分进了一个定义为账户余额 = 11.5 万是否就业 = 否年龄 < 45 岁、分类为无不良贷款的分组中。

分类树是一种树形结构模型。后文中我们将看到,在实际商业应用中我们想预测的往往并非类别值本身,而是不同类别值的概率(如用户流失的概率或产生不良贷款的概率)。在此例中,概率估计树的叶节点就将包含这些概率,而不是仅仅给出一个简单的值。如果目标变量是数值型,相应地,回归树的叶节点包含的就是数值。无论如何,其基本概念是相通的。

树形图能生成一个符合期望的有监督的划分的模型,然而,尽管已经知道如何应用它来预测新实例的值,我们却不知道如何根据数据来构建这样的模型。现在我们来讨论这个问题。

有很多种技术都能从数据集中归纳出有监督的划分,其中最常见的一种就是构建树形结构模型(也即树型归纳)。这些技术之所以常见,是因为树形结构模型易于理解、归纳过程简洁(易于描述),而且易于使用。它可以稳定并相对高效地处理许多常见数据问题。行业中大部分数据挖掘工具包包含了某种树型归纳技术。

如何根据数据来构建分类树呢?综上所述,分类树的目的是进行有监督的划分,具体来说,就是根据每个实例的属性,将它们划分进目标变量值相近的子组中。我们期望每片“叶子”所对应的分组中包含的实例最好能属于同一类。

为了阐释分类树的归纳过程,我们再来看一下图 3-2 所示的简单示例。

树型归纳采取分而治之的方法,先从整个数据集开始,运用变量选择来找到产生尽可能“最纯”子集的属性。在本例中,给人分组的一种方法是基于身体形状:矩形或椭圆形。由此创建了如图 3-11 所示的两个组。这样的分组效果如何呢?矩形身体的一组在左侧,其中大部分是有不良贷款者,而仅有一个无不良贷款者,因此这组基本上是纯的。椭圆形身体组在右侧,大部分是无不良贷款者,但有两个有不良贷款者。不过这仅是对前文属性选择概念的一次直接应用。让我们暂且把这种分类方法视为产生信息增益最大的一种。

图 3-11:第一次划分,根据身体形状(矩形 / 椭圆形)进行划分

从图 3-11 中可以看到树型归纳的优美之处,以及其受欢迎的原因。左右两个子组只不过是最初要解决的问题的缩小版,只需递归地对每个子集应用属性选择,直至最终找出分组效果最佳的属性即可。因此在此例中,我们对椭圆形身体组进行递归式的处理(见图 3-12)。为了对这个组再次分组,我们使用另一个属性:脑袋形状。这样,该组又分为图中右侧所示的两组。这次分组效果又如何呢?每个新组都有单一的目标值:四个(方形脑袋组)无不良贷款和两个(圆形脑袋组)有不良贷款。因为这两组的类别标签都是“最纯”的,所以无须继续分组。

图 3-12:第二次划分,根据脑袋形状对椭圆形身体组进行再次划分

我们还未对图 3-11 中左侧的矩形身体组做任何处理,现在来看看它如何继续分组。组中含有五个有不良贷款和一个无不良贷款,有两个属性可作为分组依据——脑袋形状(方形 / 圆形)和身体颜色(白色 / 灰色),这二者都能起作用。此处随机地选择身体颜色作为分组依据,由此产生了如图 3-13 所示的分组。由于这些分组都是纯的(均只包含一种目标变量值),所以无须继续进行。所有这些分组对应的分类树见图 3-14。

图 3-13:第三次划分,根据身体颜色对矩形身体组进行划分

总之,分类树型归纳的过程是一个递归地分而治之的过程,每一步的目标都是选出能把当前数据集分组成(对目标变量来说)尽可能纯的子集的属性。递归地进行这种划分,一步一步直到结束。在选择属性的时候,我们需要测试所有的变量,并选出能够使所分出的子集最纯的属性。那么何时结束呢?(换言之,何时停止递归?)显然,当节点是纯的,或所有变量均已被分组时,应该停止。但我们可能会需要提前结束,而这个问题将在第 5 章讨论。

图 3-14:根据图 3-11 和图 3-13 的划分得到的分类树

3.3 划分的可视化

如果沿用把预测建模看作有监督的划分的说法,那么可视化地展现分类树是如何划分实例空间的会很有启发性。实例空间指的是由数据特征所描述的空间。一种常见的实例空间可视化的形式是描述某些成对特征的散点图。这些散点图将变量两两对比,来探索这些变量之间的关联和关系。

虽然数据可能包含十几个甚至百余个变量,但我们一次只能从两到三个维度对划分进行可视化。不过,仅从几个维度进行实例空间可视化,仍然有助于理解不同种类的模型,因为在这个过程中所得到的见解也同样适用于更高维度的空间。在比较差异较大的模型类别时,仅仅通过观察它们的形式(如一个数学公式相对于一组规则)或生成它们的算法可能不太容易做出比较。通常,更简单的方法是比较它们对实例空间的划分方式。

例如,图 3-15 展示了一个简单的分类树和其对应的二维实例空间图(x 轴代表账户余额,y 轴代表年龄)。分类树的根节点检验的是账户余额是否超过 5 万美元。与之对应的二维坐标图中“账户余额 = 5 万”的垂直虚线将平面划分成了“账户余额少于 5 万美元”和“账户余额不少于 5 万美元”两部分。左侧区域的实例账户余额不足 5 万美元,其中包含 13 个有不良贷款者(即“•”)和 2 个无不良贷款者(即“+”)。

根节点右侧分支指向账户余额不少于 5 万美元的实例。其下一个节点检验的是年龄是否超过 45 岁,与之对应的是二维坐标图中“年龄 = 45”的水平虚线,这条虚线仅出现在右半部分,因为这次划分仅针对账户余额超过 5 万美元的实例。该节点左侧分支指向的实例年龄决策节点是“年龄低于 45 岁”,与之对应的是二维坐标图的右下部分,代表“账户余额不少于 5 万美元且年龄低于 45 岁”。

注意,每个内部节点(决策节点)都对应对实例空间的一次划分,而每个叶节点都对应实例空间中一个未划分的区域(即总体的一个分组)。每当沿着一条路径离开某个决策节点后,我们都仅关注该次划分所产生的两个或多个子区域中的一个。随着向下遍历的过程,我们面对的实例空间子集也会越来越目标明确。

 决策线与超平面

对实例空间进行划分的线被称作决策线(二维空间中),一般也被称作决策平面决策边界。因为分类树中的内部节点是根据某个变量的取值进行检验的,所以这个节点所对应的决策边界总是垂直于该变量所在的坐标轴。在二维空间中,决策边界要么是水平的,要么是垂直的。若数据中有三个变量,则实例空间也是三维的,那么分类树的每个决策边界就是一个二维平面。在更高维的空间中,由于分类树的每个节点检验一个变量,而这可以视作确定了决策边界中的一个维度,所以,如果一个问题有 n 个变量,那么分类树的各个节点就可以在其实例空间中创建一个 n-1 维的“超平面”决策边界。

在数据挖掘方面的文献资料中,超平面一词经常泛指一切分界平面,也就是说,不管什么平面都可以用它指代。别被这个术语吓到,你只要把它想成是泛指的线或平面的即可。

决策平面可能还有一些其他形式,后面会提到。

图 3-15:一个分类树及其所对应的实例空间的划分。“•”指有不良贷款,“+”指无不良贷款。不同的阴影区域代表了分类树的不同叶节点所对应的实例空间的划分

3.4 把树视作规则组

在结束对分类树的说明并开启下一个话题之前,有必要提一下分类树的另一种表现形式:逻辑声明。回想一下图 3-15 中的分类树,在对一个新出现的实例进行分类时,我们会从根节点开始,经过一系列属性检验后到达某个叶节点,最后得到该实例的类别的预测值。如果从根节点沿一条单一路径抵达叶节点,并整合沿路径出现的所有条件,我们就能得到一条规则。每条规则都由沿路径进行的各属性检验的并集构成。例如,从根节点开始,如果始终选择左侧分支,将得到如下规则:

如果(账户余额少于 5 万美元)且(年龄低于 50 岁),那么分类为有不良贷款者。

根据树中每一条可能的路径,我们得到如下三条规则:

如果(账户余额少于 5 万美元)且(年龄不低于 50 岁),那么分类为无不良贷款者。

如果(账户余额不少于 5 万美元)且(年龄低于 45 岁),那么分类为有不良贷款者。

如果(账户余额不少于 5 万美元)且(年龄不低于 45 岁),那么分类为无不良贷款者。

分类树与上述的规则组是等价的。如果你觉得这些规则看上去有许多重复之处,那是因为它们确实是重复的:分类树就是一般规则中的条件聚集起来构成的。每个分类树都能以这种方式表示为一组规则。至于哪个更清晰易懂,这就见仁见智了。在上述的简单例子中,两种形式都非常易于理解。而当模型逐渐变得庞大的时候,两者的易理解性就会出现差异,不同的人对此也会有不同的偏好。

3.5 概率估计

在许多决策问题中,比起单纯的分类,我们更希望得到信息量更大的预测结果。比如在用户流失预测问题中,我们不仅预测了用户是否会在合约到期后 90 天内续约,而且估计了用户在该时间段内不再续约的概率。这样的估计用处多多,本书将在后面几章中详细讨论,在此仅做简要介绍:你可以按流失概率对用户进行排序,并将有限的激励预算分配到最可能流失的用户身上;或者,你可以把这些预算分配到一旦流失预期损失最大的用户身上,为此你同样需要流失概率的估计值。一旦有了这些概率估计值,你就可以将其应用到许多更加复杂的决策过程中,本书将在以后的章节中详细描述相关内容。

仅给出简单分类而非类别概率的模型,还存在另外一个更加不易察觉的问题。以信用贷款违约的预测问题为例,在一般情况下,基本上在我们进行信贷评估的总体的每个分组中,其成员产生不良贷款的概率都非常低——远小于 0.5。如果在这种情况下构建了一个模型,来对违约情况进行分类(即是否有不良贷款),那么就会出现所有分组的成员都不倾向于违约,即分类都相同(无不良贷款)的情况。打个比方,如果在一个构造简单的分类树中,每个叶节点都被标注为“无不良贷款”,这就会让数据挖掘新手非常沮丧:忙了半天,结果竟然是没人可能会违约?不过,这并不意味着该模型毫无用处。不同分组产生不良贷款的概率可能的确大相径庭——只不过它们都小于 0.5 而已。如果根据这些信贷违约概率来进行信贷评估,就能大大降低风险。

因此,在有监督的划分中,我们希望每个分组(即分类树的每个叶节点)都给出不同类别下成员概率的估计值。图 3-15 基于不良贷款预测示例展示了一个常规的“概率估计树”模型,它不仅预测了类别值,还预测了类概率估计值。6

6通常我们处理的是二元分类问题,如有不良贷款与否、用户流失与否。在这些情况下,往往只计算其中一类的概率 p(c),这是因为另一类自然是 1-p(c)

幸运的是,目前我们讨论的树型归纳概念能够非常容易地导出概率估计树,而不仅是简单的分类树。7 前文中提过,树型归纳能将实例空间划分成类别尽可能纯(即低熵值)的区域。如果认同某一叶节点所对应的分组内的各成员类概率相同这一假设,那么我们便可以用每个叶节点中的实例数来计算某个类概率的估计值。比如,如果一个叶节点包含 n 个正实例和 m 个负实例,那么新实例为正的概率就是 n/(n+m)。这种方法被称为基于频率的类成员概率估计。

7即使决策者用的是概率估计而非简单分类,它们也仍被称为分类树。

此时你大概会发现一个问题:当使用上述方法估计类成员概率时,我们对实例数极少的分组中的类成员概率估计可能会过度乐观。极端情况下,假设一个叶节点只含有一个类别碰巧为某个值的实例,我们可以说被划入这个叶节点的任意一个新实例属于该类别的概率是 100% 吗?

这种现象是数据科学中一个基本概念(“过拟合”)的一个示例,之后本书将用整整一章来论述它。为了本书结构的完整性,在此先简要说明一个简单方法,来解决在小样本情况下基于分类树的类概率估计而存在的过拟合问题。这时我们通常不会单纯地计算频率,而会用一种“平滑”后的基于频率的估计,称作“拉普拉斯修正”。其目的是减轻仅有几个实例的叶节点对类概率估计的影响。二元分类问题的类概率估计公式就变成了如下形式:

p(c)=\frac{n+1}{n+m+2}

其中 n 是叶节点中属于类 c 的实例数,m 是不属于类 c 的实例数。

在此用一个示例来比较使用和不使用拉普拉斯修正这两种情景。一个有 2 个正实例、没有负实例的叶节点,与另一个有 20 个正实例、没有负实例的叶节点基于频率的概率估计值(即 p=1)相同。然而,前者的实例数太少,其估计值可能由极端情况导致,因此该估计需要调整。拉普拉斯公式将该估计平滑到了 p=0.75,确实体现了它的不确定性。但拉普拉斯修正对于实例数为 20 的叶节点而言,影响就小多了(p\approx0.95)。随着实例个数的增加,拉普拉斯修正的结果逐渐趋近于基于频率的估计值。图 3-16 展示了当实例数逐渐增加时,拉普拉斯修正对不同类别比例(2/3、4/5 和 1/1)的修正效果。图中对应的每个类别比例的水平实线代表未修正的(常数)估计值,相应的虚线则代表应用拉普拉斯修正后的估计值,前者是后者在实例数趋向无穷时的渐近线。

图 3-16:拉普拉斯修正对不同实例比率的平滑效果

3.6 示例:用树型归纳解决用户流失问题

在学完预测建模的数据挖掘基础技术之后,我们继续考虑用户流失问题。如何运用树型归纳来解决这个问题呢?

假设我们的历史数据集包含 20 000 个用户,在收集数据期间,这些用户要么续约,要么不再续约(即流失)。表 3-2 列出了描述用户所用的变量。

表3-2:通信公司用户流失问题中的用户属性

变量

解释

大学

该客户是否有大学学历?

收入

年收入

超额

月平均超额使用费用

剩余

月平均剩余分钟数

房价

房价估计值(根据人口区域普查)

手机价格

手机价格

每月长通话

月平均长通话数(不少于 15 分钟)

平均通话时长

平均通话时长

满意程度

满意程度

使用程度

用户自我评定的使用程度

流失(目标变量)

用户是否还留在公司(是否流失)?

这些变量所包含的基础人口统计信息和使用信息可从用户的应用和账户中取得。我们将根据这些数据,运用树型归纳技术来预测哪些新用户将会流失。

在根据以上变量构建分类树之前,最好知道这些变量各自独立的预测效果如何。为此,我们按照前文所述的方法测量了每个属性所产生的信息增益。尤其是,在整个实例集合中,我们将公式 3-2 分别应用于每一个变量,并计算它们所产生的信息增益。

结果如图 3-17 中的列表所示。可以看出,前三个变量——“房价”“超额”和“每月长通话”——的信息增益比其他变量高。8 出乎意料的是,“使用程度”和“满意程度”两者本身对用户流失的预测效果都不好。

8注意,用户流失数据集中变量的信息增益比先前蘑菇数据集中变量的信息增益小很多。

图 3-17:表 3-2 中的用户流失数据中的变量,按信息增益排序

将分类树算法应用于数据后,就得到图 3-18 中的分类树。图 3-17 表明,信息增益最高的变量“房价”位于树的根节点。这是符合预期的,因为这个变量往往被最先选择。第二好的特征,“超额”,也在树的上部。然而,树中变量的选择顺序与图 3-17 中的顺序并不完全相同,这是为什么呢?

图 3-18:手机用户流失数据所构建的分类树。矩形的叶节点代表总体的分组,该分组由从根节点向下延伸出的路径定义。叶节点上的概率值是该分组下用户流失概率的估计值;括号内则是根据概率是否大于 0.5 来进行的分类决策 [ 比如:该划分下的个体是倾向于流失(CHURN),还是留存(STAY)?]

原因是,在图 3-17 的列表中,我们基于整个实例总体分别测量各变量的信息增益,并按照变量独立的表现给它们排序。而分类树中的节点则取决于其上一层的实例集合。因此除了根节点外,分类树中的特征的信息增益都不是基于整个实例集合来测量的。由于任意一个特征的信息增益都依赖于它所基于的实例集合,所以某些内部节点的特征的排序就可能与全局排序不同。

我们还未讨论如何决定终止分类树的分支。示例使用的数据集中含有 20 000 个数据点,而分类树的叶节点显然没有这么多。我们能一直持续地选择属性来划分数据,直到无数据可分为止吗?这样虽然也可以,但如此一来模型就会变得非常复杂,因此实际上我们需要早早停止。而这个问题与模型的通用性和过拟合密切相关。第 5 章会探讨过拟合。

思考一下该数据集的最后一个问题。在基于数据建立树形结构模型后,我们通过测量其准确率来衡量该模型的优劣程度。具体做法是:选取一个训练集,使其中的流失用户与未流失用户各占一半;用该训练集构建一个分类树,再将其应用于原数据集,看看有多少实例被正确地分类。最终,这个分类树分类的正确率是 73%。这引出了如下问题。

(1) 首先,你相信这个数字吗?如果把这个分类树应用于另一个源于相同数据集的 20 000 人样本,其精确度仍会是 73% 吗?

(2) 其次,即使你的确相信这个数字,可它真的意味着模型优良吗?换句话说,这个准确率为 73% 的模型能用吗?

第 7 章和第 8 章会回顾这些问题,并深入研究模型评估问题。

3.7 小结

本章介绍了预测建模的基本概念。预测建模是数据科学的主要任务之一,它通过建立模型来估计新个体的目标变量值。其间本章引入了数据科学的一个基本概念:找出并选择富信息属性。选择富信息属性本身也是一个有用的数据挖掘过程。面对一个庞大的数据集,我们现在能够找出其中的某些变量,它们要么能给出有关我们所关心的其他变量的信息,要么与该变量相关。比如,如果收集了在合约到期后短期内续约或不续约(即流失)的用户的历史数据,那么通过属性选择就可以找到人口统计方面或账户方面的变量,进而可以使用其中的信息来反映用户流失的可能性。衡量属性信息量的基本指标是信息增益,它基于一个被称作的纯度指标,另一个指标则是方差缩减。

富信息属性选择是常用的建模技术之一——树型归纳——的基础。树型归纳能够递归地找出数据子集中的富信息属性,同时把其实例空间划分为相似的区域。这样的划分之所以被称为“有监督的”,是因为它所尝试找出的分组,可以为要预测的量(即目标变量)提供越来越精确的信息。最终的树形结构模型将实例空间划分成一系列分组,而每个分组对应的目标变量预测值都不同。比如,如果目标变量的分类是二元的(如是否流失,或是否有不良贷款),那么分类树的每个叶节点就对应着总体中的一个分组,而各分组对应的类成员概率估计值各不相同。

 作为练习,思考一下:如果用回归构建一个树形结构模型,它跟分类树有何不同?在你学过的分类树型归纳过程中,需要对哪些因素做出改变才可以生成回归树?

历史上,树型归纳由于具有通俗易懂、易于实施和计算廉价的优势,一直是一种非常受欢迎的数据挖掘方法。对树型归纳的研究至少要追溯到 20 世纪五六十年代。最早的树型归纳系统,包括 CHAID(卡方自动交互侦测器,Kass, 1980)和 CART(分类与回归树,Breiman, Freidman, Olshen & Stone, 1984),至今仍被广泛应用。C4.5 和 C5.0 作为同样流行的树型归纳算法,其世系显而易见(Quinlan, 1986, 1993)。J48 则是 Weka9 包中对 C4.5 的重新实现(Witten & Frank, 2000; Hall 等, 2001)。

9一种数据挖掘软件。——译者注

实践中,在我们能从特定数据集中提取出的模型中,树形结构尽管不是精度最高的,效果却出类拔萃。在很多情况下,尤其是在应用数据挖掘的早期,使模型易于理解、便于解释是十分重要的。这一点不仅对数据科学团队本身十分有用,而且在他们和不懂数据挖掘的企业利益相关者交流成果时也是非常有用的。

目录