ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用 DB2 Warehouse V9.5 结合文本分析构建数据挖掘应用

使用 DB2 Warehouse V9.5 结合文本分析构建数据挖掘应用

原创 Linux操作系统 作者:ArtCode 时间:2009-01-15 14:10:54 0 删除 编辑
非结构化信息中隐藏着重要的价值,人们越来越希望能将这些隐藏的信息提取出来并加以利用。IBM DB2 Data Warehouse Edition V9.5 (现已更名为 InfoSphere Warehouse )中加入了强大的非结构化数据分析工具 - Unstructured Analysis。这一工具使得充分利用企业中的各种文本信息成为可能。本文将继续通过虚拟电信公司的例子,展示如何使用 IBM DB2 Data Warehouse Edition V9.5 在文本分析的基础上构建数据挖掘应用。

案例简介及环境准备

某电信公司提供移动电话业务。用户在开户时,电信公司在记录新用户的个人信息以及将使用的各种业务的同时,对用户的兴趣爱好进行问卷调查。该电信公司希望了解用户的个人兴趣爱好对用户离网倾向的影响,以及各类用户的特征。

本文采用已装载到数据仓库中的数据。这些数据是通过 ETL 过程每天从操作型环境中加载到数据仓库中的用户信息和通话详单等。

为了使用文本分析工具,在安装 DB2W 时,需要安装非结构化分析组件 (Unstructured TextAnalysis plug-ins 和 Unstructured Analysis Runtime) 。请参照 InfoSphere Warehouse 产品说明。

您可以通过提供的批处理文件 instDB.bat 生成本文中所使用的数据库表及数据。调用 DB2 命令窗口,切换到附件的保存目录,执行批处理文件 instDB.bat 并指定要生成的数据库名字及存储该数据库的地方,如 E:\TELE_DEMO\DB_Scripts > instDB.bat TELE C:\ 。

在 Design Studio 中创建 / 打开工作空间和数据仓库项目。打开 Design Studio (Start->All Programs->IBM DB2 Data Warehouse Edition V9.5->DB2COPY1->Design Studio),指定一个工作空间,如:C:\workspace 。 Design Studio 打开后,关闭欢迎界面。新建一个数据仓库项目 (File->New->Other …->Data Warehouse Project),输入项目名,如 TELE_DEMO 。








文本挖掘应用的构建

非结构化分析与结构化分析相结合

现今的电信行业,竞争越来越激烈。由于各种因素的不确定性和市场增长以及竞争对手的存在, 在努力发展新业务以创造更高利润的同时,电信企业不得不面对客户流失不断增加,客户平均生命周期的不断缩短的情况。如何保持原有客户、最大程度的降低客户的流失成为一个重要的问题。通过建立数据挖掘模型分析客户的历史行为,我们可以找到各种导致客户离开的因素,并预测那些客户将要流失,然后采取措施,有针对性地挽留那些具有离开倾向而且有价值的客户。

传统的数据挖掘方法,我们只能对结构化的数据进行分析,如客户的年龄、性别等数据以及交易记录一类的数据。但是,还有很多重要的信息是以文本的形式存在而没有被利用起来的,例如呼叫中心的记录、用户爱好倾向等。要充分利用各种信息,我们需要通过文本分析工具将非结构化信息和结构化信息结合起来。

分析文件的创建 / 导入

为了进行文本分析,我们需要相关的分析文件。我们可以探查文本字段的数据内容及分布状况,通过抽取常用术语创建分析字典 ( 请参照“使用 DB2 Warehouse V9.5 实现文本分析”一文中数据探查和分析文件创建部分 ),也可以导入先前创建好的字典。

附件中带有已经创建好的分析字典,我们可以通过导入功能将本文所需的分析字典导入到当前的工程中。

Design Studio 中,在主菜单中选择 File->Import 。在导入向导中选择数据仓储 (Data Warehousing) 下的字典 (Dictionary) 。在导入字典窗口,在字典一项中选择附件的保存目录下的 HOBBY_DIC.dict 文件,该字典相应的类型文件将被自动选中,如图 1 。选中文件要导入的工程,并完成导入。


图 1. 导入字典
图 1. 导入字典

我们可以在工程的文本分析->字典 (Text Analysis->Dictionaries) 目录下看到刚才导入的字典,如图 2 。


图 2. 字典导入结果
图 2. 字典导入结果

接下来我们将介绍如何结合非结构化数据和结构化数据创建挖掘模型。

挖掘模型的创建及分析

创建挖掘流

新建挖掘流,从 Design Studio 主菜单中选择 File->New->Mining Flow 。在新建文件向导中输入挖掘流的名字 ChurnPredictWithTextAnalysis,选择 Work against database(Online),并在下一步中指定要连接的数据库连接 (TELE) 。

挖掘流 ChurnPredictWithTextAnalysis 的目标是将结构化数据和非结构化数据组合起来,并创建离网预测模型。完成后的 ChurnPredictWithTextAnalysis 如图 3 。


图 3. 文本分析挖掘流
图 3. 文本分析挖掘流

具体步骤为:

1. 从操作符面板上拖拽表源 (Table Source) 到挖掘流画板上。在打开的选择数据库表 (Select Database Table) 窗口中选择数据库表 TELE.DW_USER_COLLECT 。

2. 我们选取 2006 年 1 月到 4 月用户数据进行分析。从操作符面板上拖拽 Where 条件 (Where Condition) 到挖掘流画板上,连接 Table Source 和 Where Condition 。在属性 (Properties) 页中设置过滤条件 (Filter Condition) 如清单 1 所示:


清单 1. 设置过滤条件
INPUT_06.MONTH = '200601' OR INPUT_06.MONTH = '200602' 
OR INPUT_06.MONTH = '200603' OR INPUT_06.MONTH = '200604'

3. 从操作符面板上拖拽查询字典 (Dictionary Lookup) 到挖掘流画板上,连接 Where Condition 和 Dictionary Lookup 。在 Properties 视图中设置 Dictionary Lookup 的属性。

  • 在字典设置 (Dictionary Settings) 页中选择要分析的文本列 HOBBY,选择文本所对应的语言 English(United States) ;
  • 在分析结果 (Analysis Results) 页,选择字典 HOBBY_DIC 及注释类型 HOBBY_DIC ;删除结果列表中除 BASEFORM. 的所有行,将列名改为 HOBBY 。
  • 在输出列 (Output Columns) 页,把 USER_ID 从可用列表加到结果列表中。由于分析结果可能会将一行数据拆分为多行,在 Output Columns 中选择的字段可用于识别这些来源于同一个记录的多条数据。

4. 用户在填写兴趣爱好时,可能会多次提及同一兴趣爱好,如 table tennis 和 football 均归类为 Sport,若此两项都是某用户所热爱的,文本分析结果中 Sport 就会出现两次,因此我们需要去除文本分析结果中的重复数据,这一操作由 Distinct 操作符完成。
从操作符面板上拖拽 Distinct 到挖掘流画板上,连接 Dictionary Lookup 和 Distinct 。在 Distinct 的属性视图中,转到 Column Select 页,把 USERID 和 HOBBY 加到选择列表中。

5. 为了将文本分析结果和结构化数据结合起来进行下一步的分析,我们需要将拆分为多行的数据根据关键字段重新组合成一行数据,这一步骤通过操作符项聚集程序 (Item Aggregator) 实现。 Item Aggregator 将根据设定的键列将源于同一条数据的多行数据以 XML 的格式重新组合起来。如经查询字典分析后的记录如表 1:


表 1. 经查询字典分析后的记录
USER_ID HOBBY
10000 Ball games
10000 Instrument

经过 Item Aggregator 处理后将变为表 2:


表 2. 经过 Item Aggregator 处理后数据
USER_ID HOBBY
10000 Ball games Instrument

从操作符面板上拖拽 Item Aggregator 到挖掘流画板上,连接 Dictionary Lookup 和 Item Aggregator 。在 Properties 视图中设置 Item Aggregator 的属性。

  1. 在 Column Properties 页中将字段 USER_ID 设定为键列 (Key columns),将文本分析结果列 HOBBY 设为集列 (Set column),将列名改为 HOBBY 并将输出列长度改为 2550 。如图 4 。
  2. 需要注意的是,我们可以有多个键列,但只允许一个集列。键列是用于将源于同一条数据的多条数据还原为一条数据。

图 4. Item Aggregator 属性设置
图 4. Item Aggregator 属性设置

通过 Item Aggregator 重新组合的结果如图 5:


图 5. Item Aggregator 执行结果
图 5. Item Aggregator执行结果

6. 我们将 Item Aggregator 处理的结果和源表联合起来,并用经过文本分析的 HOBBY 字段替代源表中的纯文本 HOBBY 字段。

从操作符面板上拖拽表连接 (Table Join) 操作符到挖掘流画板上,将 Item Aggregator 和 DW_USER_COLLECT 连接到 Table Join,并按照清单 2 设置 Condition 属性:


清单 2. 设置 Condition 属性
IN_028.USER_ID = IN1_028.USER_ID

在 Select List 页中,分别选中 USER_ID 和 HOBBY 并分别下移到 USER_ID_1 和 HOBBY_1 下,删除 Column Name 为 USER_ID_1 和 HOBBY_1 的行。

7. 现在可以建立预测模型了。我们将数据随机分为 2 部分,一部分用于建立预测模型,一部分用于测试预测模型的质量。数据的划分由操作符随机分割 (Random Split) 实现。我们选择数据中的 75% 用于模型的建立,其余的作为测试数据。

从操作符面板上拖拽表 Random Split 操作符到挖掘流画板上,通过内连接输出口连接 Table Join 和 Random Split,并在 Random Split 的常规属性页中设置测试数据百分比 (Percentage of test data) 为 25 。

8. 从操作符面板上拖拽预测器 (Predictor) 到画板上,连接 Random Split 的训练输出端口 (Training Output) 到 Predictor 。在 Properties 视图中设置 Predictor 的属性。

  • 在 Mining Settings 页中选择 IS_LOGOUT 为目标字段,表示我们将对用户是否离网进行预测;使用预测算法贝叶斯 Navie Bayes,并设置可能性阈值 (Probability threshold) 为 0.002 。
  • 在 Column Properties 页中,将字段 HOBBY 的字段类型设置为集值分类 (Set-Valued Categorical),这样,算法就会识别出该字段包含的内容为 Item Aggregator 的输出,将在模型计算中进行相应的处理。并将 USE_ID 的字段类型设为非活动 (Inactive) 。

9. 为了检测生成的预测模型的质量,我们使用测试程序 (Tester) 对模型进行评测。

从操作符面板上拖拽 Tester 到挖掘流画板上,连接 Predictor 的输出到 Tester 的模型输入端口,连接 Random Split 的 Test Output 输出到 Tester 作为输入。在属性页列映射 (Column Mapping) 中,确保输入字段和模型的字段已完全匹配。

10. 从操作符面板上拖拽可视化器 (Visualizer) 到画板上,连接 Tester 和 Visualizer 。这样,在挖掘流执行成功后,我们就可以看到生成模型的测试结果。

结合结构化数据和非结构化数据生成的贝叶斯预测模型如图 6 :


图 6. 文本挖掘结果
图 6. 文本挖掘结果

挖掘结果的分析

为了将传统数据挖掘方法生成的模型与结合结构化数据和非结构化数据生成的模型进行比对,我们创建如图 7 的挖掘流 ChurnPredictWithoutTextAnalysis 。


图 7. 数据挖掘流
图 7. 数据挖掘流

由于我们不对 HOBBY 字段进行分析,因此在连接表源和 Where 条件后,需要删除这 2 个操作符之间的 HOBBY 字段的连接。右键选中表源和 Where 条件之间的连接,并在弹出的菜单中选择“编辑->编辑列连接”。在编辑列连接对话框中,在源列表中选中字段 HOBBY 并选择 < 断开连接 > 。如图 8 。


图 8. 删除连接
图 8. 删除连接

在删除连接后右键选中 Where 条件的输入端口,并选择“编辑->删除未映射的列”,如图 9 。其余的设置和带有文本分析的挖掘流的设置相似。


图 9. 删除未映射列
图 9. 删除未映射列

执行挖掘流 ChurnPredictWithoutTextAnalysis,并比较一下结合结构化数据和非结构化数据生成的贝叶斯预测模型与针对相同源数据的传统数据挖掘方法的结果。图 10 为上述 2 种挖掘方式的结果模型比较。


图 10. 挖掘结果的对比
图 10. 挖掘结果的对比

从图中我们可以看到,经文本分析得到的挖掘模型比传统方式只由结构化数据生成的模型具有更高的提升值,也就是拥有更好的预测准确性。在实际的应用中,预测准确性的提高,是非常有价值的。

挖掘模型的应用

如果想了解某些用户的离网倾向,我们可以将这些用户的信息应用到先前建立的挖掘模型中。

创建挖掘流 ChurnPredictScoring,并设计如图 11 的挖掘流。


图 11. 挖掘模型的应用
图 11. 挖掘模型的应用

具体步骤为:

  1. 从操作符面板上拖拽模型源 (Model Source) 到挖掘流画板上并选择在挖掘流 ChurnPrediction 中生成文本挖掘模型。如,TELE.CHURNPREDICT_WITH_TEXT。
  2. 从操作符面板上拖拽表源 (Table Source) 到挖掘流画板上并选择数据库表 TELE.DW_USER_COLLECT。
  3. 我们选取 2006 年 5 月到 6 月用户数据进行分析。
    从操作符面板上拖拽 Where 条件 (Where Condition) 到挖掘流画板上,连接 Table Source 和 Where Condition 后在属性 (Properties) 页中设置过滤条件 (Filter Condition) 如清单 3


    清单 3. 设置过滤条件
    INPUT_03.MONTH = '200605' OR INPUT_03.MONTH = '200606'

  4. 对于操作符 Dictionary Lookup,Distinct,Item Aggregator,Table Join,很参照挖掘流 ChurnPredictWithTextAnalysis 的设置步骤 4 到 6 进行设置。
  5. 从操作符面板上拖拽操作符评分器 (Scorer) 到挖掘流画板上,连接模型源到评分器的模型端口,并连接表连接的内部端口到评分器的输入端口。在评分器的属性视图中,切换到列映射页,确保所有挖掘模型字段都映射到合适的输入列。
  6. 右键点击评分器的输出端口,从上下文菜单中选择“创建合适的表…” (Create Suitable Table … ) 并指定生成表的模式及名字为 TELE 和 PREDICT_SCORE 。

评分结果中,字段 PREDICTED_CLASS 和 CLASS_CONFIDENCE 标识了对输入数据的预测结果及预测的可靠性,其中 PREDICTED_CLASS 值为“ 1 ”的用户是有离网倾向的用户。我们可以根据这个结果,采取相应的措施挽留那些有价值的用户。








总结

本文主要介绍了如何在文本分析的基础上结合非结构化数据和结构化数据创建数据挖掘应用,并使用 DB2W 95 的设计分析工具加以实现。



参考资料

学习

获得产品和技术

讨论


关于作者


梁佩佩是 IBM 中国软件开发中心的软件工程师,主要负责 DB2 Warehouse 中数据挖掘工具和文本分析工具的测试。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15082138/viewspace-539711/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-05

  • 博文量
    269
  • 访问量
    559913