目次


PMML として保管されたデータ・マイニングの結果を DB2 の XQuery を使って抽出する

データ・マイニングの結果を効果的に利用する

はじめに

この記事では、DB2 の XQuery 機能と (XML で保管された) データ・マイニングの結果とを InfoSphere Warehouse Data Mining を使って組み合わせる方法について説明します。

InfoSphere Warehouse Data Mining には、以下に挙げるタスクのような、一般的なデータ・マイニングのタスクのためのアルゴリズムと、そうしたタスクのためのサンプル・アプリケーションが用意されています。

  • クラスタリング (重要な顧客セグメントや不正な振る舞いの発見など)
  • 相関ルール (クロスセリングや店のレイアウトの改善など)
  • 系列パターン (選択的マーケティングや部分的な失敗の予測など)
  • クラス分類 (解約分析や医療診断など)
  • 回帰分析 (保険請求の予測やリスク管理)

こうしたさまざまなデータ・マイニング・タスクの結果はデータ・マイニング・モデルと呼ばれ、PMML 標準を使ってデータベース表に保管されます。PMML 標準は XML をベースとしているため、異なるデータ・マイニング・プロバイダーの間で容易にモデルを交換することができます。そうしたモデルは新しいデータに適用することができ、この操作をスコアリングと呼びます。

例えば、債務不履行のリスクに応じて新しい顧客を分類したいという要求があるかもしれません。PMML モデルでは、マイニングの結果に関する重要な情報をすべて保管する必要があります。Intelligent Miner には、PMML モデルから最も重要な情報を取得できるように、一連の SQL 抽出関数が用意されています。

この記事では、それ以上の情報やもっと別の情報が必要な場合のために、そうした情報を抽出する方法を説明します。さらにこの記事では、DB2 の XQuery の強力さについて、またそれを DB2 の UDF (ユーザー定義関数) や STP (ストアード・プロシージャー) と組み合わせて使うための方法についても説明します。

XQuery について理解する

DB2 9 では、pureXML によって XML データ型が導入され、それによって DB2 データベースでの XML 文書の照会や処理が非常に効率的に行えるようになりました。

XML 文書から情報を抽出するために使用できる問い合わせ言語は 2 つあります。指定された制約に従って XML ツリーをナビゲートし、ノードを選択するためには XPath 言語が使われます。XQuery は XPath のスーパーセットであり、For、Let、Order by、Where、そして Return (まとめて FLWOR 式 (フラワーと発音されます) とも呼ばれます) が式として追加されているため、より複雑な SQL スタイルのクエリーを XML 文書に対して実行することができます。また XQuery を使って、XSLT の場合と同じような方法で XML 文書を変換することもできます。

サンプル・データ

pureXML を使用するためには、データベースが UTF-8 でエンコードされている必要があります。DB2 9.5 以降では、UTF-8 がデフォルトになっています。XML 列の作成は他の列の場合と同じです。リスト 1 のコードは、DB2 に ID 列と XML 列を持つ簡単なテスト表を作成します。

リスト 1. 簡単なテスト表を作成する
db2 "CREATE TABLE XMLTEST (ID int, XMLCOLUMN XML)"

このテスト表に XML を挿入するためには、INSERT 文を使います (リスト 2)。コマンドの中にある XML ストリングは構文解析され、XML 列に渡されます。引用符を使って適切にエスケープすることを忘れないでください。

リスト 2. XML を挿入する
db2 "INSERT INTO XMLTEST VALUES (1, '<Person ... />')"

この記事の後の方で、リスト 3 に示すサンプル XML データを使います。XML フラグメントである各 Person は、XML 列のそれぞれ別の行に保管されます。

リスト 3. XML を挿入する
<Person> 
	<Name>John Smith</Name> 
	<Tel publish="false">555-8659</Tel>
</Person>
...
<Person> 
	<Name>Mark Muster</Name> 
	<Tel publish="true">555-7765</Tel>
</Person>

XQuery を使ってデータを取得する

DB2 では、SQL の中で XQuery 式を使うことができますが、SQL の外で XQuery 式を使う場合は、XQuery 式の前に XQUERY を付け、入力列の指定は、db2-fn:xmlcolumn コマンドと、XML ソースを含む列のパラメーターとを使って行う必要があります (リスト 4)。

リスト 4. SQL の外で XQuery 式を使う
db2 "XQUERY db2-fn:xmlcolumn('XMLTEST.XML')"

XML 文書を扱う際に最も重要な概念は XML パスです。XML パスによって、XML ツリーの中でのノードや要素の場所を指定することができます。リスト 5 の XPath 式は、XML 文書のルート・ノードからのパスを指定することで、その文書の中に含まれている人達の Name ノードを返します。

リスト 5. Name ノードを返す。
XQUERY db2-fn:xmlcolumn('XMLTEST.XML')/Person/Name
...
<Name>John Smith</Name>
<Name>Mark Muster</Name>
2 record(s) selected.

XQuery には、複数の XML 文書に照会を行うための、SQL スタイルの高度な式が用意されています。リスト 6 の例は For 式と Where 式を使うことによって、電話番号が公開されていない人を検索します。XML ノードの属性にアクセスするためには @ 修飾子を使います。publish 属性のチェックに使われている式が大括弧で括られていることに注目してください。

リスト 6. 特定の人達の電話番号を照会する
XQUERY for $x IN db2-fn:xmlcolumn('XMLTEST.XML')/Person/Tel 
    where $x[@publish='false'] return $x
...
<Tel publish="false">555-8659</Tel>
1 record(s) selected.

XQuery を利用すると、DB2 表に保管された XML 文書から XML のノードや値を抽出することができます。しかし構造化された表として情報を抽出する手段がないと、XML を読み取る機能のないツールで読み取ることはできません。そのために DB2 で使われる手段が XMLTABLE 式です。XMLTABLE 式を使うと XQuery 式から表を作成することができます。XMLTABLE は SELECT クエリーの FROM 節の中で使われます。最初の引数は、XML フラグメントを返す XQuery 式を指定します。COLUMNS 引数は、表の出力列を指定します (列の名前、型、各 XML フラグメントに対する相対的な XQuery 式など)。

リスト 7. XMLTABLE 式を使う
select * from 
    XMLTABLE ('db2-fn:xmlcolumn("XMLTEST.XML")/Person' 
	    	COLUMNS 
				name VARCHAR(20) PATH 'Name', 
				tel VARCHAR(20) PATH 'Tel', 
				published VARCHAR(5) PATH 'Tel/@publish'
		) AS X;

...
						
NAME                 TEL                  PUBLISHED
-------------------- -------------------- ---------
John Smith           555-8659             false
Mark Muster          555-7765             true

  2 record(s) selected.

DB2 でこのタイプの select 文を使うと、XML 文書の中にあるすべての情報を抽出することができ、それらの情報を SQL の表データとして渡すことができます。詳細については「参考文献」を参照してください。

PMML について理解する

PMML (Predictive Model Markup Language) は、データ・マイニング・モデルを記述し、また異なるデータ・マイニング・プロバイダーの間でのマイニング・モデルの交換を実現する XML マークアップ言語です。モデルを交換できると、他のプログラムはそれらのデータ・マイニング・モデルに対してスコアリングを行うことができ、そのプログラムが自らモデルを作成する必要がありません。PMML の仕様は Data Mining Group の Web サイトに公開されています (「参考文献」を参照)。

PMML モデルは通常、以下の構造に従っています。

  • PMML ルート・ノート (使用されている PMML のバージョンを示します)
  • ヘッダー (名前や日付など、そのモデルに関する一般的な情報を提供します)
  • MiningBuildTask (そのモデルを作成するために使われた構成に関する情報を提供します)
  • DataDictionary (そのモデルを作成するために使われたフィールド (名前、型、値など) に関する情報を提供します)

モデルの情報は、使用されるモデルに依存します。リスト 8 はクラスタリング・モデルの PMML 構造を示しています。

リスト 8. クラスタリング・モデルの PMML 構造
<?xml version="1.0" encoding="UTF-8" ?>

<PMML version="3.0" xmlns="http://www.dmg.org/PMML-3_0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://www.dmg.org/PMML-3_0 http://www.dmg.org/v3-0/pmml-3-0.xsd">
 <Header copyright="Copyright IBM Corp. 2002, 2007 All Rights Reserved">
  <Application name="IBM DB2 Intelligent Miner" version="9.5"/>
  <Timestamp>2008-11-23 23:03:09</Timestamp>
 </Header>
 <MiningBuildTask>
 	...
 <DataDictionary numberOfFields="8">
  ...
 <ClusteringModel modelName="BANK.CUSTOMERS_SEGMENTS" modelClass="centerBased" 
    functionName="clustering" algorithmName="Kohonen" numberOfClusters="5" 
    x-execTime="0.070000171661377" x-similarityThreshold="0.5" 
    x-quality="0.780511795527719">	
    ...

下記の例では Kohonen アルゴリズムに基づくクラスタリング・モデルを使用しています。PMML は集中ベースのクラスタリング・モデルと分散ベースのクラスタリング・モデルをサポートしています。どちらのモデルも、最上位レベルの要素は ClusteringModel 要素になっており、クラスターのリスト、そして新しいレコードと他のクラスターとの距離や類似性を計算する手段も含まれています。リスト 9 は集中ベースの Kohonen クラスター・モデルを示しています。

リスト 9. 集中ベースの Kohonen クラスター・モデルを使用する
<ClusteringModel modelName="BANK.CUSTOMERS_SEGMENTS" modelClass="centerBased" 
    functionName="clustering" algorithmName="Kohonen" numberOfClusters="5" 
    x-execTime="0.070000171661377" x-similarityThreshold="0.5" 
    x-quality="0.780511795527719">
 + <Extension name="Matrix">
 + <Extension name="X-Correlations">
 + <MiningSchema>
 + <ModelStats>
 <ComparisonMeasure kind="distance">
  <squaredEuclidean/>
 </ComparisonMeasure>
 <ClusteringField field="AGE" compareFunction="absDiff" 
     x-quality="0.291742616514616"/>
 <ClusteringField field="AVERAGE_BALANCE" compareFunction="absDiff" 
     x-quality="0.223507903713586"/>
 <ClusteringField field="GENDER" compareFunction="absDiff" 
     x-quality="0.67909000081883"/>
 <ClusteringField field="ID" compareFunction="absDiff" 
     x-quality="0.32252228279477"/>
 <ClusteringField field="MARITAL_STATUS" compareFunction="absDiff" 
     x-quality="0.593752740606671"/>
 <ClusteringField field="NBR_YEARS" compareFunction="absDiff" 
     x-quality="0.34454192375915"/>
 <ClusteringField field="NOT_USED" compareFunction="absDiff" 
     x-quality="0.198193321261319"/>
 <ClusteringField field="SAVING_ACCOUNT" compareFunction="absDiff" 
     x-quality="0.663013938830898"/>
 + <CenterFields>
 <Cluster name="1" x-quality="0.786176824083955">
 ...

x- で始まる属性はすべてベンダー固有のものであり、無視することができます。PMML の詳細とサンプルは Data Mining Group の Web サイトに説明されています (「参考文献」を参照)。

Intelligent Miner について理解する

Intelligent Miner は UDF と STP を使用して DB2 に統合されます。SQL 文、または InfoSphere Warehouse DesignStudio のグラフィカル・インターフェースのいずれかを使用することで、データ・マイニング・モデルを作成することができますが、グラフィカル・インターフェースを使った方が便利です。PMML モデルは DB2 表に保管され、それを使うことで新しいデータのスコアリングや情報の抽出を行うことができます。

例えば 1 つのシナリオとして、銀行の顧客のデータがあり、そのデータからクラスタリングを使ってさまざまな顧客セグメントを判断する場合を考えてみてください。すべての顧客の重要情報は 1 つのデータベース表またはビューにまとまっている必要があります (リスト 10)。

リスト 10. 銀行の顧客のデータを表示する
db2 select * from bank.customers fetch first 3 rows only

ID     AGE  GENDER  MARITAL_STATUS  NBR_YEARS  SAVING_ACCOUNT  AVERAGE_BALANCE NOT_USED
------ --- -------  --------------  ---------   -------------   --------------  -------- 
120921  34    m          s             3              n                -23       n       
223423  55    m          m             12             y                123       n       
937212  25    m          s             2              y                388       n       

  3 record(s) selected.

このサンプル・データに対するクラスタリング・モデルを作成するためには、IDMMX.BuildClusModel という STP を使用します。この IDMMX.BuildClusModel のパラメーターは以下のとおりです。

  • モデルの名前
  • データベース表またはビューの名前
  • 特定のデータ・マイニング・パラメーター

リスト 11 は、このモデルを作成するためのコマンドを示しています。

リスト 11. モデルを作成する
db2 "call IDMMX.BuildClusModel('BANK.CUSTOMERS_SEGMENTS', 'BANK.CUSTOMERS',
'DM_setAlgorithm(''Kohonen'')')"

モデルを作成できたら、Intelligent Miner Visualizer を使ってグラフィカルな方法でモデルを表示するか、あるいは Intelligent Miner の既存の抽出関数を使用して、一部の情報を SQL によって取得します。例えば、クラスター・モデルの概要を示す情報として、クラスターの数、使用されているフィールド、そしてそのモデルの品質を抽出することができます。リスト 12 はそのための SQL を示しています。

リスト 12. SQL を使ってクラスター・モデルの概要を抽出する
SELECT 
	"ID" AS "CLUSTERID",
	CAST ("NAME" AS CHAR(20)) AS "CLUSTERNAME",
	"SIZE",
	CAST ("HOMOGENEITY" AS DEC(5,2)) AS "HOMOGENEITY"
FROM TABLE 
  (IDMMX.DM_getClusters((
	              SELECT "MODEL" 
               	FROM IDMMX."CLUSTERMODELS" 
	              WHERE "MODELNAME"='BANK.CUSTOMERS_SEGMENTS'))) 
	AS "CLUSTERS"
	ORDER BY SIZE DESC;

リスト 13 はリスト 12 の SQL を実行した結果を示しています。

リスト 13. SQL を実行した結果として表示されるクラスター・モデルの概要
MODELNAME            NUMBER_CLUSTERS NUMBER_FIELDS MODEL_QUALITY
-------------------- --------------- ------------- -------------
BANK.CUSTOMERS_SEGME               7             7          0.81

1 record(s) selected.

XQuery と Intelligent Miner とを組み合わせて使う

大部分の情報は公開されているデータ・マイニング関数を使うことで抽出できますが、一部の情報は抽出することができません。XQuery 関数と Intelligent Miner 関数とを組み合わせると、そうした隠れた部分を PMML モデルから直接読み取ることができます。

現状の Intelligent Miner では、クラスターの補助フィールドの詳細を抽出することはできません。クラスターを計算する上での重要性に応じて、フィールドはアクティブ・フィールドあるいは補助フィールドのいずれかになります。例えば、DB2 の主キーであって常に異なる値を持つフィールドは (そのフィールドを見てもクラスターの詳細はわからないため)、自動的に補助フィールドになります。

PMML モデルの中に隠れている情報は、MiningField という XML ノードで見つけることができます。usageType 属性の値が Supplementary である場合には、そのフィールドが補助フィールドであるということです。デフォルトの使用タイプはアクティブ・フィールドであるため、アクティブ・フィールドは PMML ファイルの中には現れません。

リスト 14 は PMML による MiningSchema の例を示しています。

リスト 14. PMML による MiningSchema のコード
<MiningSchema>
 <MiningField name="AGE"/>
 <MiningField name="AVERAGE_BALANCE"/>
	...
 <MiningField name="SAVING_ACCOUNT"/>
 <MiningField name="ID" usageType="supplementary"/>
</MiningSchema>

リスト 15 は DB2 における UDF の実装方法の一例です。この UDF はクラスターのすべてのフィールドを抽出し、それらのフィールドの使用タイプを表示します。

リスト 15. DB2 で UDF を実装する
CREATE FUNCTION getClusterMiningFields (mname varchar(128))
    RETURNS TABLE (name      varchar(20),
                   usagetype varchar(20))
    LANGUAGE SQL
  
		BEGIN ATOMIC RETURN 
		   select X.name, 
              CASE WHEN X.usageType IS NULL THEN 'active' 
                   ELSE X.usageType END  
       from XMLTable('$DATA//*:MiningField' PASSING 
                     XMLPARSE(document (
                              select IDMMX.DM_expClusModel(cm.MODEL) 
                              from IDMMX.CLUSTERMODELS cm 
                              where MODELNAME=mname)) as "DATA" 
                     columns
                     name varchar(20) path '@name',
                     usageType varchar(20) path '@usageType') as X;
		END@

この関数の、それ以外の部分を詳しく調べてみましょう。この UDF は表関数として宣言されており、これはこの関数が単に 1 つの値を返すのではなく、一時表を返すということです。この UDF は SQL で作成されているため、LANGUAGE は SQL です。create function 文のオプションのうち、これ以外のオプションにはすべてデフォルトが使われています。多くの場合、このような設定にしておくのが適切です。

UDF の本体は、BEGIN トークンと END トークンの間に実装されています。結果の列はすべて、SQL/XQuery 文の select 部分で指定されています。この例の場合、結果の列は X.name と X.usageType です (これらの列は XMLTABLE 式の出力列です)。X.usageType に対する case 文を見ると、アクティブな XML 属性は PMML 文書に書き込まれないことがわかります。

XMLPARSE が必要な理由は、PMML 文書自体は XML 列の中に直接保管されるわけではないためです。IDMMX.DM_expClusModel 関数を使って PMML 文書を BLOB 列からエクスポートし、そのエクスポートされた PMML 文書を、XMLPARSE 関数を使って XML 値の中にコピーする必要があります。

XML 値として PMML 文書が利用できるようになると、その文書を XQuery を使って処理することができます。リスト 15 はネイティブの XQuery を使って処理する例を示しています。

create function 文を呼び出すためには、この文をファイルの中に入れ、そのファイルをリスト 16 に示す構文で呼び出します。従来の EOS 文字が使われていないことに注目してください。これは UDF の中で EOS 文字が要求されるためです。

リスト 16. create function 文を含むファイルを呼び出す
db2 -td@ -vf createClusterFieldUDF.db2

select 文の中で UDF を呼び出すと、フィールドに関する情報 (どれがアクティブ・フィールドでどれが補助フィールドか、など) を取得することができます (リスト 17)。

リスト 17. フィールドに関する情報を読み取る
db2 select t1.name, t1.usagetype from table
(getClusterMiningFields('BankCustomerSegments')) t1				

NAME                 USAGETYPE
-------------------- --------------------
AGE                  active
NBR_YEARS_CLI        active
GENDER               active
MARITAL_STATUS       active
PROFESSION           active
SAVINGS_ACCOUNT      active
HAS_LIFE_INSURANCE   active
INT_CREDITCARD       active
ONLINE_ACCESS        active
JOINED_ACCOUNTS      active
BANKCARD             active
CLIENT_ID            supplementary
AVERAGE_BALANCE      active
NO_CRED_TRANS        active
NO_DEBIT_TRANS       active

  15 record(s) selected.

これと同じ機能を STP の中に入れることもできます。STP を作成するための構文は異なるように見えますが、コード自体はまったく同じです (リスト 18)。

リスト 18. STP を使う
CREATE PROCEDURE getClusterMiningFields
(
  in mname varchar(128)
)
  LANGUAGE SQL
  RESULT SETS 1
BEGIN
  DECLARE cursor1 CURSOR WITH RETURN FOR 
		   select X.name, 
              CASE WHEN X.usageType IS NULL THEN 'active' 
                   ELSE X.usageType END  
       from XMLTable('$DATA//*:MiningField' PASSING 
                     XMLPARSE(document (
                              select IDMMX.DM_expClusModel(cm.MODEL) 
                              from IDMMX.CLUSTERMODELS cm 
                              where MODELNAME=mname)) as "DATA" 
                     columns
                     name varchar(20) path '@name',
                     usageType varchar(20) path '@usageType') as X;
  OPEN cursor1;
END@

DB2 のコマンド行ウィンドウから call 文を使って STP を呼び出すことができます。この出力 (リスト 19) は UDF の実装で説明したものと同じです。

リスト 19. DB2 のコマンド行ウィンドウから STP を呼び出した結果
db2 call getClusterMiningFields('BankCustomerSegments')

  Result set 1
  --------------

  NAME                 2
  -------------------- --------------------
  AGE                  active
  NBR_YEARS_CLI        active
  GENDER               active
  MARITAL_STATUS       active
  PROFESSION           active
  SAVINGS_ACCOUNT      active
  HAS_LIFE_INSURANCE   active
  INT_CREDITCARD       active
  ONLINE_ACCESS        active
  JOINED_ACCOUNTS      active
  BANKCARD             active
  CLIENT_ID            supplementary
  AVERAGE_BALANCE      active
  NO_CRED_TRANS        active
  NO_DEBIT_TRANS       active

  15 record(s) selected.

  Return Status = 0

InfoSphere Warehouse のツールを使ってサンプル UDF を作成する

InfoSphere Warehouse DesignStudio には、Java™ や SQL を使って STP や UDF を開発するための統合ツールが用意されています。ここでは、この記事での 2 番目の例として、相関モデルからモデル情報を読み取る UDF を作成します。この情報は Association Visualizer の中にありますが、その情報を抽出する SQL 関数が Association Visualizer にはありません。InfoSphere Warehouse DesignStudio のツールを利用すると、UDF の作成やデプロイメント、テストを容易に行うことができます。

このツールを使うための手順は以下のとおりです。

  1. InfoSphere Warehouse DesignStudio を開きます。
  2. Window > Open Perspective > Other の順に選択して、Data パースペクティブに切り換えます。
  3. Data パースペクティブがリストに表示されていない場合には Show all を選択し、表示されるリストから Data を選択します。すると Data Project Explorer が左上に表示されるはずです。
  4. File > New > Data Development Project の順に選択して、新しい Data Development Project を作成します。
  5. 新しいプロジェクトに PMMLExtraction という名前を付けます。
  6. 相関モデルを含んでいてマイニングに使用可能なデータベースを選択します。この例の場合には、DWESAMP というサンプル・データベースを選択し、Finish をクリックします。すると、UDF 用、STP 用、その他のデータベース・オブジェクト用にそれぞれのサブフォルダーを持つ、新しい Data Development プロジェクトが作成されるはずです (図 1)。
図 1. DesignStudio のデータ・パースペクティブ
DesignStudio のデータ・パースペクティブ
DesignStudio のデータ・パースペクティブ

図 1 を拡大表示するには、ここをクリックしてください。

SQL を使用できる UDF を作成するためには以下の手順に従います。

  1. New > User-Defined Function の順に選択し、User-Defined Functions フォルダーを右クリックすることで、新しい UDF を作成します。
  2. UDF の名前を AssocInformationExtractor に変更し、言語 (LANGUAGE) が SQL になっていることを確認します。
  3. Finish をクリックすると、非常に基本的な UDF が作成されます。これで、この UDF に必要なロジックを追加できるようになります。

相関モデルには、いくつものグローバル統計が含まれています (トランザクションの数、項目セットの数など)。これらの統計は InfoSphere Warehouse の Association Visualizer の Statistics タブに表示されます (図 2)。

図 2. Association Visualizer に表示されたグローバル統計
Association Visualizer に表示されたグローバル統計
Association Visualizer に表示されたグローバル統計

この情報は相関モデル・ノードの属性として PMML モデルの中に保管されています (リスト 20)。

リスト 20. 相関モデルの属性
<PMML ...
  
	<AssociationModel 
		modelName="MBA.RULES" 
		functionName="associationRules" 
		algorithmName="SIDE" 
		numberOfTransactions="34734" 
		maxNumberOfItemsPerTA="242" 
		avgNumberOfItemsPerTA="2.87349571025508" 
		minimumSupport="0.001" 
		minimumConfidence="0.1" 
		lengthLimit="4" 
		numberOfItems="25" 
		numberOfItemsets="62" 
		numberOfRules="74" 
		x-quality="1">

この UDF 自体は、この記事の最初の例で作成したものと非常に似ています。この UDF はモデルの名前を引数に取り、各統計が 1 つの列で表現される表を返します。相関モデルは系列モデルと一緒にルール・モデルとしてグループ化され、このルール・モデルが IDMMX.RULEMODELS 表の中に保管されます。この PMML モデルには AssociationModel ノードは 1 つしかないため、このノードの XPath を $DATA//*:AssociationModel と表現することができます。この XPath 式によって、何らかの親ノードを持つ AssociationModel ノードを検索することができます。リスト 21 に示す完全な UDF コードを DesignStudio のエディターの Source ビューに入力します。

リスト 21. Source ビューでの UDF コード
CREATE FUNCTION ASSOCINFORMATIONEXTRACTOR (mname varchar(128))
  RETURNS TABLE (numberTransactions int,
  				 averageNumberItemsPerTransaction real,
  				 maximumNumberItemsPerTransaction int,
  				 numberItemSets int,
  				 numberSingletonItemSets int,
  				 minimumRuleSupport real,
  				 minimumRuleConfidence real,
  				 maximumRuleLength int)
  LANGUAGE SQL
  MODIFIES SQL DATA
  NO EXTERNAL ACTION
  DETERMINISTIC
  
BEGIN ATOMIC
  
  RETURN select X.numberTransactions, 
  				X.averageNumberItemsPerTransaction, 
  				X.maximumNumberItemsPerTransaction, 
  				X.numberItemSets,
  				X.numberSingletonItemSets,
  				X.minimumRuleSupport,
  				X.minimumRuleConfidence,
  				X.maximumRuleLength	from 
     XMLTable('$DATA//*:AssociationModel' PASSING XMLPARSE(document 
        (select IDMMX.DM_expRuleModel(cm.MODEL) FROM IDMMX.RULEMODELS cm 
        where MODELNAME=mname)) as "DATA" 
        columns
        numberTransactions int  path '@numberOfTransactions',
        averageNumberItemsPerTransaction real path '@avgNumberOfItemsPerTA',
        maximumNumberItemsPerTransaction int path '@maxNumberOfItemsPerTA',
        numberItemSets int path '@numberOfItemsets',
        numberSingletonItemSets int path '@numberOfItems',
        minimumRuleSupport real path '@minimumSupport',
        minimumRuleConfidence real path '@minimumConfidence',
        maximumRuleLength int path '@lengthLimit'
        ) as X ;

END

この UDF を以下の手順でデータベースにデプロイします。

  1. この UDF を Data Project Explorer で右クリックし、Deploy を選択します。
  2. この UDF に対するスキーマを入力します (例えば DB2XML など)。他はデフォルト設定のままにすることで、この UDF が現在のデータベースにデプロイされ、同様の名前を持つ UDF が削除され、Java UDF のコードが作成されます。
  3. Finish をクリックし、この UDF をデプロイします。すると、Deploy successful というメッセージが Data Output ビューの右下に表示されます。
  4. この UDF をコマンドラインから実行するか、あるいは DesignStudio から Run を右クリックして実行します。
  5. Specify Parameter Values ウィンドウに、既存の Association モデルの名前を入力します。InfoSphere Warehouse の例の場合には、MBA.RULES を入力します。データ出力ビューを見ると、そのモデルに関するグローバル統計の結果セットが表示されていることがわかります (図 3)。
図 3. グローバル統計の結果セット
グローバル統計の結果セット
グローバル統計の結果セット

また、InfoSphere Warehouse Data ツールを使って UDF や STP の開発やデバッグを行うこともできます。

まとめ

この記事では、XQuery と Intelligent Miner とを組み合わせて独自の PMML 抽出関数を作成することがいかに容易であるか、また抽出した結果をリレーショナル・データとして SQL に渡すことがいかに容易であるかを説明しました。グラフィカルなツールを使用できるため、プログラミング言語を使用する必要はなく、また UDF の作成プロセスも容易です。


ダウンロード可能なリソース


関連トピック

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Information Management, XML
ArticleID=397957
ArticleTitle=PMML として保管されたデータ・マイニングの結果を DB2 の XQuery を使って抽出する
publish-date=05212009