让资料挖掘成为确实可行之解决方案
资料挖掘 (Data Mining) 可帮助使用者从大量的资料集合里发掘出隐藏的资料样板(pattern)以及有用的商业信息。企业将可藉由这些资料样板与规则更了解顾客们的需求,并改善其市场行销、销售业务,与客户服务的运作方式。这些资料样版也可以解决许多经营管理的问题,例如:寻找出哪些顾客是最容易失去的?或是找出特定顾客将会感兴趣的其它产品为何?
在上述情况之中,最关键的动作就是发掘出资料的既有样版(通常是不太明显的),然后以这些数据模型为基础,进行更进一步的预测及分析。
在今日的电子商务环境下,资料挖掘技术正开始受到越来越多的注意力。许多组织团体也了解到,资料挖掘技术将有潜力成为其IT结构与商业发展策略中最不可或缺的元素之一。因为资料挖掘是关于资料的挖掘与分析技术,无论是自动或是半自动的方式,大量的资料将可协助商业分析师们揭露出资料的样版与规则。企业早已从ERP(Enterprise Resource Planning,企业资源规划)、CRM(Customer Relationship Management,客户关系管理)等应用程序与其它系统累积了非常庞大的数据库。此时资料挖掘技术将可协助您从数据库内淬炼出资料样版,让您的资料提供更多具有价值的讯息。
Microsoft在SQL Server 2000内提供了资料挖掘的功能,为资料分析服务 (Analysis Services)的一部份。除了在SQL Server 2000加入此项功能之外,Microsoft也联合许多资料挖掘领域的领导厂商共同拟定出OLE DB for Data Mining API。这个API定义了一项以SQL语法为基础的资料挖掘查询语言(OLE DB for Data Mining Query Language)。此语言将资料挖掘模型(models)视为一个特殊的关系型资料表,并将预测动作(prediction operation)视为一种特殊的联集(join)。资料分析服务含有以标准OLE DB provider Data Mining为基础的Microsoft data-mining provider。这项新的provider包含两项资料挖掘算法:Microsoft决策树算法 (Microsoft Decision Tree,MDT) 与 Microsoft 丛集算法(Microsoft Clustering)。让我们来看看如何利用它们来解决典型的商业问题。
Microsoft资料挖掘算法
资料分析服务内搭配了MDT与Microsoft 丛集算法,这两种算法是Microsoft多年以来的研究成果。让我们先概略地看看这两种算法!您可以在下列网址获取关于这些算法的更多信息:
http://citeseer.nj.nec.com/bradley98scaling.html,与 http://www.acm.org/sigmod/disc/p_scalableclassifsuj.htm 。
MDT.
决策树算法可能是进行预测式模型化分析时最广为使用的。为了解决策树算法的基本运作原理,让我们来看一个范例。
表1列出了一些资料,可用来预测信用贷款之风险程度。在此范例中,我们假设顾客的资料包含了《负债等级》、《收入等级》、《职业种类》,以及一项《信用贷款风险程度》的评估结果。图1是由这些资料产生的决策树。
|
顾客编号 (Customer ID) |
负债等级 (Debt Level) |
收入等级 (Income Level) |
职业种类 (Employment Type) |
信用贷款风险程度 (Credit Risk) |
|
1 |
High |
High |
Self-Employed |
Bad |
|
2 |
High |
High |
Salaried |
Bad |
|
3 |
High |
Low |
Salaried |
Bad |
|
4 |
Low |
Low |
Salaried |
Good |
|
5 |
Low |
Low |
Self-Employed |
Bad |
|
6 |
Low |
High |
Self-Employed |
Good |
|
7 |
Low |
High |
Salaried |
Good |
表1: 资料挖掘应用程序中训练用之取样资料。

图1: 由表1范例数据所建立的决策树。
在本范例中,决策树算法判断出预测信用贷款风险程度时,最直接相关的因素为《负债等级》。所以该算法会以《负债等级》为基准,先进行第一次资料分离。在两节点中有一个 (Debt = High) 是叶节点 (leaf node),内含三个信用差的顾客案例以及没有任何信用佳的顾客案例。在此例中,要预测个人信用评比是否低劣时,最好的预测性因素就是”高负债等级”。而另一个节点仍旧混杂着数项案例资料,包含有三个信用佳的顾客案例以及一个信用差的顾客。此时决策树算法又选择《职业种类》做为下一个预测《信用贷款风险程度》之关键性因素。在以《职业种类》基准进行第二次资料分离后,又产生了两个叶节点。结果显示本例中自营业者(self-employed) 信用不佳的可能性较高。
在这个范例中,我们使用少量的综合性资料来说明决策树算法是如何利用信用贷款申请人的既有资料,来预测其贷款的风险程度。事实上,每一个贷款申请人可能包含更多的属性资料,而且申请人的数目也应该相当多。当问题的规模扩大时,利用手动方式寻找出决定《信用贷款风险程度》高低的规则将变得较为困难。但是MDT算法却可以在几百种属性以及数百万笔资料记录之中产生一个决策树,用以预测个人信用贷款的风险程度高低。
Microsoft Clustering.
Microsoft 丛集算法是以EM算法(Expectation & Maximization)为基础。 EM 算法会在两个步骤间重复执行。在第一个"预先估计(expectation)"步骤中,EM算法先会计算出每个案例内之丛集成员关系(cluster membership)。丛集成员关系即是每个特定丛集内各案例发生之可能性。而在第二个"最大化(maximization)"步骤时,EM算法将使用这些丛集成员关系重新估计该模型之各个参数,例如高斯分布函数之位置与阶层参数。

图2:丛集算法之部分反复运算。
图2展示了EM算法对于一维资料集合所进行之部分反复运算(iteration)。该算法假设资料是由一连串的高斯分布结果所混合而成,又称为贝尔曲线( bell curves)。在图2的第一列图标中,EM算法对于数个贝尔曲线之混合分布进行初始化。图2的第二与第三列则显示出EM算法是以这些资料为基础,去修改混合分布的结果。此反复运算的动作在遇到特定的规则时就会停止,例如在运算过程中,改进程度只要达至某个比例就会停止继续运算。绝大多数的丛集算法都会把所有资料加载内存,所以每当处理大量资料时几乎都会造成系统不稳定。然而,Microsoft的丛集算法却是使用一个具延展性的架构,可选择先储存较重要的资料,其它部分则是以加总的方式储存。基本上这种算法是以更新后的资料挖掘模型为基础,先将资料片段(chunks)加载内存缓冲区,摘录出高斯分布内较接近的案例,之后才归纳出分析结果。因此Microsoft丛集算法只需搜寻资料一次即可。
建立Analysis Services 资料挖掘模型
那么,您该如何使用Analysis Services服务建立资料挖掘模型,以获取商业上珍贵的信息呢?让我们深入探讨一些范例,看看您该如何训练与浏览资料挖掘模型,并以训练过的模型为基础进行预测分析。表2列出了四项银行业可能产生之情境,以及在各种情境之下最适合用来解决问题之算法。
|
情境 |
算法 |
|
|
1 |
以人口统计资料为基础,找出哪些顾客是最容易流失的。 |
不使用巢状式资料表之MDT算法 |
|
2 |
以顾客资料为基础,将性质不同的客户资料分成不同群组,以建立市场行销所用的邮寄名单。 |
不使用巢状式资料表之丛集算法 |
|
3 |
依照顾客已经购买过的产品,找出该顾客可能会有兴趣的其它产品清单。 |
使用巢状式资料表之MDT算法 |
|
4 |
利用顾客资料与其所订购的金融商品为基础,将客户分成不同性质的群组。 |
使用巢状式资料表之丛集算法 |
表2: 各种商业问题与其对应之适当算法
为了解决此类商业问题,我们将使用两个关系型资料表:Customer 与 Purchases。 Customer 资料表内含有银行顾客之人口统计资料,包含顾客的年龄、收入、教育程度、房屋市值、贷款金额等等。Purchases 资料表内则含有顾客已申办的金融商品信息,例如支票、储蓄帐户,以及其它金融商品。如图3所示,Customer资料表透过CustomerID字段与Purchase资料表连结在一起。以关系型数据库的术语来说,Purchases 资料表上建立了一个外来键(foreign key) 参考至Customer 资料表。

图3:资料挖掘模型所使用的来源资料表。
现在就让我们来看看建立、训练,以及浏览资料挖掘模型的几个步骤。第一个情境是:以顾客的统计资料为基础,找出那些顾客是最容易流失且不再返回的。接着,我们会看到如何使用丛集式算法解决第四个情境所遭遇之问题。
建立资料挖掘模型
当您建立资料挖掘模型时,您需要定义该模型之结构以及属性。根据OLE DB for Data Mining API,您可以使用CREATE MINING MODEL指令建立一个新的资料挖掘模型。在关系型数据库中,CREATE TABLE指令定义一个关系型资料表之结构与属性,包含字段名称及其资料型态、约束条件,以及储存选项。CREATE MINING MODEL指令则与CREATE TABLE指令类似,定义出采撷模型的索引值、使用的字段,以及训练用的算法与参数。
您可以利用分析管理工具(Analysis Manager)的采撷模型建置精灵(Mining Model Wizard)建立资料挖掘模型。当您选择资料挖掘算法、定义输入资料的资料表为何、指定输入字段与欲预测的字段之后,采撷模型建置精灵将会自动产生CREATE MINING MODEL指令。
因为表2的第一个情境属于预测性问题,所以我们可使用MDT算法建立一个资料挖掘模型来解决。我们选择了CustomerID做为案例主要键值字段,该字段将用来唯一辨识案例资料表(case table)内的每一笔资料。如图4所示,我们将所有统计数据域位当做输入字段,而Churn_Yes_No字段则是我们想要预测的结果字段。在精灵的最后一个步骤内,我们将这个模型的名称订为Model1_MDT_NonNested。

图4:采撷模型建置精灵。
在您按下【Finish】之后,精灵将以OLE DB for Data Mining 的语法产生一个 CREATE MINING MODEL指令,然后送给Microsoft Data Mining Provider。CREATE MINING MODEL 指令之语法类似于SQL标准的CREATE TABLE指令。

图5:CREATE MINING MODEL指令之范例。
如图5所示,关键词LONG、DOUBLE与TEXT 定义了字段的资料型态,类似于T-SQL的int、float以及varchar。然而,CREATE MINING MODEL指令有某些延伸部分是T-SQL指令所缺乏的。例如Key关键词用来指定一个(或一组)主要的字段,用来唯一辨识资料挖掘模型内的每一笔资料。而CONTINUOUS与DISCRETE关键词则是属性内容的两种可能值,用来设定字段资料型态是连续性或是分离性。PREDICT关键词则标示出资料挖掘模型中可预测的字段,也就是使用者想要寻找的资料样版之目的字段。
处理(训练)资料挖掘模型
在您建立资料挖掘模型之后,下一个步骤(精灵的最后一个步骤)就是训练(Training)这个资料挖掘模型。为了训练这个模型,您必须利用既有的训练资料(training data)才能产生采撷模型内的资料。CREATE MINING MODEL是用来建立模型的结构,训练后才会真正产生采撷模型的资料内容。而在资料挖掘的分析处理过程中,训练数据模型通常是最耗费时间的。算法会反复地从训练资料中寻找出隐藏的资料样版。
OLE DB for Data Mining API是在INSERT叙述句中设定训练数据的指令。所使用的INSERT指令与SQL标准的INSERT指令(将数据加入资料表)是一样的。
虽然您是将大量的资料喂入资料挖掘模型,但在模型内并不存放任何资料;相反的,模型内是存放由这些资料寻找出来的样板。在此模型被训练完毕之后,前端应用程序将可以浏览其内容,并在新的资料集上进行查询。

图6:资料挖掘模型的训练过程。
图6展示了本范例中训练过程所执行的指令。从精灵的View Trace Line 窗口中,您可以看到SONISLAP.NEWDMDB.CUSTOMER 资料表包含了训练资料。其中CustomerID、 Income、OtherIncome、Loan等是用来进行训练模型的字段。(有关训练过程的完整讨论已超出本文的范围之外,在未来的文章我们将会把重点放在如何训练模型。)
浏览采撷模型之内容
在训练模型之后,您可以藉由分析管理工具的树状浏览器观看模型之内容。此浏览器将以图形化方式展现其内容,方便您探索模型内各部分的资料。研究这些内容将可以协助分析师们看到资料内部隐含的重要意义,并了解其中的资料规则与样版。稍后,分析师可将这些规则运用在新的资料,以进行更深入的预测分析动作。

图7:决策树模型
图7之树状图显示出顾客流失情况之样版,该样版是经由MDT算法从训练资料里产生的。该算法寻找出:在预测某顾客是否会流失时,最关键的影响因素为收入(income)。结果显示收入较低的顾客,流失的可能性较高。决策树算法首先将顾客的收入分为四个分支,之后又选择年龄做为下一个预测性关键因素。在预测的第三个阶段,算法选择的是收入低于$49,923.75之顾客的教育程度,还有收入介于$100,040.25与$124,517.25之顾客的房屋市值。基于以上讯息,银行将可预测每位顾客流失的比率为何。
使用采撷模型进行预测分析
您可以使用训练后的采撷模型针对新资料集合进行预测分析 — 举例来说,您可以预测出每位新顾客潜在的流失比率。而SQL Server 2000资料转换服务(DTS)新增一项称为Prediction的新功能,可协助您建立一个用以进行预测之DTS封包。
透过OLE DB for Data Mining API,预测分析所执行的SELECT指令是将资料挖掘模型与新来源资料表进行联集查询。这种特殊的联集查询称为预测联集(PREDICTION JOIN)。预测联集指令之语法为:
SELECT
[FLATTENED] <SELECT-叙述句> FROM
<采撷模型名称> PREDICTION JOIN <资料来源查询指令> ON <联集条件> [WHERE
<WHERE-叙述句>]
|
|
本指令非常类似于两个关系型数据表的联集查询,唯一的差别在于其中一个来源资料表是一个已训练过的采撷模型。
使用丛集算法于巢状式资料表
我们已经看过MDT算法是如何运作的。现在让我们来看看如何在资料挖掘中使用Microsoft丛集算法。为了解决表2之中如何依据银行顾客所订购的产品类别将顾客予以分组之问题,我们将使用一个巢状式资料表来建构一个丛集模型。您必须使用巢状式资料表才能塑照出此商业问题之模型,因为每位顾客与其所购买的产品有巢状关系存在(即每个顾客对应到一组产品集合)。在开始采撷模型建置机灵之后,我们先勾选数据库内Customers与Purchases资料表,接着再选择Microsoft丛集算法。当设定Customer资料表之CustomerID作为主要键值字段之后,我们选择所有人口统计资料作为来自顾客之输入资料,且将所有产品购买信息做为来自Purchase资料表之输入资料。在模型建立完成时,我们还可在关系型采撷模型编辑器(Relational Mining Model Editor) 中进行编辑。举例来说,精灵假设Purchase为查表用之资料表,所以一开始是把Customer资料表放在关联性的”多数(many)”侧。然而我们却希望将Purchase当做巢状式资料表,所以我们可以在编辑器内点选这些资料表间的连结,然后反转其关联性。图8展示编修后的模型。

图8:巢状式资料挖掘模型。
藉由精灵产生的INSERT INTO指令,我们可以在处理资料挖掘模型之后看到如图9所示之训练后模型。

图9:使用丛集算法训练的采撷模型。
透过丛集浏览器所观察到的模型内容,我们可以由各节点位置(node path)之描述做出以下观测结果:
Cluster 1 顾客拥有下列特质:大多数人的年龄在50岁上下,平均收入为$79,000但没有其它的收入来源, 而且其教育程度都很高。他们也拥有许多存款证明、储蓄帐户或相关的金融商品。
Cluster 2 包含平均年龄为40岁以及平均收入为$56,000的顾客,并且平均有$42,000的额外收入。此丛集中的顾客拥有大量的存款证明与储蓄帐户,但是其信用卡数目并不多。
Cluster 3包含平均年龄为65岁且平均收入为$56,347的顾客,平均有$42,645的额外收入。此丛集中的顾客拥有许多信用卡与金融帐户。
藉由以上信息,银行的行销部门可以针对不同丛集的顾客寄出不同产品的适当邮件型录。由这些邮件所得到的响应将会比从顾客资料随机挑出的比率为高。
本文的内容并非十分详尽与深入。主要是想提供您一个有关资料挖掘的整体概念。经由本文所揭露的技巧,您可看到SQL Server 2000中资料分析服务的资料挖掘功能是如何协助您的组织找出资料的样板与规则,以改善其市场行销、业务销售,以及顾客支持的运作方式,因此更了解您的顾客们。请留意一篇即将发表的文章,在其内容中我们将更深入地探讨这些算法在进行训练过程时之效能表现。
资料挖掘之相关术语
为了了解如何利用资料挖掘去说明我们在本文或其它文章内容中所提到的一些情况,您必须了解某些我们在本文中所使用的一些常用术语。Microsoft在OLE DB for Data Mining规格中已定义了这些术语。您可于此网址下载:http://www.microsoft.com/data/oledb/dm.htm 。
资料挖掘模型(Data-mining model)
资料挖掘模型类似于关系型资料表:其包含主要键值字段、输入字段,以及可预测之字段。每一个模型都和一个资料挖掘算法有关系,此算法将用以训练该模型。针对采撷模型进行训练动作其意义在于:藉由特定的资料挖掘算法,在训练资料中寻找出资料样版。在训练期间,算法从训练资料内所发现的样版会储存在资料挖掘模型里。 您可将资料挖掘模型想象成是”真值表”(truth
table),其中的内容即为模型中各字段值之可能组合。只要采撷模型被训练过,您就可以利用它进行预测分析。
字段(Columns)
资料挖掘模型中的字段就类似于关系型资料表的字段;在统计学的术语又可称为 ”变量” 或是 “属性” 。资料挖掘模型可包含三种字段:输入字段、可预测字段,以及同时做为输入且可预测之字段。资料挖掘模型使用输入字段之集合来预测输出结果。可预测字段即为采撷模型之目的字段。
状态值(States)
与每个属性相关的一组可能值。这些数据就是该属性之状态值。例如,性别字段拥有两个状态值:男与女。
案例(Cases)
资料挖掘就是针对各案例进行分析 — 所谓的案例即为信息的基本单位。一个案例之内容可以是简单的。举例来说,当您使用顾客统计资料分析其贷款风险时,每一个顾客即为一项案例。而一个案例也可能相当复杂。例如,当您利用顾客资料与购买纪录做为分析顾客购买行为之依据时,一个案例却包含了一个顾客与其购买的一连串商品。此类型的案例是为巢状式案例 (nested case)。就统计学的角度而言,组成资料集合的案例是随机的,并且是由固定的资料分布所产生。
案例资料表以及巢状式资料表(Case tables and nested tables)
案例资料表用来存放所有案例之非巢状式的信息。巢状式案例资料表则是存放各案例之巢状式的信息。巢状式案例资料表类似于关系型数据库之交易资料表(transaction table)。表A 列出采撷模型的两个输入资料表。此表格内有关顾客的资料是为案例资料表。另一个包含产品购买信息的资料表即为巢状式案例资料表。
|
顾客编号 |
年龄
|
婚姻状态 |
财产 |
所购买的产品 |
|
|
产品 |
数量 |
||||
|
1 |
35 |
M |
380,000 |
TV |
1 |
|
|
Coke |
6 |
|||
|
Ham |
3 |
||||
|
2 |
20 |
S |
50,000 |
VCR |
1 |
|
|
TV |
1 |
|||
|
Cake |
12 |
||||
|
3 |
57 |
M |
470,000 |
Ham |
2 |
|
|
Coke |
1 |
|||
表A:包含顾客资料与购买纪录之案例资料。