分类预测
专家诊病模型
专家系统是典型的大数据和人工智能结合的计算机程序系统,其内部含有大量的某个领域专家水平的知识与经验,能够利用人类专家的知识和解决问题的方法来处理该领域问题。也就是说,专家系统是一个具有大量的专门知识与经验的程序系统,它应用人工智能技术和计算机技术,根据某领域一个或多个专家提供的知识和经验,进行推理和判断,模拟人类专家的决策过程,以便解决那些需要人类专家处理的复杂问题,简而言之,专家系统是一种模拟人类专家解决领域问题的计算机程序系统。
专家系统的发展已经历了 3 个阶段,正向第四代过渡和发展。第一代专家系统(dendral、macsyma 等)以高度专业化、求解专门问题的能力强为特点。但在体系结构的完整性、可移植性、系统的透明性和灵活性等方面存在缺陷,求解问题的能力弱。第二代专家系统(mycin、casnet、prospector、hearsay 等)属单学科专业型、应用型系统,其体系结构较完整,移植性方面也有所改善,而且在系统的人机接口、解释机制、知识获取技术、不确定推理技术、增强专家系统的知识表示和推理方法的启发性、通用性等方面都有所改进。第三代专家系统属多学科综合型系统,采用多种人工智能语言,综合采用各种知识表示方法和多种推理机制及控制策略,并开始运用各种知识工程语言、骨架系统及专家系统开发工具和环境来研制大型综合专家系统。在总结前三代专家系统的设计方法和实现技术的基础上,已开始采用大型多专家协作系统、多种知识表示、综合知识库、自组织解题机制、多学科协同解题与并行推理、专家系统工具与环境、人工神经网络知识获取及学习机制等最新人工智能技术来实现具有多知识库、多主体的第四代专家系统。
本案例使用数据云敏捷挖掘工具,以决策树算法为背景,通过生动有趣的过程讲解,帮助读者了解依托大数据如何构建专家诊病模型,以及如何通过可视化探索数据,实现决策树同样的计算结果!
该案例的工作流如下:

商业目标
业务理解:该案例所用的数据是一份医生诊病的数据,如下:

表 1:数据视图
其中,年龄、性别、血压、胆固醇、钠、钾是病人的指标,而药物是医生针对病人的情况开出的药物。
业务目标:建立专家诊病系统,当把病人的指标输入到该系统时,系统会自动输出该给此类病人开出的药物。
数据挖掘目标:建立专家诊病模型,该模型以病人的病例指标为输入,以药物为目标,建立预测模型,该模型可以根据输入指标的值,计算预测值(药物)。
操作实现:
新建工作流
可以点击文件菜单下的“新建,开始创建工作流。点击后会弹出以下向导界面:
输入工作流的名字后即可完成创建:

图 1:新建工作流
导入数据
此时要根据数据存储文件的格式选择相应的导入节点。在这里由于数据源是数据库中 SQL 文件,因此可以选择数据库导入节点(也可以使用可变文件)。
左侧节点库,将数据源->数据库导入节点拖到右侧的工作流中。双击节点或者右键菜单中选择“配置”,弹出如下配置窗口:
图 2:数据库节点配置
配置好节点后,节点下方的预警符号从
变成了
。红色表示节点尚未
配置或者配置有误,此时节点不可执行;黄色表示节点可以执行。选择本节点,点击右键菜单的“执行”或者点击工具栏的
,即可执行工作流。执行完成后预警符号变成
。

点击右键菜单的“数据库表”可以查询数据。另外,节点的右端口也会悬停显示数据的行数和字段数。
理解数据
统计分析->数据审核节点可以对数据进行描述,这是建模之前必须要做的工作,一方面是为了设计合理的实施方案,另外一方面也是为了更好的选择合适的算法。
从表 2 中可以看出每种分类变量的取值及每种取值的个数。比如,从这里我们可以看出药物字段一共包含五种取值,且出现最多的是 Y 药物。在这里目标变量为分类型,因此只能选择分类预测类模型,如决策树、逻辑回归等。

表 2:数据描述
预建模
接下来便是尝试建模,看看建模效果。

图 3:预建模
首先,从数据准备>列菜单下选择类型转换节点。由于性别、血压、胆固醇三个字段实际存储类型该是字符型,但这里是整型,因此为了便于以下分析,使用类型转换节点将它们的类型从整型转化为字符型。配置如下:

其次,从数据准备的行菜单中选择分区节点。使用分区节点可以将数据集分成测试集和训练集,训练集用于训练模型,测试集用于测试模型。配置如下:
注意,如果选中使用固定随机种子,则每次运行分区结果将会是一样的,否则每次运行的结果将会不同,进而建模的结果也会不同。通常是选择选中该项,使得训练集和测试集都固定。另外,此处还有个很重要的用途,不使用的话,多次运行可以测试数据分布规律和模型稳定性。
再次,使用类型节点指定目标变量的角色,将药物的角色设为目标。

还有一点要注意,这里分区即把数据集随机分成两份,通常训练集要比测试集大,通常分为 5:5,6:4,7:3,8:2,9:1。数据集越小,训练集应该分的更多,原因是要保证模型的稳定性,参与训练的数据要足够多。实际中,各种比例都会尝试,目的有二:一是选择最佳的比例,二是测试模型的稳定性。
然后,进行分类预测建模,因为目标变量(药物)为分类型。此处我们选择 C4.5 决策树算法。节点连接如上图 3 所示,在决策树(训练)节点配置中选择目标变量药物。其中,决策树(训练)节点连接分区节点。决策树训练节点可以采用默认配置,无需修改配置,如下:

最后,使用分类评估节点评估模型的准确性。配置如下图所示:

评估结果:

表 3:模型评估 1
从表 3 中可以看出,模型测试准确度为 97.6%,误判 2.4%。预建模的目的是为了从整体判断现有变量与目标变量的相关性,以便可以根据经验预估最终的效果和可操作性。
接下来如何优化模型呢?
通常来说有三种办法:
**第一,**增加新数据,以便引入更多重要的影响因素;**第二,**尝试其他模型,以便找到更适合的模型;
**第三,**优化输入,即基于已有数据派生更多重要的变量,或者过滤不重要的变量。
这三者中,第一种最难以实现,一般企业的数据是有限的,企业内部可用数据及外部可用网络数据,在项目需求调研阶段就应该明确,而企业外部行业数据难以获取。第二种最容易尝试,所有可用模型可以快速尝试一遍,这个是每个项目中都必做的,但却不是最重要的方法。而第三种方法才是项目中最可行,也是最重要的办法。
如何优化输入?
这是第三种方法的实现目标。而优化输入最重要的环节就是数据探索。
数据探索

图 4:数据可视化探索
数据探索最核心的一项工作就是探索输入变量与目标变量的相关性。分析变量的相关性可以使用相关性计算,也可以使用图形化分析,而后者最直观常用。分析两个分类型变量可以使用条形图、网络图或者交叉表。分析两个数值型变量可以使用散点图。分析一个数值型变量和一个分类型变量可以使用直方图。
通过分析,血压和药物字段有着强相关性,因为从图中可以看出使用药物 B和药物 A 的人都是高血压(3 表示高血压,2 表示正常,1 表示低血压),使用药物 C 的人都是低血压,这种很明细的规律反映出两个字段间存在很强的相关关系,如下图所示:

同理,胆固醇和选择药物之间也有一定相关性,而性别和选择药物相关性不
大,如下图所示:

接下来分析数值型字段的相关性,从图中(钠为横坐标,钾为纵坐标)可以看出血液中的钠和钾相关性很弱或者没有。从图形化的方式判断相关性强弱的方法就是看图形中的规律,规律越明显,相关性就越强,否则越弱。

就此图来说,散点图中的每一个点表示一个病例,而我们最想知道的还不是钠和钾的相关性,而是两者与药物的相关性,因为药物才是我们分析的目标。所以我们还想知道散点图中的每个病例使用的什么药物。因此,我们使用药物作为颜色区分,重新修正散点图。如下:

从图中可见,下三角区都是浅绿色,说明这部分病例使用的都是 Y 药物。这是很明显的规律,说明这里面有一种很强的关联。用数学的语言来描述,就是钠和钾的比例与药物有很强的相关性。因此,我们发现了一个很重要的变量就是钠和钾的比例。因此,我们可以派生一个变量:钠钾比例。
优化输入
首先,使用派生字段节点或者 Java 代码段节点生成钠钾比例字段。配置如下:
其次,使用过滤节点过滤钠和钾字段,否则它们的重复存在会导致多重共线
性问题。配置如下:

过滤后预览数据如下:

重新建模

模型整体评估如下:

表 4:模型评估 2
从表 4 中可看出,模型精度从原来的 80%提升到了 100%。当然实际中如果遇到预测精度为 100%的情况一定就是错的。下面我们再来解读一下得到的决策树模型。如下图所示:

从整体来看,得此类病的人有大约一半的人(45%)选择服用了 Y 药物
-
- 如果病人血液中钠和钾的比例大于 14.8285,则选择服用 Y 药物,准确率为 100%;
- 如果病人血液中钠和钾的比例不大于 14.8285,若全部判成 X 药物准确率只有 47.5%,因此再看病人的另外一个指标血压;
- 如果血压(其值有 1、2 和 3)为 2,则全部判为 X 药物,准确率为 100%
- 如果血压为 1,全部判为 C 药物,准确率仅 50%。再看另外一个指标胆固醇
- 若胆固醇的值为 1,全部判为 X 药物,则准确率为 100%。
- 若胆固醇的值为 2,全部判为 C 药物,则准确率为 100%
- 如果血压为 3,全部判为 A 药物,则准确率仅 56.8%。再看另外一个指标年龄
- 若年龄大于50.5 岁,判为B 药物,则准确率100%
- 若年龄不大于 50.5 岁,判为 A 药物,准确率为
100%。
小结
第一,在建模中,应该注意过拟合问题。在商业中建模的目的是为了商业应用,因此不仅要保证模型的准确性,更要保证模型的稳定性。
第二,模型应用的核心是模型的风险控制。只有可以控制风险的模型才可以使用,否则不管理论模型建的多么漂亮都是没有实际意义的。
第三,数据挖掘的成果并不只是数学模型,数据挖掘也不等价于高级模型(如决策树、神经网络等)。数据挖掘最重要的不仅是得到一个模型,还有分析得出最合理的输入变量以及给出数据质量管理的建议。
第四,数据挖掘的一个核心工作就是图形化探索,貌似很简单却又最为重要。因为这是你数据挖掘思路的源泉。
信用评分模型
我们将通过一个信用评分的案例来一起学习基于数据挖掘技术来解决信用风险评估问题的基本思路和方法。
信用风险也可以称为违约风险,是指借款人、证券发行人或交易对方因种种原因,不愿或无力履行合同条件而构成违约,致使银行、投资者或交易对方遭受
损失的可能性。
客户是财富来源同时也是风险来源,客户信用风险,如拖欠、赖账、欺诈、破产,都可能会给银行和企业带来巨大的损失。80 年代末以来,随着金融的全球化趋势及金融市场的波动性加剧,各国银行和投资者受到了前所未有的信用风险的挑战。银行存在的主要风险是信用风险,这种风险不只出现在贷款中,也发生在担保、承兑和证券投资等表内、表外业务中。如果银行不能及时识别损失的资产,增加核销呆账的准备金,并在适当条件下停止利息收入确认,银行就会面临严重的风险问题。
如何从鱼龙混杂的客户群体中识别出值得信赖的客户,避免低信用客户带来的高风险呢?当我们意识到这个问题的时候,信用风险评估就变得至关重要。国际金融界对信用风险的关注日益加强,信用风险评估方法不断推陈出新,管理技术正日臻完善,许多定量技术、支持工具和软件已付诸商业应用。
另外,随着资本市场的迅速发展、融资的非中介化、证券化趋势以及金融创新工具的大量涌现,信用风险的复杂性也日益显著。以财务比率为基础的统计分析方法不能够充分反映借款人和证券发行人的资产在资本市场上快速变化的动态价值,鉴于此,基于数据挖掘的信用评估方法已经普遍收到重视。
从分析对象来看,信用风险评估包括个人信用评分、企业信用评级和职业信用评价等,我们今天介绍的是个人信用评分,即通过使用科学严谨的分析方法建立信用评分模型,综合考察消费者个人各方面的基本信息和信用信息,并进行量化分析,以分值形式给出消费者的信用评分。
该案例的工作流如下:

商业目标
业务理解:该案例所用的数据是一份关于信用卡违约的数据,如下:

表 1:数据视图
其中,年龄、教育、工龄、本地居住时长、收入、负债率、信用卡负债、其他负债是信用卡用户的信息,而违约是记录的用户是否发生过违约。
业务目标:建立信用评估系统,当把信用卡用户的信息导入到该系统时,系统会自动输出这批用户的违约风险及信用得分,为信用卡用户的管理提供决策支持。
数据挖掘目标:建立信用卡用户的信用评估模型,该模型以用户的信息指标
为输入,以违约为目标,建立预测模型,该模型可以根据输入指标的值,计算预测值(违约)。
数据理解与探索
这部分主要有两个目的:一是理解字段业务含义,进而理解相应业务;二是探察数据质量,数据的缺失情况和异常情况。可以使用统计节点进行分析。

统计节点配置如下:

各个字段的缺失情况及基本统计量描述如下:

目标字段违约取值描述如下表,从表中可以看出,该数据一共有 700 个案,
其中有 517 个用户是没有违约的,183 个用户有过违约,还有 150 人不知道是否
违约,这也是要待判的,即根据已知是否违约的 700 用户建立预测模型,预测这
150 个用户是否违约。在统计视图中的“频数表”标签中,可以查看违约字段的取值情况,如下图。
建模

第一步,使用选择节点筛选出已知违约结果的 700 人。配置如下:

第二步,使用分区节点建立训练集和测试集。

第三步,以违约为目标字段,使用 C4.5 决策树算法,可以使用默认配置,节点连接如上图所示。
第四步,使用评估节点评估模型。模型评估如下图所示,模型测试整体的准确度为 83%,测试用的个案一共是 700 个,训练模型对这些个案判断正确 581
个,错判 119 个。

应用

第一步,连接之前的选择节点的第二个输出端口筛选出待判的 150 人。
第二步,使用概率 C4.5 决策树(预测)节点基于训练模型预测这 150 人。节点配置如下:
预测结果如下:

第三步,使用过滤节点对系统生成的字段重命名。上表中的
表示用户不违约的概率,
为用户违约的概率。因此对这两个字段重命名如下:

第四步,使用 Java 代码段节点(也可以使用派生节点)生成风险得分字段。配置如下:

第五步,获取高风险用户名单。
使用排序节点按风险得分降序排列。配置如下:

使用选择节点选择风险得分大于 60 的用户。配置如下:

使用表格节点查看高风险用户名单。如下:

类似方法,可以获取高信用用户名单。
小结
首先,通过该案例我们掌握了如何建立信用评分模型,当然此处使用的分类预测算法并不局限于 C4.5 决策树算法,只要是适用于目标变量为字符型的分类
预测算法都可以(如神经网络、支持向量机、贝叶斯网络、KNN、Logistic 回归等)。
其次,从该案例中我们还可以体会到有模型预测的概率比预测结果更重要,在该案例中我们基于违约概率和不违约概率分别得到了信用得分和风险得分的 计算方法。
客户流失模型
客户挽留在很多行业都是一个备受关注的问题,比如电信、银行、保险、零售等。要做客户挽留就需要对客户流失进行预警、客户流失原因分析、客户满意度或忠诚度研究、客户生命周期研究等相关问题进行深入而全面的分析。例如,对客户的行为特征进行分析,可以了解有多少客户流失,客户是什么时候流失的,以及客户是如何流失的等问题,从而监控客户流失、实现客户关怀。
应用数据挖掘技术可以根据过去拥有的客户流失数据建立客户属性、服务属性和客户消费数据与客户流失可能性关联的数学模型,找出客户属性、服务属性和客户消费数据与流失的关系,给出明确的数学公式或规则,从而计算出客户流失的可能性。
电信行业较早地提出了客户关系管理、关系营销等营销管理模式,学界和企业界的积极参与也推动了客户流失行为的相关研究。电信运营商在多年的业务支持系统建设中,积累了大量的历史业务数据,这些数据涉及到用户话单、通信计费、客户交费、市场营销、业务收入等各个方面,它们不仅是历史记录的呈现,同时还蕴含了客户的消费模式,客观上就为数据挖掘提供了丰富的素材。对于运营商来说,成熟有效的管理模式和技术可以更好地进行客户管理,提高用户的粘
性才是硬道理。
建立流失模型可以解决由于客户离网导致的市场份额减少、营销成本增加、收入降低等问题,提高挽留成功率,降低离网率,降低挽留服务成本,减少由于客户离网所带来的收入损失。对客户按照流失倾向评分,产生最可能流失客户的名单,再由运营商对其进行挽留,把损失降到最低。
客户流失分析大致步骤主要分为以下四步:
一是寻找关键因子,比如探索用户离网的影响因素,根据影响因素判断用户离网发生的概率。通过研究现有套餐产品客户在呼叫通话、业务使用等各方面的行为特征,找到关键影响因子;
二是构建预测模型:采用数据挖掘监督类模型技术,训练得到潜在客户预测模型,用于预测将会选择该类套餐产品的潜在流失用户群,并以概率形式量化之。如果已经建立了 Logistic 回归模型,则可以根据模型,预测在不同的自变量情况下,客户流失的概率有多大;
三是判别:实际上跟预测有些类似,根据 Logistic 模型,判断客户有多大的可能性将会流失。这种技术与线性回归类似,只是用分类目标字段代替了数值字段,而在目标含有两个截然不同的类别时可以使用二项模型;
四是推送营业前台:通过营销管理平台,直接将高概率产品目标流失客户群推送到营业厅、短信及网站、社区经理等营销渠道,将挽留策略和产品在合适的时间、以合适的语言推荐给合适的客户,从而赢得营销。
客户流失模型需要完成两个方面的任务,即分析流失客户的特征,导致客户流失的因素及客户流失在这些因素上的分布情况,还有就是得出潜在的流失客户群。
客户流失预测包括决策树、神经网络和 Logistic 回归等研究方法,下面就通过一个利用二项 Logistic 回归预测电信客户流失的实例,为大家介绍一种可用的客户流失模型,为运营商的客户关系管理提供有益的借鉴,也为其他行业的客户流失分析提供挖掘思路。
客户流失的几个因素,主要有:客户基本信息,包括年龄、性别、邮编、地址等;客户档案,包括手机号、付费方式、停机日期、入网时长、工龄、是否使用租用设备、是否使用电话卡业务、是否使用语音;客户账户,包括服务、是否使用互联网等;计费信息,包括拨打电话数、付费总额、欠费总额等。
该案例的工作流如下:

商业目标
业务理解:该案例所用的数据是一份关于电信客户流失的数据,如下:

表 1:数据视图
其中,该数据表中一共有 42 个字段,而流失字段记录了用户是否已经流失。业务目标:建立交互式存量维系营销系统,系统会定期输出流失风险较大的
用户名单以及这批用户的特征,为用户的维系提供决策支持。
数据挖掘目标:建立现存用户的流失风险评估模型,该模型以用户的信息指标为输入,以流失为目标,建立预测评估模型,该模型可以根据输入指标的值,计算预测值(流失)及流失概率。
数据准备
这里主要介绍如何优化输入。
第一步,使用数据库导入节点读取数据。配置如下:

第二步,优化输入。使用特征选择节点过滤不重要的字段或者数据质量不好的字段。

过滤之后原表中的数据剩余 11 列。如下所示:

建模
这一部分的目标是建一个可靠的预测模型。该模型可以评估客户流失的概率。

第一步,使用类型转换节点将流失字段从数值型转化为字符型。节点配置如下:
第二步,使用分区节点建立训练集和测试集。节点配置如下:

第三步,以流失字段为目标变量,使用类型节点将流失字段的角色设为目标。配置如下:
第四步,使用逻辑回归节点训练模型。配置如下:

第四步,使用分类评估节点评估模型。
整体评估结果如下表所示,测试的整体准确率近 77.5%。在商业中,这样的准确度已经很不错了。
对保持用户预测能力评估如下表所示,测试准确率 89.9%,高于整体的准确率。

对流失用户预测能力评估如下表所示,准确率只有 44.8%,远低于整体准确率,而实际中更关注模型对流失用户的预测能力,因此,从这里看该模型效果并不很满意。
综上所述,该模型并不十分理想。在实际中,一定要再做优化,此处就不再做优化了。
生成用户名单
如果为了挽留流失用户,则要生成流失用户名单。如果是为了奖励忠诚用户,则要生成忠诚用户名单。

首先,使用过滤节点对
、
两个字段重命名。如下所示:

其次,使用派生字段节点分别生成流失得分字段和忠诚度得分字段。节点配置分别如下:

接下来分别生成流失用户名单和忠诚用户名单。第一步,生成流失用户名单。
首先使用排序节点对流失得分降序排列,然后使用选择节点筛选出得分 70
以上的用户。节点配置如下:


再使用交互表格节点查询名单,预览如下:

第二步,生成忠诚用户名单。
首先使用排序节点对忠诚得分降序排列,然后使用选择节点筛选出得分 80
以上的用户。节点配置如下:


再使用交互表格节点查询名单,预览如下:

小结
通过该案例,首先,我们掌握建立客户流失模型的方法,以及如何输出高流
失风险的客户名单。其次,我们掌握了在输入变量较多的情况下,应该如何去筛选出重要的变量,以保证模型的效果。最后,我们还从该案例中体会到评估模型的预测能力,并不只看模型的总体的准确度,有时我们更关注模型对目标变量中某个类别的预测能力,比如在该案例中我们更关注的是模型对流失客户的预测能力,这种情况下我们就不能只关注模型整体的准确度,更关心模型对流失客户的预测准确度。
要想成功建立流失模型,其四个关键是:定义流失的商业含义、理解流失结果的使用、明确流失建模对数据的要求,以及设计对时间稳健的流失模型。当然,客户流失分析系统必须针对各种不同的种类分别定义业务问题,分别操作运行。如果运营商能够把握好这些要点,就非常容易将模型推广和应用到实际的营销当中,并且以概率为流失度量,还可以对营销数量进行灵活的控制。