# 敏捷挖掘案例

# 一、敏捷挖掘流程

# 概述

AOSP-SM（即“应用为导向的敏捷挖掘标准流程”的缩写）是结合专家团队长期的商业实践经验并基于 IBM 的跨行业数据挖掘过程标准（CRISP-DM）和SAS 的数据挖掘方法(SEMMA)总结而来的一种面向应用的用于指导大数据挖掘工作的方法。

![](/uploads/projects/mining/202603/189e1de8b1717434.jpeg)作为一种方法，它包含项目中各个典型阶段的说明、每个阶段所包含的任务以及这些任务之间的关系的说明。作为一种流程化建模方法论，AOSP -SM 概述了数据挖掘的整个过程。

整个流程由五个阶段组成，阶段之间并不一定要严格遵守顺序。实际上，大多数项目都会根据需要在这些阶段之间反复中优化。

AOSP-SM 模型具备灵活性，并不一定完全按照这几步完成。比如，如果一个产品总代理发现近年来二级代理的订单违约的情况越来越多，管理层想到这可能和销售员有关系，于是分析人员可以去分析每个销售员的订单违约情况是否有差异，进而验证订单违约与销售员是否存在某种关联。这种情况一般都不需要进行建模。

从各个阶段工作难度和重要性来看，商业目标和评估两个阶段最为重要，如下图：

![](/uploads/projects/mining/202603/189e1de8b243aa88.jpeg)

从各个阶段工作量来看，数据准备和应用两个阶段最多，如下图所示：

![](/uploads/projects/mining/202603/189e1de8b2e6e141.jpeg)

# 商业目标

### 确定业务目标

这是我们开始数据挖掘的第一步。在我们确定是否要启动数据挖掘项目时，首先要对相应的业务进行梳理。通过对业务进行了解，可以明确业务中存在问题，以及是否可以通过数据挖掘的手段解决相应的问题。

确定业务目标通常有两种办法：一是业务调研，二是理解数据。通过业务调研对业务用户进行访谈以掌握其业务中的痛点，同时也可以为今后实施方案的设计提供思路。但并不能仅作业务调研，之后还必须对相应的数据进行探察，以了

解数据资源情况以及数据质量，为项目启动的可行性提供决策参考。通过详细说明业务问题、数据情况和业务资源，可以更快的明确数据挖掘的业务目标。

这部分工作往往是数据价值挖掘的基础能力，也是一个企业数据挖掘团队中往往容易缺乏的能力之一，因此这一部分工作最好由业务专家和项目经理直接参与。

举例，有一家做百货的公司，他们希望得到更好的促销方案，以提升公司效益，那他们的业务目标就是希望得到更好的促销方案提升促销收益，以及要对某个品牌促销的话，应该把信息推荐给哪些客户。

### 评估情况

既然已经有了一个明确指定的目标，现在应该评估处于什么情况。这一步骤需要询问一些问题，例如：

-   -   -   什么类型的数据可供分析？
        -   是否具有完成此项目所需的人力资源？
        -   所涉及的最大风险因素是什么？
        -   对于这些风险，是否具有相应的应急计划？

### 确定数据挖掘目标

既然已经明确了业务目标，现在应该将其转换为数据挖掘目标。例如，“促销分析”的业务目标可以转换为包含下列信息的数据挖掘目标：

客户都是什么类型的？客户的购买力如何？

客户的品牌忠诚度指数是多少？可以得到哪些产品的关联规则？

正如所见到的，业务和技术必须紧密配合才能获得有效的数据挖掘。

### 制定实施方案

现在，可以制定数据挖掘项目的计划了。之前询问的那些问题以及详细制定的业务和数据挖掘目标将作为这个路线图的基础。

# 数据准备

### 选择数据

企业数据来自各种不同的数据源，例如：

**企业内部数据。**这包括大量不同的数据，例如用户信息、交易数据、调查数据、Web 日志、网页内容等。要考虑现有数据是否足以满足需要。

**外部行业数据。**如人口统计数据、GDP 数据、天气数据、合作单位数据？

**互联网数据。**为了更好地提升分析效果，还可以考虑通过网络爬虫等技术采集互联网数据。

基于已经梳理的数据资源，我们为了提高数据的效率，降低分析大数量的难度，我们首先应该想尽办法降低数据量，尽快排除与数据挖掘目标不相关的数据。通常，分以下几步选择数据：

第一步，按表进行筛选。首先从企业内部数据中选择与分析主题相关的表，然后考虑是否可以从外部行业数据中补充数据，最后再考虑从互联网中采集一些数据进行完善。不过要注意，互联网的数据质量比较低，一定要谨慎使用。

第二步，再对选择的每一张表，进行行和列的筛选。

选择属性或特征（列）：如交易频次、最近一次交易时间、交易金额等。选择合适分析对象（行）：如要包含哪些卡号、产品类型或日期时间。

### 数据审核

经过上一步的处理，我们的数据量明显小了很多，为接下来的分析提高了不少效率。数据审核的工作是非常必要的，因为数据从来都不是完美的，只有保证输入的质量，才可以保证模型输出成果的可靠。在这一部分我们不仅要对有质量问题的数据进行处理，同时还要记录数据的基本特征。

需要查找以下这些问题：

-   -   -   数据是否缺失（例如$null$、?）？如果有，是填充缺失值还是删除缺失值；
        -   数据度量类型是否正确？比如日期格式是否正常，是否把销售额等数值字段存储为了字符型；
        -   编码是否一致？例如同时使用 M 和 male 表示性别男；
        -   字段取值是否异常？比如，购买金额是否为负，退货次数是否过多；
        -   数据量多大？记下每张表的大小；
        -   各变量分布特征如何？比如名义值个数，最大值最小值；
        -   值是什么类型？编码方案。例如，一个数据集可以使用 M 和 F 来表示男性和女性，此外也可以使用数字值 1 和 2 表示。两者都可以，但是要保证一致，避免冲突。

### 数据转换

数据转换是数据挖掘最重要的阶段之一，通常需要花费大量的时间。在前期阶段投入足够的精力可以将对这一阶段的投入降至最低，但仍需花费大量的精力为建模准备。

数据转换通常包含以下任务：对于结构化数据：

-   -   -   按研究对象汇总记录
        -   导出新的属性
        -   数据排序
        -   删除或替换空值或缺失值
        -   处理异常值

对于非结构化数据：

-   -   -   分词
        -   情感分析
        -   词频统计
        -   去噪

### 集成数据：

同一业务问题具有多个数据源的情况很多见。例如，需要分析同一组客户的基本信息以及交易数据。如果这些数据集包含相同的唯一标识符（如客户 ID），可以使用这个关键字段将它们合并在一起。

合并数据的基本方法有以下两种：

合并数据：涉及合并两个具有相似记录但不同属性的数据集。这些数据通过

各记录的相同关键标识符（例如客户 ID）合并。生成的数据将会增加一些列或特征。比如将会员的基本信息和交易信息合并到一张表中。

追加数据：涉及集成两个或多个具有相似属性但不同记录的数据集。数据基于相似字段（例如产品名称或合同时长）集成。比如，会员每年的交易数据都保存在单独的一张表中，现在需要把历年的数据合并到一张表中。

### 派生数据：

根据现有数据生成新变量的能力是一个企业中数据挖掘团队的另外一个重要的能力。例如，根据会员的交易记录生成会员的总消费额、最近一次交易间隔、交易频次等。这是项目中非常重要的环节。

### 优化输入

模型优化通常有三种办法：一是换更适用的模型；二是补充新的数据，将更多重要的影响因素补充进来，由于可获得数据在前期已经全部获取，这意味着要从外部获取数据，往往很难行得通，至少短时间之内很难做到，只能作为长期计划；三是基于现有的变量计算生成更多更有代表性的数据，而这种方法才是实际中最常用也最可行的方法，也是团队急需的一种能力。

优化输入主要从三个方面进行：一是清洗数据，如缺失比例较大或者与目标变量相关性很弱甚至不相关的变量；二是处理异常数据，填充缺失的数据；三是派生更多有代表性新变量。

而要完成这三方面，最常用的技术就是使用图形或者表进行可视化探索：首先，您可以使用统计节点对数据的特征进行描述，比如：

-   -   -   哪些会员消费额度过大？
        -   字符型字段中名义值的个数占记录的比例是否过大？
        -   字符型字段中某个名义值的记录数占比是否过多？

其次，通过可视化探索分析各个输入变量与目标变量的相关性。比如：

-   -   -   使用条形图探索两个字符型字段的相关性；
        -   使用直方图探索一个数值型字段与一个字符字段的相关性；
        -   使用散点图探索两个数值型字段的相关性。

# 建模

### 建模概述

数据准备主要是面向模型而准备，当您制定了项目实施方案时，基本已确定分析思路和计划使用的算法。那么完成数据准备后，水到渠成的开始建模。

建模时通常会执行多次迭代。通常，数据挖掘人员会使用默认参数运行多个模型，然后再对这些参数进行微调或回到数据准备阶段以便执行所选模型所需的操作。仅使用一个模型且仅执行一次就能圆满地解答组织的数据挖掘问题，这样的情况几乎不存在。这就是数据挖掘如此有趣的原因，可以使用多种方法来考虑某个已知的问题。

### 选择建模技术

尽管可能已经知道哪种类型的建模方式可以尝试，但现在还无法确定使用哪个模型是最好的。通常，将会基于下列因素确定最适用的模型：

**可用于挖掘的数据类型。**例如，感兴趣的字段是字符型还是数值型？

**数据挖掘目标。**是否能挖掘出令用户感兴趣的购买模式？或者是否需要生成一个得分，例如用于表明会员再次购买的的倾向？

**应用要求。**模型是否准确并且稳定？

### 模型测试设计

一个好的模型不仅要准确更要稳定。为了最终测试模型的优劣，需要提前设计一个测试标准。主要包含两个部分：

-   -   -   描述模型的“优异性”标准：模型的优异性可以通过多种方法度量。对于监督式模型，例如决策树模型和逻辑回归模型，优异性的度量方法通常是估计特定模型的错误率。对于非监督式模型，例如聚类模型，度量方法可以包括易于解释、部署或所需处理时间等标准。
        -   定义将要对其测试这些标准的数据。通常使用分区节点将数据分成训练集和测试集，训练集用于训练模型，测试集用于测试模型。另外，采用交叉验证方法测试模型的稳定性。

记住，模型构建操作是一个迭代的过程。这意味着通常需要测试多个模型的结果才能决定使用和部署哪些模型。

### 构建模型

现在我们可以开始进行训练模型，通常我们对预判出的最好的前三种模型分别进行建模，从三种模型中分别训练出最优的模型。

为了跟踪处理多个模型的过程，请确保记录下每个模型所使用的设置和数据。这可以在与其他人讨论这些结果后者测试模型时提供帮助，并且还可以在需要时 重新跟踪步骤。在模型构建过程的最后阶段，将获得三类将在数据挖掘决策时使用的信息：

-   -   -   参数设置：包括记录的生成最佳结果的参数；
        -   生成的实际模型；
        -   模型结果说明，包括在执行模型并探索其结果时发生的性能和数据问题。

### 评估模型

得到的模型是否有效，不仅要看模型的准确度，更要看模型的稳定性。可以根据之前的测试设计测试模型，以确保我们得到的三个模型都是最优的。同时还要安排测试工程师审核整个建模过程，保证建模的合理性，包括再次确认模型中是否引入了不合理的变量以及字段取值是否失衡。根据我们的经验，如果您建模的准确度达到 95%以上，那基本是错误的或者无效的，商业中的数据几乎不可能包含所有重要的影响因素。比如，定义百货会员是否流失使用的是会员最近一次交易据今的时间间隔，我们定义了一个阀值，也就是会员多久没来算是流失，那么流失字段和该字段存在直接关系，如果建模的过程中引入了该字段，将可能导致模型预测准确度为 100%的现象。还比如，流失字段中不流失会员的比例是多少，如果是 99%，那如果模型全部判为不流失，模型整体的准确度将会是 99%，但是对我们真正关心的对流失客户的预测能力却为 0。

# 评估

### 评估概述

现在，数据挖掘项目已经完成了一大半。而且，根据之前定义的数据挖掘成 功标准，还确定在建模阶段构建的模型从技术上说是正确而且有效的。但是，前面的模型还不能直接运用到商业中去。在建模阶段的模型评估主要基于技术角度，

一个有着很强拟合能力的模型不一定有着同样好的预测能力。众所周知，数据分析中常常会遇到“过拟合”的问题，我们做数据挖掘的目的不仅是在总结过去的特征或者规律，更主要是为了用于预测未来，那么我们通过挖掘技术从历史信息中挖掘出的规律应该是既适用于过去，又适用于现在，还同样适用于未来。如果我们对历史信息“过度总结”，那很可能会造成我们挖掘出了一些规律只代表过去的特征，这就会导致用这样的规律去拟合历史的数据会很准确，却使得预测未来的效果很差，这就是“过拟合”现象。另外，我们在实际应用中，还可能会遇到模型“不稳定”，也就是有时模型预测准确，有时差距很大，这种“不稳定”导致我们无法信任模型。

因此，在继续之前，还应该使用在项目开始时设立的业务成功标准评估模型。这是确保实现业务目标的关键环节。

### 评估结果

在这个阶段，将对项目结果是否达到业务成功标准的评估进行规范。此步骤要求对声明的业务目标有清晰地了解，因此请确保在项目评估时包含关键决策制定者。在这里主要回答以下几个问题：

三个模型中哪个模型最优？

选择使用单一模型部署还是使用混合模型部署？

单一模型和混合模型各自的优势和不足分别是什么？模型未来的风险有多大，对业务影响有多大？

应对措施是什么？

将对业务有多大改善？

今后如何改善模型？

### 确定后续步骤

至今为止，已经生成了结果并且评估了数据挖掘过程，此时应该考虑，接下来该做些什么？这一阶段将根据数据挖掘业务目标回答上述问题。实际上，此时具有两个选择：

一是，继续进入部署阶段，将模型结果并入业务过程中，从而生成最终的报告。

二是，返回到前面的步骤改进或替换模型。如果发现结果几乎可以算是（但并非）最佳结果，可以考虑另一轮建模。可将在此阶段中了解到的信息用于改进模型并生成更好的结果。

此时的决定关系到建模结果的准确度和相关性。如果结果实现了数据挖掘目标和业务目标，则已经可以进入部署阶段。不论作出什么决定，都请确保记录下完整的评估过程。

# 应用

### 概述

数据挖掘可以生成两种类型的成果：在前期阶段中选定的最终模型；从模型本身以及数据挖掘过程中得出的任意结论或推论，包括派生的一些重要的 KPI指标、数据质量或业务流程优化方案、未来规划等。

成果部署的方式有两种：一是撰写研究报告；二是开发 WEB 应用系统，通过 PC、IPAD 或移动端进行分享。第一种较为简单，一般是针对一个具体的阶段

性问题进行研究，最终形成分析报告就行了。第二种稍微复杂，但是一般重要的项目最终都会开发成智能的系统，这样的系统有诸多好处：

一是，方便用户浏览数据挖掘成果，还可以开发计划任务，自动化完成成果应用。比如，我们可以为百货商场建设一个自动营销系统，只要用户指定促销的产品，系统可以自动评估并输出精准营销名单，并按照模版通过短信通知会员；二是，可以结合人工智能的思想，设计系统的自学习能力，不断优化模型；

三是，方便用户对数据挖掘成果进行可视化评估，降低模型应用风险；

四是，系统可以建立高扩展机制，不断扩展系统的能力，轻易集成今后研究发现的更多成果，增加系统功能或者改善模型；

五是，有利于企业对积累的数据挖掘成果进行规范化管理，并追踪挖掘成果的效益。

### 生成最终报告

在系统开发完成后，一般需要一个月的测试，和 3 个月到半年的试运行（根据项目的大小不同，这个周期也会也不一样，并不都需要这么长的周期）。在这期间要做好监控和维护。因此，要根据监控的结果编写监控报告和评估报告。另外，还要对项目的整个开发过程的资料进行整理备案，以便今后研究、系统维护和经验分享。

同时需要系统建模一个验证子系统，不断监控模型状态并追踪模型应用效果，有利于及时发现模型出现的新问题以及模型优化的新思路。

### 执行方案

在系统试运行结束后，可以正式将挖掘成果运用到商业环境中，为企业创造价值。

# 二、应用案例

# 概述

![](/uploads/projects/mining/202603/189e1de8b3cb8e97.jpeg)本模块案例数据都是事先安装在云版服务其中的数据，通过数据库节点导入工作流，配置如下：

# 分类预测

### 专家诊病模型

专家系统是典型的大数据和人工智能结合的计算机程序系统，其内部含有大量的某个领域专家水平的知识与经验，能够利用人类专家的知识和解决问题的方法来处理该领域问题。也就是说，专家系统是一个具有大量的专门知识与经验的程序系统，它应用人工智能技术和计算机技术，根据某领域一个或多个专家提供的知识和经验，进行推理和判断，模拟人类专家的决策过程，以便解决那些需要人类专家处理的复杂问题，简而言之，专家系统是一种模拟人类专家解决领域问题的计算机程序系统。

专家系统的发展已经历了 3 个阶段，正向第四代过渡和发展。第一代专家系统（dendral、macsyma 等）以高度专业化、求解专门问题的能力强为特点。但在体系结构的完整性、可移植性、系统的透明性和灵活性等方面存在缺陷，求解问题的能力弱。第二代专家系统（mycin、casnet、prospector、hearsay 等）属单学科专业型、应用型系统，其体系结构较完整，移植性方面也有所改善，而且在系统的人机接口、解释机制、知识获取技术、不确定推理技术、增强专家系统的知识表示和推理方法的启发性、通用性等方面都有所改进。第三代专家系统属多学科综合型系统，采用多种人工智能语言，综合采用各种知识表示方法和多种推理机制及控制策略，并开始运用各种知识工程语言、骨架系统及专家系统开发工具和环境来研制大型综合专家系统。在总结前三代专家系统的设计方法和实现技术的基础上，已开始采用大型多专家协作系统、多种知识表示、综合知识库、自组织解题机制、多学科协同解题与并行推理、专家系统工具与环境、人工神经网络知识获取及学习机制等最新人工智能技术来实现具有多知识库、多主体的第四代专家系统。

本案例使用数据云敏捷挖掘工具，以决策树算法为背景，通过生动有趣的过程讲解，帮助读者了解依托大数据如何构建专家诊病模型，以及如何通过可视化探索数据，实现决策树同样的计算结果！

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de8b49d9948.jpeg)

### 商业目标

业务理解：该案例所用的数据是一份医生诊病的数据，如下：

![](/uploads/projects/mining/202603/189e1de8b59ca6fd.jpeg)

**表 1：数据视图**

其中，年龄、性别、血压、胆固醇、钠、钾是病人的指标，而药物是医生针对病人的情况开出的药物。

业务目标：建立专家诊病系统，当把病人的指标输入到该系统时，系统会自动输出该给此类病人开出的药物。

数据挖掘目标：建立专家诊病模型，该模型以病人的病例指标为输入，以药物为目标，建立预测模型，该模型可以根据输入指标的值，计算预测值（药物）。

操作实现：

### 新建工作流

![](/uploads/projects/mining/202603/189e1de8b66966df.jpeg)可以点击文件菜单下的“新建，开始创建工作流。点击后会弹出以下向导界面：

输入工作流的名字后即可完成创建：

![](/uploads/projects/mining/202603/189e1de8b733a235.jpeg)

**图 1：新建工作流**

### 导入数据

此时要根据数据存储文件的格式选择相应的导入节点。在这里由于数据源是数据库中 SQL 文件，因此可以选择**数据库**导入节点（也可以使用可变文件）。

![](/uploads/projects/mining/202603/189e1de8b82fbdd1.jpeg)左侧节点库，将**数据源->数据库**导入节点拖到右侧的工作流中。双击节点或者右键菜单中选择“**配置**”，弹出如下配置窗口：

**图 2：数据库节点配置**

配置好节点后，节点下方的预警符号从![](/uploads/projects/mining/202603/189e1de8b8cf19c3.jpeg)变成了![](/uploads/projects/mining/202603/189e1de8b967d554.jpeg)。红色表示节点尚未

配置或者配置有误，此时节点不可执行；黄色表示节点可以执行。选择本节点，点击右键菜单的“**执行**”或者点击工具栏的![](/uploads/projects/mining/202603/189e1de8b9fc1920.jpeg)，即可执行工作流。执行完成后预警符号变成![](/uploads/projects/mining/202603/189e1de8baa8ad8f.jpeg)。

![](/uploads/projects/mining/202603/189e1de8bb7395d6.jpeg)

点击右键菜单的“**数据库表**”可以查询数据。另外，节点的右端口也会悬停显示数据的行数和字段数。

### 理解数据

**统计分析->数据审核**节点可以对数据进行描述，这是建模之前必须要做的工作，一方面是为了设计合理的实施方案，另外一方面也是为了更好的选择合适的算法。

从表 2 中可以看出每种分类变量的取值及每种取值的个数。比如，从这里我们可以看出药物字段一共包含五种取值，且出现最多的是 Y 药物。在这里目标变量为分类型，因此只能选择分类预测类模型，如决策树、逻辑回归等。

![](/uploads/projects/mining/202603/189e1de8bc7a7c37.jpeg)

**表 2：数据描述**

### 预建模

接下来便是尝试建模，看看建模效果。

![](/uploads/projects/mining/202603/189e1de8bd39142a.jpeg)

**图 3：预建模**

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

![](/uploads/projects/mining/202603/189e1de8be39110d.jpeg)

![](/uploads/projects/mining/202603/189e1de8bf1c1390.jpeg)其次，从数据准备的行菜单中选择分区节点。使用分区节点可以将数据集分成测试集和训练集，训练集用于训练模型，测试集用于测试模型。配置如下：

**注意**，如果选中使用固定随机种子，则每次运行分区结果将会是一样的，否则每次运行的结果将会不同，进而建模的结果也会不同。通常是选择选中该项，使得训练集和测试集都固定。另外，此处还有个很重要的用途，不使用的话，多次运行可以测试数据分布规律和模型稳定性。

再次，使用类型节点指定目标变量的角色，将药物的角色设为目标。

![](/uploads/projects/mining/202603/189e1de8bff8c469.jpeg)

**还有一点要注意**，这里分区即把数据集随机分成两份，通常训练集要比测试集大，通常分为 5：5，6：4，7：3，8：2，9：1。数据集越小，训练集应该分的更多，原因是要保证模型的稳定性，参与训练的数据要足够多。实际中，各种比例都会尝试，目的有二：一是选择最佳的比例，二是测试模型的稳定性。

然后，进行分类预测建模，因为目标变量（药物）为分类型。此处我们选择 C4.5 决策树算法。节点连接如上图 3 所示，在决策树（训练）节点配置中选择目标变量药物。其中，决策树（训练）节点连接分区节点。决策树训练节点可以采用默认配置，无需修改配置，如下：

![](/uploads/projects/mining/202603/189e1de8c0d65a7c.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8c1b0600e.jpeg)

评估结果：

![](/uploads/projects/mining/202603/189e1de8c26634fb.jpeg)

**表 3：模型评估 1**

从表 3 中可以看出，模型测试准确度为 97.6%，误判 2.4%。预建模的目的是为了从整体判断现有变量与目标变量的相关性，以便可以根据经验预估最终的效果和可操作性。

### 接下来如何优化模型呢？

通常来说有三种办法：

**第一，**增加新数据，以便引入更多重要的影响因素；**第二，**尝试其他模型，以便找到更适合的模型；

**第三，**优化输入，即基于已有数据派生更多重要的变量，或者过滤不重要的变量。

这三者中，第一种最难以实现，一般企业的数据是有限的，企业内部可用数据及外部可用网络数据，在项目需求调研阶段就应该明确，而企业外部行业数据难以获取。第二种最容易尝试，所有可用模型可以快速尝试一遍，这个是每个项目中都必做的，但却不是最重要的方法。而**第三种方法才是项目中最可行，也是最重要的办法**。

### 如何优化输入？

这是第三种方法的实现目标。而优化输入最重要的环节就是数据探索。

### 数据探索

![](/uploads/projects/mining/202603/189e1de8c34ea004.jpeg)

**图 4：数据可视化探索**

数据探索最核心的一项工作就是探索输入变量与目标变量的相关性。分析变量的相关性可以使用相关性计算，也可以使用图形化分析，而后者最直观常用。分析两个分类型变量可以使用条形图、网络图或者交叉表。分析两个数值型变量可以使用散点图。分析一个数值型变量和一个分类型变量可以使用直方图。

通过分析，血压和药物字段有着强相关性，因为从图中可以看出使用药物 B和药物 A 的人都是高血压（3 表示高血压，2 表示正常，1 表示低血压），使用药物 C 的人都是低血压，这种很明细的规律反映出两个字段间存在很强的相关关系，如下图所示：

![](/uploads/projects/mining/202603/189e1de8c44420a5.jpeg)

同理，胆固醇和选择药物之间也有一定相关性，而性别和选择药物相关性不

大，如下图所示：

![](/uploads/projects/mining/202603/189e1de8c55fdfe5.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8c683e8c6.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8c7b1d0fc.jpeg)

从图中可见，下三角区都是浅绿色，说明这部分病例使用的都是 Y 药物。这是很明显的规律，说明这里面有一种很强的关联。用数学的语言来描述，就是钠和钾的比例与药物有很强的相关性。因此，我们发现了一个很重要的变量就是钠和钾的比例。因此，我们可以**派生**一个变量：钠钾比例。

### 优化输入

![](/uploads/projects/mining/202603/189e1de8c8c75db5.jpeg)首先，使用派生字段节点或者 Java 代码段节点生成钠钾比例字段。配置如下：

其次，使用过滤节点过滤钠和钾字段，否则它们的重复存在会导致多重共线

性问题。配置如下：

![](/uploads/projects/mining/202603/189e1de8c9c8fb6c.jpeg)

过滤后预览数据如下：

![](/uploads/projects/mining/202603/189e1de8cad71e77.jpeg)

### 重新建模

**![](/uploads/projects/mining/202603/189e1de8cbdeca4c.jpeg)**

模型整体评估如下：

![](/uploads/projects/mining/202603/189e1de8cca10bc6.jpeg)

**表 4：模型评估 2**

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

![](/uploads/projects/mining/202603/189e1de8cd93ed6d.jpeg)

从整体来看，得此类病的人有大约一半的人（45%）选择服用了 Y 药物

-   -   如果病人血液中钠和钾的比例大于 14.8285，则选择服用 Y 药物，准确率为 100%；
    -   如果病人血液中钠和钾的比例不大于 14.8285，若全部判成 X 药物准确率只有 47.5%，因此再看病人的另外一个指标血压；
        1.  如果血压（其值有 1、2 和 3）为 2，则全部判为 X 药物，准确率为 100%
        2.  如果血压为 1，全部判为 C 药物，准确率仅 50%。再看另外一个指标胆固醇
            1.  若胆固醇的值为 1，全部判为 X 药物，则准确率为 100%。
            2.  若胆固醇的值为 2，全部判为 C 药物，则准确率为 100%
        3.  如果血压为 3，全部判为 A 药物，则准确率仅 56.8%。再看另外一个指标年龄
            1.  若年龄大于50.5 岁，判为B 药物，则准确率100%
            2.  若年龄不大于 50.5 岁，判为 A 药物，准确率为

100%。

### 小结

第一，在建模中，应该注意过拟合问题。在商业中建模的目的是为了商业应用，因此不仅要保证模型的准确性，更要保证模型的稳定性。

第二，模型应用的核心是模型的风险控制。只有可以控制风险的模型才可以使用，否则不管理论模型建的多么漂亮都是没有实际意义的。

第三，数据挖掘的成果并不只是数学模型，数据挖掘也不等价于高级模型（如决策树、神经网络等）。数据挖掘最重要的不仅是得到一个模型，还有分析得出最合理的输入变量以及给出数据质量管理的建议。

第四，数据挖掘的一个核心工作就是图形化探索，貌似很简单却又最为重要。因为这是你数据挖掘思路的源泉。

### 信用评分模型

我们将通过一个信用评分的案例来一起学习基于数据挖掘技术来解决信用风险评估问题的基本思路和方法。

信用风险也可以称为违约风险，是指借款人、证券发行人或交易对方因种种原因，不愿或无力履行合同条件而构成违约，致使银行、投资者或交易对方遭受

损失的可能性。

客户是财富来源同时也是风险来源，客户信用风险，如拖欠、赖账、欺诈、破产，都可能会给银行和企业带来巨大的损失。80 年代末以来,随着金融的全球化趋势及金融市场的波动性加剧,各国银行和投资者受到了前所未有的信用风险的挑战。银行存在的主要风险是信用风险，这种风险不只出现在贷款中，也发生在担保、承兑和证券投资等表内、表外业务中。如果银行不能及时识别损失的资产，增加核销呆账的准备金，并在适当条件下停止利息收入确认，银行就会面临严重的风险问题。

如何从鱼龙混杂的客户群体中识别出值得信赖的客户，避免低信用客户带来的高风险呢？当我们意识到这个问题的时候，信用风险评估就变得至关重要。国际金融界对信用风险的关注日益加强,信用风险评估方法不断推陈出新,管理技术正日臻完善,许多定量技术、支持工具和软件已付诸商业应用。

另外，随着资本市场的迅速发展、融资的非中介化、证券化趋势以及金融创新工具的大量涌现,信用风险的复杂性也日益显著。以财务比率为基础的统计分析方法不能够充分反映借款人和证券发行人的资产在资本市场上快速变化的动态价值，鉴于此,基于数据挖掘的信用评估方法已经普遍收到重视。

从分析对象来看，信用风险评估包括个人信用评分、企业信用评级和职业信用评价等，我们今天介绍的是个人信用评分，即通过使用科学严谨的分析方法建立信用评分模型，综合考察消费者个人各方面的基本信息和信用信息，并进行量化分析，以分值形式给出消费者的信用评分。

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de8ce83bcdb.jpeg)

### 商业目标

业务理解：该案例所用的数据是一份关于信用卡违约的数据，如下：

![](/uploads/projects/mining/202603/189e1de8cfaeea53.jpeg)

**表 1：数据视图**

其中，年龄、教育、工龄、本地居住时长、收入、负债率、信用卡负债、其他负债是信用卡用户的信息，而违约是记录的用户是否发生过违约。

业务目标：建立信用评估系统，当把信用卡用户的信息导入到该系统时，系统会自动输出这批用户的违约风险及信用得分，为信用卡用户的管理提供决策支持。

数据挖掘目标：建立信用卡用户的信用评估模型，该模型以用户的信息指标

为输入，以违约为目标，建立预测模型，该模型可以根据输入指标的值，计算预测值（违约）。

### 数据理解与探索

这部分主要有两个目的：一是理解字段业务含义，进而理解相应业务；二是探察数据质量，数据的缺失情况和异常情况。可以使用统计节点进行分析。

![](/uploads/projects/mining/202603/189e1de8d06f8169.jpeg)

统计节点配置如下：

![](/uploads/projects/mining/202603/189e1de8d150c27c.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8d25e0d83.jpeg)

目标字段违约取值描述如下表，从表中可以看出，该数据一共有 700 个案，

其中有 517 个用户是没有违约的，183 个用户有过违约，还有 150 人不知道是否

违约，这也是要待判的，即根据已知是否违约的 700 用户建立预测模型，预测这

![](/uploads/projects/mining/202603/189e1de8d32d40db.jpeg)150 个用户是否违约。在统计视图中的“频数表”标签中，可以查看违约字段的取值情况，如下图。

### 建模

**![](/uploads/projects/mining/202603/189e1de8d413cc76.jpeg)**

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

![](/uploads/projects/mining/202603/189e1de8d4fae28e.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8d5f44704.jpeg)

第三步，以违约为目标字段，使用 C4.5 决策树算法，可以使用默认配置，节点连接如上图所示。

第四步，使用评估节点评估模型。模型评估如下图所示，模型测试整体的准确度为 83%，测试用的个案一共是 700 个，训练模型对这些个案判断正确 581

个，错判 119 个。

![](/uploads/projects/mining/202603/189e1de8d6b95323.jpeg)

### 应用

**![](/uploads/projects/mining/202603/189e1de8d79c6147.jpeg)**

第一步，连接之前的选择节点的第二个输出端口筛选出待判的 150 人。

![](/uploads/projects/mining/202603/189e1de8d85fce4a.jpeg)第二步，使用概率 C4.5 决策树（预测）节点基于训练模型预测这 150 人。节点配置如下：

预测结果如下：

![](/uploads/projects/mining/202603/189e1de8da26a0cd.jpeg)

第三步，使用过滤节点对系统生成的字段重命名。上表中的![](/uploads/projects/mining/202603/189e1de8daeefe63.jpeg)表示用户不违约的概率，![](/uploads/projects/mining/202603/189e1de8db954106.jpeg)为用户违约的概率。因此对这两个字段重命名如下：

![](/uploads/projects/mining/202603/189e1de8dca3f9a8.jpeg)

第四步，使用 Java 代码段节点（也可以使用派生节点）生成风险得分字段。配置如下：

![](/uploads/projects/mining/202603/189e1de8dd9de4a7.jpeg)

第五步，获取高风险用户名单。

使用排序节点按风险得分降序排列。配置如下：

![](/uploads/projects/mining/202603/189e1de8de9f9f45.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8df9bfb34.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8e1637f53.jpeg)

类似方法，可以获取高信用用户名单。

### 小结

首先，通过该案例我们掌握了如何建立信用评分模型，当然此处使用的分类预测算法并不局限于 C4.5 决策树算法，只要是适用于目标变量为字符型的分类

预测算法都可以（如神经网络、支持向量机、贝叶斯网络、KNN、Logistic 回归等）。

其次，从该案例中我们还可以体会到有模型预测的概率比预测结果更重要，在该案例中我们基于违约概率和不违约概率分别得到了信用得分和风险得分的 计算方法。

### 客户流失模型

客户挽留在很多行业都是一个备受关注的问题，比如电信、银行、保险、零售等。要做客户挽留就需要对客户流失进行预警、客户流失原因分析、客户满意度或忠诚度研究、客户生命周期研究等相关问题进行深入而全面的分析。例如，对客户的行为特征进行分析，可以了解有多少客户流失，客户是什么时候流失的，以及客户是如何流失的等问题，从而监控客户流失、实现客户关怀。

应用数据挖掘技术可以根据过去拥有的客户流失数据建立客户属性、服务属性和客户消费数据与客户流失可能性关联的数学模型，找出客户属性、服务属性和客户消费数据与流失的关系，给出明确的数学公式或规则，从而计算出客户流失的可能性。

电信行业较早地提出了客户关系管理、关系营销等营销管理模式，学界和企业界的积极参与也推动了客户流失行为的相关研究。电信运营商在多年的业务支持系统建设中，积累了大量的历史业务数据，这些数据涉及到用户话单、通信计费、客户交费、市场营销、业务收入等各个方面，它们不仅是历史记录的呈现，同时还蕴含了客户的消费模式，客观上就为数据挖掘提供了丰富的素材。对于运营商来说，成熟有效的管理模式和技术可以更好地进行客户管理，提高用户的粘

性才是硬道理。

建立流失模型可以解决由于客户离网导致的市场份额减少、营销成本增加、收入降低等问题，提高挽留成功率，降低离网率，降低挽留服务成本，减少由于客户离网所带来的收入损失。对客户按照流失倾向评分，产生最可能流失客户的名单，再由运营商对其进行挽留，把损失降到最低。

客户流失分析大致步骤主要分为以下四步：

一是寻找关键因子，比如探索用户离网的影响因素，根据影响因素判断用户离网发生的概率。通过研究现有套餐产品客户在呼叫通话、业务使用等各方面的行为特征，找到关键影响因子；

二是构建预测模型：采用数据挖掘监督类模型技术，训练得到潜在客户预测模型，用于预测将会选择该类套餐产品的潜在流失用户群，并以概率形式量化之。如果已经建立了 Logistic 回归模型，则可以根据模型，预测在不同的自变量情况下，客户流失的概率有多大；

三是判别：实际上跟预测有些类似，根据 Logistic 模型，判断客户有多大的可能性将会流失。这种技术与线性回归类似，只是用分类目标字段代替了数值字段，而在目标含有两个截然不同的类别时可以使用二项模型；

四是推送营业前台：通过营销管理平台，直接将高概率产品目标流失客户群推送到营业厅、短信及网站、社区经理等营销渠道，将挽留策略和产品在合适的时间、以合适的语言推荐给合适的客户，从而赢得营销。

客户流失模型需要完成两个方面的任务，即分析流失客户的特征，导致客户流失的因素及客户流失在这些因素上的分布情况，还有就是得出潜在的流失客户群。

客户流失预测包括决策树、神经网络和 Logistic 回归等研究方法，下面就通过一个利用二项 Logistic 回归预测电信客户流失的实例，为大家介绍一种可用的客户流失模型，为运营商的客户关系管理提供有益的借鉴，也为其他行业的客户流失分析提供挖掘思路。

客户流失的几个因素，主要有：客户基本信息，包括年龄、性别、邮编、地址等；客户档案，包括手机号、付费方式、停机日期、入网时长、工龄、是否使用租用设备、是否使用电话卡业务、是否使用语音；客户账户，包括服务、是否使用互联网等；计费信息，包括拨打电话数、付费总额、欠费总额等。

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de8e2746e08.jpeg)

### 商业目标

业务理解：该案例所用的数据是一份关于电信客户流失的数据，如下：

![](/uploads/projects/mining/202603/189e1de8e3965155.jpeg)

**表 1：数据视图**

其中，该数据表中一共有 42 个字段，而流失字段记录了用户是否已经流失。业务目标：建立交互式存量维系营销系统，系统会定期输出流失风险较大的

用户名单以及这批用户的特征，为用户的维系提供决策支持。

数据挖掘目标：建立现存用户的流失风险评估模型，该模型以用户的信息指标为输入，以流失为目标，建立预测评估模型，该模型可以根据输入指标的值，计算预测值（流失）及流失概率。

### 数据准备

这里主要介绍如何优化输入。

第一步，使用**数据库**导入节点读取数据。配置如下：

![](/uploads/projects/mining/202603/189e1de8e47171bc.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8e5732aa6.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8e6fdfb2c.jpeg)

### 建模

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

![](/uploads/projects/mining/202603/189e1de8e7f974df.jpeg)

![](/uploads/projects/mining/202603/189e1de8e90f2700.jpeg)第一步，使用类型转换节点将流失字段从数值型转化为字符型。节点配置如下：

第二步，使用分区节点建立训练集和测试集。节点配置如下：

![](/uploads/projects/mining/202603/189e1de8ea9dfd7c.jpeg)

![](/uploads/projects/mining/202603/189e1de8ebc0f457.jpeg)第三步，以流失字段为目标变量，使用类型节点将流失字段的角色设为目标。配置如下：

第四步，使用逻辑回归节点训练模型。配置如下：

![](/uploads/projects/mining/202603/189e1de8eca2d464.jpeg)

第四步，使用分类评估节点评估模型。

![](/uploads/projects/mining/202603/189e1de8ed68da58.jpeg)整体评估结果如下表所示，测试的整体准确率近 77.5%。在商业中，这样的准确度已经很不错了。

对保持用户预测能力评估如下表所示，测试准确率 89.9%，高于整体的准确率。

![](/uploads/projects/mining/202603/189e1de8ee35ebdf.jpeg)

![](/uploads/projects/mining/202603/189e1de8ef10b223.jpeg)对流失用户预测能力评估如下表所示，准确率只有 44.8%，远低于整体准确率，而实际中更关注模型对流失用户的预测能力，因此，从这里看该模型效果并不很满意。

综上所述，该模型并不十分理想。在实际中，一定要再做优化，此处就不再做优化了。

### 生成用户名单

如果为了挽留流失用户，则要生成流失用户名单。如果是为了奖励忠诚用户，则要生成忠诚用户名单。

![](/uploads/projects/mining/202603/189e1de8f0718da2.jpeg)

首先，使用过滤节点对![](/uploads/projects/mining/202603/189e1de8f131faff.jpeg)、![](/uploads/projects/mining/202603/189e1de8f1e3de95.jpeg)两个字段重命名。如下所示：

![](/uploads/projects/mining/202603/189e1de8f2fd3fd9.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8f43cb98b.jpeg)

接下来分别生成流失用户名单和忠诚用户名单。第一步，生成流失用户名单。

首先使用排序节点对流失得分降序排列，然后使用选择节点筛选出得分 70

以上的用户。节点配置如下：

![](/uploads/projects/mining/202603/189e1de8f52bc6ae.jpeg)

![](/uploads/projects/mining/202603/189e1de8f623d686.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8f861aa60.jpeg)

第二步，生成忠诚用户名单。

首先使用排序节点对忠诚得分降序排列，然后使用选择节点筛选出得分 80

以上的用户。节点配置如下：

![](/uploads/projects/mining/202603/189e1de8f94731e1.jpeg)

![](/uploads/projects/mining/202603/189e1de8fa2d37c1.jpeg)

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

![](/uploads/projects/mining/202603/189e1de8fb21811b.jpeg)

### 小结

通过该案例，首先，我们掌握建立客户流失模型的方法，以及如何输出高流

失风险的客户名单。其次，我们掌握了在输入变量较多的情况下，应该如何去筛选出重要的变量，以保证模型的效果。最后，我们还从该案例中体会到评估模型的预测能力，并不只看模型的总体的准确度，有时我们更关注模型对目标变量中某个类别的预测能力，比如在该案例中我们更关注的是模型对流失客户的预测能力，这种情况下我们就不能只关注模型整体的准确度，更关心模型对流失客户的预测准确度。

要想成功建立流失模型，其四个关键是：定义流失的商业含义、理解流失结果的使用、明确流失建模对数据的要求，以及设计对时间稳健的流失模型。当然，客户流失分析系统必须针对各种不同的种类分别定义业务问题，分别操作运行。如果运营商能够把握好这些要点，就非常容易将模型推广和应用到实际的营销当中，并且以概率为流失度量，还可以对营销数量进行灵活的控制。

# 关联分析

### 购物篮分析

购物篮指的是超级市场内供顾客购物时使用的装商品的篮子，当顾客付款时这些购物篮内的商品被营业人员通过收款机一一登记结算并记录。所谓的购物篮分析(Market Basket Analysis)就是通过这些购物篮子所显示的信息来研究顾客的购买行为。主要的目的在于找出什么样的东西应该放在一起。藉由顾客的购买行为来了解是什么样的顾客以及这些顾客为什么买这些产品，找出相关规则，企业藉由这些规则的挖掘获得利益与建立竞争优势。举例来说，零售店可藉由此分析改变置物架上的商品排列或是设计吸引客户的商业套餐等等。

购物篮分析最主要的目的在于找出什么样的东西应该放在一起？商业上的

应用在由顾客的购买行为来了解是什么样的顾客以及这些顾客为什么买这些产品，找出相关的联想（association） 规则，企业由这些规则的挖掘获得利益与建立竞争优势。举例来说，零售店可由此分析改变置物架上的商品排列或是设计吸引客户的商业套餐等等。

### 购物篮分析基本运作过程包含下列三点：

1.  选择正确的品项：这里所指的正确乃是针对企业体而言，必须要在数以百计、千计品项中选择出真正有用的品项出来。
2.  经由对共同发生矩阵（co-occurrence matrix）的探讨挖掘出联想规则。
3.  克服实际上的限制：所选择的品项愈多，计算所耗费的资源与时间愈久（呈现指数递增），此时必须运用一些技术以降低资源与时间的损耗。

### 购物篮分析技术可以应用在下列问题上：

1.  针对信用卡购物，能够预测未来顾客可能购买什么。
2.  对于电信与金融服务业而言，经由购物篮分析能够设计不同的服务组合以扩大利润。
3.  保险业能藉由购物篮分析侦测出可能不寻常的投保组合并作预防。
4.  对病人而言，在疗程的组合上，购物篮分析能作为是否这些疗程组合会导致并发症的判断依据。

该案例通过一个简单的超市购物的数据来演示购物篮分析的方法和思想。工作流如下：

![](/uploads/projects/mining/202603/189e1de8fc309918.jpeg)

完成该案例需要以下几步：

第一步，读取数据 shoppingbasket。配置如下图：

![](/uploads/projects/mining/202603/189e1de8fd2e19b0.jpeg)

第二步，剔除只有一种物品的购物篮子。

首先，使用统计节点统计 id 字段(即为购物篮 id)值的个数。配置如下：

![](/uploads/projects/mining/202603/189e1de8fe15de49.jpeg)

其次，使用选择节点筛选出计数=1 的记录。配置如下：

![](/uploads/projects/mining/202603/189e1de8ff1a0f3a.jpeg)

过滤后的表一共有 174 行，这些都是购物篮中只有一种物品的情况。如下表所示：

![](/uploads/projects/mining/202603/189e1de9001f73b5.jpeg)

第三步，生成购物篮。

首先，使用类型转换节点将 id 和卡号由数值型转化为字符型。

![](/uploads/projects/mining/202603/189e1de901200359.jpeg)

![](/uploads/projects/mining/202603/189e1de902748289.jpeg)其次，使用汇总节点派生购物篮。注意，这里应该以 id 为购物篮 id，而不是卡号，因为同一卡可能有多次购买。但是并不是不能以卡号为研究对象，如果您想把一个人作为一个购物篮对象，也可以用卡号，但是此处经分析重复购买的人并不多，因此以人为研究对象没有意义。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9037a6ac9.jpeg)

再次，使用参考行过滤节点，从汇总表中过滤掉过虑表中的数据。配置如下：

![](/uploads/projects/mining/202603/189e1de9046c8b06.jpeg)

再次过滤后的数据如下表所示：

![](/uploads/projects/mining/202603/189e1de905974362.jpeg)

第四步，使用 Apriori 节点生成训练规则。配置如下：

![](/uploads/projects/mining/202603/189e1de9067767bf.jpeg)

生成的规则预览如下：

![](/uploads/projects/mining/202603/189e1de90777a98e.jpeg)

第五步，派生规则质量字段。

首先，使用选择节点过滤前项为空的规则。配置如下：

![](/uploads/projects/mining/202603/189e1de90848843b.jpeg)

然后，使用派生字段节点，派生规则质量字段。规则质量=支持度\*规则置信度。配置如下：

![](/uploads/projects/mining/202603/189e1de90964e3aa.jpeg)

![](/uploads/projects/mining/202603/189e1de90a2c0c8e.jpeg)最后，使用排序节点对数据按照规则质量和前项进行二重降序排列。排在前面的即为规则质量比较高的规则。节点配置如下：

第六步，提取规则质量较高的规则，如下表所示：

![](/uploads/projects/mining/202603/189e1de90b8ae247.jpeg)

规则解释如下：

如果客户购买啤酒和蔬菜罐头的话，他还有 87.4%的可能购买冻肉；如果客户购买啤酒和冻肉的话，他还有 85.9%的可能购买蔬菜罐头；如果客户购买蔬菜罐头和冻肉的话，他还有 84.4%的可能购买啤酒；如果客户购买啤酒的话，他还有 62.7%的可能购买啤酒；

如果客户购买蔬菜罐头的话，他还有 60.5%的可能购买啤酒；如果客户购买鱼类的话，他还有 53.7%的可能购买水果；

如果客户购买糖果的话，他还有 53.9%的可能购买啤酒；

......

**小结：数据挖掘分为两种，一种是经验验证型，即您或者领导有个想法，然后让您验证一下是不是那样的，您分析之后的回答只有是或者不是，这属于验证型。还有一种是知识发现型的，即原来并不知道有这样的规律，分析之后发现的，即为意想不到的新发现。在这里，我们发现的规则中，**啤酒、蔬菜罐头、冻肉同时被购买的可能性较大，这一点可能是大家都知道的，这个结果只是验证了我们以前的想法，而鱼类和水果一起购买的可能性很大，我们可能就不知道了，因此

这就属于知识发现。因此，对于这家超市而言，应该把水果和鱼类排放的近一些，这样可以提高销量。还有一点要注意的是，数据挖掘的结果没有普遍适用性，对这家超市有这样的规律，并不代表其他超市也是这样。但是方法论是通用的，不同的超市可以使用同样的方法论进行知识发现和验证。

# 聚类分析

### 市场细分

聚类与分类的不同在于，聚类所要求划分的类是未知的。

聚类是将数据分类到不同的类或者簇这样的一个过程，所以同一个簇中的对象有很大的相似性，而不同簇间的对象有很大的相异性。

从统计学的观点看，聚类分析是通过数据建模简化数据的一种方法。传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。

从机器学习的角度讲，簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同，无监督学习不依赖预先定义的类或带类标记的训练实例，需要由聚类学习算法自动确定标记，而分类学习的实例或数据对象有类别标记。聚类是观察式学习，而不是示例式的学习。

聚类分析是一种探索性的分析，在分类的过程中，人们不必事先给出一个分类的标准，聚类分析能够从样本数据出发，自动进行分类。聚类分析所使用方法的不同，常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析，所得到的聚类数未必一致。

从实际应用的角度看，聚类分析是数据挖掘的主要任务之一。而且聚类能够

作为一个独立的工具获得数据的分布状况，观察每一簇数据的特征，集中对特定的聚簇集合作进一步地分析。聚类分析还可以作为其他算法（如分类和定性归纳算法）的预处理步骤。

聚类分析的核心思想就是物以类聚，人以群分。在市场细分领域，消费同一种类的商品或服务时，不同的客户有不同的消费特点，通过研究这些特点，企业可以制定出不同的营销组合，从而获取最大的消费者剩余，这就是客户细分的主要目的。在销售片区划分中，只有合理地将企业所拥有的子市场归成几个大的片区，才能有效地制定符合片区特点的市场营销战略和策略。金融领域，对基金或者股票进行分类，以选择分类投资风险。

下面以一个汽车销售的案例来介绍聚类分析在市场细分中的应用。

![](/uploads/projects/mining/202603/189e1de90d766c07.jpeg)

### 商业目标

业务理解：数据名称：**汽车销售**。该案例所用的数据是一份关于汽车的数据，该数据文件包含销售值、订价以及各种品牌和型号的车辆的物理规格。订价和物理规格可以从 edmunds.com 和制造商处获得。定价为美国本土售价。如下：

![](/uploads/projects/mining/202603/189e1de9105208d2.jpeg)

**表 1：数据视图**

**业务目标：**对市场进行准确定位，为汽车的设计和市场份额预测提供参考。**数据挖掘目标：**通过聚类的方式对现有的车型进行分类。

### 数据准备

通过数据探索对数据的质量和字段的分布进行了解，并排除有问题的行或者列优化数据质量。

![](/uploads/projects/mining/202603/189e1de9110208d3.jpeg)

第一步，我们使用统计节点审核数据的质量，从审核结果中我们发现存在缺失的数据，如下图所示：

![](/uploads/projects/mining/202603/189e1de912080bba.jpeg)

![](/uploads/projects/mining/202603/189e1de91309fc21.jpeg)第二步，对缺失的数据进行处理，我们选择使用缺失填充节点删除这些记录。配置如下：

### 建模

我们选择层次聚类进行分析，尝试根据各种汽车的销售量、价格、引擎、马力、轴距、车宽、车长、制动、排量、油耗等指标对其分类。

建模前，需要对数据的每个字段进行计算，或更新字段，包字段测量类型、值域和缺失等，这时需要**类型**节点，配置如下：

![](/uploads/projects/mining/202603/189e1de914838d72.jpeg)

因为**K-means**不能自动确定分类数量，因此需要我们以自定义的方式规定最后聚类的类别数。**K-means**节点配置如下（默认配置）：

可以使用交互表或者右击 K-means 节点查看聚类的结果，如下图所示：

![](/uploads/projects/mining/202603/189e1de9176bbdc4.jpeg)

查看聚类概述图，了解每个聚类簇的分布：

![](/uploads/projects/mining/202603/189e1de9188d2007.jpeg)

结果如下：

从图中可见，分成的五个类样本数差异太大，cluster\_2 和 cluster\_3 包含的样本数都小于 20，这样的分类是没有意义的，因此需要重新分类。

![](/uploads/projects/mining/202603/189e1de91998cea9.jpeg)我们尝试在 K-means 节点的配置中，重新指定分类数。新的聚类样本数分布如下：

对数据初步确认好分类后，可以分类查看数据的各项指标，来评估分类是否达到最终目的。

如我们看一下每类的销售量分布情况，配置如下：

![](/uploads/projects/mining/202603/189e1de91a89dc07.jpeg)

每类汽车的销售量分布：

![](/uploads/projects/mining/202603/189e1de91b6522e2.jpeg)

### 小结

通过这个案例，大家可以发现聚类分析确实很简单。进行聚类计算后，主要通过图形化探索的方式评估聚类合理性，以及在确定聚类后，分析每类的特征。

### 媒体分级

下面这个案例主要介绍如何对媒体进行分级。分级不同与分类，通过聚类分析将物或人分成几类，只是根据相似性定义的，没有哪类好哪类坏之分。而分级则是定义优劣级别。不过案例对媒体分级的方法使用的仍然是聚类算法，也只有在特定场景下，才可以通过聚类对对象进行分级。下面讲述的案例是关于一家专

门做网络游戏广告投放的广告公司。这家广告公司有 1 万多个网络广告位，帮助游戏公司投放广告，以往都是由他们的媒介专家（媒介经理或者媒介总监）选择满足客户目标最大化的媒介组合，这显然不是一件容易事，为了提高筛选媒介组合的效率，该公司借助我们的数据挖掘工具对其媒介进行分级，以便快速找到最优的媒介组合，这个工作只是他们分析中的一部分。工作流如下：

![](/uploads/projects/mining/202603/189e1de91c276a68.jpeg)

### 商业目标

![](/uploads/projects/mining/202603/189e1de91e3475cc.jpeg)业务理解：数据名称：**媒体信息**。该案例所用的数据是一份关于媒体投放的数据，该数据文件包含媒体名称、平时单价以及假日单价、项目购买金额、参与项目数等信息。如下：

**表 1：数据视图**

业务目标：对媒体进行分级，评价媒体投放收益。

数据挖掘目标：通过聚类的方式对现有的媒体进行分级。

### 建模

第一步，选择 K-Means 聚类进行分析。将媒体分成 5 类，节点配置如下：

![](/uploads/projects/mining/202603/189e1de91f346248.jpeg)

聚类结果如下：

![](/uploads/projects/mining/202603/189e1de92137e862.jpeg)

再使用饼图探索每类的大小分布，结果如下：

![](/uploads/projects/mining/202603/189e1de9223d2877.jpeg)

第二步，探索每类的重要性。我们仍然使用饼图进行探索，分析每类媒体参与项目的情况，节点配置如下：

![](/uploads/projects/mining/202603/189e1de923202a86.jpeg)每类平均参与项目次数的情况如下：

![](/uploads/projects/mining/202603/189e1de924326751.jpeg)

从图中可以看出 cluster\_1 中的媒体平均使用次数最多，其次是 cluster\_3、 cluster\_0、cluster\_2、cluster\_4。**由于每次广告的媒体投放的媒介组合都是由媒介 经理或者媒介总监这些专家认真选择的，因此，如果我们默认每次广告投放使用的媒介组合都是正确的，那么使用越多，则可以说明这些媒体越好用，也就越好。由此，我们把平均使用次数越多的类别定义为更高（好）的级别。我们可以将聚类中的，_1,3,0,2,4_分别定义为_A_级、_B_级、_C_级、_D_级、_E_级。**

第三步，定义媒体级别。

首先，使用创建表节点定义聚类类别和级别值的对应表。配置如下：

![](/uploads/projects/mining/202603/189e1de92548c456.jpeg)

其次，使用**填充**节点替换原表中的聚类类别，配置如下：

![](/uploads/projects/mining/202603/189e1de92627b3b4.jpeg)

然后，再使用过滤节点对聚类字段重命名。配置如下：

![](/uploads/projects/mining/202603/189e1de927435920.jpeg)

最后，您可以使用交互表格节点查看分级结果，如下：

![](/uploads/projects/mining/202603/189e1de92948ad23.jpeg)

另外，您还可以使用多系条形图探索每个级别的特征

### 小结

通过该案例，我们掌握如何使用聚类算法进行分级，分级的方法有很多，尤其在零售业经常用到客户分级，这里就不一一介绍了，以后再逐一分享。**但是值 得注意的是，聚类算法本身并不用于分级，仅当聚类的结果结合实际业务具有优劣特性时才可以采用聚类的结果建立分级规则。**

### 异常诊断

通过这个案例，我们要掌握数据挖掘在异常分析方面应用的基本思路，大家都知道，企业里面经常会有类似这样的需求，而这也是数据挖掘的一个重点的应用方向。今天，我们主要围绕这个主题进行讲解，结合这个主题，我们主要探讨以下几个知识点：

第一，如何结合业务理解，通过业务规则来进行异常分析，当然这是一个典型的以业务为驱动的数据挖掘项目；

第二，围绕如何通过数据挖掘的手段派生一个参考变量指标，来评估与实际值的偏差是否有异常，来进行异常分析。在这个案例里面，主要讲解两种派生参考变量的方法，一个是通过变量的相关性进行参考变量的派生，另一个是通过分类预测，尤其是分类目标变量为数值型的分类预测来派生参考变量。

第三，我们来重点讲解一下，如何通过可视化的方式，来探索一个数值型字段和一个字符型字段的相关性。这是大家需要掌握的，很有效，很好用，也很简单的一个方法。

第四，我们通过这个案例，讲一下，通过聚类分析算法来进行异常诊断的方法。该案例介绍的是聚类算法的另外一种灵活运用。采用的是聚类的思想对异常对象进行判断，主要思想是这样的：首先，我们使用聚类算法将对象（每条记录为一个对象）分成两类，其次，计算每一个对象到类中心的距离，距离类中小较远的点即为异常点。

![](/uploads/projects/mining/202603/189e1de92a96805c.jpeg)第五个，通过这个案例，再学习一下分类预测的另外一种应用场景。工作流如下：

### 商业目标

业务理解：该案例所用的数据是一份关于农业补贴的数据，如下：

![](/uploads/projects/mining/202603/189e1de92c67cef9.jpeg)

**表 1：数据视图**

其中，农业补贴数据包括住户姓名、所在区域、拥有田地的大小、降雨量、田地质量水平、田地收入、主要农作物、申请补贴的类型和申请补贴的金额。

业务目标：分析哪些住户领用补贴存在异常，并输出可疑的名单。数据挖掘目标：建立异常检测模型，输出可疑名单。

注：该案例是一个典型的以业务驱动为核心的数据挖掘项目。此案例从业务入手，探索分析思路，比 如，从领用次数来看，正常情况下每户都会一次领用全部补贴，因此如果领用次数在_2_次以上的住户即可认为存在可疑。其次，每家的田地收入主要有两方面来源，一个是农作物收入，一个是农业补贴收入。因此，如果田地收入明显超出预计田地收入，则很可能是过多的领用农业补贴。另外，判断领用是否可疑的更直接的办法是直接判断申请的补贴金额是否过多。最后，我们采用聚类算法判断异常。根据以上四个思路展开以下分析。

### 领用次数异常分析

**![](/uploads/projects/mining/202603/189e1de92d31d4d6.jpeg)**

第一步，使用**数据库**节点，读取农业补贴数据。

![](/uploads/projects/mining/202603/189e1de92e1cb2af.jpeg)

![](/uploads/projects/mining/202603/189e1de92f2a9a2a.jpeg)第二步，使用**数据审核**节点或者汇总节点统计每个住户领用的次数。配置如下：

第三步，使用选择节点筛选出领用次数大于 1 的名单。其中，该节点第一个

输出端口输出的是计数大于等于 2 的记录，第二个输出端口输出的是等于 1 的记录。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9302c9693.jpeg)

第四步，使用过滤节点将计数重命名为领用次数。配置如下：

![](/uploads/projects/mining/202603/189e1de931150956.jpeg)

第五步，使用交互表格节点输出领用次数异常名单：

![](/uploads/projects/mining/202603/189e1de9321b7d2b.jpeg)

**表 2：可疑名单 1**

### 田地收入异常分析

**![](/uploads/projects/mining/202603/189e1de93315a3f2.jpeg)**

分析田地收入是否存在异常的核心就是估计每个住户的预计田地收入，计算实际田地收入与预计田地收入的差异。

### 如何计算预计田地收入呢？如果有明确的规则可以直接计算出每个住户的田地收入，则可以直接与实际值对比，但是由于田地收入所受影响因素较多，比如降雨量、土地质量、种植的农作物等，所以很难计算出准确的预计值。不过，我们可以估计一个值，这里是通过强相关的原理，计算一个与预计田地收入强相

**关的变量，以此变量作为预计田地收入。而这里强相关的变量可疑使用使用田地收入的主要影响因素相乘（降雨量、田地质量、田地大小）得到。**

操作如下：

第一步，使用自定义选择节点去除已经排除的两个住户。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9346909f9.jpeg)

第二步，使用派生节点生成预期收入字段。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9359b9cef.jpeg)

第三步，使用散点图节点验证预计收入和实际田地收入的相关性。如下图中所示，两个变量之间呈强正相关性，这验证了我们计算预计收入方法的合理性：

![](/uploads/projects/mining/202603/189e1de93695fbfc.jpeg)

**图 1：预计收入和实际田地收入相关性分析**

![](/uploads/projects/mining/202603/189e1de937c9f2bc.jpeg)第四步，使用派生节点生成偏移字段，计算实际田地收入和预计收入的差异。节点配置如下：

第五步，使用直方图看偏移的分布趋势，直方图配置如下：

![](/uploads/projects/mining/202603/189e1de9391dbbb0.jpeg)

从执行结果可以看出，偏移字段有少数分布在尾部，这些即是偏移较大的对象，也就是可疑对象，如下图所示：

![](/uploads/projects/mining/202603/189e1de93a1003ab.jpeg)

第六步，输出可疑名单。

首先，使用选择节点筛选出偏移大于 20 的记录。配置如下：

![](/uploads/projects/mining/202603/189e1de93af704af.jpeg)

其次，使用交互表格节点查看可疑名单。如下：

![](/uploads/projects/mining/202603/189e1de93ccd0703.jpeg)

第七步，分析偏移的分布，以及与申请类型的相关性。

在这里，我们使用直方图节点可视化发现，节点配置如下所示：

![](/uploads/projects/mining/202603/189e1de93db1c6e1.jpeg)

由执行后的结果可见，申请类型为 B 的偏移都在 20 以内（如下图所示），这说明这类申请类型应该不存在欺诈，由此可以再从业务中印证是否这种申请类型的规定没有漏洞，本身就无漏洞可钻，如果确实是，我们就没有必要再分析这种申请类型。

![](/uploads/projects/mining/202603/189e1de93ea4fdb3.jpeg)

**图 2：偏移直方图分布**

### 申请金额异常分析

**![](/uploads/projects/mining/202603/189e1de93fbf5613.jpeg)**

分析申请金额是否存在异常的核心就是估计每个住户的预计申请金额，计算实际申请金额与预计申请金额的差异。

### 如何计算预计申请金额呢？这里我们不能重复使用上一节使用的方法，因为这里我们没有合适的与申请金额强相关的变量。因此，我们采用了另外一个办法，就是使用预测模型，根据输入变量预测每个住户的申请金额，以模型预测值作为申请金额的估计值。

**另外，在上一节中分析得出了以下结论：如图 2 所示，申请类型 B 不易进行欺诈。因此，我们接下来可以放弃对申请类型 B 的分析。**

操作如下：

第一步，使用名义值过滤节点过滤申请类型为 B 的住户。节点配置如下：

![](/uploads/projects/mining/202603/189e1de940cb9b9e.jpeg)

第二步，使用过滤节点过滤不适合参与建模的字段。节点配置如下：

![](/uploads/projects/mining/202603/189e1de941e71e00.jpeg)

![](/uploads/projects/mining/202603/189e1de942f73809.jpeg)第三步，使用**类型**节点定义目标变量和线性回归算法建立以申请金额为目标的预测模型。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9442940d4.jpeg)

第四步，使用数值评估节点评估训练模型的准确性。评估结果如下：

![](/uploads/projects/mining/202603/189e1de944f606ec.jpeg)

第五步，使用过滤节点对预测结果字段重命名并派生字段节点派生申请金额差异字段。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9466a38dc.jpeg)![](/uploads/projects/mining/202603/189e1de947d38d46.jpeg)

第六步，可视化分析。

首先，使用直方图节点可视化发现申请金额差异较集中

![](/uploads/projects/mining/202603/189e1de948d1fff7.jpeg)

第七步，生成可疑名单。

首先，使用选择节点筛选出申请金额差异大于 20 的住户。节点配置如下：

![](/uploads/projects/mining/202603/189e1de949c6699c.jpeg)

其次，使用交互表格节点查询可疑名单，如下所示：

![](/uploads/projects/mining/202603/189e1de94aeac862.jpeg)

**表 4：可疑名单 3**

### 聚类法异常分析

**![](/uploads/projects/mining/202603/189e1de94bd5f5db.jpeg)**

第一步，使用异常节点找出异常值。节点配置如下：

![](/uploads/projects/mining/202603/189e1de94cce3eb5.jpeg)

第二步，名义值过滤，配置如下：

![](/uploads/projects/mining/202603/189e1de94dc05d9f.jpeg)

第三步，生成可疑名单 4。

![](/uploads/projects/mining/202603/189e1de94f4aa067.jpeg)使用追加节点（默认配置）将两个类中的可疑对象合并到一起。再使用交互表格节点查询可疑名单，并定义为可疑名单 4。如下图所示：

### 小结

以上我们用了四种方法去发现异常，得到了四个可疑名单。而这四个名单中重复度越高的对象，可疑性越大。另外，我们最终输出的可疑名单，应该以上四个名单的并集。还有一点要注意的是，我们做异常分析，诊断的是可疑人员，而不是欺诈分子。我们通过数据挖掘的技术只是将搜索的范围尽可能缩小了，降低了搜索的难度，这只是完成了抓欺诈分子的第一步，接下来要从更多的方面去求证，判断名单中的人是不是存在欺诈。

# 时间序列

时间序列预测法是一种历史数据的延伸预测，也称历史引伸预测法。是以时间数列所能反映的社会经济现象的发展过程和规律，进行引伸外推，预测其发展趋势的方法。如下图（用时间序列预测 2017 年 12 月销量）：

### ![](/uploads/projects/mining/202603/189e1de950b8ecaa.jpeg)时间序列预测

![](/uploads/projects/mining/202603/189e1de951bcb8f2.jpeg)下面我们结合时间序列数据演示基于历史数据挖掘规律并进行预测的流程。在数据云中，工作流程如下：

引入数据

数据准备

建模分析

该案例所用的数据是销售数据。这是一个包含销售日期、销量和利润（万元）三个指标的数据，具体内容在软件中打开显示如图 9.5 所示：

### 引入数据

![](/uploads/projects/mining/202603/189e1de952c29d9a.jpeg)**建立数据库节点**，导入要分析的历史数据（新建工作流，拖拽数据库进入工作流，右键配置数据库节点，配置数据路径，引入源数据，具体参考帮助手册）

通过配置数据库，导入元数据—“销售数据”。在软件中打开数据，如下图：

![](/uploads/projects/mining/202603/189e1de953c6dc58.jpeg)

### 数据准备

任何数据都不是完美的，因此在建模分析之前，需要做数据清洗，数据清理好之后，我们需要了解数据的规律，以帮助我们建立预测模型。

# 数据清洗

数据清洗和处理，包括缺失值填充、异常值分析、筛选所需时间区间、按周期汇总数据、日期变量的派生等。

此案例，数据表中存在 2 个问题：

-   -   -   日期字段是字符型，需要将此字段转换成日期型数据。
        -   个别数据时间过早，对预测的数据指导意义不大，需要对数据筛选。

下面就根据案例介绍数据准备常用的节点和方法。转换日期数据的字段类型（如下图）：

-   **数据准备**节点中选择**类型转换**，并拖拽至工作流中，连接输入输出箭头
-   右键**配置，**选择**字符串到期**

![](/uploads/projects/mining/202603/189e1de954ecf9ca.jpeg)

同样的方法，建立**时间选择**节点，选择 85 年-95 年数据。

数据清洗的工作基本完成。但是在数据进行建模之前，还需要指定模型预测所需要的时间区间。

# 指定时间区间

使用**时间区间**节点指定预测模型的时间间隔。

时间区间节点可以为时间序列建模节点或自相关图节点的时间序列数据指定时间间隔并生成标签，作为未来估计或预测的基础。目前支持的时间间隔包括年、季度、月、日和时、分、秒。

时间时区节点适用于以下两种情况：

1.  数据表中不含时间字段：

数据表虽然并不包含时间字段，但该序列的数据已按照时间顺序按照等间隔排列，则可通过时间区间节点为数据自动添加日期标签。如果某个时点的数据存在缺失，建议增加空行表示此次度量或提前使用缺失值替代的方法进行填充。这种情况下选择“从第一个记录开始附加标签”。

1.  数据表中已包含时间字段：

对于这样已经含有时间字段的数据，需要对数据按照指定时间间隔进行转换，例如，将小时数据整合成以天为间隔的数据。由于数据中已经存在时间字段，不等间隔的情况允许存在。这种情况下选择“从数据构建”。在进行整合时，需要对数据进行汇总，汇总值的操作根据具体的分析需要进行，以确保对各种字段类型按照指定间隔进行汇总的方法。

当然，1 和 2 也可以结合使用，先生成时间标签，然后按照用户所需要的时间间隔进行数据汇总。

![](/uploads/projects/mining/202603/189e1de955fc0fbf.jpeg)

![](/uploads/projects/mining/202603/189e1de956e2bc34.jpeg)

表 9.3 时间区间节点配置

| **对话框选项** | **内容** |
| --- | --- |
| 时间区间 | 在选择框中指定用于构建或标注时间序列的间隔和  <br/>周期(支持的时间间隔包括年、季度、月、日和时、分、秒) |
| 从第一个记录开始附加标签 | 从用户指定的日期开始以指定的时间区间为间隔连  <br/>续为记录添加标签。例如，如果选择的时间区间是月，指定的日期表示第一条记录是某年和某月，之后以一个月为间隔，为下一条记录做标签，直到遍历整个数据表。输出表中将增加新生成的日期标签。 |

| 从数据构建 | 通过填充或汇总记录对数据进行转换以满足指定的  <br/>间隔，例如，将日度数据累计为月度，在汇总过程中将缺失记录填充为空值或者 0 等。可以在汇总配置中指定用于填充或汇总记录的函数。 输出表将创建新的日期型字段并删除之前的日期，数据按照新的日期进行汇总。 |
| --- | --- |
| 汇总设置 | 在汇总配置中指定用于不同类型字段的汇总和填充  <br/>函数，例如，将每日的利润进行求和得到每月的总利润。 |
| 汇总函数 | 针对不同类型的字段可用的汇总函数有以下几种：  <br/>数值型：总和、平均值、最小值和最大值；字符型： 模式和第一个；  <br/>布尔型：任一值为真则为真或全部为真则为真。 |
| 填充函数 | 针对缺失值可用的填充函数如下：  <br/>数值型：选项包括空值、0 和总体平均值。  <br/>字符型：空值和最近的值。最近的值是指将要创建的时间周期之前的最近非空值。  <br/>布尔型：选项包括空值、真和假。 |
| 最大填充间隔 | 设为默认值 |
| 结果数据集的中最大记录数 | 指定输出表记录数的上限，如果不指定，该数字值会很大，尤其在以日为间隔的情况下可能会超出指定的最大值。如果超出指定的最大值，系统将停止处理并显示警告消息 |

至此，数据准备工作结束。

### 数据探索

数据探索主要是分析时间序列的规律和趋势特征，这个步骤是时间序列建模

的初步工作。

时间序列的思维有三个关键点：

-   近期的时间点对于整个序列的影响较之于远期时间点大；
-   要对在不同周期中相对时间位置相同的指标进行对比分析，例如每年的

8 月旅游消费额都呈现快速上升；

-   是重点标记出异常结果值（比如出现了历史最低值或历史最高值，建议在时间序列作图时，添加平均值线和平均值加减一倍或两倍标准差线，便于观察异常值）。

数据云使用**趋势图**节点进行时间序列的趋势分析。通过该节点可以对选定的时间序列展示时间序列随时间推移的变动情况。

此案例中，对整理好的销售数据表，建立**趋势图**节点，显示随日期，利润的趋势变化，如下图所示。

![](/uploads/projects/mining/202603/189e1de95817e44b.jpeg)

从图中可以看到，该公司的月度利润总额总体呈现下降趋势，但并不存在明显的季节性或周期性趋势。

### 建模数学模型

时间序列预测法可用于短期、中期和长期预测。根据对资料分析方法的不同，又可分为：简单序时平均数法、加权序时平均数法、移动平均法、加权移动平均法、趋势预测法、指数平滑法、季节性趋势预测法、市场寿命周期预测法等。

在数据探索中，我们看到利润随时间的变化规律，与指数函数趋势较为一致。因此选择**指数平滑**节点进行建模分析。

继续之前的工作流，进行以下操作：

-   建立**类型**节点，在角色中指定模型的输入变量，目标变量
-   建立**指数平滑**节点，选择模型

该节点提供了“自动”、“简单指数平滑”、“Holt 线性趋势”、“简单季节模型”、“Winter加法”和“Winter 乘法”多种模型。其中“自动”是指节点会按照其他五个模型分别进行训练，然后输出效果最好的一个，“自动”选项运行耗时会相对长一些。

节点配置界面如图 9.22 所示：

![](/uploads/projects/mining/202603/189e1de958e3d04b.jpeg)

图 9.22 指数平滑节点配置图

配置图解释如下表：

表 9.8 指数平滑节点配置

| 对话框选项 | 内容  |
| --- | --- |
| 模型  | 选择具体的分析模型，提供了自动、简单、Holt 趋势、简单季节、  <br/>Winter 加法和 Winter 乘法多种模型供选择。如果选择“自动”，将自动执行所有的模型拟合并输出效果最好的一个，选择该选项则耗时会相对长一些 |
| 预测期数 | 指定要预测未来几期的数据 |
| 置信区间的置信度 | 模型不仅输出预测值，也输出预测值的置信区间。对于同样的模型  <br/>而言，置信度越高，预测区间越宽，置信度越低，预测区间越窄。 |
| ACF 和 PACF  <br/>最大延迟数 | 用于指定计算 ACF（auto correlation function，自相关)和 PACF  <br/>（partial auto correlation function，偏自相关)时最大的延迟期数。一般为序列周期的倍数。 |
| 时序周期 | 可以有用户指定时间序列的周期，或者由系统自动识别 |

时间序列有三个部分构成，平稳性，趋势性和季节性，根据预测时考虑到的时序的影响因素的不同，影响方式不同和平滑的次数不同，从简单指数平滑衍生出更多中模型：

指数平滑模型算法选择：

-   当数据比较稳定，没有较大波动，可以采用“自动”
-   如果数据存在线性趋势且没有季节性，建议“Holt”
-   如果存在显著季节性且趋势性不明显，建议“简单季节”
-   如果同时存在线性趋势和季节性，建议“Winter 加法”或者 Winter 乘法”

### 模型评估

实际操作时，建立模型后，可以尝试运行不同的模型，对模型评进行估对比，从而选择最佳的模型。

指数平滑节点执行后，输出时间散点图，残差自相关图，模型评估和预测数据，同时也支持 PMML 模型查看和导出。

### 时间散点图

**![](/uploads/projects/mining/202603/189e1de959c7a033.jpeg)**

时间散点图展示了使用指数平滑法的预测值与实际观测值的对比以及每个预测值的置信区间。主要是看模型拟合效果。

### 残差自相关图

![](/uploads/projects/mining/202603/189e1de95ac0866e.jpeg)

关于残差自相关图的解读我们会在 XX 具体解释。

### 模型评估

**![](/uploads/projects/mining/202603/189e1de95b9a5032.jpeg)**

从模型评估中可以看到最终选择的模型是 Winter 乘法模型，模型中的参数α， β和γ分别为 0.585，0.088 和 0.798。同时还可以看到模型的拟合度 R<sup>2</sup>\=0.680,和各

种误差指标。在选择模型时，除了 R2 之外其他的误差指标和 AIC/SBC 都是越小越好，然而这些指标单独看时并没有多大的指示意义，只有多个模型对照时可以帮助我们选择最佳的模型。

### 预测结果

模型输出预测值供模型评估或者进一步分析使用，显示如图 9.24 所示：

![](/uploads/projects/mining/202603/189e1de95cad3df7.jpeg)![](/uploads/projects/mining/202603/189e1de95d62ca1b.jpeg)

图 9.24 执行指数平滑操作后的预测值窗口图

指数平滑节点执行后，输出表增加了三列，分别是$E-销量、$EX-上限-销量、

$EX-下限-销量。分别表示序列利润的预测值、预测区间的上限和预测区间的下限，而且提供了未来三期（1996 年 1 月、2 月和 3 月）的利润预测值。

### 时间序列图检验

在研究时间序列中存在的规律时，我们需要研究的问题有：

-   -   -   序列是否在固定水平上下变动？
        -   此水平是否本身也在变动？
        -   是否有某种上升或下降的趋势？
        -   是否存在有季节性的模式？
        -   是否季节性的模式也在变更？

这些问题的答案会影响到预测模型的选择。

**时间序列组成因子**

一个时间序列的时间性趋势可能包括以下一种或几种：

平稳性：平稳性是指时间序列在特定时间内呈现比较稳定的趋势；与之相对的是趋势性。时间序列的长期趋势可以由函数图像进行拟合，根据函数图像曲线的形状，可以为线性的

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de95e71f302.jpeg)

### 商业目标

业务理解：该案例所用的数据是《中国纱年产量.xls》、《奶牛月产奶量.xls》和《北京市每年最高气温.xls》，三组数据均包含年份/月份、产量/最高气温两个指标，如下：

![](/uploads/projects/mining/202603/189e1de95f5f096d.jpeg)

![](/uploads/projects/mining/202603/189e1de960394e0d.jpeg)

![](/uploads/projects/mining/202603/189e1de9611ad2ca.jpeg)

### 分布趋势分析

以中国纱年产量的工作流为例：

![](/uploads/projects/mining/202603/189e1de961c5b21c.jpeg)

分析时间序列趋势是时间序列建模的初步工作。目的是为了分析时间序列的规律和序列特征，如序列是否平稳？是否有周期性或者趋势性？并由此分析哪些分析模型更适合。

操作如下：

第一步，设置时间区间。节点配置如下：

![](/uploads/projects/mining/202603/189e1de962c08961.jpeg)

时间区间设为年，从第一个记录开始附加标签，因为数据本身就是年度数据，所以没有进行汇总设置。执行后生成的时间区间表如下：

![](/uploads/projects/mining/202603/189e1de963f295b9.jpeg)

第二步，使用**趋势图**节点分析序列的趋势，节点配置如下：

![](/uploads/projects/mining/202603/189e1de964da1742.jpeg)

从下图可以看出，序列整体呈上升趋势，且没有周期性。

![](/uploads/projects/mining/202603/189e1de965ad8ccb.jpeg)

另外两组数据的节点配置与之类似，不再赘述。配置完成并运行后得到的奶牛月产奶量的趋势图如下，序列整体呈上升趋势，且具有周期性：

![](/uploads/projects/mining/202603/189e1de9668f71f9.jpeg)

北京市每年最高气温的趋势图如下，序列整体没有明显的周期性和趋势性，围绕某个常数上下波动：

![](/uploads/projects/mining/202603/189e1de9678942c2.jpeg)

### 时间序列图检验

仍以中国纱年产量数据为例，工作流如下：

![](/uploads/projects/mining/202603/189e1de9686ecc47.jpeg)

第一步，设置时间区间。具体操作参见上一节。

第二步，使用自相关节点做时间序列图检验，设置如下：

![](/uploads/projects/mining/202603/189e1de96956ccf2.jpeg)

差分阶数默认为 0，表示不进行差分。勾选 ACF，表示绘制自相关图，没有勾选 PACF，表示不绘制偏自相关图，也可以勾选。由如下相关图可以看出，自相关图既不是拖尾也不是截尾（截尾是指在某阶之后，系数都为 0 ；拖尾则会

有一个衰减的趋势，但是不都为 0 ），而是一个三角对称的形式，这种趋势是单调趋势的典型图形，所以原时间序列不平稳。

![](/uploads/projects/mining/202603/189e1de96a6c57ce.jpeg)

另外两组数据的自相关节点配置与之类似，不再赘述。配置完成并执行后分别得到如下的相关图。下图是奶牛月产奶量的自相关图和偏自相关图，自相关图既不是拖尾也不是截尾，而是正弦曲线的形式，这种趋势是**周期性趋势**的典型图形；偏自相关图同样既不是拖尾也不是截尾， 所以原时间序列不是平稳序列。

![](/uploads/projects/mining/202603/189e1de96b95c3bf.jpeg)

![](/uploads/projects/mining/202603/189e1de96ca2bf61.jpeg)下图是北京市每年最高气温的自相关图和偏自相关图，自相关图和偏自相关图都是拖尾，所以原时间序列是平稳序列，可以使用 ARMA 模型进行时间序列分析。

### 简单时序预测

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de96d853565.jpeg)

### 商业目标

![](/uploads/projects/mining/202603/189e1de96e9ac0ab.jpeg)业务理解：该案例所用的数据是《销售数据.csv》，该数据包含销售日期、销量和利润（万元）三个指标，如下：

**表 1：销售数据预览**

业务目标：建立预测分析系统，分析利润在未来的预测值。

数据挖掘目标：建立时间序列预测模型，该模型以日期为输入，以利润为目标，建立预测模型。

### 数据理解

使用统计节点计算字段的特征统计量，输出结果如下：

![](/uploads/projects/mining/202603/189e1de96f8e5880.jpeg)

### 分布趋势分析

**![](/uploads/projects/mining/202603/189e1de9705ef5d2.jpeg)**

分析时间序列趋势是时间序列建模的初步工作。目的是为了分析时间序列的规律和序列特征，如序列是否平稳？是否有周期性或者趋势性？并由此分析哪些分析模型更适合。

操作如下：

第一步，使用类型转换节点将字符型的日期型转化为日期型。节点配置如下：

![](/uploads/projects/mining/202603/189e1de97166af03.jpeg)

第二步，使用时间选择节点选择选择 85 年 - 95 年的数据的进行分析。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9727af6f5.jpeg)

第三步，设置时间区间，节点配置如下：

![](/uploads/projects/mining/202603/189e1de9736c823e.jpeg)

第四步，使用时序图节点分析序列的趋势，节点配置如下：

![](/uploads/projects/mining/202603/189e1de9745ced59.jpeg)

从下图可以看出，序列整体呈下降趋势，且没有周期性。

![](/uploads/projects/mining/202603/189e1de97542b861.jpeg)

### 简单序列预测

工作流如下：

![](/uploads/projects/mining/202603/189e1de9764c4543.jpeg)

接下来，我们选择一个**指数平滑**预测算法进行预测。步骤如下：

第一步，使用时间区间节点设置时间区间为“月”， 汇总配置中按照月对数据进行汇总，配置如下：

![](/uploads/projects/mining/202603/189e1de9773de859.jpeg)

该节点执行前数据预览如下：

![](/uploads/projects/mining/202603/189e1de9782b1459.jpeg)

执行后数据预览如下：

![](/uploads/projects/mining/202603/189e1de979396077.jpeg)

![](/uploads/projects/mining/202603/189e1de97a1cb5dd.jpeg)第二个，使用**类型**节点，制定输入变量，目标变量，为建模做准备，配置如下：

第三步，使用指数平滑预测算法，进行建模。节点配置如下：

![](/uploads/projects/mining/202603/189e1de97b0c7d60.jpeg)

执行后预览数据如下：

![](/uploads/projects/mining/202603/189e1de97c77a48e.jpeg)

查看残差相关图：

![](/uploads/projects/mining/202603/189e1de97d992284.jpeg)

查看预测结果趋势图：

![](/uploads/projects/mining/202603/189e1de97ea72c76.jpeg)

如上图所示，指数平滑算法对该时间序列的趋势有一定预测能力，该模型也总结一些规律，但是尚有一些规律并未总结出。这是一个趋势性非平稳序列，您还可以考虑使用 ARIMA 模型重新建模。

### 小结

时间序列分析是数据挖掘最难的算法之一。当然它也有一个好处，就是建模之前的数据量一般都很小，一般只有几十条到几百条记录（如果您的预测粒度是月，那么每年才 12 条数据，10 年才 120 条），因此模型计算很快。

时间序列分析的一般步骤是：首先，探索序列的趋势，看看序列是趋势特征还是周期性特征，平稳序列还是非平稳序列，是白噪声序列，还是非白噪声序列。根据这些信息我们可以把分析尝试的模型范围缩小，有方向的去优化模型。其次，开始使用工具去尝试模型，并解释模型的质量。最后，评估模型。以及考虑是否使用混合模型来提高模型的稳定性。

# 文本挖掘

### 文本挖掘

文本数据挖掘(Text Mining)是指从文本数据中抽取有价值的信息和知识的计算机处理技术。顾名思义，文本数据挖掘是从文本中进行数据挖掘(Data Mining)。从这个意义上讲，文本数据挖掘是数据挖掘的一个分支。

它在商业智能、信息检索、生物信息处理等方面都有广泛的应用，例如，客户关系管理，自动邮件回复，垃圾邮件过滤，自动简历评审，搜索引擎等等。

文本挖掘有三个独特的关键步骤：

-   -   -   分词，通过分词可以将非结构化数据转化为结构化数据
        -   情感分析，定义情感强度，从文本中挖掘作者的情绪或者从评论中挖掘用户的满意度或观点
        -   去噪，即从分出的众多词中剔除干扰的无用的词，提升数据质量。下面结合一个小的案例演示文本挖掘的实现过程。工作流：

### 文本数据

该案例有两个工作流，使用的是 textmining 文件夹的数据。上面一个工作流使用的是已经分过词的结构化数据，只做词云展示，数据名称为《大连旅游度假关键词频数.csv》。下面一个工作流使用的三个文本数据，展示了从读取到分词，再到词云展示，最后又做了情感分析，使用的数据名称为《yantaidujia.txt》、

《yantailvyou.txt》 、《yantaiyanglao.txt》。

### 演示 1

**![](/uploads/projects/mining/202603/189e1de97f72d2cd.jpeg)**

读取数据后，首先使用选择节点筛选高频词，配置如下：

![](/uploads/projects/mining/202603/189e1de9805e63bb.jpeg)

其次，使用词云节点展示词云，配置如下：

![](/uploads/projects/mining/202603/189e1de981437fde.jpeg)

展示结果如下：

![](/uploads/projects/mining/202603/189e1de9829150be.jpeg)

从词云中，我们可以看出，词云中地名除了有大连之外，还有青岛、张家界、江南、桂林、哈尔滨、香港等。这说明提及大连的人中有很多都同时提到了这些地名，如此可以看出，大连在旅游方面竞争力不够强，同时被提到的地方主要都是竞品。

### 演示 2

**![](/uploads/projects/mining/202603/189e1de9835e9ec1.jpeg)**

首先，使用文本挖掘目录下的平面文件节点读取数据，配置如下：

![](/uploads/projects/mining/202603/189e1de9844835d4.jpeg)

读取的文本数据，如下图所示：

![](/uploads/projects/mining/202603/189e1de98618a9b0.jpeg)

其次，使用中文分词节点对 Document 列的文本进行分词，配置如下：

![](/uploads/projects/mining/202603/189e1de986ea4515.jpeg)

可以通过词云查看分词后结果。

最后，使用情感分析节点分析情感强度，节点配置如下：

![](/uploads/projects/mining/202603/189e1de987ba3633.jpeg)

执行后，可以查看情感分析表。

### 小结

通过这两个小示例，我们掌握了文本挖掘的一些基本方法，比如两种做词云的方式，以及如何进行中文分词和情感分析。

### 文本分类

1.  **数据理解**

![](/uploads/projects/mining/202603/189e1de9892f4311.jpeg)该案例使用的数据是 demo 文件夹下的《疾病信息.xls》，包含日志和类型两列数据，数据如下：

### 演示

该案例的工作流如下：

![](/uploads/projects/mining/202603/189e1de98a0a4597.jpeg)

该工作流从读取 Excel 文件开始。首先使用分词对文档进行分词，并使用一系列的手段对词进行过滤。然后，从这些词中提取出最关键的词，并基于关键词生成标志型字段。这些字段将会作为针对文档进行分类预测的影响因素，之后以这些指标为输入，以文档类别为目标建立文档的分类预测模型。

读取数据后，首先使用分词节点对日志字段的记录进行分词，配置如下：

![](/uploads/projects/mining/202603/189e1de98ad6568f.jpeg)

然后，对噪声词进行过滤，配置如下：

![](/uploads/projects/mining/202603/189e1de98bb301b5.jpeg)

执行后，得到如下的过滤表：

![](/uploads/projects/mining/202603/189e1de98cf65430.jpeg)

之后进入数据准备阶段。使用一系列手段对词进行过滤，具体的工作流如下：

![](/uploads/projects/mining/202603/189e1de98df881b7.jpeg)

第一步，将所有字符都转换为小写，配置如下：

![](/uploads/projects/mining/202603/189e1de98ef4a26e.jpeg)

第二步，过滤不需要的字段，配置如下：

![](/uploads/projects/mining/202603/189e1de990156d44.jpeg)

生成的选择表如下：

![](/uploads/projects/mining/202603/189e1de99156a499.jpeg)

第三步，对分词字段进行汇总，配置如下：

![](/uploads/projects/mining/202603/189e1de9926b3e40.jpeg)

第四步，选择计数大于 15 的记录，配置如下：

![](/uploads/projects/mining/202603/189e1de99364a414.jpeg)

生成的选择表如下：

![](/uploads/projects/mining/202603/189e1de994d59715.jpeg)

对于词云展示来说，数据准备进行到这一步就已足够，词云图如下：

![](/uploads/projects/mining/202603/189e1de9961374f3.jpeg)

![](/uploads/projects/mining/202603/189e1de996f5bdae.jpeg)对于文本分类来说，数据准备还要继续进行第五步，参考行过滤。第二步生成的过滤表作为数据表，第四步生成的选择表作为参考表，配置如下：

至此，就完成了文本分类的数据准备，可以进行文本分类了。首先进行缺失值填充，配置如下：

然后使用类型节点，指定“类型”字段为目标，配置如下：

![](/uploads/projects/mining/202603/189e1de997df0d6d.jpeg)

最后，利用朴素贝叶斯节点对文本进行分类，配置如下：

![](/uploads/projects/mining/202603/189e1de998bd7cae.jpeg)

得到如下的预测表和分类预测模型：

![](/uploads/projects/mining/202603/189e1de99a884e29.jpeg)

### 小结

通过这个示例，我们掌握了文本分类的基本步骤，包括对文档进行分词、对词进行过滤以及分类预测。

# 社会网络分析

### 微博分析

通过该案例，我们将会学习如何对微博数据进行分析。将要学习和掌握的技术有文本挖掘技术、社会网络分析技术、集成 R 算法的能力、基于矩阵的层次聚类算法等。在学习该案例前首先需要了解以下基本概念。

### 什么是社会网络？

-   社会网络是指社会行动者及其间的关系的集合。也可以说，一个社会网络是由多个点（社会行动者）和各点之间的连线（行动者之间的关系）组成的集合。用点和线来表达网络，这个是社会网络的形式化界定。
-   这里的行动者不但指具体的个人，还可指一个群体、公司或其他集体性的社会单位。每个行动者在网络中的位置被称为“结点(node)”。

### 行动者之间常见的关系：

-   亲属关系：父母、子女、夫妻关系等。
-   正式关系（权威关系）：正式角色也是关系性的，如老板/职员、教师/学生、医生/病人关系等。
-   个人之间的评价关系：喜欢、信任、尊重等。
-   行为上的互动关系：行动者之间的自然交往，如谈话、参加会议、拜访、提建议等。
-   隶属关系：如参加一项协会、属于某些俱乐部等。
-   物质资本的传递：商业往来、物资交流。
-   非物质资源的转换关系：行动者之间的交往、信息的交换等。
-   空间关联：城市之间的关系，迁入和迁出。
-   职位的升迁，地位的流动。

### 社会网络的形式化表达：

社群图：用于表示一个群体成员之间的关系，由点和线连成的图。根据不同的标准，社群图的种类也不同。

-   有向图、无向图：根据关系的方向进行划分。
-   二值图、符号图、赋值图：根据关系紧密的“程度”进行划分。
-   完备图、非完备图：根据网络中各个成员之间联系的紧密度进行划分。如果一个图中的任何两点之间都相连，则称为完备图，否则为非完备图。完备图很少见，一般图都是非完备图。
-   矩阵：矩阵中的行与列都代表“社会行动者”，即图中的各点。行与列对应的要素代表的就是各个行动者之间的“关系”。

### 有向图和无向图：

无向关系：行动者之间的关系没有方向，如参加会议、交流等。无向图仅仅表明重要关系的存在与否。无向图对应的矩阵通常是对称的。

![](/uploads/projects/mining/202603/189e1de99b4b716c.jpeg)有向关系：行动者之间的关系是有方向的，如借款关系、权力关系等。有向图矩阵通常是不对称的，因为关系通常不是对称的。

### 二值图、符号图、赋值图：

二值图：如果一种关系的选择项仅有两个：是或不是，在画图的时候，仅仅利用箭头线就可以表示这种二择一的关系，根据这种资料得到的网络图叫做二值图。

符号图：如果我们关注的问题的问题为行动者之间的关系是好、无关系还是不好，我们可以用“+”表示关系好，“0”表示无关系，“-”表示关系不好。根据这种资料得到的网络图叫做符号图。在这类途中，我们可以再箭头上标注相应的符号来表示关系的好坏。

赋值图：如果关系的强度很重要并且可以用一定的数值来表达的话，可以据此构建一个赋值图，把一定的数值赋予每条线上。

邻接矩阵：在社会网络分析中，最常使用的一类矩阵是正方阵，在此方阵中，行和列都代表完全相同的社会行动者，并且行和列排列的顺序相同，矩阵的中的元素可以代表行动者之间的关系或者关系的强度，这样的矩阵称为邻接矩阵。

朋友关系：

![](/uploads/projects/mining/202603/189e1de99c0bbd87.jpeg)

亲近关系：

![](/uploads/projects/mining/202603/189e1de99ccc9f26.jpeg)

线路与途径：

各个点可以通过一条线直接相连，也可以通过一系列线间接相连。在一个图中的这一系列线就叫做一条“线路”。如果线路中的每个点和每条线都各不相同，则称该线路为“途径”。如 1-2-3-1-2-7-1-7-8 是一条线路，1-2-3-4-5-6-7-8 是一条路径。

![](/uploads/projects/mining/202603/189e1de99daf4d3c.jpeg)

长度和距离：

一个途径的长度用构成该途径的线的条数来测量。如途径 1-4-5-6 的长度为

3。

两点之间的距离指的是连接这两点的最短途径的长度，如点 1 和 6 之间有很

多途径，其最短途径 1-6 的长度为 1，故 1 与 6 之间的距离为 1。

![](/uploads/projects/mining/202603/189e1de99e9dc42d.jpeg)

距离矩阵：

![](/uploads/projects/mining/202603/189e1de99f896e5d.jpeg)

### 社会网络分析相关的概念

与“关联性”有关的概念 ：

子图：一个图 G 的子图 Gs 的定义是， Gs 中的点集（记作 Ns ）是 G 的点集（N）的一个子集，并且 Gs 中的线集（ Ls ）也是 G 的线集（L）的一个子集， Gs 中的所有线也必须是在 G 中的所有点之间的线。

关联图和成分：对于一个图来说，如果其中的任何两点之间都存在一个途径

![](/uploads/projects/mining/202603/189e1de9a0a1f6f6.jpeg)（Path），则称这两点是相互可达的，称该图时关联图（connected graph）。也就是说，关联图中的任何两点之间都是可达的。如果一个图不是关联的，就称之为 “不关联图”。一个“不关联图”，可以分为两个或者多个子图，我们称之为关联子图。一个图中的各个关联子图都叫做“成分”（components），它是最大的关联子图。也就是说，“成分”内部的任何点之间都存在途径。但是，成分内部的一点与任何外在于该成分的点之间都不存在任何途径。一个关联图仅仅由一个单一成分构成。其他图主要由一个或多个独立的成分以及一系列孤立点构成。

上图中共包含 4 个成分：2 个关联成分和 2 个孤立成分。

切割点：切割点是指如果去掉这个点，就会增加成分数目的点。没有切割点，子图就会分为两个或多个独立的子群，并且各个子群之间无关联。

![](/uploads/projects/mining/202603/189e1de9a19f5ea4.jpeg)

### 与“距离”有关的概念

点的度数：与某点相邻的那些点称为该点的“邻点”（neighborhood），一个点

ni 的邻点的个数称为该点的“度数”（nodaldegree），记作 d(ni)，也叫关联度（degree of connection）。一个点的度数就是对其“邻点”多少的测量。实际上，一个点的度 数也是与该点相连的线的条数。如果一个点的度数为 0，称之为“孤立点”（isolate）。在一个有向图中，必须考察线的方向。因此，一点的“度数”包括两类，分别称为

“点入度”（in-degree）和“点出度”（out-degree）。一个点的点入度指的是直接指向该点的点的总数；点出度指的是该点所直接指向的点的总数。

![](/uploads/projects/mining/202603/189e1de9a24c7f72.jpeg)

点 5 的度数为：4，点 10 的度数为：2，点 8 的点数为：1

测地线、距离和直径：在给定的两点之间可能存在长短不一的多条途径。两点之间的长度最短的途径叫做测地线。如果两点之间存在多条最短途径，则这两个点之间存在多条测地线。两点之间的测地线的长度叫做测地线距离，简称为“距离”（distance）。也就是说，两点之间的距离指的是连接这两点的最短途径的长度。一个图一般有多条测地线，其长度也不一样。我们把图中最长测地线的长度叫做图的直径。如果一个图是关联图，那么其直径可以测定。如果图不是关联的，那么有的点对之间的距离就没有界定，或者说距离无穷大。在这种情况下，图的直径也是无定义的。

密度：密度指的是一个图中各个点之间联络的紧密程度。固定规模的点之间的连线越多，该图的密度就越大。

密度的测量：在无向图中，密度用图中实际拥有的连线数_l_与最多可能存在的连线总数之比来表示，即密度＝2_l_/n(n-1)。在有向图中，有向图所能包含的最

大连线数恰恰等于它所包含的总对数，即 n(n-1)，密度=_l_/n(n-1)(n 表示图的规模，即该图一共有 n 个点)。

农忙季节农户之间互帮互助的关系网络图：

![](/uploads/projects/mining/202603/189e1de9a34234da.jpeg)

这两个村庄，哪个村庄更容易存活呢？当然第二个图的村庄 2。

平均距离：平均距离（Average Distance）代表了网络中所有成员到达其他成员的平均最短距离。 平均距离越大则说明该网络的节点间跨度越大，凝聚性较低。

### 与“中心性”有关的概念

“中心性”的研究意义：“权力”在社会学中是一个非常重要的概念。一个人之所以拥有权力，是因为他与他者存在关系，可以影响他人。在一个群体中，我们如何去界定某个人的权利大小？社会网络学者就从“关系”的角度出发，用“中心性”来定量研究权力。人或者组织在社会网络中具有怎样的权力，或者说居于怎样的中心地位，这一思想是社会网络分析者最早探讨的内容之一。

点度中心度：刻画的是行动者的局部中心指数，测量网络中行动者自身的交易能力，没有考虑到能否控制他人

中间中心度：研究一个行动者在多大程度上居于其他两个行动者之间，因而是一种“控制能力”指数

接近中心度：考虑的是行动者在多大程度上不受其他行动者的控制

### 与“凝聚子群”有关的概念

大体上说，凝聚子群是满足如下条件的行动者子集合，即在此集合中的行动者之间具有相对较强的、直接的、紧密的、经常的或者积极的联系。

研究意义：通过对社会网络的凝聚子群的分析，可揭示社会结构，量化结构。派系：在一个图中，“派系”指的是至少包含三个点的最大完备子图。

-   派系的成员至少包含三个点；
-   派系是“完备”的，即其中任何两点之间都是直接相关，都是邻接的；
-   派系是“最大”的，其含义是，我们不能向其中加入新的点，否则将改变“完备”这个性质。

对社会网络分析的基本概念有所了解后，下面我们开始学习这个案例。工作流如下：

![](/uploads/projects/mining/202603/189e1de9a46db9b2.jpeg)

### 商业目标

![](/uploads/projects/mining/202603/189e1de9a723fd9a.jpeg)业务理解：数据名称：中国最强音微博。该案例所用的数据是中国最强音官方微博数据。其中，字段包括 Author、Weibo、Forward、Time\_Weibo、Time\_Search、 Count\_Reply。如下：

**表 1：数据视图**

业务目标：寻找意见领袖，为自媒体传播提供参考，另外还要对语义进行聚类，挖掘特征相似用户群体。

数据挖掘目标：建立社会网络图，挖掘意见领袖和微博传播路径，再使用聚类算法对语义进行聚类。

### 数据准备

**![](/uploads/projects/mining/202603/189e1de9a7ef03c4.jpeg)**

![](/uploads/projects/mining/202603/189e1de9a8efaa99.jpeg)

第一步，使用数据库节点读取数据，配置如下：

![](/uploads/projects/mining/202603/189e1de9a9c9550d.jpeg)

第一步，使用 R 代码段节点，借助 R 的编程能力利用关键字提取提及的微博用户。代码如下：

smartR.out<-smartR.in

library(data.table) library(stringr)

At<-str\_extract\_all(smartR.in$"Weibo","@\\\\b\\\\w\*\\\\b")

textnumber = rep(1:nrow(summary(At)),as.numeric(summary(At)\[,1\])) smartR.out<-data.frame(提及用户=unlist(At),句子=textnumber)

节点配置如下：

![](/uploads/projects/mining/202603/189e1de9aabd3a13.jpeg)

![](/uploads/projects/mining/202603/189e1de9ab8be627.jpeg)![](/uploads/projects/mining/202603/189e1de9ac7c4aa2.jpeg)第三步，使用汇总节点，以句子为组，以提及用户为选项建立列表。节点配置如下：

第四步，使用 Apriori 节点通过关联分析算法训练规则。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9ad642ca9.jpeg)

计算生成的结果如下：

![](/uploads/projects/mining/202603/189e1de9aeac21ea.jpeg)

### 前项和后项

关联规则是形如 X→Y 的蕴涵式，其中， X 和 Y 分别称为前项和后项 。其中，关联规则 XY，存在支持度和置信度。

假设

![](/uploads/projects/mining/202603/189e1de9af517920.jpeg)

是**项**的集合。给定一个交易数据库 D，其中每个**事务**(Transaction)t 是 I 的非空子集，即，每一个交易都与一个唯一的标识符 TID(Transaction ID)对应。关联

规则在 D 中的**支持度**(support)是 D 中事务同时包含 X、Y 的百分比，即概率；**置信度**(confidence)是 D 中事务已经包含 X 的情况下，包含 Y 的百分比，即条件概率。如果满足**最小支持度阈值**和**最小置信度阈值**，则认为关联规则是有趣的。这些阈值是根据挖掘需要人为设定。

第五步，派生规则质量字段。我们定义规则质量=支持度\*规则置信度，配置如下：

第六步，对前项和规则质量字段按照降序进行二重排序。配置如下：

![](/uploads/projects/mining/202603/189e1de9b08636b0.jpeg)![](/uploads/projects/mining/202603/189e1de9b17cb361.jpeg)

第七步，筛选规则质量在 20 以上的记录。配置如下：

![](/uploads/projects/mining/202603/189e1de9b26d8dd4.jpeg)

第八步，使用**派生**节点派生边 id 字段。

![](/uploads/projects/mining/202603/189e1de9b374a383.jpeg)

经过以上八步处理结果如下表所示：

![](/uploads/projects/mining/202603/189e1de9b509d145.jpeg)

最后在进行社会网络建模之前，需要对字符串数据的前项，后项，边 ID 等字段

插入重新编码的整数型字段，如下图：

![](/uploads/projects/mining/202603/189e1de9b6917080.jpeg)

### 意见领袖挖掘

接下来，开始挖掘意见领袖。意见领袖是指在人际传播网络中经常为他人提供信息，同时对他人施加影响的“活跃分子”，他们在大众传播效果的形成过程中起着重要的中介或过滤的作用，由他们将信息扩散给受众，形成信息传递的两级传播。

意见领袖的重要性在不同的产品、不同的目标市场上存在很大的区别。因此，在使用意见领袖时，第一步是通过调查或凭经验或逻辑来确定意见领袖在当前环境中的角色。这一步完成后，就可以利用意见领袖制定营销策略了。

1.  广告

广告应力图激励人们做意见领袖，或使他们模仿意见领袖。激励包括设计一些活动，鼓励使用者谈论产品或品牌，或者让可能的购买者向使用者询问他们的感受。模仿意见领袖涉及找到一位众所周知的意见领袖——如为跑步器材找到乔伊娜（ Florence Joyner）或卡尔·刘易斯(Carl Lewis)，使他们认可某一品牌。或者在一则“生活片段”式的广告中，让一位醒目的意见领袖推荐产品，这种广告通常是“偷听到的两个人的谈话，其中一个人向另一个人提供选择品牌的建议。”

1.  产品质量和顾客抱怨

非常明显的是，消费者会同其他消费者谈论他们有关产品、商店和服务的经历。因此，营销者提供满足或者超过消费者期望的产品是绝对重要的。当顾客的期望未能满足时，企业必须及时妥当地处理顾客抱怨。不愉快的顾客会将其不满平均告诉其他 9 个人。

1.  市场调查

由于意见领袖接受、解释并向他人传播营销信息，在那些意见领袖作用明显的产品领域和群体里，市场调查的重点应放在意见领袖身上而不是“代表性”样本上。因此，产品使用实验、广告文案的预试和媒体偏好研究，都应当以可能成为意见领袖的个人为样本。使意见领袖接触企业的营销组合策略并做出良好反应是成功的关键。当然，在那些意见领袖影响小的产品领域或群体内，使用这种策略或许并非明智之举。

1.  赠送产品样品

赠送样品，即将产品样品送给一个潜在的消费群体使用，是激发人们传播该产品信息的有效方法。在一项研究中，随机选择一群妇女，免费送给他们新速溶咖啡样品。结果发现，一周之内 33 %的样品获得者与家庭以外的人谈论到这种咖啡。营销者不能随机选择样本，而应该尽量将产品送到可能成为意见领袖的人手中。克莱斯勒公司为了引入它的 L H 汽车—无畏（Dodge Intrepid）、统一

（ Chrysler Concorde）和鹰眼（Eagle Vi s i o n），向 6000 名可能的意见领袖提供新车，让他们免费使用一个周末。这些人包括经理和社区首脑，也包括经常提供意见但却不受瞩目的人，如理发师。随后的市场调查发现，有 32 000 多人驾驶或乘坐了这种汽车，而其口头赞誉则流传更广。

1.  零售与个人推销

零售商或推销员有成千上万的机会使用意见领袖。服装店设计了“时尚意见委员会”，由目标市场中可能成为服装款式意见领袖的人组成。面向青少年的商店使用的活跃分子和班级干部也是意见领袖。餐馆老板也可以向目标市场中的可能领袖做出特别邀请，或提供二兑一的赠券，以及菜谱等等。零售商或推销员可以鼓励现有顾客向潜在的新顾客传达信息。例如，一位现有的顾客带来一位朋友看车时，汽车推销员或经销商就可以为他免费地洗车或加油。不动产商可以为顾客或可以带来新顾客的其他人提供一张在豪华餐厅享用双人餐的赠券。

1.  识别意见领袖

意见领袖可以通过社会学技术，或者关键信息的提供和自行设计的问卷来识别。如果想要知道一个产品在全国范围内的意见领袖，又当如何呢？意见领袖的辨认是不容易的，因为他们与被影响的人们十分相像。意见领袖大量地使用大众媒体，尤其是那些与其意见领域相关的媒体，由此为识别意见领袖提供了线索。例如，耐克推测《跑步者世界》的订阅者可能是散步鞋和跑鞋等产品的意见领袖。同时，由于意见领袖很合群，喜欢加入俱乐部和社团，耐克也可将当地跑步俱乐部的成员，特别是俱乐部的活跃分子作为意见领袖。某些产品领域有职业性的意见领袖。对于家禽产品，乡村推广机构一般都颇具影响力；理发师和发型师可以充当护发产品的意见领袖；药剂师则是很多保健护理品的重要意见领袖；计算机专业的学生，也自然而然地成为其他打算购买个人计算机的学生的意见领袖。

分为三步进行：

第一步，使用选择节点剔除缺失值，保证数据质量。配置如下：

![](/uploads/projects/mining/202603/189e1de9b789ca2b.jpeg)

第二步，使用对象插入节点将特征添加到网络中。配置如下：

![](/uploads/projects/mining/202603/189e1de9b8a8b31f.jpeg)

第三步，使用网络视图创建社会网络图。配置如下：

![](/uploads/projects/mining/202603/189e1de9b9a3efc1.jpeg)

从网络图中可以看出，没有我们想要的意见领袖，只有一些亲密的群组。主要原因是我们本次只选择了一部分数据，因此没有呈现真实网络的全貌。

### 语义聚类

![](/uploads/projects/mining/202603/189e1de9ba779961.jpeg)接下来要分析的是：通过中文分词的办法对微博内容进行分析，对每句话中出现的名词进行聚类，从而将语句进行相似性划分，即语义聚类。

进行语义聚类的过程如下：

第一步，使用中文节点对博文进行分词。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9bb3c1a46.jpeg)

其中，自定义词汇是通过 Excel 节点进行定义的，如下：

![](/uploads/projects/mining/202603/189e1de9bc3971ea.jpeg)

再使用过滤节点过滤一些字段，配置如下:

![](/uploads/projects/mining/202603/189e1de9bd78593f.jpeg)

第二步，过滤噪声词。使用噪声词过滤节点将分词结果中无效的词过滤掉。配置如下：

![](/uploads/projects/mining/202603/189e1de9be6abcf5.jpeg)

第三步，选择要分析的词。

首先，使用 excel 节点定义要保留的类别。配置如下：

![](/uploads/projects/mining/202603/189e1de9bf740927.jpeg)

然后，使用参考行过滤节点将词性为名词和自定义的记录筛选出来。配置如下：

![](/uploads/projects/mining/202603/189e1de9c079057c.jpeg)

第四步，数据转换。

![](/uploads/projects/mining/202603/189e1de9c14ed0b7.jpeg)

首先，使用过滤节点删除字段 Auther、计数。

其次，使用旋转节点生成以 MID 组，分词为支点，词性为选项的关联矩阵。节点配置如下：

![](/uploads/projects/mining/202603/189e1de9c25b4bea.jpeg)

![](/uploads/projects/mining/202603/189e1de9c38a3ae5.jpeg)

![](/uploads/projects/mining/202603/189e1de9c4d405b3.jpeg)

然后，使用**过滤**节点修改字段名称。配置如下：

![](/uploads/projects/mining/202603/189e1de9c5d50e26.jpeg)

第六步，使用 K-means 聚类节点进行聚类。执行后，可右键该节点查看树状图。节点配置如下：

聚类结果和视图分别如下：

![](/uploads/projects/mining/202603/189e1de9c6f62f4e.jpeg)

![](/uploads/projects/mining/202603/189e1de9c81d9ac8.jpeg)

### 小结

通过这个案例我们重点掌握了意见领袖挖掘和语义聚类的方法。但是该案例进行到这里还远远没有结束，比如需要进一步优化聚类结果，还需要将聚类结果和之前的表合并，了解具体哪些语句分到了一起，还有每个语义类的特征是什么。只有深入了解了这些问题才可以辅助决策，为营销推广提供有价值的建议。

[TOC]