数据挖掘入门十三问

前言

大数据时代,数据挖掘技术也从科研实验室走向了各种商业化的应用。但是, 对于我们大部分没有专业背景的人来讲,对数据挖掘的理解可能还是一个非常模糊的概念,仅仅知道数据科学家是一个高薪职业,自己手中有数据也不知道如何去挖掘。

面对外行或初学者的各种困惑,我们搜集和整理了一些数据挖掘入门常见的问题和初学者容易误解的问题,覆盖从概念到项目流程再到业务应用的各个方面,以供大家参考。文章内容比较多,建议先收藏再慢慢看。

对于数据挖掘技术及其应用感兴趣的同学,还可以参考我们编撰的《数据挖掘》课程,零基础也可以理解并掌握数据挖掘技术。

目录

1. 数据挖掘能解决什么样的问题?

2. 数据挖掘建模需要什么样的数据?

3. 完成一个预测建模项目一般需要多长时间?

4. 制约数据挖掘业务发展的环节有哪些?

5. 数据挖掘高手与初学者的差别在哪里?

6. 为什么我基于开源包建的模型效果不好?

7. 做人工智能为什么要经常学 Python?

8. 业内的人工智能培训课有多大用?

9. 深度学习是怎么回事?有什么用?

10. 为什么业务知识会严重影响建模效果?

11. 批量自动建模有什么意义?

12. 数据挖掘模型的衰减是怎么回事?

13. 预测模型是不是准确率越高越好?

1. 数据挖掘能解决什么样的问题?

=================

数据挖掘其实是个“古老”的技术,已经有几十年历史了,近年来红火的人工智能又让这个古老技术有了更多关注。

那么,到底什么是数据挖掘呢?它又能做什么事呢?

傍晚小街路面上沁出微雨后的湿润,和煦的细风吹来,抬头看看天边的晚霞,嗯,明天又是一个好天气。走到水果摊旁,挑了个根蒂蜷缩、敲起来声音浊响的青绿西瓜,心里期待着享受这个好瓜。

由路面微湿、微风、晚霞得出明天是个好天气。根蒂蜷缩、敲声浊响、色泽青绿推断出这是个好瓜,显然,我们是根据以往的经验来对未来或未知的事物做出预测。

人可以根据经验对未来进行预测,那么机器能帮我们做这些吗?

能,这就是数据挖掘。

“经验”通常以“数据”的形式存在,数据挖掘的任务就是从历史数据(之前挑瓜的经历,注意是经历还不是经验)中挖掘出有用的“知识”,也就是所谓“模型”(现在就形成经验了),在面对新情况时(未抛开的瓜)模型就可以用来预测(是不是好瓜)。

用高中生能理解的数学语言来讲,数据挖掘建模任务的本质就是,根据一些历史已有的、从输入空间 X(如 {[色泽青绿;根蒂蜷缩;敲声浊响],[色泽乌黑;根蒂蜷缩;敲声沉闷],[色泽浅白;根蒂硬挺;敲声清脆]} )到输出空间 Y(如 {好瓜,坏瓜,坏瓜})的对应,找出一个函数 f,来描述这个对应关系,这个函数就是我们要的模型。有了模型之后再做预测就简单了,也就是拿一套新 x,用这个函数算一个 y 出来就完了。

Watermelon datasets

那么,模型又是怎么建立出来,也就是这个函数是怎么找出来的呢?

想想如何让一个人拥有判断瓜好坏的能力呢?

需要用一批瓜来练习,获取剖开前的特征(色泽、根蒂、敲声等),然后再剖开它看好坏。久而久之,这个人就能学会用剖开前瓜的特征来判断瓜的好坏了。朴素地想,用来练习的瓜越多,能够获得的经验也就越丰富,以后的判断也就会越准确。

用机器做数据挖掘是一样的道理,我们需要使用历史数据(用来练习的瓜)来建立模型,而建模过程也被称为训练或学习,这些历史数据称为训练数据集。训练好了模型后,就好象发现了数据的某种规律,就可以拿来做预测了。

也就是说,数据挖掘是用来做预测的,而要做到这种预测,需要有足够多已经有结果的历史数据为基础。

那么,这种预测技术如何在我们的生产销售过程中应用呢?

以贷款业务为例,金融机构要做风险控制,防止坏帐,就要在放贷前知道这个贷款人将来不能按时还款的风险,从而决定是否放贷以及贷款利率。

要做到这件事,我们要有一定数量的历史数据,也就是以前贷款人及贷款业务的各种信息,比如贷款人的收入水平、受教育程度、居住地区、信用历史、负债率等等可能会影响违约率的因素,还有贷款本身的金额、期限、利率等等。需要注意的是历史数据中一定要同时包含好客户和坏客户(也是在发生违约不还款的客户),并且坏客户的数量不能过少。

通常可以截取近几个月或近一年的历史数据作为训练数据,定义好目标变量 Y(如坏客户为 1,好客户为 0),然后就可以使用数据挖掘技术建立模型来寻找用户及贷款的各种信息 X 和目标 Y 之间的关系。建好的模型可以用来预测,及时发现高风险用户。

需要说明的,数据挖掘模型的预测并不能保证 100% 准确(有很多种办法来评估它的准确率),所以如果只有一例目标(比如只有一笔贷款)需要预测时,那就没有意义了。但通常,我们都需要有很多例目标需要预测,这样即使不是每一例都能预测正确,但能保证一定的准确率,这仍然是很有意义的。对于贷款业务,模型找出来的高风险客户未必都是真的,但准确率只要足够高,仍然能够有效的防范风险。

数据挖掘技术可以广泛地应用于各行各业,工业领域中可以根据历史生产数据来预测良品情况,从而改进工艺参数降低不良率;畜牧业可以使用数据挖掘技术根据测量牲畜体温来预测牲畜是否生病,从而提前防治;医院也可以使用历史医疗记录基于数据挖掘技术找出关联规律,帮助医生更好地诊断疾病。

2. 数据挖掘建模需要什么样的数据?

==================

数据挖掘通常需要结构化数据才能建模,而不是近些年来热闹的非结构化数据,预测建模仍然是结构化数据上的运算!

所谓结构化数据,是指表现为二维形式的数据,一般特点是:数据以行(也称样本)为单位,一行数据表示一个实体的信息,每一行数据的属性(也称字段或列)是相同的。结构化数据可以来自于数据库,也可以来自于文本文件或 Excel。

例如预测 titanic 幸存者数据见下图,就是一个结构化数据,数据的每一行表示一个乘客样本,每一列的属性都是相同的例如”Age”列都表示乘客的年龄,这样的数据是可以拿来建模的。

对于监督型学习来说,数据中还要必须包含目标变量,目标变量就是我们要预测的那个目标。例如在 titanic 的例子中,要预测的是乘客的生存状态(生存还是死亡)因此“Survived”就是该模型的目标变量。当然数据中还要有一定数量的特征变量,特征变量太少或者都是无关特征也无法建出好模型。

在数据量方面,首先数据量太少是不行的,数据量太少算法很难学习到数据中规律,通常即使是很简单的问题也需要几百或几千的样本量。特别需要注意的是,在一些不平衡的样本中,虽然样本总量不少但是由于阳性率太低(我们关心的现象太少,如预测故障时历史数据中几乎没有故障记录)造成阳性样本绝对数量很少,这样也是很难建出有效模型的。反之,在采样时也不能够全部都是阳性样本的数据,例如,要建模预测贷款用户违约情况,不能只采集所有违约客户的数据,正常客户的数据也要采集。

数据量太少不行,是不是越大越好呢,并不是。对于传统的数据挖掘方法来说,并不需要太大的数据量,通常几万或十几万的样本就已经够用。当数据量过大时一方面会耗费大量计算时间和计算资源,另一方面效果提升却不显著,反而有可能会增加数据噪音。因此在建模取数时要注意合理的采集样本和特征。

3. 完成一个预测建模项目一般需要多长时间?

======================

为了回答这个问题,我们先来了解一下建模的流程,通常一个完整的数据挖掘项目包含以下流程(1)业务理解、(2)数据理解、(3)数据准备、(4)数据预处理和建模、(5)模型评估、(6)模型部署应用。这个流程的操作性很强,也是业界公认标准。

业务理解的主要工作有需求调研,了解商务背景;明确业务目标和成功的标准。数据理解和业务理解一般是同时进行的,主要内容包括确定建模所需要的数据,描述数据,探索数据,检验数据质量,明确数据挖掘目标和成功标准。这两个阶段的主要任务就是明确挖掘目标和建模数据,目标和数据都明确以后就可以开始着手准备数据。

数据准备的目的是建立数据集市或者宽表,主要工作包括选择数据、清洗数据、构造数据、整合数据、格式化数据等等。如果企业的数据仓库建设比较完善,那么这个步骤的工作就非常简单,只需要做一些数据筛选,表的的关联工作即可。反之,如果数据都是一些非常原始的数据比如日志数据、流水数据,数据准备这部分就比较耗费时间和精力了,需要做很多数据汇总,特征提取的工作。

数据预处理和建模,这个环节是整个项目中含金量最高,难度最大的部分。不同的变量、数据类型、分布情况,对应的预处理的方式就不同,需要选择什么样的建模方法,参数如何调优,如何构建模型都是要考虑的问题。主要工作有:样本选取,确定训练样本、测试样本和验证样本、数据预处理、模型算法技术选型、筛选变量、模型训练、模型测试等。还需要强调两点:(1)数据预处理可能会花费大量的工作时间;(2)预处理和建模过程并非一次性执行完毕就大功告成了,需要不断的迭代优化,才能获得比较理想的结果。

模型评估,是对模型进行较为全面的评价的过程,计算模型的各种指标,比如 AUC,Gini,KS,Lift,模型稳定性等等,然后就是进行模型的业务应用测试,判断是否实现商业目标。部署应用就是把数据挖掘的成果部署到商业环境,应用于生产活动。

从数据挖掘的项目流程可以看出,建模时间和企业的数据情况、业务问题和模型复杂程度以及建模师的水平都密切关系。不过,即使数据仓库平台已经建设的很好的情况,即不再考虑数据准备的时间,仅仅关心建模本身的时间,对于较简单的目标任务,通常也需要两到三周的时间,延到几个月的建模任务也都是很常见的。

为何仅建模本身就要花费两到三周的时间呢?

一方面是预处理,预处理是一个耗费时间但却非常值得的投入。例如,5% 的顾客没有指定年龄,是整体忽略该变量,还是忽略这部分有缺失的样本,又或者是将缺失值补充完整(使用平均值填充还是中位数填充又或者更复杂的方法的填充),或者是训练一个带这个特征的模型,再训练一个不带这个特征的模型。同样是缺失值处理,当缺失率为 90% 时,是否还采用相同的处理方法呢。再例如,对于一些高基数的分类变量如何处理,数据中的噪音如何处理等等。这些都需要建模师结合自己的知识和经验反复的去调试。

另一方面,模型构建过程也会很耗时。选择什么样的算法,一种算法还多种算法,算法的的初始参数如何配置,如何去寻找最优解等等,都是需要不断调试的。正如我们所说,预处理和建模过程并非一次性执行完毕就大功告成了,而是需要不断的迭代优化,直到得到一个比较理想的结果,过程中做到一大半,推倒重来的事情也是常有。

可以说建模过程既是一个难度较高的脑力劳动也是一个累人的体力活。在这种情况下几乎不可能实现批量建模,通常一个项目就只能建立一个模型,这个模型要尽量有更广泛的应用范围。这样做其实会导致模型的适应能力下降,例如,预测房价,全国都用一个模型的效果通常不如分地区去建模适用性更好;再比如,精准营销模型,不同的产品,不同层次的客户群体,消费特点是不同的,显然针对性的建立多个模型会使整个营销过程更加精准。

不过令人欣慰的是,随着 AI 技术的发展,有一些智能化的工具是可以帮助我们提高工作效率的。自动建模技术就是一种能够自动实现数据探索、预处理、模型选择、调参、评估一系列流程的技术。借助自动建模工具,数据分析人员只需要完成业务理解,数据准备过程,剩下的需要反复迭代进行的建模过程尽可交给工具来完成,无需再手动进行。采用自动建模技术,能够将几周的建模时间缩短为几小时甚至几分钟,几个月的建模时间不复存在,可以大幅度的提高工作效率,减轻工作量。而且,建模过程变得简单且很快以后,批量建模就不再是问题,一天就可以建多个模型,每个模型可以只适应一个局部或者一个小问题,批量的模型组成一个模型体系就可以有更强的适应能力。此外,自动建模技术对人员要求也降低不少,不再需要受过专业训练的数据科学家,普通的程序员都可以借助工具来完成数据挖掘工作。

4. 制约数据挖掘业务发展的环节有哪些?

====================

各行各业都对数据挖掘表现出极大兴趣,也纷纷展开了应用尝试,但成功案例并不多,这是为什么呢?

1. 数据质量差

玩数据就像挖金矿。如果含金量高,那么挖掘难度就小,出金率就高,如果含金量低,那么就会难度大效果差。数据质量问题通常表现在三个方面。

(1)数据量不足

要教一个牙牙学语的小朋友什么是苹果,只需要指着苹果说“苹果”(可能需要重复这个过程几次)就行了,然后孩子就能识别各种颜色和形状的苹果了,简直是天才!

然而,机器还没达到这一步,大部分机器学习算法需要大量数据才能正常工作。即使是最简单的问题,很可能也需要成千上万个示例。因此机器学习的样本量不能过少。尤其在一些不平衡的样本中,虽然样本总量不少但是由于阳性率太低(我们关心的现象太少,如预测故障时历史数据中几乎没有故障记录)很低,这样也是很难建出有效模型。

(2)数据不具代表性

训练数据要非常有代表性。举个例子,假设我们想知道金钱是否让人感到快乐,为了分析这个问题我们可以从 OECD 网站 (https://goo.gl/0Eht9W) 下载“幸福指数”的数据,再从 IMF 网站 (http://goo.gl/j1MSKe) 找到人均 GDP 的统计数据,将数据并入表格,按照人均 GDP 排名,会得到如表显示的摘要。

随机绘制几个国家的数据,如下左图所示。

看出趋势了么,虽然数据中包含噪声,但仍然可以看出随着 GDP 增加,生活满意度或多或少呈线性上升的趋势。计算两者的线性相关系数能达 0.9 以上,似乎我们可以得出金钱能够让人感到快乐的结论。

但是,我们拿来训练的数据集并不具备完全的代表性,有些国家的数据样本缺失。将缺失国家 / 地区信息补全之后,我们又得到了右图。

缺失国家信息不仅显著地改变了模型,也更清楚地说明,这种线性模型可能永远不会那么准确(相关系数仅为 0.63)。用不具代表性的数据训练出来的模型不可能做出准确的预估,尤其是针对那些特别贫穷或富裕的国家。因此针对分析目标选择具有代表性的训练集非常重要的。

(3)错误缺失的数据

我们常说:垃圾入、垃圾出。如果原始数据满是错误、异常值和噪声,算法将很难检测到数据规律,更不太可能有良好的表现。所以花时间来清理训练数据是非常值得的投入。事实上,大多数数据科学家都会花费相当多的时间来做这项工作。例如:如果某些实例明显是异常情况,要么直接将其丢弃,要么尝试手动修复错误,都会大有帮助。再例如,如果某些实例缺少部分特征(比如,5% 的顾客没有指定年龄),你必须决定是整体的忽略这些特征,还是忽略这部分有缺失的实例,又或者是将缺失值补充完整(比如,填写年龄值得中位数),或者是训练一个带这个特征的模型,再训练一个不带这个特征的模型,等等。

这个过程是相当花费时间和精力的,但幸运的是,近年来出现了一种自动建模技术,这些产品将统计学家处理数据的丰富经验融入到了产品工具中,把这些耗时耗力的工作可交给工具自动处理。无论是对数据科学家还是数据新手来说都是一个提高工作效率的神器。

2. 专业人才少

数据挖掘项目往往由技术部门主导实施,但是由于技术有相当的工作量和难度,普通技术人员难以完成,必须有专业的数据科学家才能实现,使得项目会在某些环节上断裂。

从数据挖掘本身来看,算法设计处于核心地位,而统计学为数据挖掘提供了指导思想,同时数据挖掘又需要数据库等计算的支撑,所以说数学、统计学、计算机这几个学科在数据挖掘中都起到了比较重要的作用。一名合格的数据挖掘工程师必须要同时具备这几个学科的知识和经验。

从工具方面来讲,多数人使用 SAS 或 R/Python 等工具和编程语言,但即使有 SAS 这样的超强工具,建模工作还是要通过人工方式进行建模,而且 SAS 的应用门槛很高,同样需要很深厚的统计学背景才能用好,而这种数据科学家通常很少并且很贵,所以 SAS 很难普及用好。用 R/Python 编程的方式来实现建模挖掘分析,通常是由程序员来完成的,而纯粹的程序人员(即使编程能力很强)缺乏统计学背景知识,只会比较盲目的多次尝试,也没有数据预处理的经验,效果就会很差。

在用人成本方面,数据挖掘人才更是高居不下,通常只有大型企业的总公司才拥有少数技术团队。目前主流的人工建模方式,模型质量很大程度上取决于建模师的水平,同样的数据不同水平的人建出的模型完全不同,这样一方面模型质量无法保证,另一方面人才的流动会对数据挖掘业务产生重大影响,即使是之前开发好的模型,新来的员工对其更新,也要将整个建模过程重来一遍。

所幸的是,近年来自动建模技术的快速发展使我们已经能够帮助我们解决上述矛盾。自动建模技术会大幅度降低数据挖掘人员的门槛,一个普通的技术或业务人员经过简单的培训即可掌握,这样企业就可以快速的培养一批建模师,增加人才储备,降低建模成本。同时自动建模技术可以建立起一个模型工厂,由工厂自动化生产出来的模型质量稳定有保障,人才的流动也不会业务产生太大影响。 下表我们总结了人工建模和自动建模技术对建模师资格要求和模型特征。如表可见,相比于手工建模,自动建模技术对建模人员的要求非常低,输出模型的质量也稳定有保证。

3. 建模效率低

目前市场业界主要采用 python 或 SAS 建模。数据探索,预处理、建模调参和模型评估全由建模师凭经验手动操作,建一个模型需要几周甚至几个月的时间,这样即使有专业人员建模效率也很低,难以大规模推广应用。

而在需求侧,业务场景是多种多样的,模型的需求量很大。就是一个业务场景也往往不是一个模型就能完全解决的,而是需要一系列的模型。例如在精准营销场景中,使用模型可以帮助我们快速的定位潜在目标客户,提高营销成功率。以目前手工建模的生产效率通常只能是简单的建一个全国所有客户的模型,但是各地区的营销政策和消费特点可能是不同,即使同一地区不同客户群体的关注点也是不一样的,并且客户购买的可能不止一款产品,这样一个模型用所有的结果就是放到哪里都不太适用。

这时候,使用自动建模技术则可以较好地解决这一问题,将建模时间由几周缩短到几个小时,在短时间内建立很多模型,这样就可以去建立一系列的模型,整体预测的效果会更好。

在一些业务场景中,业务随市场变化很快,对模型更新的要求也高,而人工建模的方式模型更新和重新建模差不多,需要重新手动数据预处理,建模调参等,如果赶上人员变动,模型更新更是耗时耗力。如此低下的生产效率是满足不了市场需求的。采用自动建模技术更新模型就很方便了,只需设定一个更新触发条件(比如定时或者模型指标下降到某一值)便可自动进行,不需要人工参与。

从经济角度分析,手工建模的方式生产效率低下,导致模型成本非常高,以下表中三家美国公司数据分析团队的模型成本为例,我们很保守的估计一个数据挖掘人员的年薪是 10 万美金(实际上远不止这么低),单位模型成本至少要在 5 万美金以上。而采用自动建模技术以后,生产效率至少会比原来翻几倍,模型成本也会大幅度下降,模型不再昂贵,可以广泛应用。

5. 数据挖掘高手与初学者的差别在哪里?

====================

我们知道,数据挖掘的基本流程包括:(1)业务理解、(2)数据理解、(3)数据准备、(4)数据预处理和建模、(5)模型评估、(6)模型部署应用。其中第 4 步,数据预处理和建模是整个流程的核心部分,其他的步骤都是围绕的该步骤进行的。建模高手和初学者的差距也往往在这里,建出一个模型很容易,但高效率的建出一个好的模型却不容易。

机器学习发展到今天已经有众多优秀前辈给我们贡献了各种各种现成的算法包,例如在 Scikit-learn 里就提供括回归 (Regression)、降维 (Dimensionality Reduction)、分类 (Classfication)、聚类 (Clustering) 等方法的算法库,使用者只需要轻松的调包操作就能跑出一个模型。但是要建出高质量的模型,这是远远不够的。数据挖掘算法和数据库运算中用到的排序、分组算法有很大不同,后者是确定的算法,同样的数据进来就会出同样的结果,也没多少参数可调。而数据挖掘算法有许多经验因素,同样的数据进去,设置不同的参数来训练模型,结果很可能是不一样,甚至可能差别很大。以常用的 GBDT 算法为例,需要的参数有十几个,如下图所示,这些参数表示什么含义,如何去设置,如何能快速找到最佳值,当模型效果不好时如何去调参, 这都需要建模师对算法原理和应用场景有深刻的理解才能顺利进行。况且算法也不是只有这一种,在建模时用哪种算法,是用一种还是多种组合用,都是建模师要需要考虑的。

比这更复杂的是,在建模之前还要做大量的预处理工作,例如对于非标准正态分布的变量,应该如何处理;对于数据中的噪音应该如何降噪,对于高基数变量如何处理等等。因此,建模高手和初学者的区别就在于建模高手往往具备深厚的统计学理论和丰富的建模调参经验,对数据分布,数据预处理,算法运行原理等有着深刻的理解,而初学者往往只会机械的调包计算,不懂得背后的理论知识,不清楚如何数据探索和分析,不懂得如何处理数据使数据更适合拿来建模,往往只是照着模样做,却不理解为何要这样做。就好像没有学过建筑学的人拿着一堆原材料去盖大楼,盖出的楼能不能住人、会不会倒,经常要看运气了。

不过,作为初学者也不必担心,近年来兴起的自动建模技术就可以有效的帮助我们。自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型。即使是没有统计学背景,不了解算法的初学者,或者普通的 IT 程序员都可以通过自动建模技术来做数据挖掘业务。

6. 为什么我基于开源包建的模型效果不好?

=====================

机器学习发展到今天已经有众多优秀前辈给我们贡献了各种各种现成的开源包

以最流行的 Scikit-learn 为例,提供了包括回归 (Regression)、降维 (Dimensionality Reduction)、分类 (Classfication)、聚类 (Clustering) 等方法的开源包,使用者可以灵活的实现各种建模操作。但是也有人发现了,同样的开源包不同的人建出的模型效果是不一样的,甚至大相径庭。为什么数据专家就能建出高质量模型,而我基于开源包建的模型效果总是不尽人意呢?主要原因有以下三点:

首先是数据本身质量差。数据挖掘就像挖金矿,含金量高,那么挖掘难度就小,出金率就高,反之含金量低,那么就会难度大效果差。数据问题大概可以从 2 个方面来考虑,首先要检查数据量是否充足,大部分的机器学习算法都需要一定量的数据才能正常工作,太少的数据量会导致建模失败或模型效果不好,尤其要注意不平衡样本中阳性样本的数量;其次要分析参与建模的数据样本和特征分别是否具有代表性,例如要通过民调来预测美国总统大选,那么民调的样本要具有全面的代表性,不能只抽查偏向某一方的人群或地区,除了样本要有代表性数据特征也要有充足的相关性才容易建出好的模型。

但是,我和数据专家使用的是同样数据,建出的模型依然不好,又是怎么回事?

第二个原因是预处理没做好。原始数据往往是不能拿来直接建模的,还需要做预处理,预处理做的是否合适会对模型结果产生很大影响。但同时预处理也是一件十分头大的工作,因为它没有固定的方法可言,数据特点和分布不同预处理的方法也就不同,需要不断地去尝试,这也正是为什么我们使用开源包复制了别人的流程,也依然效果不好的。以简单的缺失值处理为例,比如在年龄的变量中,5% 的顾客没有指定年龄,那么你必须决定是整体的忽略这些特征,还是忽略这部分有缺失的实例,又或者是将缺失值补充完整(比如,填写年龄值的中位数还是平均数或是更复杂的方式填充),或者是训练一个带这个特征的模型,再训练一个不带这个特征的模型,等等,以及,当缺失率达到 90% 时是否还能采用相同的处理方法。再例如原始数据可能会存在错误、异常值和噪声,算法也是很难检测到数据规律的,还有高基数变量,非正态分布,时间特征等等都是需要处理的。

花时间来预处理数据是非常值得的投入,事实上,大多数数据科学家也都会花费相当多的时间来做这项工作。而要做好预处理是需要深厚的统计学基础和丰富的数据处理经验,并且经过多次尝试才能做好的。机械的使用开源包复制别人的预处理流程甚至几乎不做什么预处理直接就开始建模,模型效果当然就只能看运气了。

除了预处理外,还有算法参数选择不当的问题。数据挖掘算法和数据库运算中用到的排序、分组算法有很大不同,后者是确定的算法,同样的数据进来就会出同样的结果,也没多少参数可调。而数据挖掘算法有许多经验因素,同样的数据进去,设置不同的参数来训练模型,结果很可能是不一样,甚至可能差别很大。以常用的 GBDT 算法为例,需要的参数有十几个,如下图所示,这些参数表示什么含义,如何去设置,如何能快速找到最佳值,当模型效果不好时如何去调参, 这都需要建模师对算法原理和应用场景有深刻的理解才能顺利进行。况且算法也不是只有这一种,在建模时用哪种算法,是用一种还是多种组合用,都是建模师要需要考虑的。

开源包的特点是灵活,几乎可以实现任何操作,但缺点是模型效果取决于使用者的水平,虽然都能建出模型,但是如果没有背后的统计学、微积分、概率论等数学理论支持,不懂得如何合理的处理数据,选模型,选参数,做评估等等,也很难建出好模型。打个形象点的比喻,开源包里的算法和函数就好像是一堆模块化的建筑材料,而要盖一座大楼仅仅有这些原料是远远不够的,还要懂得建筑结构,材料,机械,流体力学,暖通工程等理论才能建出适合住户需求且安全的大楼;否则只能叫搭房子,至于搭出来的房子能不能住人、会不会倒,经常是看运气。

那么,对于我们普通的初学者或者程序员是不是就很难做数据挖掘了?也不是,近年来兴起的自动建模技术就可以帮到我们。自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型。因此无论是业务人员还是普通的 IT 程序员都可以通过自动建模技术来做数据挖掘业务。

7. 做人工智能为什么要经常学 Python?

======================

当前,提到人工智能、数据科学几乎就一定会提到 Python,很多人工智能相关的课程实质上也都在大篇幅的讲 Python,有的初学者甚至认为人工智能和 Python 是划等号的,随着人工智能概念的火热几乎掀起了一股全民学 Python 的热潮。那么,作为一种计算机程序语言,Python 到底有何魅力,如此受到人工智能的喜爱。总结下来,主要就是两点:

(1)丰富的类库支持

Python 从面世以来逐渐发展出了一个大型、活跃的科学计算及数据分析社区,成为数据科学、机器学习和学术 / 工业界通用软件开发等领域的重要语言之一。尤其是 Python 对各种类库的支持更使得它成为数据分析任务的一个流行选择。例如,Numpy(Numerical Python)是 Python 数值计算的基石,它提供多种数据结构、算法以及大部分涉及数值计算所需的接口。Pandas 则提供了高级数据结构和函数,它将表格和关系型数据库(例如 SQL)的灵活数据操作能力与 Numpy 的数组计算相结合,提供丰富的基础函数,能有效简化清洗和预处理数据的工作。Matplotlib 是目前最流行的用于制图和二维数据可视化的 Python 库,可以帮助数据分析者直观的观察数据分布情况。Scikit-learn 更是一个专门用于机器学习的模块,诞生于 2010 年,目前已成为编程者首选的机器学习工具包。SKlearn 拥有全世界 1500 位代码贡献者,包含分类、回归、聚类、降维、模型选择等子模块。丰富的类库支持使得 Python 成为高效的数据科学编程语言,数据玩家可以像搭积木一样,灵活的操作数据,搭建自己的模型。

(2)简单易用

Python 是一种代表极简主义的编程语言,阅读一段排版优美的 Python 代码,就像在阅读一个英文段落,非常贴近人类语言。为什么说简单就是杀手锏?一旦简单了,一件事情就会变得很纯粹,我们在开发 Python 程序时,可以专注于解决问题本身,而不是去搞明白语言本身。一句话就能理解:“Python 是世界上最不需要写注释的语言“。

另外,开源免费也是 Python 流行的原因之一,用户使用 Python 进行开发或者发布自己的程序,不需要支付任何费用,也不用担心版权问题,即使作为商业用途,Python 也是免费的。

Python 语言简单易学,支持库丰富强大,这两大支柱基本就奠定了 Python 在人工智能的江湖地位。

但是,Python 并不等于 AI,换句话说并不是掌握了 Python 就能够成为一个 AI 专家。虽然 Python 很强大,但它只是一个计算机程序语言,而 AI 的核心是什么,简单来说就是算法,各种各样的算法,这些算法的背后蕴含的则是统计学、微积分、概率论等数学理论。没有这些算法,AI 也无从谈起。

数据玩家们为了实现这些算法,一定要编出程序,这些算法都很复杂,如果每个东西都从头写那会累死人。而 Python 中有现成的,所以大家就用 Python 了。而只要有这些类库支持,用其它语言,比如 R,SAS,也都可以方便地建模;反过来,只懂得 Python 的程序员虽然也能够建出模型,但是如果没有背后的数学理论支持,不懂得如何合理的处理数据,选模型,选参数,做评估等等,也很难建出好模型。

打个形象点的比喻,Python 里的函数就好像是一堆模块化的建筑材料,而要盖一座大楼仅仅有这些原料是远远不够的,还要懂得建筑结构,材料,机械,流体力学,暖通工程等理论才能建出适合住户需求且安全的大楼;否则只能叫搭房子,至于搭出来的房子能不能住人、会不会倒,经常是看运气。因此 AI 的核心是数学,而 Python 是实现这些核心的强大工具。

那么,是不是没有统计学和算法基础的普通人就无法使用 AI 技术来解决问题了?也不是,近年来兴起的自动建模技术就可以解决该问题。自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型,连 Python 也不用学了。

8. 业内的人工智能培训课有多大用?

==================

随着人工智能技术的火热,各种 AI 培训也应运而生,翻阅各种社交网站和 APP,几乎每天都能刷到 Python、人工智能相关的文章,点进去很大一部分都是培训机构给自家 AI 课程打的广告。那么业内人工智能的培训课程靠谱吗,学了之后又有多大作用?

目前市场上的 AI 课程众多,质量也是参差不齐,总体来讲大概有 3 种类型。

一种是打着培训人工智能的幌子,实际上只教 Python 的课程,甚至有些机构竟然混淆视听,宣传掌握了 Python 就掌握了人工智能。这种类型的课程学了以后,虽然也能建出模型,但也只是形式上会建模,模型效果就无法保证了。以建立一个数据挖掘模型为例,要想建出一个好的模型必须要具备深厚的统计学理论和丰富的建模调参经验,对数据分布,数据预处理,算法运行原理等有着深刻的理解。只学了 Python 就来建模,通常只是知其然而不知其所以然,用处并不大。AI 的核心是什么,简单来说就是算法,各种各样的算法,这些算法的背后蕴含的则是统计学、微积分、概率论等数学理论。没有这些算法,AI 也无从谈起。而 Python 只不过是实现这些算法的一些工具,因为其简单易用,又有很多现成的类库可以用所以大家都用它。而只要有这些类库支持,用其它语言,比如 R,SAS,也都可以方便地建模。

第二种是只讲概念,不讲实操的课程。这种课程通常在大篇幅将人工智能领域的各种高大上的概念,没有实际操作的环节,十分不接地气。学员学了以后通常也只会夸夸其谈,到了实际工作中并不会建模。不过这种类型的课程现在市面上已经很少了。

还有一种是教算法的课程。这种类型的课程可以算是真正的 AI 课程,但难度也比较大。机器学习是一门多领域交叉学科,抛开编程实现的部分不谈,还涉及概率论,统计学,微积分等多门学科,深度学习是机器学习的一个分支,单独拿出来讲又是另一门学科。这里的每一个学科想要完成从入门到吃透的学习都不是随便一两个月能办到的。虽然很多同学看似学了算法课程,但真正学会的不多,大部分其实都毕不了业的。要真正学懂这些算法,除了本身要具备一定的数学基础外,还要花费持久的时间和精力。以一个最简单的逻辑回归算法为例,仅它的推倒过程,可能就需仔细的要看上四五遍视频,才算是能够基本理解,而要灵活应用这还远远不够。AI 本身就是一个门槛比较的高的行业,学习的路上没有捷径,要想成为一名算法工程师不是那么容易的。

看来,这些课程要么学不会,要么学会了也没啥用。那么,对于很多基础较差而又需要使用数据挖掘技术来解决问题的人来说该怎么办呢?是不是就没办法了?

也不是。其实,近年来已经兴起了自动建模技术,就是帮助零基础或初学者建模用的。自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型。自动建模技术对建模师的要求很低,只要了解一些最基本的概念,特别是理解模型评估方法就够了,对于复杂的预处理方法,算法原理参数等完全不用学,工具里的专家会帮我们自动完成。无论是业务人员还是普通的 IT 程序员都可以通过自动建模技术来做数据挖掘业务。

9. 深度学习是怎么回事?有什么用?

==================

如今,提到人工智能,几乎无人不谈深度学习,似乎不用深度学习就不好意思谈人工智能。今天我们就用几分钟的时间来讲一下深度学习到底是什么,有什么用。

首先深度学习并不等于人工智能,它只是一种算法,和普通的机器学习算法一样,是解决问题的一种方法。真要区分起来,人工智能、机器学习和深度学习,三者大概是下图这种关系。人工智能是一个很大的概念,机器学习是其中的一个子集,而深度学习又是机器学习的一个子集。

其次,深度学习也不是什么新技术,深度学习的概念源于人工神经网络的研究,早在上世纪 40 年代,通用计算机问世之前,科学家就提出了人工神经网络的概念。而那个时候的计算机刚刚开始发展,速度非常慢,最简单的网络也得数天才能训练完毕,效率极其低下,因此在接下来的十几年都没有被大量使用。近些年,随着算力的提升,GPU、TPU 的应用,神经网络得到了重大发展。伴随着 AlphaGo 的胜利,深度学习也一战成名。

其实,同机器学习方法一样,深度学习方法也有监督学习与无监督学习之分。例如,卷积神经网络(Convolutional Neural Networks,简称 CNN)就是一种深度的监督学习下的机器学习模型,而深度置信网络(Deep Belief Nets,简称 DBN)就是一种无监督学习下的机器学习模型。深度学习的”深度“是指从”输入层“到”输出层“所经历层次的数目,即”隐藏层“的层数,层数越多,深度也越深。

所以越是复杂的选择问题,越需要深度的层次多。除了层数多外,每层”神经元“-小圆圈的数目也要多。例如,AlphaGo 的策略网络是 13 层,每一层的神经元数量为 192 个。深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。

深度学习提出了一种让计算机自动学习出模式特征的方法,并将特征学习融入到了建立模型的过程中,从而减少了人为设计特征造成的不完备性。但是,在有限数据量的应用场景下,深度学习算法不能够对数据的规律进行无偏差的估计。为了达到很好的精度,需要海量数据的支撑。另外,深度学习中图模型的复杂化导致算法的时间复杂度急剧提升,为了保证算法的实时性,需要更高的并行编程技巧和更多更好的硬件支持。

在应用方面,虽然深度学习被吵得火热,但是也并不是无所不能。目前深度学习主要应用在图像识别,语音识别等领域。而在很多商业场景,例如金融数据,它的效果并不太好,很容易出现过拟合,这在机器学习中是非常致命的问题,即在训练数据上表现的很好,但是泛化能力却很差,在未见到的数据上,表现的很差。深度学习模型很容易受到数据中难以察觉的扰动,这些扰动会欺骗模型做出错误的预测或分类,而在很多场景的数据中是存在着大量噪音的。另外深度学习的过程是一个黑箱子,无法解释其做出的决策,这也导致在某些场景难以应用,比如一个银行审批贷款的深度学习系统,在拒绝了客户的贷款申请之后,而无法给出合理的解释,那么被自动拒绝了贷款的用户自然无法接受。深度学习模型需要海量的数据支撑,算法也比较复杂,模型的训练速度很慢,通常要几天甚至数周,同时还会耗费大量的计算资源,这也限制了它在各行业的广泛应用。

因此,深度学习只是机器学习的一种,和其它算法一样,有自己的长处也有不足。在实际应用中根据业务场景和问题选择合适的算法才能解决问题的有效方法,而不是看谁用了深度学习就去景仰。在一些自动建模产品中,一般也会集成深度学习算法,用户只要把数据丢进去,建模工具就会自动预处理数据,选择最优算法建好模型,使用起来非常简单方便。

10. 为什么业务知识会严重影响建模效果?

=====================

我们知道一个完整的数据挖掘项目通常包含以下流程(1)业务理解、(2)数据理解、(3)数据准备、(4)数据预处理和建模、(5)模型评估、(6)模型部署应用。而要完成一个数据挖掘任务,必须要具备两方面的技能,技术能力和业务知识。技术能力主要包括数据统计分析能力,算法能力,计算机能力等,业务知识体现的则是对业务的熟悉程度。这两大能力都很重要缺一不可,但是业务知识的重要性却是经常容易被忽视的。今天我们就来具体聊一下,这两大能力是如何贯穿于整个流程并影响建模效果。

拿到一个数据挖掘项目,首先要进行的就是业务理解和数据理解,了解商务背景,明确挖掘目标和建模数据。建模的目的是为了解决业务问题,业务目标是所有数据解决方案的源头,它定义了数据挖掘的主题。只有正确理解了业务才能够明确挖掘的正确方向。例如,在信贷风险预测中,需要预测出高风险的客户群体,那么如何定义历史数据中的高风险客户就很重要,通常我们会认为有违约行为的客户是高风险客户,但是进一步分析之后就会发现有一些客户虽然有违约行为,但只是偶尔一两次的逾期几天而已,通过业务常识可以判断这些客户可能只是忘记还款而违约的,并不是高风险客户。再例如做产品的精准营销模型时,有没有必要通过细分客户群体来建模,又或是区分地域差别来建模。这些都需要充分了解业务才能做出准确的判断。还有,确定建模数据范围,也需要有业务知识的支撑才能进行,否则就是大海捞针,效率低下。因此,在这个环节,业务知识能力占主导地位,技术能力会查看数据就足够了。在建模过程中,业务思路上的优化比建模技术思路上的优化更重要,而建模技术思路上的优化又比单纯的建模技巧的优化更重要。

建模目标和数据范围确定好以后,就进入到第二个阶段准备数据。数据准备的目的是建立数据集市或者宽表,主要工作包括选择数据、清洗数据、构造数据、整合数据、格式化数据等。这个环节同样需要用到业务知识,例如建模的数据通常会来自于多个表格或数据源,那么就需要了解各个表格之间的业务逻辑,才能将数据整合到一起,例如 A 表是订单数据,B 表是产品属性数据,C 表是客户信息数据,要整合 3 张表首先要缕清楚他们之间的逻辑关系,如果完全不懂业务是很难缕清楚或者很容易出错的。在数据准备过程中,通常还需要做很多数据汇总,特征提取的工作,例如在原始的订单数据中可能会出现同一用户多个账号,同一账号多个订单,同一订单又包含多个产品的情况,这是也需要对业务有一定了解才能清楚其中的关系。在技术能力方面,需要会一些 ETL 的操作,这件事从 0 开始做并不容易,但大多数情况下都有 IT 部门建设好的数据仓库,所以经常也不需要做。

在数据预处理和建模环节,对技术能力的要求就比较高了,需要涉及到统计学分析,算法能力和调参能力等内容。也正是这部分工作难度比较大,专业人才少,实现困难,才造成很多人误以为数据挖掘是一项纯技术的工作,而忽略了业务知识的重要性。不过令人欣慰的是,这部分技术性的工作可以借助 AI 来实现,例如,当前兴起的自动建模技术就可以自主的完成数据预处理和建模工作。自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型。即使是没有统计学背景,不了解算法的初学者,或者普通的 IT 程序员都可以通过自动建模技术来建出高质量模型。

模型建好后,能否合理评估模型也很重要,很多时候并不是建不出好的模型,而是不知道什么才是好的模型。在这个环节,技术能力需要了解各种模型指标的含义,例如,AUC, ROC, Gini,Lift,Mse……, 业务知识能力则需要知道如何根据业务目标来选择合适的评价指标。例如某企业希望销售 50 件产品,建立了两个模型来选择待推销客户,混淆矩阵如下,应该选择哪个模型更合适呢?

只考虑准确率,似乎应当选择 A 模型,但这时候我们需要对 75(=50/0.667,预测购买者中有 66.7% 的实际会购买,即精确率)个客户推销才可能卖出 50 件商品;而选择模型 B,则只要对 60(=50/0.833)个客户推销就可能卖出 50 件商品了,推销成本反而降低了。在这里业务目标是销售 50 个产品,因此要基于该目标去选择合适的评价指标,而不是随便指定。

综上,技术能力和业务知识能力是实现数据挖掘任务的必要条件,两者都具备才能建出好的模型。其中对技术能力要求较高的预处理和建模过程,可以借助自动建模技术来实现,但是业务知识的运用则是 AI 难以替代的。

11. 批量自动建模有什么意义?

================

目前,由于数据挖掘技术的门槛较高,实现起来复杂度较大,因此一般一个数据挖掘项目通常就是建立一个模型,这个模型要尽量有更广泛的应用范围。这样做其实会导致模型的适应能力下降,而多个模型适用效果就远远好于一个模型。

在需求侧,业务场景是多种多样的,模型的需求量很大。就是一个业务场景也往往不是一个模型就能完全解决的,而是需要一系列的模型。例如在精准营销场景中,使用模型可以帮助我们快速的定位潜在目标客户,提高营销成功率。通常的做法是简单的建一个全国所有客户的模型,但是各地区的营销政策和消费特点可能不同,即使同一地区,不同客户群体的关注点也是不一样的,这样一个模型用所有的结果就是放到哪里都不太适用。而如果能分地区、分客群的建立多个模型,适用性就会提高很多,况且一般需要营销的产品也不是只有一种,可能是几十种甚至更多,这样需要的模型量就更多了。再例如在金融信贷业务中,现金流的管理至关重要。为了准确预测现金流,可以拆分为收入端和支出端分别建模,在收入端和支出端还可以细分,比如按产品划分或者其他方式划分等,综合下来也需要十几、几十个模型才能实现对现金流的精准预测。因此在需求侧,往往需要批量的模型才能达到更好的预测效果

而在供给侧,目前主流的建模方式是手工建模(使用 SAS 等工具或 Python 开源包)。每一个模型都要人工数据探索,数据预处理,建模调参,耗时耗力,一个模型就至少需要几周甚至几个月的时间。同时建模师的成本也是比较高的,平均下来单个模型也是高居不下。以下表中三家美国公司数据分析团队的模型成本为例,我们很保守的估计一个数据挖掘人员的年薪是 10 万美金(实际上远不止这么低),单位模型成本至少要在 5 万美金以上。无论是从时间因素还是经济因素上看,手工建模是无法实现批量建模的。也正因如此,现在数据挖掘项目一般都是只建一个模型,模型落地效果也常常不尽人意。

如果有了自动建模能力,那就完全不同了。它可以极大程度的提高建模效率,减少人工的工作量。自动建模能够自动实现数据探索、预处理、模型选择、调参、评估一系列流程的技术。借助自动建模工具,数据分析人员只需要完成业务理解,数据准备过程,剩下的需要反复迭代进行的建模过程尽可交给工具来完成,无需再手动进行。采用自动建模技术,能够将几周的建模时间缩短为几小时甚至几分钟。建模过程变得简单且很快以后,批量建模就不再是问题,一天就可以建多个模型,每个模型可以只适应一个局部或者一个小问题,批量的模型组成一个模型体系就可以有更强的适应能力。此外,自动建模技术对人员要求也降低不少,不再需要受过专业训练的数据科学家,普通的初学者或程序员都可以借助工具来完成数据挖掘工作。批量自动建模,只需要一个操作人员就可以同时进行。采用批量自动建模,模型成本也会大幅度下降,模型不再昂贵,可以广泛应用。

12. 数据挖掘模型的衰减是怎么回事?

===================

数据挖掘模型建好后,我们通常会关注建模时的准确率查全率等指标,但是常常会忽略模型另一个重要指标:模型的衰减程度,也就是模型在实际应用中预测能力的变化(一般都会越用越差)。

为什么会发生模型衰减呢?我们知道数据挖掘的本质是发现过去事物发生的历史规律然后对未来进行预测,因此模型能够准确预测的前提就是,要预测的未来必须是历史规律的延续。但是在几乎所有的商业场景中,市场是在不断变化的,数据也在不断变化的,也就是说历史规律也是在不断的变化。而用来训练模型的数据集通常是一个静态数据集,只能描述某一段历史时期的规律模式,随着市场的变化,训练数据中的规律模式会逐渐不再准确,这必然导致模型在使用一段时间后会出现预测能力下降,模型结果不可靠。例如,房屋价格的预测模型,使用从 2010 年到 2020 年的数据训练出的模型,可能会能够非常准确的预测 2021 年房屋价格,但是在预测 2050 年的房屋价格时效果就会非常差了,因为房地产市场在未来几十年会不断的在发生变化。

那么,模型衰减程度如何来考察呢,简单来讲可以看模型在训练数据和测试数据上的指标之差,它能够反映模型指标在预测数据(即未知数据)上的下降程度。如下表所示,模型 A 和模型 B 是在同一份数据上建立的两个模型,表中的数值是两个模型分别在训练数据和测试数据的 AUC 指标(AUC 是一种常用的模型评估指标,取值范围 0-1,越大越好)。如果仅从评估指标值的大小来判断显然使用模型 A 效果比较好,但是进一步分析模型在训练数据和测试数据上的指标变化,则发现模型 A 衰减比较快,存在一定程度的过拟合;反而模型 B 的 AUC 虽然低一些,但是衰减很小,在未知数据上的泛化能力比较好,模型比较稳定。因此应用的角度分析,模型 B 对未来数据的预测能力要好于模型 A。

既然模型是有生命周期的,那么想一劳永逸的用一个模型打遍市场就是不可能的。预测模型在生产环境中部署一段期间后,预测准确度会随着时间而下降。当性能下降到某一阈值时,就应该淘汰旧模型,重新建立新的模型。但是对于数据挖掘模型来说,重新建模就意味着要重新去分析数据的分布特点,重新预处理,重新选择算法和调参,几乎和初次建模的工作量差不多。如果更新模型和初次建模的不是同一个人,那就更加麻烦。如果有自动建模工具,模型的更新就非常方便了,只需要设定一个触发条件(比如一个月更新一次或 AUC 下降到某个值时更新),软件就会自动的建好新的模型,完全无需人工参与。

自动建模技术是将统计学家和数学家的数据处理经验和理论融入到软件中,使得软件能够智能的去完成数据预处理,建模型,选参数,做评估等一系列的工作。对于使用者来讲只需要将数据丢进自动建模工具,并且配置好目标,工具就能够自动建出优质模型。因此无论是业务人员还是普通的 IT 程序员都可以通过自动建模技术来做数据挖掘业务。

13. 预测模型是不是准确率越高越好?

===================

对于一个数据挖掘项目而言,我们可以选择的模型众多,比如我们可以选择:线性回归、Logistic 回归、决策树、集成算法等,同样对于一个模型而言,也有很多参数和图形来评估模型好坏。数据挖掘的目的不能是简单地构建一个预测模型,而是创建和选择一个对样本以外数据也能做到高精度的模型。因此,在计算预测值之前,检查模型的准确性至关重要。

模型评估的指标有很多,比如仅分类模型的评估指标就有准确率,精确率,查全率,提升度等等。那么,为什么要搞这么多指标,有一个准确率不就够了吗?

我们从一个夸张点的例子来入手讨论,机场识别恐怖分子,在 100 万人里有 5 个恐怖分子,因为恐怖分子是极少数,如果使用准确率来评估模型的话,那只要把所有人都识别成正常人,其准确率可以达到 99.9995%,但显然这种模型没什么意义,这时就需要建立一个查全率高的模型,比如两个模型的混淆矩阵如下:

只考虑准确率,会选择 A 模型,但它根本无法识别恐怖分子。而模型 B,虽然准确率低,但可以把全部恐怖分子都识别出来,尽管可能冤枉几个好人,但总比被恐怖分子钻空子好的多。在这种正负样本不平衡的场景中,少数样本通常是我们所关注的,仅考虑准确率并没有实际意义。类似的场景在业务中还有很多,比如网贷违约率,相对好用户,我们更关心坏用户。查全率越高,代表实际坏用户中被预测出来的概率越高。还有医药行业中癌症的诊断,保险行业中的理赔风险,制造业中的不良产品判断等等

再来看一个精确率应用的例子,某企业希望销售 50 件产品,该企业建立了两个模型来选择待推销客户,混淆矩阵如下图,应该选择哪个模型?

只考虑准确率,似乎应当选择 A 模型,但这时候我们需要对 75(=50/0.667,预测购买者中有 66.7% 的实际会购买,即精确率)个客户推销才可能卖出 50 件商品;而选择模型 B,则只要对 60(=50/0.833)个客户推销就可能卖出 50 件商品了,推销成本反而降低了。在这个场景中,我们只关心能被推销成功的那些客户,而不能成功推销且被正确预测为不能成功推销的,虽然有助于提高模型的准确率,对我们却没什么意义。因此,这里用精确率来评估模型的好坏会更加合适。

关于评价指标选取的重要性,有时候不是我们没做出好的模型,而是我们没选择对正确的评价指标。不同的指标的应用场景不同,预测模型不能只看准确率而要结合业务问题选择合适的评估指标。上述只是两个非常简单的例子,模型的评估指标有很多准确率只是其中一种,除了指标计算还有一些图形化的方法也可以用来评估模型,比如 ROC 曲线,Lift 曲线,查全率曲线,还有回归模型中用到的残差图等等。如果这些指标和图形都要手动计算和绘制也挺麻烦的,但是使用自动建模工具就非常方便了,除了可以自动建模外,它还会自动计算出各种评价指标,用户只需要知道如何使用这些指标就可以了,使用起来非常方便。