深入浅出R语言数据分析
上QQ阅读APP看书,第一时间看更新

1.2 数据分析项目的阶段

在一个比较理想的数据分析项目中,数据科学家需要与所有的其他利益方进行不断的交流反馈。也就是说,数据分析项目并不是一个线性的过程,而是一个不断往复的过程,如图1.1所示。

图1.1 数据分析项目流程图

尽管一个数据分析项目的生命周期被划分成了不同的阶段,但是现实项目中各个阶段之间的边界并不是固定的,一个阶段的活动经常与另一个阶段的活动重叠在一起。

下面以一个银行问题为例子—银行目前有很多的不良贷款,想要降低贷款的违约率。基于这个目的,首先需要制定一个目标。

1.2.1 制定目标

制定一个可以衡量、可以量化的目标是数据分析项目的第一个任务,也是非常重要的一个任务。所以,在这个阶段,需要尽可能多地了解项目的背景与相关信息,例如:

● 为什么需要对这个项目做研究?出资方缺少了什么及需要什么?

● 出资方有何办法来解决问题?是否做得足够好?

● 这个数据分析项目需要什么资源?有多少数据可用?是否需要领域专家的合作?

● 这个数据分析项目有哪些约束条件?

回到上文提到的银行贷款违约的例子,这个例子的商业目标是减少银行的不良贷款,减少贷款损失。这就需要一个方法来判断贷款人的违约概率,对贷款人进行打分。一旦和项目的出资方及其他相关的利益方对关于这个项目的各种问题有了一个基本答案,就需要和他们一起制定数据分析项目的精确目标。该目标应该是具体的、可以衡量的。

例如,将不良贷款率降低1个百分点。通过项目具体目标得出该项目的具体约束条件和接受条件。目标越不具体,数据分析项目就越没有边界。若我们不知道想要达到的目标是什么,就不知道什么时候可以结束,什么时候停止尝试,最终项目会由于时间过期或者资源耗尽而不得不结束,这个时候每个人都不会对结果满意。

这并不是说不需要对数据分析项目进行一些探索,而是说要定义好目标,然后做和目标相关的事情,目标告诉了我们探索的方向。一旦定义好了目标,就需要收集数据,尽可能地去实现这些目标。

1.2.2 收集数据

在定义好数据分析项目的目标之后,需要识别出需要的数据。这个阶段是处理过程中最耗时的过程,也是非常重要的过程,需要探讨的问题如下:

● 什么数据可以用?

● 这些数据是否有用?

● 数据是否足够多?

● 数据的质量是否足够好?

当我们搜集到了所有我们能够搜集到的数据,需要将数据有组织地储存起来,接下来需要对数据进行一些处理和分析。

1.2.3 数据处理和分析

在这个阶段,我们需要对数据进行初始的探索和可视化,并且还需要对数据进行清洗,修复数据的错误,对数据进行必要的转换。在探索和清洗数据的过程中,有些数据可能无法使用,有些数据可能不太适合,这个时候有些问题是需要我们去解决的。有时我们会发现数据的结论和我们的常识判断是不一样的,这个时候我们就会发现一些常识不一定是对的。

在这个过程中要观察数据的分布、数据是否有偏、数据是否来自单一的分布,哪些特征有比较好的预测效果,这些问题都是这个过程中要探讨的。不断地发现问题及一些有意思的点,有助于我们和其他的项目利益方去精化项目目标。通常而言,数据探索并不仅仅发生在这个过程,在这个阶段之前及这个阶段之后,也常常会反复进行。

在这个过程中,我们会使用各种统计图形来展示数据,图形可以很好地帮助我们了解数据,帮助我们在数据分析中产生洞见。在这里先使用一组数据集来做演示,这个数据集是德国的一家银行的信用评分数据集,这个数据集被封装在一个R包中—scorecard包,加载这个包之后即可使用这个数据集。在下面的代码中,library( )函数用于加载一个包,data( )函数用于获取包中的数据集,dim( )函数用于查看数据集的维度。

这个数据集一共有1000条数据、21个特征,每一条数据代表一个用户,而数据集的最后一个特征creditability记录了这个用户的逾期情况,good代表好客户,bad代表坏客户。对于这份数据集,我们首先要做的是尽可能地去了解其信息。

例如,我们想要了解数据中人群的分布,那么我们可以计算一些关于年龄的统计量,如均值、方差、中位数等,在R语言中使用summary( )函数可以很方便地获取这些信息。

从这里可以了解到,最小的客户只有19岁,而最大的客户有75岁,这个客户群体的平均年龄为33岁。另外,我们可以绘制一个直方图,以更加直观地观察数据的分布。关于年龄的直方图分布如图1.2所示。绘图使用了ggplot2包,ggplot2包可以快速地绘制美观的统计图形。

图1.2 关于年龄的直方图分布

从关于年龄的直方图可以看出,年龄的分布是左偏的分布,年龄集中在20~40岁这个年龄段。这样我们就可以很清楚地了解这个数据集中关于年龄的信息。

进一步,我们可能想知道不同年龄的客户中的好坏客户是否不一样,换句话说,好坏客户的年龄分布是不是不一样。基于这个想法,我们可以针对好坏客户分别绘制直方图,观察二者的分布,如图1.3所示。

图1.3 好坏客户的年龄直方图分布

从图1.3中可以看出,坏客户的分布比好客户的分布更靠左,这就意味着年轻人更有可能是坏客户。这个结论也符合常理,年轻人的经济状况不如中年人,而且大多数没有形成比较好的经济理念,容易超前消费,同时容易发生信贷逾期的情况。

按同样的方法,不断地探索数据,发现数据之间的规律,找到那些关键的信息,然后进入构建模型的步骤。

1.2.4 构建模型

在对数据进行了充分的探索之后,可以尝试去构建模型,用统计模型和机器学习模型去解决项目面临的问题。模型可以表达数据中的复杂关系,帮助我们去理解和领悟数据中的信息。有些统计模型会有关于数据的各种假设,因此,在构建模型之前的数据探索环节,我们需要去验证各种假设和条件,当然,也有一些模型对于数据没有任何假设。总而言之,数据探索和构建模型之间的关系并没有严格的界限,二者之间往往会有重叠和反复。

一般而言,机器学习的任务有两大类,即有监督的问题和无监督的问题。其中,有监督的问题往往包括以下三方面。

● 分类问题:将不同的样本归属于不同的类别。

● 回归问题:模型会去预测一个数值,如房价。

● 排名问题:类似于回归问题,但是与回归问题的不同之处在于排名问题的目的是对数据进行排序。

无监督的问题包括以下两方面。

● 聚类:用于识别数据中相似的组。

● 关联规则:用于找出数据中潜在的关系。

一旦我们识别出了项目面临的问题属于哪一类,就可以应用多种方法来解决这个问题。例如,上文所使用的数据集,其本质上是要预测用户的违约情况—违约或者不违约,因此这个问题属于二分类的问题。对于二分类的问题,可用的方法有很多,最常用的方法是逻辑回归模型。可以使用的机器学习模型还包括决策树、随机森林、神经网络模型等。这里使用iris数据集构建一个随机森林模型,这个数据集是R语言自带的数据集,因此可以直接使用。这里使用randomForest包中的randomForest( )函数构建随机森林模型。使用randomForest( )构建随机森林模型所使用的基础参数包括两个:第一个参数是模型的公式,“Species~.,”表示以Species为因变量,数据集中所有的其他变量为自变量;第二个参数是所用到的数据集。其他参数默认,运行即可构建出随机森林模型。

这样就构建好了一个随机森林模型。从结果中可以看到,构建的模型是随机森林的分类模型,一共生成了500棵决策树,OOB estimate of error rate(包外估计误差)是4%,误差比较小。结果还给出了训练数据的混淆矩阵(confusion matrix),从混淆矩阵中可以发现,3个virginica被模型错判为versicolor,3个versicolor被模型错判为virgincicn。构建好模型之后,就需要对模型进行评估,以判断模型的优劣。

1.2.5 评估模型

当构建好模型之后,我们需要知道这个模型的效果如何,以及我们建立的模型是否能够达到我们的目标。

评估模型需要评估以下几个方面。

● 模型的预测效果。如果一个模型的预测效果与抛硬币相差无几,这意味着我们的模型可有可无。我们可以设置一个基本模型,这个模型是最简单、最基本的,我们建立好的模型必须比这个基本模型要好。例如,我们可以认为抛硬币是一个基本模型,这个模型预测正确的概率为0.5,则新模型必须比抛硬币模型要好。基础模型可以指定为我们能够实现的最简单模型。

● 模型的简洁性。奥卡姆剃刀准则指出,正确的答案往往是较简单的那个答案。这就意味着模型必须尽可能地简单。模型过于复杂,意味着需要对其进行调整。

● 模型的可解释性。模型的结果是否能够对我们的问题有解释,我们尽可能地希望模型是有含义的,是可以理解的,而不是一个黑箱。

重新构建我们在上文构建的随机森林模型:

可以看到,模型的误差为4.67%,这意味着模型有一个比较好的预测效果。观察混淆矩阵,发现4个versicolor被错分类为virginica,3个virginica被错分类为versicolor。接着可以去查看这些分类的变量为什么会被分类错,并对其进行优化。

另外,模型的可解释性和模型的简洁性都不是很好,这是由模型本身决定的。

因此,有时候我们同样面临取舍,是使用可解释性较差而预测能力较高的模型(如深度学习),还是使用解释性比较好而预测能力一般的模型(如决策树、逻辑回归)。这取决于具体的业务目的。另外,需要注意使用训练集来评价的模型对数据集的拟合程度。使用测试集来评价模型的泛化能力,也就是当有一个新的数据时,通过新数据来预测模型是否能够预测准确。一般期望模型对新的数据有很好的预测能力,即要求模型的泛化能力要好。模型在训练集上表现得很好,并不一定在测试集同样表现好,因为模型可能会过拟合。因此没有必要在训练集中要求模型有非常高的预测精度。

1.2.6 展示结果

对数据有了充分的了解及建立起令人满意的模型后,需要将我们的成果分享给大家,分享的对象包括这个模型所涉及的各种人员,如出资方。

另外,需要将数据分析项目整个过程的文档进行归类分组与总结,确保数据分析项目的结果有可重复性。然后编制模型文档,以供相关人员使用,并为运行和维护模型提供支撑。

需要注意的是,对于不同的人员需要展示不同的信息。对于出资方,需要展示这个数据分析结果的业务效果,这个模型能带来什么,例如,使用这个模型能提高50%的销售额,让出资方确切地知道这个模型的价值。对于同行,则需要探讨技术性的东西,如这个项目遇到的挑战、所用到的一些创新性方法。

这个步骤很重要,好的展现效果有助于用户获取更多的资源,以在未来更好地开展工作。

1.2.7 部署与维护模型

模型构建完成并不意味着数据分析项目的结束,还需要将模型应用于现实的环境。在现实环境中使用模型,往往会碰到很多意想不到的问题,有些问题通过简单的修正就可以解决,有些问题可能会造成很严重的后果。这个时候需要对模型进行监控,及时地发现和解决问题,避免产生灾难性的后果。

随着现实环境的变化,模型可能不再适用,这个时候需要对模型进行更新,构造一个更适合当前环境的模型。所以,一个数据分析项目的完成往往意味着一个新项目的开始。