技术开发 频道

InfoSphere 和Cognos检测偏差

    为偏差检测创建交互式 Cognos 报告

    在本节中,学习如何创建允许交互式查看离群值的 Cognos 报告。开始时可以使用一个类似于本系列第一篇文章中所用的报告。但是,这次不是一个病人列表(其中有一个关于哪些病人应该进行体检的指示器),而是一个客户列表,其中有一个关于应该检查哪些客户的指示器,看是否存在欺诈或潜在机会。这种方法适用于有较少数量客户的列表,但不适用于有数千个条目的列表。而且,分析师可能还想看是什么使得一个特定的客户成为一个 “离群值”。需要更多的信息才能完成这个任务。因此,让我们从两个方面来扩展这个简单的方法:

    将客户按职业分组,并提供关于每种职业发现多少离群值的概述。这种分组方式对于处理大量的信息是一个好方法。例如,可以让一个特定的雇员负责一个类别,使每个类别都得到检查。除了职业外,其他方面也可以用于分组(比如位置)。

    对于每个记录,添加将其划分为离群值的信息。如前所述,每个记录被指定到一个集群,一个集群的所有成员具有相同的偏差度。因此,可以使用一个集群的属性来描述离群值。例如,如果一个集群中大部分是年轻人,而他们有较高的平均余额,那么这可以很好地解释为什么这个集群被认为是离群值集群。

    接下来的小节首先展示如何用附加信息扩展离群值。然后,您将创建一个交互式报告,该报告将客户按职业分组,并且允许使用 Cognos 的 “穿透钻取” 特性交互式地选择一个特定类别中的离群值。

    从挖掘模型中提取附加信息

    表 CUSTOMER_OL 包含关于离群值的相关信息。如前所述,每个记录被指定到一个集群。“Find Deviations” 操作符在后台创建一个集群模型,其中存储关于这些集群的详细信息。该信息以 PMML(Predictive Model Markup Language)格式存储在数据库中。它包含关于以下方面的信息:

    集群中值的分布

    集群中记录的数量

    每个集群的偏差的重要性

    集群的同质性

    其他

    可以使用 InfoSphere Warehouse 附带的存储过程将该信息提取到结果集中,以便 Cognos 进一步处理。这样的结果集可以看作是 “视图”,它们不是显式地在数据库中创建的,而是由存储过程动态地创建的。

    如果要提取关于集群的文本信息,可使用以下命令:

    SELECT ID, DESCRIPTION FROM TABLE(IDMMX.DM_GETCLUSTERS((SELECT MODEL FROM IDMMX.CLUSTERMODELS WHERE MODELNAME='IDMMX.OUTLIERMODEL'))) AS CT

    这样可以得到一个包含以下列的表:

    ID:集群的 id(对应于 CUSTOMER_OL 表中的 ID)

    DESCRIPTION:集群的文本描述

    Cognos 可以使用这些结果集作为视图或表。惟一要注意的是,DB2 中没有包括这些存储过程,它们是由 InfoSphere Warehouse 提供的。我们稍后对此进行讨论。图 5 总结了从 InfoSphere 提取信息到 Cognos 的两种方法:使用简单的数据库视图/表,或者使用存储过程从挖掘模型中提取信息。这些存储过程不仅可以用于集群模型,还可以用于其他挖掘模型。要获得所有可用的模型提取函数的列表,请参阅 InfoSphere Warehouse 文档(见 参考资料)。接下来,我们将展示如何使用 Cognos framework manager 合并这两种信息。

   图 5. 在 Cognos 中访问和挖掘相关信息的两种方法

     在 Cognos Framework Manager 中导入和合并挖掘结果

    对于这个报告,Cognos 项目中需要两个查询主题,然后通过连接它们获得每个离群值的文本描述:

    一个简单的访问第一节中创建的离群值表 BANK.CUSTOMER_OL 的查询主题。这个查询主题包含客户记录和偏差度以及集群 id。

    查询主题使用存储过程访问由挖掘算法创建的集群模型的集群信息。如前所述,集群信息包括对集群的简短文本描述(在这里就是对这个集群中所有离群值记录的描述)和其他信息。

    首先,需要创建一个 Cognos Framework Manager 项目,该项目连接到 InfoSphere Warehouse 的示例数据库 DWESAMP,并且有前面创建的 BANK.CUSTOMERS_OL 表。本系列的 将 InfoSphere Warehouse 数据挖掘与 IBM Cognos 报告集成,第 1 部分:InfoSphere Warehouse 与 Cognos 集成架构概述 提供这个步骤的详细说明。一个很好的做法是在 PresentationView 名称空间中创建一个查询主题,这个查询主题包含必要的数据库中的信息,以便拥有从 SQL 语句创建的查询主题上的抽象层。这也使得您可以将列名改成更具描述性的文本,还可以添加更多的列。您需要一个离群值标记项,以表明一个记录是否为离群值。可以根据偏差度查询项 DEV_DEGREE 计算出这个标记项。

    为了创建报告使用的离群值表查询主题:

    在 PresentationView 名称空间中从模型(已有的查询主题和查询项)创建一个新的查询主题 “OutlierTable”。

    添加 CUSTOMER_OL 查询主题中的所有查询项,并将它们的名称改成更具描述性的名称。

    用以下表达式定义添加一个新的查询项:

    IF ([PresentationView].[OutlierTable].[Deviation factor] > 1000) then (1) else (0)

    如果偏差大于 1000,这个查询项的值将为 “1”;否则,它将为 “0”。偏差系数 1000 用作数据集的敏感分界系数。将这个偏差敏感度参数化有助于返回更多或更少的记录作为离群值。

    查询主题定义看上去应该如图 6 所示:

    图 6. 离群值表的查询主题定义

    第二个查询项是一个表,其中包含关于集群模型的集群的信息,这个集群模型是在 find deviation 运行期间创建的。可以在 InfoSphere Warehouse Data Mining 中使用用户定义函数 IDMMX.DM_GETCLUSTERS 提取集群模型的列表描述。该函数返回一个表,其中包含模型中的集群,以及关于这个集群中字段分布的简短文本描述。在 IDMMX.CLUSTERMODELS 表中,集群模型被保存为 CLOBS,另外,该表中还包括一个 “MODELNAME” 列,用于选择适当的模型。用户定义函数需要打包到 SELECT 语句中,以供 Gognos 使用。由于 InfoSphere Warehouse Mining 表函数不是标准的 DB2 函数,所以在创建这个查询主题之前,需要更改一些 Cognos 选项。

    为了从 DB2 表函数创建集群描述查询主题,您需要:

    在 Project Viewer 中,选择 Data Sources 文件夹中的数据库 DWESAMP,在属性视图中将 “Query Processing” 属性改为 “Limited Locale”。这样就启用了来自 SQL 的 Cognos 不能识别的查询主题。

    在 PresentationView 名称空间中创建一个新的查询主题 “OutlierClusters”,并选择从一个数据源对该查询主题建模。如果从一个存储过程中对它进行建模,那么只支持 Cognos 能识别的存储过程。

    在 “Select a data source” 页面上,选择 DWESAMP,并取消对选择 Run database query subject wizard 复选框。查询主题向导只适用于标准 SQL。单击 Finish。

    创建查询主题后,会出现 Query Subject Definition 向导。输入 SQL 代码,以返回模型中的集群,其中 IDMMX.OUTLIERMODEL 是 “find deviations” 运行期间生成的集群模型的名称。 SELECT * FROM TABLE(IDMMX.DM_GETCLUSTERS((SELECT MODEL

    FROM IDMMX.CLUSTERMODELS WHERE MODELNAME='IDMMX.OUTLIERMODEL'))) AS CT


    由于 Cognos 不能识别这个的 SQL,因此需要将查询的 SQL 类型设为 “Native”,这告诉 Cognos 将 SQL 传递给数据库,而不是解释它。要改变这个设置,可以打开查询主题属性的 “Query Information” 选项卡。选择 “Options”,将 “SQL settings” 下的 “SQL type” 改为 “Native”。

    “Test Sample” 运行后应该返回一个表,其中包含模型中的集群,如图 7 所示:

   图 7. 离群值集群查询主题的测试结果

    使用存储过程作为查询主题输入有一个好处,那就是不需要在数据库中创建不必要的表或视图。更重要的是,存储过程将在报告生成期间执行。这使得它可以在报告生成期间动态地执行挖掘计算。本系列后面的文章将更详细地讨论这个专题。

    为了创建连接 OutlierTable 表和 OutlierClusters 查询主题的报告,需要在离群值记录中的集群 id 与集群表中的集群 id 之间建立一个关系。

    为了在 OutlierTable 与 OutlierClusters 查询主题之间建立一个关系,您需要:

    从 OutlierTable 的上下文菜单中选择 Create Relationship。

    对于左边的查询主题,选择 OutlierTable 的集群 id,并将基数设为 1..n,因为有多个记录属于同一个集群。

    对于右边的查询主题,添加 OutlierClusters 查询主题,选择 ID 列,并将基数设为 1..1,因为对于每个集群有一行记录。

    选择 OK。

 图 8. OutlierTable 与 OutlierClusters 查询主题之间的关系
 

   您已经创建了 Cognos 报告所需的查询主题,现在可以将一个包含项目的 PresentationView 的 “OutliersPackage” 部署到 Cognos Content Store。可以像本系列 将 InfoSphere Warehouse 数据挖掘与 IBM Cognos 报告集成,第 1 部分:InfoSphere Warehouse 与 Cognos 集成架构概述 创建和部署这个包。

图 9. Framework Manager 中创建的资源
 

0
相关文章