- 量化投资:MATLAB数据挖掘技术与实践(第2版)
- 卓金武
- 7279字
- 2025-02-27 14:07:30
2.2 数据挖掘的过程
2.2.1 数据挖掘过程的概述
数据挖掘能够从一堆杂乱的数据中挖掘出有价值的知识,这需要一个过程。很多数据挖掘工具厂商都对这个过程进行了抽象和定义,使之更加清晰。比如,SAS将数据挖掘过程划分为5个阶段:抽样(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工程提供了完整的过程描述。一个数据挖掘项目的生命周期包含6个阶段:业务理解(Business Understanding)、数据理解(Data Understanding)、数据准备(Data Preparation)、建模(Modeling)、评估(Evaluation)和部署(Deployment)。
纵观这几个过程模型,就会发现其实质是一致的,所以不必在意到底用哪个数据挖掘过程,适合自己的就好。但从便于理解和操作的角度来讲,本书所介绍的数据挖掘过程为目标的定义、数据的准备、数据的探索、模型的建立、模型的评估、模型的部署,可以简称为DPEMED(Definition、Preparation、Explore、Modeling、Evaluation、Deployment)模型,它们之间的关系如图2-12所示。

图2-12 数据挖掘过程示意图
2.2.2 目标的定义
当企业或组织机构想要实施数据挖掘时,大多是因为觉得积累的业务数据中有些数据是有价值的,也就是说在潜意识里面已经有了大致的目标。这种目标在无形之中会在随后的数据挖掘过程中更为明确,即所谓的有的放矢,这样,数据挖掘就可以有意义地进行下去。因此,实施数据挖掘的第一步是要确定数据挖掘的目标。
要确定目标,就必须了解数据和相关的业务。比如,要分析电信领域的客户呼叫行为,就需要了解电信的业务构成、业务运营及其他诸多的行业知识。有关业务问题,是指在业务过程中需要解决的问题,想要知道问题的答案并且认为这些问题的答案蕴藏在大量的数据中,但并不知道它们在哪里。其中可能涉及的业务问题很多,从数据挖掘的角度来讲,需要了解的业务问题至少包含如下3方面:
(1)有关需要解决问题的明确定义。
(2)对有关数据的了解。
(3)数据挖掘结果对业务作用效力的预测。
如果无法确定哪些问题是数据挖掘可以解决的,那么可以参考各行业的成功案例。许多业务和研究的领域都被证实是数据挖掘能够成功应用的领域,包括金融服务、银行、保险、电信、零售、制造业、生物、化工等。
当对业务和数据有一定的了解之后,就可以很容易地定义数据挖掘的目标,一般可以从如下两个方面定义数据挖掘的目标:
(1)数据挖掘需要解决的问题。
(2)数据挖掘完成后达到的效果,最好给出关键的评估参数及数值,比如数据挖掘的结果在3个月内使得整体收益提高5个百分点。
2.2.3 数据的准备
数据的准备是数据挖掘中耗时最多的环节,因为数据挖掘的基础就是数据,所以足够、丰富、高质量的数据对数据挖掘的结果至关重要。数据的准备包括数据的选择、数据的质量分析和数据的预处理三个环节。
1)数据的选择
选择数据就是从数据源中搜索所有与业务对象有关的内部和外部数据信息,并从中选择适用于数据挖掘的数据。内部数据通常指现有数据,如交易数据、调查数据、Web日志等。外部数据通常指需要购买的一些数据,如股票实时交易数据。
从选择的数据类型来看,在大多数商业应用中都会包括交易数据、关系数据和人口统计数据三种类型的数据。交易数据是业务对象发生业务时产生的操作数据,它们一般有明显的时间和顺序特征,与业务发生有关联,如投资者的证券交易、客户的购物、用户的通话等。关系数据是相对较少变化的数据,表达了客户、机构、业务之间的关系,如投资者与交易所、用户与电信公司等。人口统计数据表达了与业务主题相关的描述信息,这些数据可能来自外部的数据源。这三种类型的数据反映了三种数据信息,在数据挖掘的过程中,对知识的发现非常重要,所以在选择数据的时候尽量要包括与业务相关的这三种类型的数据。
2)数据的质量分析
没有完美的数据。事实上,大多数数据存在代码错误、缺失值或其他类型的不一致现象。所以在建模前通常要对可用数据进行全面的质量分析。数据质量分析的目的是评估数据质量,同时为随后的数据预处理提供参考。数据的质量分析通常包括如下几个方面的内容。
• 缺失数据:包括空值或编码为无应答的值(如$null$、?或999)。
• 数据错误:通常是在输入数据时造成的排字错误。
• 度量标准错误:包括正确输入但因不正确的度量方案而导致错误的数据。
• 编码不一致:通常包含非标准度量单位或不一致的值。例如,同时使用M和male表示性别。
• 无效的元数据:字段的表面意思和字段名称或定义中陈述的意思不匹配。
3)数据的预处理
经过数据的质量分析往往会发现,数据总是存在这样或那样的问题,为了得到准确性、完整性和一致性较好的数据,必须对数据进行预处理。根据数据质量的不同,数据的预处理所用的技术也会有所不同,但通常包括数据清洗、数据集成、数据归约和数据变换四个步骤,如图2-13所示。

图2-13 数据的预处理步骤
2.2.4 数据的探索
探索数据是指对数据进行初步研究,以便投资者更好地了解数据的特征,为选择建模的变量和算法提供依据。在数据挖掘的过程中,数据的准备和数据的探索是一个双向的过程,也就是说,数据探索的结果也可以指导数据的准备,尤其是数据的预处理。更具体地说,在数据挖掘的过程中,先进行数据的准备,包括选择、质量分析和预处理;然后进行数据的探索。如果在探索阶段发现数据量太少或数据质量不好或者区分度不好,那么就会返回到数据的准备,重新进行数据的选择、质量分析和预处理,通常是直接返回到数据的预处理环节,如对数据进行归一化处理等预处理操作;然后继续对数据进行探索,直到通过探索得到的数据比较满意为止,这样就可以转入到下一个阶段。
从广义上说,很少或没有得到理论支撑的数据分析均可以视为数据探索的范畴。数据探索更多的是对数据进行初步分析,有助于针对不同类型的数据或条件进行统计分析。数据探索或探索性数据分析具有启发式、开放式等特点。
(1)启发式在于,我们可能对数据的类型或特点知之甚少,需要通过统计技术来探索数据内部的东西,就是通常所说的“让数据说话”。这时由于某种原因,我们可能对数据背后的理论信息掌握得很少,或缺少这方面的资料等。
(2)开放式在于,数据探索以数据清理为先导。数据清理工作往往要参考学科背景知识。例如,对缺失值的处理,若该学科数据对异常值的反应很灵敏,使用均值去填补,则可能会丢失大量的信息(假如缺失值很多)。所以,如果仅是数据探索,很少需要考虑上述情况,可以完全根据数据特点来选择相应的处理方法,开放性也体现于此。
下面从几个大的方向来了解数据探索的方法。
1)描述统计
描述统计包括均值、频率、众数、百分位数、中位数、极差、方差等。一般来说,描述统计均可用来探索数据结构,以及数据的不同属性。
2)数据的可视化
数据的可视化也是数据探索阶段常用的一种技术,这种技术概括起来就是将数据的总体特点以图形的方式呈现,从而发现其中的模式,并可以根据一定的规则(标准差、百分位数等信息)进行拆分、合并等进一步处理。
毫无疑问,图形简明易懂,对很多难以表达的情况,使用图表呈现将使问题变得简单,这也就是所谓的“一图胜千言”。图形在数据探索中起到很重要的作用,如常用的频次图(见图2-14)、散点图、箱体图等。

图2-14 数据可视化示意图(频次图)
3)数据探索的建模活动
一切可以用于建模的统计方法或计量模型均可以用于数据探索。不过模型之所以是模型,是因为其背后的理论或学科性质的支撑。所以,从这个层面上说,数据探索更多的是为分析人员提供感性的认识,所有的结果都有待于理论的验证,只有在认识的边缘,理论才渐渐被淡化。
2.2.5 模型的建立
模型的建立是数据挖掘的核心,在这一步要确定具体的数据挖掘模型(算法),并用这个模型原型训练出模型的参数,得到具体的模型形式。模型建立的操作流程如图2-15所示。这在一过程中,数据挖掘模型的选择往往很直观。例如,对股票进行分类,则要选择分类模型。问题是分类模型又有多种模型(算法),这时就需要根据数据特征、挖掘经验、算法适应性等方面确定较为合适的算法,如果很难或不便选择哪种具体的算法,不妨对可能的算法都进行尝试,然后从中选择最佳的算法。

图2-15 模型建立的操作流程
数据挖掘的主要内容就是研究模型建立过程中可能用到的各种模型和算法,这些模型和算法就是前面介绍的关联、回归、分类、聚类、预测和诊断。如果从实现的角度,根据各种模型在实现过程中的人工监督(干预)程序,这些模型又可以分为有监督模型和无监督模型。在数据挖掘过程中,常用的模型结构如图2-16所示。根据这一结构,可以很清晰地知道模型建立过程中可供选择的模型,关于这些模型的具体适用条件和用法,将在后面的章节具体介绍。

图2-16 数据挖掘常用的模型(算法)结构
此处提到模型,也提到算法,这两个概念容易混淆。一谈到算法人们就会想到通过历史数据建立模型,其实数据挖掘算法是创建数据挖掘模型的机制,对产生的最终挖掘输出结果有很大的决定性。随着数据挖掘新技术的层出不穷和商业数据挖掘产品的成熟与完善,对同一商业问题而言,通常在产品中有多种算法可供选择,而为特定的任务选择正确的算法很有挑战性。读者可以使用不同的算法来执行同样的任务,每种算法会生成不同的结果。而且算法可以复合使用,在一个数据挖掘解决方案中可以使用一些算法来探析数据,而使用其他算法基于该数据预测特定的结果。例如,可以使用聚类分析算法来识别模式,将数据细分成相似的组,然后使用分组结果来创建更好的决策树模型。也可以在一个数据挖掘解决方案中使用多种算法来执行不同的任务。例如,使用回归树算法来获取财务预测信息,使用基于规则的算法来执行市场篮子分析。由此看出,在数据挖掘项目中,在明确挖掘目标和了解各种算法的特点后,如何正确选择和使用算法,得到期望的结果才是关键环节。
在模型建立这一环节,还有一项重要的工作是设置数据的训练集和测试集,训练集的数据用于训练模型,而测试集的数据则用于验证模型。因为这个环节的模型的验证是在模型的训练过程中进行的验证,所以这部分模型的验证工作一般也被认为隶属于模型的建立过程。为了保证得到的模型具有较好的准确度和健壮性,需要先用一部分数据建立模型,然后用剩下的数据来测试这个模型。因为测试集可能受模型特性的影响,还需要一个独立的数据集来验证模型的准确性,这个数据集称为验证集。
训练和测试数据挖掘模型至少要把数据分成两个部分:一部分用于模型训练,另一部分用于模型测试。如果使用相同的训练集和测试集,那么模型的准确度就很难使人信服。用训练集把模型建立出来之后,可以先在测试集数据上做实验,此模型在测试集上的预测准确度就是一个很好的指示数据,它表示将来与数据集和测试集类似的数据用此模型预测时正确的百分比。但这并不能保证模型的正确性,它只能说明在相似的数据集合的情况下用此模型会得出相似的结果。
常用的验证方法包括简单验证、交叉验证和N维交叉验证。
1)简单验证
简单验证是最基本的测试方法。它从原始数据集合中拿出一定百分比的数据作为测试数据,这个百分比为5%~33%。注意:在把数据集合分成几部分时,一定要保证选择的随机性,这样才能使分开的各部分数据的性质一致。先用数据集合的主体把模型建立起来,然后用此模型来预测测试集中的数据。出现错误的预测数与预测总数之间的比称为错误率。对于分类问题,可以简单地下结论:“对”与“错”,此时错误率很容易计算。对于回归问题,不能使用简单的“对”或“错”来衡量,但可以用方差来描述准确的程度。比如,用3年内预计的客户增长数量同3年内实际的数据进行比较。
在一次模型的建立过程中,这种简单验证通常要执行几十次。例如,在训练神经网络时,几乎每个训练周期都要在测试集上运行一次,不断地训练测试,直到在测试集上的准确率不再提高为止。
2)交叉验证
交叉验证是用来验证模型的性能的一种统计分析方法,其基本思想是在某种意义下将原始数据进行分组,一部分作为训练集,另一部分作为验证集,如图2-17所示。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此来评价模型的性能指标。交叉验证在实际应用中非常普遍。根据不同的交叉方式,交叉验证又可分为如下三种情况。

图2-17 交叉验证示意图
(1)二分验证。
将原始数据随机分为两组,一组作为训练集,一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率,将其作为分类器的性能指标。此种方法的优点是处理简单,只需要随机把原始数据分为两组即可。其实从严格意义上来说,二分验证并不能算是交叉验证,因为这种方法没有实现交叉的思想。由于二分验证随机地将原始数据分组,所以最后验证集的分类准确率的高低与原始数据的分组有很大的关系。因此这种方法得到的结果其实并不具有说服力。
(2)K次交叉验证(K-CV)。
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,将其余K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于或等于2,在实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2。K-CV可以有效地避免过学习及欠学习状态的发生,最后得到的结果也比较具有说服力。
(3)留一交叉验证(LOO-CV)。
如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此LOO-CV下分类器的性能指标。相比于前面的K-CV,LOO CV有两个明显的优点:一个是每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠;另一个是实验过程中没有随机因素影响实验数据,确保了实验过程是可以被复制的。但LOO-CV的缺点是计算成本高,因为需要建立的模型数量与原始数据的样本数量相同,当原始数据的样本数量相当多时,LOO-CV操作起来就会非常困难,除非每次训练分类器得到模型的速度很快,或可以用并行计算减少计算所需的时间。
当然也可以认为,LOO-CV是一种特殊的交叉验证方式。
3)N维交叉验证
N维交叉验证是更通用的算法。它先把数据随机分成不相交的N份,比如把数据分成10份,把第一份拿出来放在一边用于模型测试,把其他9份合在一起来建立模型,然后把这个用90%的数据建立起来的模型用第一份数据做测试。这个过程对每份数据都重复进行一次,得到10个不同的错误率。最后,把所有数据放在一起建立一个模型,模型的错误率为上述10个错误率的平均值。
可以依据得到的模型和对模型的预期结果修改参数,再用同样的算法建立新的模型,甚至可以采用其他算法建立模型。在数据挖掘中,对于不同的商业问题采用哪种模型效果更好的问题,在没有行业经验的情况下,可用不同的方法(参数或算法)建立几个模型,从中选择最好的。通过上述的处理,就会得到一系列的分析结果和模式,它们是对目标问题多侧面的描述,这时需要对其进行验证和评价,以得到合理的、完备的决策信息。对产生的模型结果,需要进行对比验证、准确度验证、支持度验证等检验以确定模型的价值。在这个阶段需要引入更多层面和背景的用户进行测试和验证,通过对几种模型的综合比较,产生最后的优化模型。
2.2.6 模型的评估
模型评估阶段需要对数据挖掘过程进行一次全面的回顾,从而确定是否存在重要的因素或任务由于某些原因而被忽视。此阶段的关键目的是判断是否还存在一些重要的商业问题未得到充分的考虑。验证模型是处理过程中的关键步骤,可以确定是否成功地进行了前面的步骤。模型的验证需要利用未参与建模的数据进行,这样才能得到比较准确的结果。可以采用的方法有:直接使用原来建立模型的样本数据进行检验、另找一批数据对其进行检验、在实际运行中取出新的数据进行检验。检验的方法是对已知客户状态的数据利用模型进行挖掘,并将挖掘结果与实际情况进行比较。在此步骤中若发现模型不够优化,还需要回到前面的步骤进行调整。
模型的预测正确率是检验模型好坏的重要指标,但不是唯一指标。一个良好的数据挖掘模型,在投入实际应用前,需要经过多方面的评估,从而确定它已完全达到商业目标。评估数据挖掘模型优劣的指标有许多,如正确率(见图2-18)、Lift图、ROC曲线、Gain图等。

图2-18 模型分类正确率柱状图
但是要让用户接受一个模型的结果,仅靠这些评估指标是不够的,还需要从模型结果的可用性上进一步阐述,即数据挖掘模型到底能带来什么业务上的价值。这实际上也就是数据挖掘模型的可解释性。在实际数据挖掘项目中,模型的可解释性往往比评估指标更为重要。
在对模型进行评估时,既要参照评估标准,也要考虑商业目标和商业成功的标准。片面追求预测正确率就会忽视数据挖掘的初衷。我们不是为了建立一个完美的数学模型而进行挖掘,而是为了解决实际的商业问题。所以挖掘结果的可解释性与实用性,才是最根本的标准。例如,在解决客户流失问题中,预测模型捕捉到的流失客户多,并不意味着能够协助挽留较多的客户。关键在于预测结果对挽留营销活动方案的制订有多大的帮助。
在量化投资领域,模型的评估尤为重要,往往先用历史数据对模型进行回测(见图2-19),然后对模型试用一段时间,只有既能保证稳定收益,又能保证最大回撤比较小的模型,才可投入运营,而且在以后的实际运营中,还要不断对模型进行修正、验证、评估。

图2-19 投资策略回测收益曲线
2.2.7 模型的部署
模型的部署一般是数据挖掘过程的最后一步,是集中体现数据挖掘成果的一步。顾名思义,模型的部署就是将通过验证和评估的模型,部署到实际的业务系统中,这样就可以在数据中挖掘到知识。
一般而言,完成模型的创建并不意味着项目结束。模型建立并经验证后,有两种主要的使用方法。一种是提供给分析人员做参考,分析人员通过查看和分析这个模型提出行动方案建议;另一种是将此模型开发并部署到实际的业务系统中,如图2-20所示,如果是以MATLAB为工具开发的模型,可以将这些模型部署到C++、Java、.NET等语言开发的系统中,也可以直接在MATLAB的应用程序中使用。在部署模型后,还要不断监控它的效果,并不断改进。

图2-20 MATLAB开发的模型可以部署的系统结构示意图