Oracle® Data Mining

アプリケーション開発者ガイド

11gリリース2(11.2)

E57719-01(原本部品番号:E12218-07)

2011年7月

Oracle Data Miningアプリケーション開発者ガイド11gリリース2 (11.2)

E57719-01

Copyright © 2005, 2011, Oracle and/or its affiliates.All rights reserved.

原本著者: Kathy L.Taylor

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

例一覧

図一覧

表一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

Oracle Data Mining APIの新機能

- Oracle Data Mining 11g リリース2(11.2.0.3)のAPIの新機能

- Oracle Data Mining 11g リリース2(11.2.0.1)のAPIの新機能

1 データ・マイニングAPIの使用例

- 顧客の人口統計データおよび購入パターンの分析

- 顧客ベースのセグメント化および減少の予測

- 欠損している収入の予測

- 顧客データにおける異常値の検出

- 上位10個の外れ値の検出

- 新規顧客が典型的なアフィニティ・カード会員である確率の計算

- 典型的なアフィニティ・カード会員の人口統計データの検出

- 販促が成功したかどうかの評価

- 予測分析を使用した顧客プロファイルの作成

2 データ・マイニングAPIの概要

- データ・マイニングPL/SQLパッケージ

- DBMS_DATA_MINING

- CREATE_MODEL

- APPLY

- DBMS_DATA_MINING_TRANSFORM

- DBMS_PREDICTIVE_ANALYTICS

- データ・マイニングのデータ・ディクショナリ・ビュー

- データ・マイニングSQL関数

- データ・マイニングJava API

- JDM標準

- JDMに対するOracleの拡張機能

- Oracle Data Mining Java APIの主要なオブジェクト

- Physical Dataset

- 構築設定

- タスク

- モデル

- テスト・メトリック

- 適用設定

- Transformation Sequence

3 ケース表の作成

- 要件

- 列のデータ型

- データ・マイニングのデータセット

- 属性について

- データ属性とモデル属性

- ターゲット属性

- 量的と質的

- モデルのシグネチャ

- ALL_MINING_MODEL_ATTRIBUTES

- モデル属性の名前の詳細

- モデルの詳細

- ネストしたデータ

- ネストしたオブジェクト型

- DM_NESTED_NUMERICALS

- DM_NESTED_CATEGORICALS

- 例: マイニング用のトランザクショナル・データの変換

- 例: マイニング用のネストした列の作成

- マーケット・バスケット・データ

- 欠損データ

- Oracle Data Miningによる欠損データの解釈

- 例: 欠損値とスパース・データの識別基準

- 売上表のスパース性

- 顧客データの表の欠損値

- Oracle Data Miningによる欠損データの処理

- 属性変換と欠損値処理

4 マイニング用のテキストの準備

- 用語抽出用のOracle Textルーチン

- サンプル・プログラムの用語抽出

- 非構造化データから構造化データへ

- 用語抽出プロセスの手順

- 作成表のテキスト列の変換

- テスト表および適用表のテキスト列の変換

- 索引および索引プリファレンスの作成

- 中間用語表の作成

- FEATURE_PREPコール構文

- FEATURE_PREPの戻り値

- FEATURE_PREPの引数

- FEATURE_PREPの例

- 最終用語表の作成

- FEATURE_EXPLAINのコール構文

- FEATURE_EXPLAINの戻り値

- FEATURE_EXPLAINの引数

- FEATURE_EXPLAINの例

- ネストした表列の移入

- 例: テキスト列の変換

5 モデルの作成

- モデルの作成手順

- モデルの設定

- 設定表の指定

- アルゴリズムの指定

- コストの指定

- 事前確率の指定

- クラスの重みの指定

- データ・ディクショナリにおけるモデルの設定

- モデルの作成

- マイニング機能

- 変換リスト

- モデルの詳細

- マイニング・モデルのスキーマ・オブジェクト

- データ・ディクショナリのマイニング・モデル

- マイニング・モデルの権限

- サンプル・マイニング・モデル

6 スコアリングと配置

- インデータベースでのスコアリング

- 配置とは

- リアルタイムのスコアリング

- 予測

- 最適な予測

- 信頼限界(GLMのみ)

- コスト

- ルール(ディシジョン・ツリーのみ)

- 確率

- クラスごとの結果

- クラスタリング

- クラスタ識別子

- 確率

- クラスタごとの確率

- 特徴抽出

- 特徴識別子

- 一致の質

- 特徴ごとの値

- 表へのスコアリング結果の保存

- コスト重視の意思決定

- バッチの適用

- APPLYとSQLスコアリング関数の比較

7 データ・マイニングJava API

- Javaの環境

- データ・マイニング・エンジンへの接続

- コネクション・ファクトリ

- OraConnectionFactoryを使用したConnectionFactoryの作成

- JNDIサーバーからのConnectionFactoryのルックアップ

- JDBCを使用した接続

- ConnectionSpecを使用した接続

- DME Connectionの機能

- オブジェクト・ファクトリの作成

- マイニング・オブジェクトのメタデータへのアクセス

- マイニング・オブジェクトの永続化と取得

- マイニング・タスクの実行

- DMEの機能とメタデータの取得

- バージョン情報の取得

- API設計の概要

- マイニング・データの記述

- 構築設定

- 自動データ準備の有効化

- マイニング・タスクの実行

- マイニング・タスクのワークフローの作成

- マイニング・モデルの作成

- モデルの詳細の調査

- モデルのテスト

- スコアリング・データへのモデルの適用

- コスト・マトリックスの使用方法

- 事前確率の使用方法

- 組込み変換

- 単一式変換の組込み

- 複雑な変換シーケンスの組込み

- 予測分析タスク(予測、説明およびプロファイル)の使用方法

- データの準備

- ビニング/離散化変換の使用方法

- 正規化変換の使用方法

- クリッピング変換の使用方法

- テキスト変換の使用方法

索引

例一覧

- 1-1 顧客セグメントの減少の予測

- 1-2 顧客数の減少の予測および欠損している収入値の変換

- 1-3 顧客プロファイルの生成

- 3-1 ケース表の例

- 3-2 ALL_MINING_MODEL_ATTRIBUTES

- 3-3 ネストした列から導出されたモデル属性

- 3-4 属性評価モデルのモデルの詳細

- 3-5 複数レコード・ケース形式の地域ごとの製品売上

- 3-6 単一レコード・ケース形式の地域ごとの製品売上

- 3-7 SALES_PER_REGIONから導出されたモデル属性

- 3-8 ネストした列への変換

- 5-1 設定表の作成

- 5-2 ALL_MINING_MODEL_SETTINGS

- 5-3 ALL_MINING_MODELS

- 6-1 予測確率を求めるリアルタイムの問合せ

- 6-2 DBMS_DATA_MINING.APPLYを使用した異常検出

- 7-1 Oracle JDMの拡張メソッドgetObjectNames

- 7-2 物理データセットの作成

- 7-3 ディシジョン・ツリー・アルゴリズムでの分類設定の作成

- 7-4 マイニング・タスクのワークフローの作成

- 7-5 モデルの作成

- 7-6 モデルの詳細の取得

- 7-7 モデルのテスト

- 7-8 モデルの適用

- 7-9 コスト・マトリックスの作成

- 7-10 事前確率の作成

- 7-11 シンプルな式変換

- 7-12 複雑なシーケンスの変換

- 7-13 予測分析

図一覧

- 7-1 JDM名前付きオブジェクトのクラス図

- 7-2 Oracle Data Mining Java APIのデータ・オブジェクト

- 7-3 構築設定クラス図

- 7-4 タスクのクラス図

- 7-5 モデルおよびモデル詳細のクラス図

- 7-6 テスト・メトリックのクラス階層

- 7-7 適用設定

- 7-8 OraTransformationTaskクラス図

- 7-9 OraBinningTransformationクラス図

- 7-10 OraNormalizeTransformationクラス図

- 7-11 OraClippingTransformationクラス図

- 7-12 テキスト変換クラス図

表一覧

- 2-1 予測用のSQL関数

- 2-2 クラスタリング用のSQL関数

- 2-3 特徴抽出用のSQL関数

- 2-4 JDM標準のJavaパッケージ

- 2-5 Oracleによって拡張された高水準のパッケージ

- 2-6 Oracle Data MiningでサポートされるJDMの名前付きオブジェクト

- 3-1 ALL_MINING_MODEL_ATTRIBUTES

- 3-2 ネストしたデータをサポートするOracle Data Miningアルゴリズム

- 3-3 アルゴリズムによる欠損値処理

- 4-1 FEATURE_PREPテーブル・ファンクションの引数

- 5-1 モデルの設定

- 5-2 設定表に必要な列

- 5-3 データ・マイニングのアルゴリズム

- 5-4 コスト・マトリックス表に必要な列

- 5-5 事前確率表に必要な列

- 5-6 クラスの重みの表に必要な列

- 5-7 ALL_MINING_MODEL_SETTINGS

- 5-8 マイニング・モデルの機能

- 5-9 モデルの詳細

- 5-10 ALL_MINING_MODELS

- 6-1 コスト・マトリックス表の例

- 6-2 APPLY出力表

- 7-1 機能別のデフォルトの出力形式

はじめに

このマニュアルでは、Oracle Data Miningのプログラム・インタフェースについて説明します。PL/SQLまたはJavaインタフェースを使用して、データ・マイニング・アプリケーションを作成することも、既存のアプリケーションにデータ・マイニング機能を追加することもできます。アプリケーションや非定型問合せでは、データ・マイニングのSQL演算子を使用できます。

注意:
Oracle Data Mining Java APIは、このリリースでは非推奨です。
新しいアプリケーションでは、非推奨となった機能を使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

このマニュアルは、デモ・アプリケーションや関連する参照ドキュメントとあわせて使用してください。(「関連ドキュメント」を参照してください。)

ここでは次の項目について説明します。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

このマニュアルの対象読者は、Oracle Data Miningに慣れているデータベース・プログラマです。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info) か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

Oracle Data Miningのドキュメント・セットは、Oracle Database 11gリリース 2 (11.2) オンライン・ドキュメント・ライブラリの一部です。Oracle Data Miningのドキュメント・セットの構成は、次のとおりです。

- 『Oracle Data Mining概要』

- 『Oracle Data Mining Java API Reference』(Javadoc)

- 『Oracle Data Mining管理者ガイド』

注意:
Data Miningのデモ・プログラムのインストールと使用に関する情報は、『Oracle Data Mining管理者ガイド』を参照してください。

- 『Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』 (DBMS_DATA_MINING、DBMS_DATA_MINING_TRANSFORM、DBMS_PREDICTIVE_ANALYTICS)

- 『Oracle Database SQL言語リファレンス』(データ・マイニング関数)

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

Oracle Data Mining APIの新機能

この項では、Oracle Data Mining APIの新機能について説明します。次の項が含まれます:

- Oracle Data Mining 11g リリース2(11.2.0.3)のAPIの新機能

- Oracle Data Mining 11g リリース2(11.2.0.1)のAPIの新機能

関連項目:
新しい機能と、Oracle Data Mining 11gリリース1で非推奨となった機能については、Oracle Data Mining概要を参照してください。

Oracle Data Mining 11gリリース2(11.2.0.3)のAPIの新機能

Oracle Data Mining Java APIは、このリリースでは非推奨です。

注意:
新しいアプリケーションでは、非推奨となった機能を使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

Oracle Data Mining 11gリリース2(11.2.0.1)のAPIの新機能

この項では、Oracle Data Mining 11.2のPL/SQL APIで導入された変更のリストを示します。

- 相関ルールによるネイティブ・トランザクショナル・データのサポート
Oracle Data Mining 11gリリース2 (11.2)では、先にトランザクショナル・データを変換しなくても、相関ルール・モデルを作成することができます。

関連項目:
「マーケット・バスケット・データ」

- SVMクラスの重みをCLAS_WEIGHTS_TABLE_NAMEで指定
以前は、SVMクラスの重みは事前確率表で指定していました(CLAS_PRIORS_TABLE_NAME設定)。このリリースでは、SVMクラスの重みとGLMクラスの重みのどちらも、クラスの重みの表で指定します。(CLAS_WEIGHTS_TABLE_NAME設定)。

関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』で、DBMS_DATA_MINING設定CLAS_WEIGHTS_TABLE_NAMEを参照してください。

- DROP_MODELのFORCE引数
重大なシステム・エラーによってモデル作成プロセスが中段された場合、強制的にモデル削除操作を実行できるようになりました。

関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』で、DBMS_DATA_MINING.DROP_MODELプロシージャを参照してください。

- GET_MODEL_DETAILS_SVMに新しいREVERSE_COEFパラメータを追加
モデルの透明性を保つために、モデル作成中に、ADPによって生成される変換をGET_MODEL_DETAILSファンクションが自動的に元に戻します。内部的に使用される変換後の属性の係数は、新しいreverse_coefパラメータを1に設定することによって、SVMモデルで取得できます。これによって、正規化シフトを使用して係数とバイアスが返され、ADPによってスケールが適用されます。

関連項目:
『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_DATA_MINING.GET_MODEL_DETAILS_SVMに関する説明

1 データ・マイニングAPIの使用例

この章では、単純なSQL問合せとPL/SQLプロシージャを使用して複雑なデータ・マイニング操作を実行する方法について説明します。例では、顧客に関する重要な情報を取得する方法を示しています。この種の情報は、次のようなビジネス上の質問に答えるために必要です。製品をどのように位置付けるか。新製品の導入時期はいつにするか。どのような価格設定や販促戦略を使うか。

注意:
Oracle Data Miningの基本インタフェースは、PL/SQLパッケージとSQL関数です。このマニュアルに記載されている例のほとんどは、PL/SQLコードやSQLコードを使用しています。

関連項目:

- 第6章「スコアリングと配置」

- SQLデータ・マイニング関数の構文については、『Oracle Database SQL言語リファレンス』を参照してください。

- PL/SQL APIの構文については、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

この章には、次の項が含まれます。

- 顧客の人口統計データおよび購入パターンの分析

- 販促が成功したかどうかの評価

- 予測分析を使用した顧客プロファイルの作成

顧客の人口統計データおよび購入パターンの分析

この項ではコードの一部分を示して、顧客についてより深く理解するためにデータ・マイニング・モデルを適用する方法を説明します。

これらの例では、あらかじめ作成されたモデルを使用します。モデルはOracle Database内にデータベース・オブジェクトとして存在します。簡略化のため、モデルはすでに作成されてスキーマに存在しており、それらのモデルを適用してこれからSQL文を実行すると想定します。モデルを作成するには、PL/SQL APIまたはOracle Data Minerも使用できます。

関連項目:
第5章「モデルの作成」

データ・マイニング・モデルは主に特殊なSQL関数を実行することによって適用されます。SQL関数には、予測、クラスタリングおよび特徴抽出という別個のグループがあります。

関連項目:
第6章「スコアリングと配置」

注意:
この章の最初の2つの項では様々な事例におけるSQL構文の例を紹介していますが、コードで使用されているオブジェクト名は仮の名前です。たとえば、表はmy_tableのように命名されています。

顧客ベースのセグメント化および減少の予測

例1-1の問合せは、顧客をセグメントに分割し、顧客の減少を予測します。

セグメントは、clus_modelという名前のモデルをクラスタリングすることによって作成されます。このモデルはヒューリスティックを利用して、類似の特性を持つグループに顧客データベースを分割します。予測は、svmC_modelという分類モデルによって生成されます。

このモデルは各セグメントの顧客それぞれについて減少の確率を予測します。セグメントの全体的な減少傾向の順序で、セグメントごとにデータが戻されます。

例1-1 顧客セグメントの減少の予測

SELECT count(*) as cnt,
AVG(PREDICTION_PROBABILITY(svmC_model,
'attrite' USING *)) as avg_attrite,
AVG(cust_value_score)
FROM customers
GROUP BY CLUSTER_ID(clus_model USING *)
ORDER BY avg_attrite DESC;

この見たところ単純な問合せで、類似度により自然なグループに分割された顧客ベースに対する高度な分析が行えます。SQLデータ・マイニング関数を使用すると、重要度の最も高い顧客または最も低い顧客がどのセグメントに存在するかがわかります。この情報は商品をどのように販売するかを決定する際の参考になります。たとえば、あるセグメントの顧客の大部分が高い減少確率を持つ場合、販促戦略を考える際にそのセグメントの人口統計データを詳細に調べることができます。

例1-1のCLUSTER_ID関数は、マイニング・モデルclus_modelをcustomers表に適用します。これは各顧客のセグメントを戻します。セグメントの数は、クラスタリング・アルゴリズムによって決定されます。Oracle Data Miningは、拡張k-MeansとO-Clusterという2つのクラスタリング・アルゴリズムをサポートしています。

例1-1のPREDICTION_PROBABILITY関数は、マイニング・モデルsvmC_modelを適用し、各顧客の減少確率を戻します。Oracle Data Miningは多くの分類アルゴリズムをサポートしています。この場合、モデルの名前から分類子としてサポート・ベクター・マシン(SVM)が選択されていることがわかります。

欠損している収入の予測

例1-2の問合せは、age、gender、annual_incomeおよびzipcodeに基づいて、減少する確率の最も高い顧客10名を戻します。

さらに、annual_incomeは欠損している場合が多いため、PREDICTION関数を使用してannual_income属性の欠損値を補完しています。PREDICTION関数は回帰モデルsvmR_modelを適用して、最も可能性の高い年収を予測します。NVL関数は年収の欠損値を予測結果と置き換えます。

例1-2 顧客数の減少の予測および欠損している収入値の変換

SELECT * FROM (
SELECT cust_name, cust_contact_info
FROM customers
ORDER BY
PREDICTION_PROBABILITY(tree_model, 'attrite'
USING age, gender, zipcode,
NVL(annual_income,
PREDICTION(svmR_model USING *))
as annual_income) DESC)
WHERE rownum < 11;

顧客データにおける異常値の検出

これらの例では1クラスSVMモデルを使用して、異例な顧客(外れ値)を検出し、多くの典型的な顧客に共通する人口統計データの特徴を見つけ、新規顧客または仮想の顧客が典型的なアフィニティ・カード保有者になる確率を計算します。

上位10個の外れ値の検出

上位10個の外れ値(母集団の他の顧客と最も異なる顧客)を検出します。アプリケーションに応じて、そのような異例な顧客をデータから削除できます。

SELECT cust_id FROM (
SELECT cust_id
FROM svmo_sh_sample_prepared
ORDER BY prediction_probability(SVMO_SH_Clas_sample, 0 using *) DESC, 1)
WHERE rownum < 11;

新規顧客が典型的なアフィニティ・カード会員である確率の計算

新規顧客または仮想の顧客が典型的なアフィニティ・カード会員である確率を計算します。量的属性の正規化を即時に行います。

WITH age_norm AS (
SELECT shift, scale FROM SVMO_SH_sample_norm WHERE col = 'AGE'),
yrs_residence_norm AS (
SELECT shift, scale FROM svmo_sh_sample_norm WHERE col = 'YRS_RESIDENCE')
SELECT prediction_probability(SVMO_SH_Clas_sample, 1 using
(44 - a.shift)/a.scale AS age,
(6 - b.shift)/b.scale AS yrs_residence,
'Bach.' AS education,
'Married' AS cust_marital_status,
'Exec.' AS occupation,
'United States of America' AS country_name,
'M' AS cust_gender,
'L: 300,000 and above' AS cust_income_level,
'3' AS houshold_size
) prob_typical
FROM age_norm a, yrs_residence_norm b;

典型的なアフィニティ・カード会員の人口統計データの検出

典型的なアフィニティ・カード会員の人口統計データを検出します。これらの統計は外れ値の影響を受けないので、アフィニティ会員全体に対して計算した統計よりも、問題の母集団の実態により近い結果が得られやすくなります。

SELECT a.cust_gender, round(avg(a.age)) age,
round(avg(a.yrs_residence)) yrs_residence,
count(*) cnt
FROM mining_data_one_class_v a
WHERE PREDICTION(SVMO_SH_Clas_sample using *) = 1
GROUP BY a.cust_gender
ORDER BY a.cust_gender;

販促が成功したかどうかの評価

この例は、分類モデルを使用して、DVDの販売促進キャンペーンに反応する顧客とその理由を予測します。

1. まず、反応する顧客を予測します。
この文ではPREDICTION関数とPREDICTION_DETAILS関数を使用して、モデルcampaign_modelを適用します。

SELECT cust_name,
PREDICTION(campaign_model USING *)
AS responder,
PREDICTION_DETAILS(campaign_model USING *)
AS reason
FROM customers;

2. 予測と関連データを組み合せます。
この文は、予測された反応する顧客とsales表にある追加情報とを組み合せます。反応する顧客を予測するのみでなく、キャンペーン開始前後の3か月間に各顧客が使用した金額も表示されます。

SELECT cust_name,
PREDICTION(campaign_model USING *) AS responder,
SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS pre_purch,
SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS post_purch
FROM customers, sales
WHERE sales.cust_id = customers.cust_id
AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
GROUP BY cust_id, PREDICTION(campaign_model USING *);

3. 予測および関連データを、複数ドメイン、複数データベースのデータと組み合せます。
反応する顧客の予測に加えて、キャンペーン開始前後の3か月間に各顧客がDVDに使用した金額もわかります。

SELECT cust_name,
PREDICTION(campaign_model USING *) as responder,
SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS pre_purch,
SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS post_purch
FROM customers, sales, products@PRODDB
WHERE sales.cust_id = customers.cust_id
AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
AND sales.prod_id = products.prod_id
AND CONTAINS(prod_description, 'DVD') > 0
GROUP BY cust_id, PREDICTION(campaign_model USING *);

4. 取得した情報の有効性と有意性を評価します。
予測された反応する顧客と反応しない顧客の成功率を、様々な範囲および全社で比較します。この成功は統計的に有意でしょうか。

SELECT responder, cust_region, COUNT(*) AS cnt,
SUM(post_purch – pre_purch) AS tot_increase,
AVG(post_purch – pre_purch) AS avg_increase,
STATS_T_TEST_PAIRED(pre_purch, post_purch) AS significance
FROM (
SELECT cust_name, cust_region
PREDICTION(campaign_model USING *) AS responder,
SUM(CASE WHEN purchase_date < 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS pre_purch,
SUM(CASE WHEN purchase_date >= 15-Apr-2005 THEN
purchase_amt ELSE 0 END) AS post_purch
FROM customers, sales, products@PRODDB
WHERE sales.cust_id = customers.cust_id
AND purchase_date BETWEEN 15-Jan-2005 AND 14-Jul-2005
AND sales.prod_id = products.prod_id
AND CONTAINS(prod_description, 'DVD') > 0
GROUP BY cust_id, PREDICTION(campaign_model USING *) )
GROUP BY ROLLUP responder, cust_region ORDER BY 4 DESC;

予測分析を使用した顧客プロファイルの作成

DBMS_PREDICTIVE_ANALYTICSパッケージに実装されている予測分析は、予測作成、属性評価およびプロファイル作成のルーチンをサポートしています。例1-3は、予測分析を使用した顧客プロファイルの生成方法を示しています。

注意:
予測分析を使用する場合、モデルを作成する必要はありません。ルーチンによってモデルは動的に作成および適用され、完了時に永続しません。

関連項目:
Oracleの予測分析の概要については、『Oracle Data Mining概要』を参照してください。

例1-3のPROFILE文は、顧客がアフィニティ・カードを使用しそうかどうかを示すルールを戻します。これらのルールは、顧客の性別と顧客の職業という2つの予測子に基づいて生成されます。ルールは、次の2つの列を持つ結果表にXMLとして出力されます。

Name                        Type
-------------------------    ------------
PROFILE_ID                   NUMBER
RECORD_COUNT                 NUMBER
DESCRIPTION                  XMLTYPE

ルール識別子はPROFILE_IDに格納されます。そのルールにより記述されるケースの数はRECORD_COUNTに格納されます。そのルールを記述したXMLはDESCRIPTION列に格納されます。

注意:
この例では、SHスキーマのサンプル・データを使用しています。このデータは、データ・マイニングのサンプル・プログラムとともに使用されます。サンプル・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

例1-3 顧客プロファイルの生成

--create a source view
CREATE VIEW cust_gend_occ_view AS
SELECT cust_gender, occupation, affinity_card
FROM mining_data_apply;

-- describe the source data
DESCRIBE cust_gend_occ_view
Name                            Null?    Type
----------------------------------------------
CUST_GENDER                     VARCHAR2(1)
OCCUPATION                      VARCHAR2(21)
AFFINITY_CARD                   NUMBER(10)

-- find the rules
BEGIN
DBMS_PREDICTIVE_ANALYTICS.PROFILE(
DATA_TABLE_NAME    => 'cust_gend_occ_view',
TARGET_COLUMN_NAME => 'affinity_card',
RESULT_TABLE_NAME  => 'profile_result');
END;
/

-- PROFILE has created 5 rules
SELECT profile_id from cust_gend_occ_profile_results;

PROFILE_ID
----------
1
2
3
4
5

-- display the rules

<SimpleRule id="1" score="1" recordCount="275">
<CompoundPredicate booleanOperator="and">
<SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
<Array type="string">"Exec." "Prof." "Protec."
</Array>
</SimpleSetPredicate>
<SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
<Array type="string">"M"</Array>
</SimpleSetPredicate>
</CompoundPredicate>
<ScoreDistribution value="1" recordCount="146"/>
<ScoreDistribution value="0" recordCount="129"/>
</SimpleRule>

<SimpleRule id="2" score="0" recordCount="124">
<CompoundPredicate booleanOperator="and">
<SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
<Array type="string">"Exec." "Prof." "Protec."
</Array>
</SimpleSetPredicate>
<SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
<Array type="string">"F"
</Array>
</SimpleSetPredicate>
</CompoundPredicate>
<ScoreDistribution value="0" recordCount="96"/>
<ScoreDistribution value="1" recordCount="28"/>
</SimpleRule>

<SimpleRule id="3" score="0" recordCount="397">
<CompoundPredicate booleanOperator="and">
<SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
<Array type="string">"M"
</Array>
</SimpleSetPredicate>
<SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
<Array type="string">"Crafts" "Sales" "TechSup" "Transp."
</Array>
</SimpleSetPredicate>
</CompoundPredicate>
<ScoreDistribution value="0" recordCount="289"/>
<ScoreDistribution value="1" recordCount="108"/>
</SimpleRule>

<SimpleRule id="4" score="0" recordCount="316">
<CompoundPredicate booleanOperator="and">
<SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
<Array type="string">"M"
</Array>
</SimpleSetPredicate>
<SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
<Array type="string">
"?" "Cleric." "Farming" "Handler" "House-s" "Machine" "Other"
</Array>
</SimpleSetPredicate>
</CompoundPredicate>
<ScoreDistribution value="0" recordCount="277"/>
<ScoreDistribution value="1" recordCount="39"/>
</SimpleRule

<SimpleRule id="5" score="0" recordCount="388">
<CompoundPredicate booleanOperator="and">
<SimpleSetPredicate field="OCCUPATION" booleanOperator="isIn">
<Array type="string">
"?" "Cleric." "Crafts" "Farming" "Handler" "House-s" "Machine"
"Other" "Sales" "TechSup" "Transp."
</Array>
</SimpleSetPredicate>
<SimpleSetPredicate field="CUST_GENDER" booleanOperator="isIn">
<Array type="string">"F"
</Array>
</SimpleSetPredicate>
</CompoundPredicate>
<ScoreDistribution value="0" recordCount="363"/>
<ScoreDistribution value="1" recordCount="25"/>
</SimpleRule>

2 データ・マイニングAPIの概要

この章では、Oracle Data Miningで使用するPL/SQL、SQLおよびJavaインタフェースの概要を説明します。

注意:
Oracle Data Mining Java APIは、このリリースでは非推奨です。
新しいアプリケーションでは、非推奨となった機能を使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

この章には、次の項が含まれます。

- データ・マイニングPL/SQLパッケージ

- データ・マイニングのデータ・ディクショナリ・ビュー

- データ・マイニングSQL関数

- データ・マイニングJava API

データ・マイニングPL/SQLパッケージ

Oracle Data MiningのPL/SQLインタフェースは、次の3つのパッケージで実装されています。

- DBMS_DATA_MINING: Oracle Data Miningの主要インタフェース

- DBMS_DATA_MINING_TRANSFORM: データ変換用ルーチン

- DBMS_PREDICTIVE_ANALYTICS: 予測分析

DBMS_DATA_MINING

DBMS_DATA_MININGパッケージには、次の操作を実行するためのプロシージャが含まれています。

- マイニング・モデルの作成、削除および名前の変更

- 新しいデータへのモデルの適用

- モデルの詳細の記述

- 分類モデルのコストの作成とテスト・メトリックの計算

- モデルのエクスポートおよびインポート

CREATE_MODEL

CREATE_MODELプロシージャはマイニング・モデルを作成します。モデル内部の属性、変換、ルール、その他の情報はGET_MODEL_DETAILSファンクションで返されます。マイニング・モデルに関する情報は、「データ・マイニングのデータ・ディクショナリ・ビュー」で説明しているように、データ・ディクショナリ・ビューを問い合せて取得することもできます。

APPLY

APPLY プロシージャは、特定の列を持つ表を作成し、その列にマイニング結果を格納します。この表の列は、使用するマイニング機能やアルゴリズムによって異なります。

注意:
現在は、Oracle Database 10.2で導入されたデータ・マイニングSQL関数が、データ・マイニング・モデルを適用する際に通常優先される方法です。「データ・マイニングSQL関数」を参照してください。

DBMS_DATA_MINING_TRANSFORM

このパッケージには、マイニングに適した形式にデータを変換するためのルーチンが含まれています。Oracle Data Miningでは自動データ変換(ADP)がサポートされているため、特殊な変換を実行する必要がないかぎり、このパッケージを使用する必要はありません。

独自に指定した変換を追加し、ADPによって生成された変換を補うことができます。または、ADPを使用せずに、手動でデータを変換することもできます。

DBMS_DATA_MINING_TRANSFORMのルーチンは、独自の変換を作成する場合に役立ちます。これらのルーチンが十分でない場合、SQLを記述して出力を変更したり、独自のルーチンを記述したりできます。

モデルの変換を指定するには、変換リストをDBMS_DATA_MINING.CREATE_MODELプロシージャに渡します。変換リストを作成する場合は、DBMS_DATA_MINING_TRANSFORMパッケージのSTACKプロシージャを使用できます。

Oracle Data Miningは、自動変換およびユーザーがCREATE_MODELに指定した変換をモデルに組み込みます。組み込まれた変換は、モデルの適用時に自動的にデータに適用されます。テスト・データやスコアリング・データを個々に変換する必要はありません。

関連項目:

- 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_DATA_MINING_TRANSFORMに関する項

- 自動データ変換および組込みデータ変換については、『Oracle Data Mining概要』を参照してください。

DBMS_PREDICTIVE_ANALYTICS

このパッケージには、データ・マイニングの自動化された形式である予測分析を実行するためのルーチンが含まれています。予測分析を使用する場合、モデルの作成やスコアリングを意識する必要はありません。すべてのマイニング操作は、予測分析プロシージャによって内部的に処理されます。

予測分析のルーチンでは、データの準備、モデルの作成、モデルのスコアリングが行われ、モデルのスコアリングの結果が戻されます。このルーチンでは、終了前にモデルおよびサポート・オブジェクトが削除されます。

Oracleの予測分析では、次のルーチンがサポートされています。

- EXPLAIN: ターゲット列の説明における各属性の影響度をランク付けします。

- PREDICT: 入力データの値に基づいてターゲット列の値を予測します。

- PROFILE: 入力データからケースを説明するルールを生成します。

関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_PREDICTIVE_ANALYTICSに関する項

データ・マイニングのデータ・ディクショナリ・ビュー

マイニング・モデルに関する情報を、データ・ディクショナリから取得できます。Oracle Data Miningのデータ・ディクショナリ・ビューは、ALL_、USER_およびDBA_を使用してアクセスできます。

データ・マイニングのデータ・ディクショナリ・ビューには次の種類があります。

- ALL_MINING_MODELS: アクセス可能なマイニング・モデルに関する情報を戻します。
「マイニング・モデルのスキーマ・オブジェクト」を参照してください。

- ALL_MINING_MODEL_ATTRIBUTES: アクセス可能なマイニング・モデルの属性に関する情報を戻します。
「属性について」を参照してください。

- ALL_MINING_MODEL_SETTINGS: アクセス可能なマイニング・モデルの設定に関する情報を戻します。
「モデルの設定」を参照してください。

データ・マイニングSQL関数

データ・マイニング用の組込みSQL関数は、データベースですでに作成されているモデルのスコアリング操作を実装します。組込みSQL関数には、次のメリットがあります。

- 既存のSQLアプリケーションのコンテキストで、モデルを簡単に配置できます。

- スコアリング操作では、既存の問合せ実行機能を利用します。これにより、特に単一行をスコアリングする場合にパフォーマンスが向上します。

- スコアリング結果がパイプライン化され、生成時に行を繰り返し戻すことができます。パイプライン化は、パフォーマンスを大幅に向上させる最適化の処理です。パイプライン化については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

注意:
SQL関数はOracle Databaseに組み込まれ、SQL文の中で使用できます。SQL関数と、PL/SQLのパッケージで定義されているファンクションを混同しないでください。

分類モデルと回帰モデルを特定行のスコアリング・データに適用すると、ターゲットの最適な予測値とその値が生じる確率が示されます。予測用のSQL関数については、表2-1で説明します。

表2-1 予測用のSQL関数

関数

説明

PREDICTION

ターゲットの最適な予測を戻す。

PREDICTION_BOUNDS

(GLMのみ)値(線形回帰)または確率(ロジスティック回帰)が収まる区間の上限と下限を戻す。

PREDICTION_COST

不正確な予測のコストの測度を戻す。

PREDICTION_DETAILS

ディシジョン・ツリー・モデルのルールを戻す。

PREDICTION_PROBABILITY

特定の予測の確率を戻す。

PREDICTION_SET

分類モデルの結果を戻す(各ケースについての予測および関連する確率を含む)。

スコアリング・データの特定の行にクラスタ・モデルを適用すると、クラスタIDおよびクラスタの該当行のメンバーシップの確率が戻されます。クラスタリング用のSQL関数については、表2-2で説明します。

表2-2 クラスタリング用のSQL関数

関数

説明

CLUSTER_ID

予測対象のクラスタのIDを戻す。

CLUSTER_PROBABILITY

特定のクラスタに属するケースの確率を戻す。

CLUSTER_SET

特定のケースが属している可能性のあるすべてのクラスタのリストと、ケースが含まれている確率を戻す。

特徴抽出モデルの適用では、スコアリング・データセットの列への特徴(属性セット)のマッピングが行われます。特徴抽出用のSQL関数については、表2-3で説明します。

表2-3 特徴抽出用のSQL関数

関数

説明

FEATURE_ID

最も高い係数値を持つ特徴のIDを戻す。

FEATURE_SET

考え得るすべての特徴が含まれているオブジェクトのリストとその係数を戻す。

FEATURE_VALUE

特定の特徴の値を戻す。

関連項目:
第6章「スコアリングと配置」

データ・マイニングJava API

Oracle Data Mining Java APIは、JDM標準(JSR-73)Java APIのOracleによる実装です。このAPIは、Oracle Data Miningの豊富なインデータベース機能を使用して開発されたthin APIです。

注意:
Oracle Data Mining Javaは、このリリースでは非推奨です。
新しいアプリケーションでは、非推奨となった機能を使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

Oracle Data Mining Java APIは、Oracle固有の拡張機能を実装し、データベースで利用可能なすべてのデータ・マイニング機能を提供します。すべての拡張機能は、JDM標準の拡張フレームワークに準拠するように設計されています。データベースで使用可能なマイニング機能とアルゴリズムはすべて、Oracle Data Mining Java APIを通じて公開されます。

Oracle Database 10.2.0.1では、それまでのリリースで使用されていたOracle独自の従来のJava APIにかわり、JDM 1.0標準に準拠したAPIが導入されました。Database 10.2.0.2パッチセットのリリースでは、JDM 1.1に準拠したOracle Data Mining Java APIを実装することによって、このJDM標準のサポートをさらに拡張しています。

このリリースでは、Oracle Data Mining Java APIは引き続きJDM 1.1に準拠し、Oracleの拡張機能としてデータベース・サーバーに新しいデータ・マイニング機能を提供します。このリリースのOracleの新機能には、自動データ準備と組込みのデータ準備、一般化線形モデル、変換シーケンス、およびタスク依存指定などがあります。

JDM標準

JDMは、Java Community Process(JCP)で開発されたデータ・マイニング用の業界標準Java APIです。JDMでは、ベンダーが独自のデータ・マイニング・エンジン(DME)に実装できるJavaインタフェースが定義されています。JDMには、分類、回帰、クラスタリング、属性評価および相関などのマイニング機能をサポートするインタフェースに加え、Naïve Bayes、サポート・ベクター・マシン、ディシジョン・ツリー、フィード・フォーワード・ニューラル・ネットワークおよびk-Meansなどの特定のマイニング・アルゴリズムが含まれます。

標準で定義されているJavaパッケージの概要を、表2-4にリストしました。詳細は、標準(http://www.jcp.org)で公開されているJavaドキュメントを参照してください。移動先のJSRボックスに、73と入力します。

表2-4 JDM標準のJavaパッケージ

パッケージ

説明

javax.datamining

すべてのJDMサブパッケージをサポートするオブジェクトを定義。

javax.datamining.base

上位レベルの多数のマイニング・オブジェクトをサポートするオブジェクトを定義。循環パッケージ依存を回避するために導入。

javax.datamining.resource

データ・マイニング・エンジンへの接続とタスクの実行をサポートするオブジェクトを定義。

javax.datamining.data

論理データと物理データ、モデルのシグネチャ、分類、カテゴリ・セットおよび汎用スーパー・クラス・カテゴリ行列をサポートするオブジェクトを定義。

javax.datamining.statistics

属性の統計をサポートするオブジェクトを定義。

javax.datamining.rule

ルールとその述語要素をサポートするオブジェクトを定義。

javax.datamining.task

作成のタスク、統計の計算、インポートおよびエクスポートをサポートするオブジェクトを定義。適用は主として監視ありのクラスタリング関数に使用されるため、タスクには適用するサブパッケージ(オプション)がある。

javax.datamining.association

相関の構築設定およびモデルをサポートするオブジェクトを定義。

javax.datamining.clustering

クラスタリングの構築設定およびモデルをサポートするオブジェクトを定義。

javax.datamining.attributeimportance

属性評価の構築設定およびモデルをサポートするオブジェクトを定義。

javax.datamining.supervised

対応するオプションのパッケージを使用して、監視あり学習機能(特に分類および回帰)の構築設定およびモデルをサポートするオブジェクトを定義。このパッケージには、分類および回帰機能用の共通のテスト・タスクも含まれる。

javax.datamining.algorithm

アルゴリズム固有の設定をサポートするオブジェクトを定義。algorithmパッケージには、様々なアルゴリズムのサブパッケージを指定可能。

javax.datamining.modeldetail

様々なモデル表示の詳細をサポートするオブジェクトを定義。モデル詳細には、様々なモデル詳細のサブパッケージを指定可能。

JDMに対するOracleの拡張機能

JDM標準に含まれない機能をサポートするために、Oracle拡張機能が定義されています。この項では、これらの拡張機能の概要について説明します。

関連項目:
『Oracle Data Mining Java API Reference』(Javadoc)

Oracleの拡張機能には、次の主要な追加機能が含まれます。

- Non-Negative Matrix Factorization(NMF)アルゴリズムでの特徴抽出機能

- 回帰および分類機能用の一般化線形モデル・アルゴリズム

- Oracle固有のクラスタリング・アルゴリズムである、直交パーティショニング・クラスタリング(O-Cluster)

- Oracle固有の分類アルゴリズムである、Adaptive Bayes Network(ABN)(非推奨)

- 自動データ変換と組込みデータ変換

- 予測分析タスク

表2-5に、Oracleによって拡張された高水準のJavaパッケージの概要を示します。

表2-5 Oracleによって拡張された高水準のパッケージ

パッケージ

説明

oracle.dmt.jdm.featureextraction

特徴抽出機能に関連するオブジェクトを定義。特徴抽出は、スコアリング操作をサポート。

oracle.dmt.jdm.algorithm.nmf

Non-Negative Matrix Factorization(NMF)アルゴリズムに関連するオブジェクトを定義。

oracle.dmt.jdm.algorithm.glm

oracle.dmt.jdm.modeldetail.glm

一般化線形モデル(GLM)アルゴリズムに関連するオブジェクトを定義。

oracle.dmt.jdm.algorithm.ocluster

直交クラスタリング(O-Cluster)アルゴリズムに関連するオブジェクトを定義。

oracle.dmt.jdm.algorithm.abn

Adaptive Bayes Network(ABN)アルゴリズム(非推奨)に関連するオブジェクトを定義。

oracle.dmt.jdm.transform

変換に関連するオブジェクトを定義。

Oracle Data Mining Java APIの主要なオブジェクト

JDMで名前付きオブジェクトとは、Connectionでの保存方法を使用して保存できるオブジェクトです。名前付きオブジェクトはすべて、javax.datamining.MiningObjectインタフェースから継承されます。名前付きオブジェクトは、永続的に存在させる(永続オブジェクト)ことも、Connectionオブジェクトの存続期間のみ存在させる(一時オブジェクト)こともできます。

表2-6に、Oracle Data MiningでサポートされるJDMの名前付きオブジェクトを示します。

表2-6 Oracle Data MiningでサポートされるJDMの名前付きオブジェクト

永続オブジェクト

一時オブジェクト

サポートされないオブジェクト

Model

適用設定

論理データ

構築設定

物理データセット

分類

タスク

コスト・マトリックス

テスト・メトリック

Transformation Sequence

Physical Dataset

Physical Datasetは、データ・マイニング操作の入力として使用されるデータを表します。PhysicalDataSetオブジェクトは、URIによって識別される特定のデータを参照します。Oracle Data Miningでは、同じデータベース内の表またはビューは、有効なPhysical DatasetのURIとしてサポートされます。Physical DatasetのURIの構文は次のとおりです。

データのURIの構文:

[schemaName.] tableName/viewName

PhysicalDataSetオブジェクトは、複数のデータ表現をサポートできます。Oracle Data Miningでサポートされるデータ表現は、単一レコード・ケースとワイド・データの2種類です。(詳細は、第3章を参照してください。)Oracle Data Miningを実装するには、ユーザーが物理データセットでケースID列を指定する必要があります。

Oracle Data Mining Java APIでは、PhysicalDataSetオブジェクトは一時オブジェクトです。これは、インメモリー・オブジェクトとしてConnectionに格納されます。

構築設定

BuildSettingsオブジェクトは、モデルの作成に使用される高水準の指定を記録します。APIでは、分類、回帰、属性評価、相関、クラスタリングおよび特徴抽出といった様々なマイニング機能を指定します。

構築設定では、ユーザーが特定のアルゴリズムを指定することなく目的の結果の種類を指定できます。構築設定オブジェクトでは、アルゴリズムとその設定を指定できますが、アルゴリズムを設定しない場合は、構築設定(および利用できる場合は当該データの特性)に基づき、DMEによってアルゴリズムが選択されます。

Build Settingsのパラメータの適合性は、verifyメソッドを使用して検証することもできます。

BuildSettingsオブジェクトが永続の場合は、ユーザー指定の名前でユーザーのスキーマに表として格納されます。この設定表は、PL/SQL APIと相互運用性があります。構築設定の表は手動で変更しないことをお薦めします。

タスク

ConnectionオブジェクトのExecuteメソッドは、マイニング・タスクの実行を開始するために使用します。通常、マイニング操作は何百万ものレコードを持つ表を使用して行われるため、モデル作成などの操作には、長い時間がかかる場合があります。

JDMは、データベースでDBMS_SCHEDULERを使用する非同期のマイニング・タスクの実行をサポートします。各マイニング・タスクは、ユーザーのスキーマにDBMS_SCHEDULERジョブ・オブジェクトとして格納されます。ユーザーがタスク・オブジェクトを保存すると、ジョブ・オブジェクトが作成され、オブジェクトがDISABLED状態に設定されます。ユーザーがタスクを実行すると、ジョブが実行を開始できるようになります。

非同期に実行されるタスクを監視するために、Executeメソッドはjavax.datamining.ExecutionHandleオブジェクトを戻します。このオブジェクトは、タスクの状態の詳細を取得するgetStatusやwaitForCompletionなどのメソッドを提供します。

Model

Modelオブジェクトは、BuildSettingsオブジェクトで指定されているようにアルゴリズムをデータに適用した結果です。

モデルは、様々な操作で使用できます。次のような場合があります。

- 検査(たとえば、ディシジョン・ツリーまたは相関から生成されたルールを調査)

- 精度のテスト

- スコアリングを目的としたデータへの適用

- 固有形式やPMMLのような外部表現へのエクスポート

- DMEで使用するためのインポート

Modelはデータに適用される場合、解釈のためにDMEに送られます。Modelオブジェクトは、ModelのBuildSettingsオブジェクトおよびModelを作成したTaskを参照します。

テスト・メトリック

テスト・メトリック・オブジェクトは、監視ありモデルをテスト・データでテストした結果です。マイニング機能の種類に基づいて、異なるテスト・メトリックが計算されます。分類モデルでは、精度、混同マトリックス、リフトおよび受信者操作特性が計算されてモデルへアクセスする場合があります。同様に回帰モデルでは、R-2乗およびRMSエラーが計算される場合があります。

適用設定

ApplySettingsオブジェクトでは、ユーザーが適用タスクの結果を調整できます。これには一連の順序付き項目が含まれます。出力の構成は次のとおりです。

- 入力データセットから出力に渡されるデータ(主要な属性)。

- 適用それ自体から計算された値(スコア、確率、ディシジョン・ツリーの場合はルール識別子)。

- 関連する確率の多クラス・カテゴリ。たとえば、ターゲットfavoriteColorの分類モデルでは、ユーザーは特定の色をいくつか選択して、ある1色が好みである確率を取得できます。

デフォルトの適用設定オブジェクトを構築する方法は、マイニング機能の各クラスで定義されています。これによって、標準出力のみが必要な場合にはプログラマの負担が軽減されます。たとえば、分類適用の標準的な出力には、上位の予測とその確率が含まれます。

Transformation Sequence

TransformationSequenceオブジェクトは、マイニング操作の一部として実行される変換シーケンスを表します。たとえば、サポート・ベクター・マシン・モデルの構築には、外れ値の処理と正規化の変換が伴います。これに加えて、新しく導出される属性の作成、ビジネス上の変換なども考えられます。通常、これらの変換は他のモデル作成にも再利用されるため、アプリケーションは変換シーケンスをAPIで名前付きオブジェクトとして保存することができます。

Transformation Sequenceは、個々のタスクとして変換を実行する場合や、モデル作成用の入力オブジェクトの1つとして指定してモデル作成プロセスに変換を組み込む場合に使用できます。

関連項目:
Java APIの詳細は、第7章を参照してください。

3 ケース表の作成

この章では、Oracle Data Miningでデータがどのように解釈されるかについて説明します。ここでは、データ・マイニングのケース表の要件、およびデータ属性とモデル属性の概念について取り上げます。データ変換については、『Oracle Data Mining概要』を参照してください。

この章には、次の項が含まれます。

- 要件

- 属性について

- ネストしたデータ

- 欠損データ

要件

マイニング対象のデータは、1つの表またはビュー内で定義する必要があります。各レコードの情報は別個の行に格納する必要があります。このデータ・レコードは一般的にケースと呼ばれます。各ケースは、一意のケースIDで識別されます。表またはビュー自体は、ケース表と呼ばれます。

マイニングに使用できる表の例として、SHスキーマのCUSTOMERS表があります。各顧客のすべての情報は、1つの行に格納されています。CUST_ID列にケースIDが格納されます。例3-1に示されている行は、SH.CUSTOMERSから選択されています。

例3-1 ケース表の例

SQL> select cust_id, cust_gender, cust_year_of_birth,
cust_main_phone_number from sh.customers where cust_id < 11;

CUST_ID CUST_GENDER CUST_YEAR_OF_BIRTH CUST_MAIN_PHONE_NUMBER
------- ----------- ---- ------------- -------------------------
1        M               1946          127-379-8954
2        F               1957          680-327-1419
3        M               1939          115-509-3391
4        M               1934          577-104-2792
5        M               1969          563-667-7731
6        F               1925          682-732-7260
7        F               1986          648-272-6181
8        F               1964          234-693-8728
9        F               1936          697-702-2618
10       F               1947          601-207-4099

注意:
Oracle Data Miningでは、ネイティブ・トランザクショナル・データで構築できる相関モデルを除き、すべての種類のモデルに単一レコード・ケースのデータが必要です。「マーケット・バスケット・データ」を参照してください。

列のデータ型

ケース表の列には、各ケースを説明する属性が含まれます。例3-1で、属性はCUST_GENDER、CUST_YEAR_OF_BIRTHおよびCUST_MAIN_PHONE_NUMBERです。属性は、監視ありモデルの予測子および監視なしモデルの記述子です。ケースIDのCUST_IDは、特別な属性として表示できます(これは予測子または記述子ではありません)。

Oracle Data Miningでは、次の列のデータ型を指定できます。

VARCHAR2、CHAR
NUMBER、FLOAT
DM_NESTED_CATEGORICALS
DM_NESTED_NUMERICALS

データ型の変換については、『Oracle Data Mining概要』を参照してください。

ネストした型については、「ネストしたデータ」で説明します。ケースID列はネストした型を格納できません。

データ・マイニングのデータセット

分類モデルまたは回帰モデルを作成するには、ケース表が2つ必要です。1つはモデルの作成(トレーニング)用、もう1つはモデルのテスト用に使用されます。作成データおよびテスト・データは多くの場合、同じデータセットから導出すると便利です。たとえば、モデルの作成用に行の60%を選択し、モデルのテスト用に残りの40%を選択するといったことが考えられます。

その他のマイニング機能を実装するモデル(属性評価、クラスタリング、相関または特徴抽出)では、別個のテスト・データは使用しません。

データ・マイニング・モデルの多くは別個のデータに適用できます。モデルの適用対象となるデータは、適用データまたはスコアリング・データと呼ばれます。Oracle Data Miningでは、分類、回帰、異常検出、クラスタリングおよび特徴抽出のスコアリング操作をサポートします。

スコアリング・プロセスでは、スコアリング・データ内の列名と、モデルの作成に使用された列の名前とがマッチングされます。スコアリング・プロセスでは、スコアリング・データ内にすべての列が存在している必要はありません。データ型が一致しない場合、Oracle Data Miningでは型の強制が試行されます。たとえば、PRODUCT_RATINGという列が作成データ内ではVARCHAR2型であるのに対し、スコアリング・データ内ではNUMBER型である場合、Oracle Data MiningではTO_CHAR()関数が効果的に適用され、スコアリング・データ内の列の型が変換されます。

テスト・データまたはスコアリング・データ内の列には、作成データ内の対応する列と同じ変換を行う必要があります。たとえば、作成データ内のAGE列が数値から値CHILD、ADULTおよびSENIORに変換された場合、スコアリング・データ内のAGE列にも同じ変換を実行して、モデルが適切に評価できるようにする必要があります。

注意:
Oracle Data Miningでは、ユーザーが指定した変換指示をモデルに組み込んで、モデルの適用時は常にその変換指示が再適用されるようにすることが可能です。変換指示がモデルに組み込まれているときは、テスト・データセットまたはスコアリング・データセットに対してその変換指示を指定する必要はありません。
Oracle Data Miningは、自動データ準備(ADP)もサポートしています。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、ユーザーが指定した変換とともにモデル内に組み込まれます。組込み変換を含むモデルのことを、スーパーモデルと言います。

自動データ変換および組込みデータ変換については、『Oracle Data Mining概要』を参照してください。

属性について

属性は、データ・マイニングで使用されるデータの項目です。予測モデルでは、属性は、特定の結果に影響を及ぼす予測子です。記述モデルでは、自然なグループまたは相関を見つけるために分析される情報項目です。たとえば、従業員データの表は、肩書き、雇用日、給与、年齢、性別などの属性を持ちます。

データ属性とモデル属性

データ属性とは、モデルの作成、テストまたはスコアリングに使用されるデータセットの列のことです。モデル属性とは、モデルによって内部的に使用されるデータ表現のことです。

データ属性とモデル属性が同一である場合もあります。たとえば、値S、M、Lが格納されているSIZEという列が、モデル作成用としてアルゴリズムによって使用される属性であるとします。モデル属性SIZEは、内部的にはその導出元であるデータ属性と同じである可能性が高いと考えられます。

一方、ある製品グループの売上高が格納されているネストした列SALES_PRODは、モデル属性とは一致しません。データ属性はSALES_PRODですが、モデル属性は、対応する売上高と関連付けられた各製品(ネストした列の各行)となります。

変換によっても、データ属性とモデル属性の不一致が起こります。たとえば、変換によって2つのデータ属性に計算が適用され、その結果が新しい属性に格納されたとします。この新しい属性は、対応するデータ属性を持たないモデル属性になります。ビニング、正規化および外れ値の処理などの変換では、ケース表のデータ属性とモデルの属性表現の不一致が起こります。

関連項目:

- 「ネストしたデータ」

- 変換の詳細は、『Oracle Data Mining概要』を参照してください。

ターゲット属性

監視ありモデルのターゲットは特別な属性です。作成データのターゲット列には、モデルの作成(トレーニング)に使用される履歴データが格納されます。テスト・データのターゲット列には、予測の比較対象になる履歴データが格納されます。スコアリング・データのターゲット列には、モデルを適用したときの結果が格納されます。

ターゲットは、クラスタリング・モデル、特徴抽出モデル、相関モデルおよび異常検出モデルでは使用されません。

*_MINING_MODEL_ATTRIBUTESビューを問い合せると、特定のモデルのターゲットを見つけることができます(例3-2を参照)。

量的と質的

モデル属性は、量的または質的のいずれかです。データ属性(ケース表の列)は、Oracleデータ型を持ちます。

Oracle Data Miningでは、NUMBER、FLOATおよびDM_NESTED_NUMERICALSを量的として解釈し、CHAR、VARCHAR2およびDM_NESTED_CATEGORICALSを質的として解釈します。ただし例外として、分類モデルのターゲットがNUMBERまたはFLOATの場合は質的として解釈されます。

量的属性は、論理上は無限の数の値を持つことができます。これらの値には暗黙的な順序があり、値間の差も順序付けられます。

質的属性は、有限数の離散的カテゴリまたはクラスに属する値を持ちます。値には、暗黙的な順序は関連付けられていません。一部のカテゴリは2値(yesまたはno、maleまたはfemaleなど)であり、取り得る値が2つのみです。質的ターゲットが3つ以上の値を持つモデルを表すときは、多クラスという表現を使用します。たとえば、ターゲットが洋服のサイズで、その値がsmall、mediumまたはlargeである場合などです。

分類モデルのターゲットは質的です。一方、回帰モデルのターゲットは量的です。属性評価モデルのターゲットは、質的または量的のいずれかです。

モデルのシグネチャ

モデルのシグネチャは、モデルの作成に使用されたデータ属性のセットです。シグネチャの属性の一部またはすべては、スコアリング用に存在している必要があります。一部の列が存在していない場合、それらは無視されます。名前は同じだがデータ型が異なる列が存在している場合、モデルではそのデータ型の変換が試行されます。

必ずしも作成データのすべての列がモデルのシグネチャに含まれるとは限りません。アルゴリズム固有の基準により、モデルが特定の列を無視することがあります。また、変換によって一部の列が除外される場合もあります。モデルの作成で実際に使用されたデータ属性のみがシグネチャに含まれます。

ターゲット列およびケースID列はシグネチャに含まれません。

ALL_MINING_MODEL_ATTRIBUTES

モデルのシグネチャの列、およびターゲット(監視ありモデルの場合)は、データ・ディクショナリ・ビューALL/USER/DBA_MINING_MODEL_ATTRIBUTESにリストされます。ALL接頭辞を使用した場合、このビューは、現在のユーザーがアクセスできるすべてのマイニング・モデルのシグネチャとターゲットを戻します。USER接頭辞を使用した場合は、ユーザー・スキーマ内のマイニング・モデルのシグネチャとターゲットを戻します。DBA接頭辞を使用できるのはDBAのみです。

ALL_MINING_MODEL_ATTRIBUTESビューの列を次に示します。表3-1はその詳細です。

SQL> describe all_mining_model_attributes
Name                          Null?    Type
----------------------------------------------------------
OWNER                         NOT NULL VARCHAR2(30)
MODEL_NAME                    NOT NULL VARCHAR2(30)
ATTRIBUTE_NAME                NOT NULL VARCHAR2(30)
ATTRIBUTE_TYPE                         VARCHAR2(11)
DATA_TYPE                              VARCHAR2(12)
DATA_LENGTH                            NUMBER
DATA_PRECISION                         NUMBER
DATA_SCALE                             NUMBER
USAGE_TYPE                             VARCHAR2(8)
TARGET                                 VARCHAR2(3)

表3-1 ALL_MINING_MODEL_ATTRIBUTES

列

説明

OWNER

マイニング・モデルの所有者。

MODEL_NAME

マイニング・モデルの名前。

ATTRIBUTE_NAME

データ属性(列)の名前。

ATTRIBUTE_ TYPE

モデルによってデータ属性から導出されたモデル属性のタイプ。属性のタイプは、量的または質的のいずれかとなる。

この情報は、データ属性とモデル属性との間に1対1のマッピング関係がある場合にかぎり有意。モデルによる使用方法を変更する変換がデータ属性に対して実行されていた場合は、ATTRIBUTE_TYPEに実際的な意味がないことがある。

DATA_TYPE

データ属性(列)のOracleデータ型。次のいずれかとなる。

NUMBER
FLOAT
CHAR
VARCHAR2
NESTED TABLE

値がNESTED TABLEの場合、データ型は次のいずれかとなる。

DM_NESTED_NUMERICALS
または
DM_NESTED_CATEGORICALS

データ型がNESTED TABLEのときは、ATTRIBUTE_TYPE列からDM_NESTED_NUMERICALSまたはDM_NESTED_CATEGORICALSのどちらかを判断可能。

詳細は、「ネストしたデータ」を参照。

DATA_LENGTH

データ型の長さ。

DATA_PRECISION

固定小数点数の精度(10進有効桁数)。データ型NUMBER (p,s)のpとして表される。

DATA_SCALE

固定小数点数のスケール。スケール(小数点から最下位桁までの桁数)は、データ型NUMBER (p,s)のsとして表される。

USAGE_TYPE

属性がモデルの作成に使用されたかどうかを表す。一部の属性は、変換またはアルゴリズムの処理によって除外される場合がある。*_MINING_MODEL_ATTRIBUTESビューにはモデルが使用したデータ属性(モデルのシグネチャ)しかリストされないため、USAGE_TYPEの値は常にACTIVE。

TARGET

属性がターゲットかどうか。値は、YES(属性はターゲットである)またはNO(属性はターゲットでない)のいずれかとなる。

属性がターゲットであり、かつアルゴリズムにより処理用に変換されている場合、ALL_MINING_MODEL_ATTRIBUTESの記述には、逆変換が適用された後のターゲット属性の特性が反映される。

例3-2の問合せでは、データ・マイニングのサンプル・プログラムの1つから生成されたSVMモデルT_SVM_CLAS_SAMPLEのデータ属性に関する情報が戻されます。この問合せでは、モデルのシグネチャ内の各データ属性の名前とデータ型、属性が使用されたタイプ(量的または質的)、および属性がターゲットかどうかが戻されます。

例3-2 ALL_MINING_MODEL_ATTRIBUTES

SQL> select model_name, attribute_name, attribute_type, data_type, target
from user_mining_model_attributes
where model_name = 'T_SVM_CLAS_SAMPLE';

MODEL_NAME          ATTRIBUTE_NAME          ATTRIBUTE_TYPE  DATA_TYPE     TARGET
------------------- ---------------------   --------------- -----------   ------
T_SVM_CLAS_SAMPLE   COMMENTS                NUMERICAL       NESTED TABLE  NO
T_SVM_CLAS_SAMPLE   AGE                     NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   CUST_MARITAL_STATUS     CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   COUNTRY_NAME            CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   CUST_INCOME_LEVEL       CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   EDUCATION               CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   OCCUPATION              CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   HOUSEHOLD_SIZE          CATEGORICAL     VARCHAR2      NO
T_SVM_CLAS_SAMPLE   YRS_RESIDENCE           NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   BULK_PACK_DISKETTES     NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   FLAT_PANEL_MONITOR      NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   HOME_THEATER_PACKAGE    NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   BOOKKEEPING_APPLICATION NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   PRINTER_SUPPLIES        NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   Y_BOX_GAMES             NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   OS_DOC_SET_KANJI        NUMERICAL       NUMBER        NO
T_SVM_CLAS_SAMPLE   CUST_GENDER             CATEGORICAL     CHAR          NO
T_SVM_CLAS_SAMPLE   AFFINITY_CARD           NUMERICAL       NUMBER        YES

モデル属性の名前の詳細

モデル属性の名前は、1つの列名と1つのサブ列名から構成されます。

column_name[.subcolumn_name]

column_name構成要素は、データ属性の名前です。モデル属性の名前には必ず含まれます。ネストした属性の場合は、例3-3に示すようにsubcolumn_nameも含まれます。

例3-3 ネストした列から導出されたモデル属性

ネストした列SALESPRODは次の3つの行を持ちます。

SALESPROD(ATTRIBUTE_NAME, VALUE)
--------------------------------
((PROD1, 300),
(PROD2, 245),
(PROD3, 679))

データ属性の名前はSALESPRODです。関連するモデル属性は次のようになります。

SALESPROD.PROD1
SALESPROD.PROD2
SALESPROD.PROD3

モデルの詳細

モデルの詳細によって、モデル属性、およびアルゴリズムによるモデル属性の処理に関する情報がわかります。アルゴリズムにはそれぞれ別個のGET_MODEL_DETAILSルーチンが存在します。

モデル属性には変換式や逆変換式が関連付けられます。変換は、アルゴリズムによる処理用としてモデルに適用されます。逆変換は、モデルの詳細用に適用されます。GET_MODEL_DETAILSによってユーザーに戻される情報は、元のデータ属性の形式または可能なかぎりそれに近い形式で表されます。

逆変換は、監視ありモデルをスコアリングするときにターゲットに対しても適用されます。逆変換では、モデルの透明性がサポートされます。透明性については、『Oracle Data Mining概要』を参照してください。

例3-4に、属性評価モデルに対するGET_MODEL_DETAILSファンクションの定義を示します。PIPELINEDキーワードは、すべての行を1つの単一値として戻すのではなく、複数の単一値として戻すようにOracle Databaseに指示します。

例3-4 属性評価モデルのモデルの詳細

属性評価モデルに対するGET_MODEL_DETAILSファンクションの構文は次のとおりです。

DBMS_DATA_MINING.GET_MODEL_DETAILS_AI (
model_name             VARCHAR2)
RETURN DM_RANKED_ATTRIBUTES PIPELINED;

このファンクションは、仮想表DM_RANKED_ATTRIBUTESを戻します。これらの列がモデルの詳細です。指定したモデルの各モデル属性に対応する個別の行が存在します。これらの列は、次のように示されます。

(attribute_name          VARCHAR2(4000),
attribute_subname       VARCHAR2(4000),
importance_value        NUMBER,
rank                    NUMBER(38))

ネストしたデータ

Oracle Data Miningでは、各レコードが個別の行に含まれた、単一レコード・ケース形式のケース表が必要です。データの一部または全部が複数レコード・ケース形式で、各レコードが複数の行に含まれている場合はどうなるでしょうか。1つの属性で一連の値または値の集合(学生のテスト・スコアや顧客に購入された製品)を表す場合はどうなるでしょうか。

このような1対多の関係は通常、表間の結合として実装します。たとえば、顧客表を売上表と結合し、購入された製品のリストを各顧客に関連付ける場合があります。

Oracle Data Miningでは、ネストした列を通じてディメンション化されたデータをサポートしています。ケース表にディメンション化されたデータを含めるには、ビューを作成し、データ・マイニングのネストした表タイプの1つに結合データをキャストします。ネストした列の各行は、属性の名前と値のペアから構成されます。ネストした各行は、別個の属性として内部的に処理されます。

関連項目:
「例: マイニング用のネストした列の作成」の、ネストした表に変換するためのサンプル・コード

ネストしたデータをサポートするアルゴリズムは、表3-2にリストされています。

表3-2 ネストしたデータをサポートするOracle Data Miningアルゴリズム

アルゴリズム

マイニング機能

Apriori

相関ルール

GLM

分類、回帰

k-Means

クラスタリング

MDL

属性評価

Naive Bayes

分類

NMF

特徴抽出

SVM

分類、回帰、異常検出

ネストしたオブジェクト型

Oracle Databaseでは、実在するエンティティをデータベース内のオブジェクトとしてモデル化できる、ユーザー定義のデータ型がサポートされています。コレクション型は、複数値属性をモデル化するためのオブジェクト・データ型です。ネストした表はコレクション型です。ネストした表は、他のデータ型が使用できる場所であればどこでも使用できます。コレクション型の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

Oracle Data Miningでは、量的属性用と質的属性用の2つのネストしたオブジェクト型がサポートされています。

DM_NESTED_NUMERICALS

DM_NESTED_NUMERICALSオブジェクト型は、量的属性のネストした表です。各行は、単一のDM_NESTED_NUMERICALです。

ネストした量的属性(行)は、次のように示されます。

SQL> describe dm_nested_numerical
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME                                     VARCHAR2(4000)
VALUE                                              NUMBER

量的属性のコレクション(表)は、次のように示されます。

SQL> describe dm_nested_numericals
DM_NESTED_NUMERICALS TABLE OF SYS.DM_NESTED_NUMERICAL
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME                                     VARCHAR2(4000)
VALUE                                              NUMBER

DM_NESTED_CATEGORICALS

DM_NESTED_CATEGORICALSオブジェクト型は、質的属性のネストした表です。各行は、単一のDM_NESTED_CATEGORICALです。

ネストした質的属性(行)は、次のように示されます。

SQL> describe dm_nested_categorical
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME                                     VARCHAR2(4000)
VALUE                                              VARCHAR2(4000)

質的属性のコレクション(表)は、次のように示されます。

SQL> describe dm_nested_categoricals
DM_NESTED_CATEGORICALS TABLE OF SYS.DM_NESTED_CATEGORICAL
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME                                     VARCHAR2(4000)
VALUE                                              VARCHAR2(4000)

例: マイニング用のトランザクショナル・データの変換

例3-5は、ある売上表のビューのデータです。4つの地域で販売された製品のうちの3種類の売上が表示されています。このデータは、各ケース(製品)の売上が複数の行に格納されているため、製品レベルでのマイニングには適していません。

例3-5 複数レコード・ケース形式の地域ごとの製品売上

PRODUCT   REGION         SALES
-------   --------   ----------
Prod1       NE           556432
Prod2       NE           670155
Prod3       NE             3111
.
.
Prod1       NW            90887
Prod2       NW           100999
Prod3       NW           750437
.
.
Prod1       SE            82153
Prod2       SE            57322
Prod3       SE            28938
.
.
Prod1       SW          3297551
Prod2       SW          4972019
Prod3       SW           884923
.
.

例3-6は、このデータがマイニング用にどのように変換されるかを示しています。ケースID列はPRODUCTになります。SALES_PER_REGION(DM_NESTED_NUMERICALS型のネストした列)がデータ属性になります。この表は、各ケースの情報が単一行に格納されているため、マイニングに適しています。

例3-6 単一レコード・ケース形式の地域ごとの製品売上

PRODUCT      SALES_PER_REGION
(ATTRIBUTE_NAME, VALUE)
------    --------------------------
Prod1      ('NE' ,     556432)
('NW' ,      90887)
('SE' ,      82153)
('SW' ,    3297551)
Prod2      ('NE' ,     670155)
('NW' ,     100999)
('SE' ,      57322)
('SW' ,    4972019)
Prod3      ('NE' ,       3111)
('NW' ,     750437)
('SE' ,      28938)
('SW' ,     884923)
.
.

Oracle Data Miningでは、ネストした各行は例3-7のように別々のモデル属性として扱われます。(この例は、単に概念を表したものです。実際には、処理前にデータがピボットされることはありません。)

例3-7 SALES_PER_REGIONから導出されたモデル属性

PRODUCT    SALES_PER_REGION.NE    SALES_PER_REGION.NW    SALES_PER_REGION.SE    SALES_PER_REGION.SW
-------    ------------------    -------------------    ------------------    -------------------
Prod1                 556432                 90887                  82153                3297551
Prod2                 670155                100999                  57322                4972019
Prod3                   3111                 750437                 28938                 884923
.
.

例: マイニング用のネストした列の作成

例3-8に、データ・マイニング用のネストした列を定義する方法を示します。この例では、トランザクショナルなマーケット・バスケット・データを使用します。

例3-8 ネストした列への変換

ビューSALES_TRANS_CUSTは、各マーケット・バスケットを識別するトランザクションIDと、各バスケット内の製品のリストを表示します。

SQL> describe sales_trans_cust
Name                                                  Null?    Type
----------------------------------------------------- -------- ----------------
TRANS_ID                                              NOT NULL NUMBER
PROD_NAME                                             NOT NULL VARCHAR2(50)
QUANTITY                                                       NUMBER

次のSQL文は、SALES_TRANS_CUST_NESTEDというビューで、このデータをDM_NESTED_NUMERICALS型の列に変換します。このビューは、マイニング用のケース表として使用できます。

SQL> CREATE VIEW sales_trans_cust_nested AS
SELECT trans_id,
CAST(COLLECT(DM_NESTED_NUMERICAL(
prod_name, quantity))
AS DM_NESTED_NUMERICALS) custprods
FROM sales_trans_cust
GROUP BY trans_id;

この問合せは、変換されたデータから2つの行を戻します。

SQL> select * from sales_trans_cust_nested
where trans_id < 101000
and trans_id > 100997;

TRANS_ID  CUSTPRODS(ATTRIBUTE_NAME, VALUE)
-------  ------------------------------------------------
100998   DM_NESTED_NUMERICALS
(DM_NESTED_NUMERICAL('O/S Documentation Set - English', 1)
100999   DM_NESTED_NUMERICALS
(DM_NESTED_NUMERICAL('CD-RW, High Speed Pack of 5', 2),
DM_NESTED_NUMERICAL('External 8X CD-ROM', 1),
DM_NESTED_NUMERICAL('SIMM- 16MB PCMCIAII card', 1))

マーケット・バスケット・データ

マーケット・バスケット・データは、一連のバスケットまたはトランザクションで販売された商品群を表します。Oracle Data Miningでは、マーケット・バスケット分析に相関マイニング機能が提供されます。

相関モデルで使用されるAprioriアルゴリズムでは、ある商品が別の商品と同時に購入される傾向を記述する相関ルールが生成されます。たとえば、相関ルールで、ピーナッツ・バターを購入する顧客の80%がジャムも購入する信頼度が65%だと示される場合があります。

マーケット・バスケット・データは通常、トランザクショナルです。トランザクショナルなデータでは、1つのケースが1回の取引(トランザクション)を表し、トランザクションのデータは複数の行に格納されます。Oracle Data Miningの相関モデルはトランザクショナル・データまたは単一レコード・ケースのデータで構築できます。ODMS_ITEM_ID_COLUMN_NAMEおよびODMS_ITEM_VALUE_COLUMN_NAMEの設定では、相関ルールのデータがトランザクショナル形式かどうかを指定できます。

注意:
相関モデルは、ネイティブ・トランザクショナル・データで構築できる唯一のモデルです。その他すべての種類のモデルについて、Oracle Data Miningでは、単一レコード・ケース形式で存在するデータが必要です。

Aprioriアルゴリズムでは、データがトランザクショナルで、データに多数の欠損値が含まれていることが想定されます。Aprioriは、すべての欠損値をスパース・データとして解釈し、スパース・データを処理するための独自のネイティブ・メカニズムを持っています。

関連項目:

- ODMS_ITEM_ID_COLUMN_NAME設定およびODMS_ITEM_VALUE_COLUMN_NAME設定の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- 「欠損データ」

欠損データ

Oracle Data Miningでは、スパース・データと、ランダムな欠損値の含まれるデータとが区別されます。後者は、一部の属性値が不明であることを意味します。一方、スパース・データには、データ内には表されていないが既知であるとみなされる値が含まれます。

スパース・データの典型例はマーケット・バスケット・データです。何百または何千個もある取扱い商品の中で、個々のケース(バスケットまたはトランザクション)に含まれる商品はわずかです。商品の値はすべて既知ですが、すべての商品がバスケットの中に存在するわけではありません。存在する商品に対しては特定の数量がありますが、存在していない商品についてはスパース(既知の数量は0(ゼロ))となります。

Oracle Data Miningによる欠損データの解釈

Oracle Data Miningでは、欠損データは次のように解釈されます。

- 欠損 - 単純な(ネストしていない)データ型の列内の欠損値は、ランダムに欠損しているとみなされます。

- スパース - ネストした列内の欠損値は、スパース性を示します。

例: 欠損値とスパース・データの識別基準

この項の例では、データがスパースであるのかランダムに欠損しているのかをOracle Data Miningがどのように識別するかについて説明します。

売上表のスパース性

ある売上表には、一定期間内に複数の店舗で顧客に販売された製品グループのPOSデータが格納されます。それぞれの顧客は、一部の製品しか購入しません。顧客が購入しなかった製品は、売上表の行として表示されません。

1人の顧客が各製品に支払った金額を求める場合、購入されなかった製品の金額は0(ゼロ)と推定されます。表に行が表示されなくても、この値はランダムな欠損でも未知でもなくゼロになります。

売上データは(製品、店舗、顧客、時間で)ディメンション化され、マイニング用のネストしたデータとして表されます。

ネストした列の欠損値は常にスパース性を示すため、マイニング対象のデータに関してこの解釈が適切であることを確認する必要があります。たとえば、大規模な映画データベースのユーザーの映画評価が格納されている複数レコード・ケースのデータセットをマイニングしようとする場合、欠損している評価は未知の(ランダムに欠損している)値ですが、Oracle Data Miningではこのデータをスパースとして扱い、欠損値については評価を0(ゼロ)と推定します。

顧客データの表の欠損値

顧客に関する人口統計データが格納されている顧客データの表があるとします。ケースID列は顧客IDです。属性は、年齢、学歴、職業、性別、世帯人員などです。データがすべてそろっていない顧客もいます。欠損値がある場合は、ランダムに欠損しているとみなされます。たとえば、顧客1の年齢と顧客2の職業がデータにない場合、その情報は単に不明なだけです。スパース性を示すことにはなりません。

この顧客データはディメンション化されないことに注意してください。ケースとその各属性の間には1対1のマッピングが存在します。どの属性もネストしていません。

Oracle Data Miningによる欠損データの処理

欠損値の処理方法は、アルゴリズムおよびデータの性質(質的または量的、スパースまたはランダムな欠損)によって異なります。表3-3に、欠損値の処理方法の概要を示します。

注意:
Oracle Data Miningでは、自動データ準備が使用されているかどうかにかかわらず、同じ欠損値処理が実行されます。

表3-3 アルゴリズムによる欠損値処理

欠損データ

SVM、NMF、k-Means、GLM

NB、MDL、DT、OC

Apriori

ランダムな欠損値(量的)

欠損している量的な値は平均値に置換される。

欠損値はそのままランダムな欠損として処理される。

すべての欠損データがスパースとして解釈される。

ランダムな欠損値(質的)

欠損している質的な値は最頻値に置換される。

欠損値はそのままランダムな欠損として処理される。

すべての欠損データがスパースとして解釈される。

スパース・データ(量的)

スパースな量的データは0(ゼロ)に置換される。

DTとO-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。NBおよびMDLでは、スパースな量的データは0(ゼロ)に置換される。

スパース・データは処理される。

スパース・データ(質的)

スパースな質的データは0(ゼロ)ベクトルに置換される。

DTとO-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。NBおよびMDLでは、スパースな質的データはDM$SPARSEという特別な値に置換される。

スパース・データは処理される。

属性変換と欠損値処理

Oacle Data Miningで、欠損データを、ランダムな欠損としてではなくスパースとして、またはスパースとしてではなくランダムな欠損として処理する必要がある場合、モデルを作成する前に変換を行う必要があります

欠損値をスパースとして処理する必要があるが、Oracle Data Miningではその欠損値がランダムな欠損値として解釈される場合、NVLなどのSQL関数を使用すると、NULLを「NA」などの値に置換できます。Oracle Data Miningでは、特定の値が存在する場合、欠損値処理は行われません。『Oracle Database SQL言語リファレンス』を参照してください。

欠損しているネストした属性をランダムな欠損として処理する場合は、ネストした行を、別々の列に格納された物理的な属性に変換できます(ただし、ケース表の列数がデータベースによる制限(1000列以内)を超えない場合に限ります)。存在しうる属性の名前をすべて入力し、それらをNULLとして指定してください。

4 マイニング用のテキストの準備

Oracle Data Miningでは、1つ以上のテキスト列を持つデータセットのマイニングをサポートしています。これらの列は特別な前処理を行い、テキスト・トークン(用語と呼ばれる)を抽出してネストした列に格納する必要があります。この処理で変換されたテキストは、モデルの作成、テストおよびスコアリングで他の属性と同様に使用できるようになります。テキスト・マイニングには、ネストしたデータをサポートする任意のアルゴリズムを使用できます。(詳細は、第3章の表3-2を参照。)

この章では、PL/SQLを使用してマイニング用のテキスト列を準備する方法を説明します。

注意:
Oracle Data Miningには、テキスト変換およびテキスト・マイニングをPL/SQL APIで記述したサンプル・プログラムが含まれています。Oracle Data Miningのサンプル・プログラムの詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

関連項目:
テキスト・マイニングの詳細は、『Oracle Data Mining概要』を参照してください。

この章は、次の項で構成されています。

- 用語抽出用のOracle Textルーチン

- サンプル・プログラムの用語抽出

- 非構造化データから構造化データへ

- 用語抽出プロセスの手順

- 例: テキスト列の変換

用語抽出用のOracle Textルーチン

Oracle Data Miningでは、特殊なOracle Textのルーチンを使用してテキスト・データを前処理します。Oracle Textは、テキスト問合せおよび分類アプリケーションを作成するデータベースのテクノロジの1つです。

Oracle Textでは、次のようなOracle Data Mining用語抽出プロセスの機能が提供されています。

- SVM_CLASSIFIER。CTX_DLL Oracle Text PL/SQLパッケージに定義されており、Oracle Data Miningの用語抽出の索引プリファレンスを指定します。

- テーブル・ファンクションFEATURE_PREPおよびFEATURE_EXPLAIN。CTXSYS.DRVODM Oracle Text PL/SQLパッケージに定義されており、Oracle Data Miningのテキスト用語の中間表および最終表を生成します。

PL/SQLでデータ準備プロセスを行うには、これらのOracle Text機能を使用する必要があります。(「テキスト変換の使用方法」を参照。)

関連項目:
Oracle Textの詳細は、『Oracle Textアプリケーション開発者ガイド』と『Oracle Textリファレンス』を参照してください。

注意:
Oracle Data MiningのOracle Text機能については、この章で説明します。Oracle Text機能の詳細は、Oracle Textのマニュアルには記載されていません。

用語に関する注意:
テキスト用語は、特徴とも呼ばれます。テキスト・マイニングでは、特徴とは、テキスト・ドキュメントから抽出した1つの単語または単語の1グループを指します。特徴(用語)は、操作および分析の対象となるテキストの基本単位です。
特徴抽出のマイニング機能(Oracle Data MiningのNMFアルゴリズム)およびテキスト・マイニング変換は、ともに一種の特徴抽出を行います。

- 特徴抽出モデルは、複数の属性の基本的な性質を表す特徴を作成します。モデルでは、元の属性の代わりにこの特徴を処理します。

- テキスト変換によって、テキスト・ドキュメントは機能のまとまりに変更され、それぞれがドキュメントの基本特性を表します。モデルでは、元のドキュメントのかわりにテキスト機能を処理します。

サンプル・プログラムの用語抽出

用語抽出プロセスを理解する手始めとしては、サンプル・プログラムを利用するのが一番です。次のサンプル・プログラムには、テキスト・マイニング用の用語抽出コードが含まれています。

- dmsh.sql - サンプル・プログラム(テキスト・マイニング・プログラムなど)で使用する作成、テストおよびスコアリングのデータを準備します。dmsh.sqlでは、データ・マイニング用のビューとテキスト・マイニング用の表および索引を作成します。

- dmtxtfe.sql - dmsh.sqlによって作成された索引付きのテキスト列を使用して、テキスト・マイニングに適したネストした列を作成します。
dmtxtfe.sqlは、用語抽出のサンプル・プログラムです。このプログラム内には、段階を追ってコードを説明しているコメントが多数含まれています。このプログラムは、dmsh.sqlのように、索引作成と、テスト・データおよびスコアリング・データの準備を追加することで、完全な用語抽出ソリューションに拡張できます。

次に示す2つのPL/SQLサンプル・プログラムは、dmsh.sqlによってテキスト・マイニング用に準備されたデータを使用します。

- dmtxtnmf.sqlは、Non-Negative Matrix Factorizationを使用するモデルを作成および適用します。

- dmtxtsvm.sqlは、SVM分類を使用するモデルを作成および適用します。

これらのプログラムはどちらも、COMMENTSと呼ばれるネストされたテキスト・データの列を含む顧客データの表をマイニングします。COMMENTS列は、dmsh.sqlによって事前処理されます。これらのプログラムで作成されるモデルを、Linuxシステムの例で次に示します。

-- Run the programs to create the models
SQL> @ $ORACLE_HOME/rdbms/demo/dmtxtnmf.sql
SQL> @ $ORACLE_HOME/rdbms/demo/dmtxtsvm.sql
-- List the models created by the programs
SQL> SELECT model_name, mining_function, algorithm FROM user_mining_models;

MODEL_NAME                MINING_FUNCTION              ALGORITHM
------------------------  ---------------------------  ------------------------
T_SVM_CLAS_SAMPLE         CLASSIFICATION               SUPPORT_VECTOR_MACHINES
T_NMF_SAMPLE              FEATURE_EXTRACTION           NONNEGATIVE_MATRIX_FACTOR

関連項目:
『Oracle Data Mining管理者ガイド』。このマニュアルでは、サンプル・プログラムを入手および実行するための手順が説明されています。これらのプログラムで使用する作成、トレーニングおよびスコアリングの各データについても説明されています。

非構造化データから構造化データへ

テキスト・マイニング用の前処理では、VARCHAR2型またはCLOB型の列から、DM_NESTED_NUMERICALS型のネストした表列が作成されます。ネストした表の各行により、属性名と値が特定されます。DM_NESTED_NUMERICALS型では、次の列が定義されています。

attribute_name     VARCHAR2(4000)
value               NUMBER)

用語抽出プロセスでは、元の表の各行のテキストを別個のドキュメントとして扱います。各ドキュメントは、数値およびテキスト・ラベルを持つ用語セットに変換されます。ネストした表列のattribute_name列にはテキストが格納され、value列には、ドキュメントおよび一群のドキュメント(他の行)内の用語の頻出度に基づいて導出される、用語の数値が格納されます。

たとえば、次の問合せでは、顧客102998に関する様々な属性(コメントのテキスト列など)が戻されます。このテキスト列は、変換されていません。

SQL> select cust_id, cust_gender, cust_income_level, affinity_card, comments
from mining_build_text
where cust_id = 102998;

CUST_ID C  CUST_INCOME_LEVEL     AFFINITY_CARD COMMENTS
------- -- --------------------  ------------- --------------------------------
102998  M  J: 190,000 - 249,999  1             I wanted to write you to let you
know that I've purchased several
items at your store recently and
have been very satisfied with my
purchases. Keep up the good work.

次の問合せでは、顧客102998に関する同じ属性が戻されますが、コメント列のテキストは変換されています。この問合せでは、変換されたテキストが格納されるATTRIBUTE_NAME列およびVALUE列がネストした表から抽出されます。

SQL> select b.cust_id, b.cust_gender, b.cust_income_level, b.affinity_card, n.*
from mining_build_nested_text b,
table(b.comments) n
where b.cust_id = 102998
order by n.attribute_name;

CUST_ID  C  CUST_INCOME_LEVEL    AFFINITY_CARD  ATTRIBUTE_NAME  VALUE
-------  -- -------------------  -------------  --------------  --------
102998   M  J: 190,000 - 249,999  1              GOOD            .26894
102998   M  J: 190,000 - 249,999  1              ITEMS            158062
102998   M  J: 190,000 - 249,999  1              KEEP             238765
102998   M  J: 190,000 - 249,999  1              KNOW              .2006
102998   M  J: 190,000 - 249,999  1              LET              299856
102998   M  J: 190,000 - 249,999  1              PURCHASED        142743
102998   M  J: 190,000 - 249,999  1              PURCHASES        173146
102998   M  J: 190,000 - 249,999  1              RECENTLY        .195223
102998   M  J: 190,000 - 249,999  1              SATISFIED       .355851
102998   M  J: 190,000 - 249,999  1              SEVERAL         .355851
102998   M  J: 190,000 - 249,999  1              STORE          .0712537
102998   M  J: 190,000 - 249,999  1              UP              .159838
102998   M  J: 190,000 - 249,999  1              WANTED          .355851
102998   M  J: 190,000 - 249,999  1              WORK            .299856
102998   M  J: 190,000 - 249,999  1              WRITE           .355851

ATTRIBUTE_NAME列には、元のコメント列から抽出されたテキスト1項目が格納されます。VALUE列には、用語の値が格納されます。ただし、元のコメント列に存在するすべての単語が、用語として抽出されるとは限りません。たとえば、冠詞など(theやto)は、抽出の対象にはなりません。

用語抽出プロセスの手順

この項では、用語抽出プロセスの手順を概説します。詳細および特殊な構文での必要事項については、この章の後半で説明します。

作成表のテキスト列の変換

まず、作成データでテキストを変換します。このプロセスでテキスト用語抽出が生成され、これをテストに再利用してデータを適用します。次の手順を実行します。

1. 作成表のテキスト列の索引を作成します。

2. 索引のSVM_CLASSIFIERプリファレンスを作成します。

3. SVM_CLASSIFIER索引で指定したカテゴリを保持する表を定義します。

4. FEATURE_PREPテーブル・ファンクションを使用して、用語の定義を作成し、中間用語表を移入します。

5. FEATURE_EXPLAINテーブル・ファンクションを使用して、最終用語表を移入します。

6. (ビューまたは別の表を使用して)元の作成表の列をレプリケートし、テキスト列をネストした表列と置き換えます。最終用語表からネストした表列に用語をロードします。

テスト表および適用表のテキスト列の変換

テスト・データおよび適用データは、作成データと同じ前処理を行う必要があります。テスト・データおよび適用データを変換するには、作成データ用に生成した用語の定義を再使用します。次の手順を実行します。

1. テスト表または適用表のテキスト列の索引を作成します。

2. FEATURE_PREPテーブル・ファンクションを使用して、中間用語表を移入します。作成データ用に以前に生成した用語の定義を使用します。

3. FEATURE_EXPLAINテーブル・ファンクションを使用して、最終用語表を移入します。

4. 元のテスト表または適用表の列をレプリケートし、テキスト列をネストした表列と置き換えます。最終用語表からネストした表列に用語をロードします。

索引および索引プリファレンスの作成

Oracle Textプロセスには、テキスト索引が必要になります。Oracle Textでは、テキスト・ドキュメントの問合せ、カタログ化および分類のために、数種類の索引をサポートしています。Oracle Data Miningの用語抽出プロセスでは、テキスト問合せ用にCONTEXT索引が必要になります。

各テキスト列を変換する索引を作成する必要があります。索引を作成するには、次の構文を使用します。

SQL>CREATE INDEX index_name ON table_name(column_name)
INDEXTYPE IS ctxsys.context PARAMETERS ('nopopulate');

注意:
この文で作成されるのは、基本的なCONTEXT索引です。CREATE INDEX文に引数を追加することによって、新たに索引の特性を定義できます。詳細は、『Oracle Textリファレンス』を参照してください。

Oracle Textでは、索引のデフォルトの特性をオーバーライドするために索引プリファレンスをサポートしています。特定の名前およびタイプを指定したプリファレンスを作成するには、Oracle TextパッケージCTX_DDLのCREATE_PREFERENCEプロシージャを使用します。SVM_CLASSIFIERプリファレンス・タイプでは、Oracle Data Miningの索引の特性を定義します。

作成データを準備する際に、索引プリファレンスを作成する必要があります。索引プリファレンスは、テスト・データおよび適用データを準備する際に再使用されます。索引プリファレンスを作成するには、次の構文を使用します。

SQL>EXECUTE ctx_ddl.create_preference('preference_name', 'SVM_CLASSIFIER');

SVM_CLASSIFIER索引プリファレンスでは、2つの数値列IDおよびCATを持つ事前定義の表を使用します。IDはケースIDを、CATはカテゴリを格納します。カテゴリ表は、内部プロセスで使用されます。カテゴリ表を作成するには、次の構文を使用する必要があります。

SQL>CREATE TABLE category_table_name(id NUMBER, cat NUMBER);

中間用語表の作成

Oracle TextパッケージCTXSYS.DRVODMのFEATURE_PREPテーブル・ファンクションは、SVM_CLASSIFIER型の索引プリファレンスを使用して、テキスト列から用語を抽出します。FEATURE_PREPは、作成データから用語定義の表を作成し、テスト・データおよび適用データ用にこれらの定義を再使用します。

FEATURE_PREPは、中間用語表を戻します。

FEATURE_PREPコール構文

FEATURE_PREPは、2つの異なる引数セットを指定できるオーバーロード関数です。作成データ用に1組の引数セットを指定し、テスト・データおよび適用データ用にもう1つの引数セットを指定します。

--- syntax for build data ---
CTXSYS.DRVODM.FEATURE_PREP (
text_index                IN   VARCHAR2,
case_id                   IN   VARCHAR2,
category_tbl              IN   VARCHAR2,
category_tbl_id_col       IN   VARCHAR2,
category_tbl_cat_col      IN   VARCHAR2,
feature_definition_tbl    IN   VARCHAR2,
index_preference          IN   VARCHAR2)
RETURN DRVODM;

--- syntax for test/apply data ---
CTXSYS.DRVODM.FEATURE_PREP (
text_index                IN   VARCHAR2,
case_id                   IN   VARCHAR2,
feature_definition_tbl    IN   VARCHAR2,
RETURN DRVODM;

FEATURE_PREPの戻り値

FEATURE_PREPは、次の列を戻します。SEQUENCE_ID列にはケースID、ATTRIBUTE_ID列には用語IDが格納されます。

Name                   NULL?   Type
---------------------- ------- ------
SEQUENCE_ID                    NUMBER
ATTRIBUTE_ID                   NUMBER
VALUE                          NUMBER

FEATURE_PREPの引数

FEATURE_PREPでは、表4-1に示す引数を指定できます。

表4-1 FEATURE_PREPテーブル・ファンクションの引数

引数名

データ型

text_index

VARCHAR2

作成表、テスト表または適用表におけるテキスト列の索引の名前。

case_ID

VARCHAR2

作成表、テスト表または適用表におけるケースID列の名前。

category_tbl

VARCHAR2

SVM_CLASSIFIER索引プリファレンスで使用する表の名前。

作成データでのみ指定。

category_tbl_id_col

VARCHAR2

'id'を指定。これは、SVM_CLASSIFIER索引プリファレンスで使用する表のID列の名前。

作成データでのみ指定。

category_tbl_cat_col

VARCHAR2

'cat'を指定。これは、SVM_CLASSIFIER索引プリファレンスで使用する表のCAT列の名前。

作成データでのみ指定。

feature_definition_tbl

VARCHAR2

FEATURE_PREPによって作成される用語定義表の名前。用語定義表の列は次のとおり。

Name         Null?     Type
---------------------------------
CAT_ID                   NUMBER
TYPE                     NUMBER
RULE                     BLOB

index_preference

VARCHAR2

SVM_CLASSIFIER索引プリファレンスの名前。

作成データでのみ指定。

FEATURE_PREPの例

次の例では、txt_term_outと呼ばれる中間用語表を作成しています。FEATURE_PREPテーブル・ファンクションは、build_text_idxと呼ばれる索引を持つテキスト列から用語を抽出します。テキスト列は、cust_idと呼ばれるケースID列を持つ作成表にあります。索引プリファレンスtxt_prefは、表cat_tblのid列およびcat列を使用して索引に適用されます。FEATURE_PREPは、txt_pref_termsと呼ばれる用語定義の表を作成します。

CREATE TABLE txt_term_out AS
SELECT *
FROM TABLE(ctxsys.drvodm.feature_prep (
'build_text_idx',
'cust_id',
'cat_tbl',
'id',
'cat',
'txt_pref_terms',
'txt_pref'));

最終用語表の作成

Oracle TextパッケージCTXSYS.DRVODMのFEATURE_EXPLAINテーブル・ファンクションは、FEATURE_PREPによって作成された定義から用語の値を抽出し、関連する単語を各値に追加します。

FEATURE_EXPLAINは、最終用語表を戻します。

FEATURE_EXPLAINのコール構文

FEATURE_EXPLAINのコール構文は、次のとおりです。

CTXSYS.DRVODM.FEATURE_EXPLAIN (
feature_definition_tbl     IN   VARCHAR2,
RETURN DRVODM;

FEATURE_EXPLAINの戻り値

FEATURE_EXPLAINは、次の列を戻します。

Name              Type
---------------    ---------------
text               VARCHAR2(160)
type               NUMBER(3)
ID                 NUMBER
score              NUMBER

FEATURE_EXPLAINの引数

FEATURE_EXPLAINでは、単一の引数(FEATURE_PREPによって作成される用語定義の表)を指定します。

FEATURE_EXPLAINの例

次の例では、中間用語表txt_term_outを使用して、txt_final_termsと呼ばれる最終用語表を作成しています。FEATURE_EXPLAINテーブル・ファンクションは、用語定義の表txt_pref_termsに指定されている用語を戻します。

SQL> create table txt_final_terms as
select A.sequence_id, B.text, A.value
FROM txt_term_out A,
TABLE(ctxsys.drvodm.feature_explain(
'txt_pref_terms')) B
WHERE A.attribute_id = B.id;

ネストした表列の移入

最終用語表を使用して、DM_NESTED_NUMERICALS型のネストした表列を移入します。

次の例では、表mining_build_nested_textを作成しています(かわりに、ビューを作成することもできます)。(かわりに、ビューを作成することもできます)。表には、顧客IDのケースID列および3つの顧客属性(年齢、学歴および職業)の列があります。また、用語表txt_final_termsから作成されたDM_NESTED_NUMERICALS型のコメント列もあります。

SQL> CREATE TABLE mining_build_nested_text
NESTED TABLE comments store AS build_comments
AS
SELECT non_text.cust_id,
non_text.age,
non_text.education,
non_text.occupation,
txt.comments
FROM
mining_build_text non_text,
( SELECT features.sequence_id,
cast(COLLECT(dm_nested_numerical(features.text,features.value))
as dm_nested_numericals)  comments
FROM txt_final_terms features
group by features.sequence_id) txt
WHERE non_text.cust_id = txt.sequence_id(+);

例: テキスト列の変換

次の例では、MINING_BUILD_TEXTのテキスト列がMINING_BUILD_NESTED_TEXTのネストした表列に変換されています。MINING_APPLY_TEXTの同じテキスト列がMINING_APPLY_NESTED_TEXTのネストした表列に変換されています。

MINING_BUILD_TEXTおよびMINING_APPLY_TEXTのどちらにも次の列が存在します。

Name                              Null?    Type
--------------------------------- -------- ---------------------------
CUST_ID                           NOT NULL NUMBER
AGE                                        NUMBER
EDUCATION                                  VARCHAR2(21)
OCCUPATION                                 VARCHAR2(21)
COMMENTS                                   VARCHAR2(4000)

次の文は、索引を作成します。

SQL> create index build_text_idx on mining_build_text (comments)
indextype is ctxsys.context parameters ('nopopulate');
SQL> create index apply_text_idx ON mining_apply_text (comments)
indextype is ctxsys.context parameters ('nopopulate');

次の文は、索引プリファレンスおよびその表を作成します。

SQL> execute ctx_ddl.create_preference('idx_pref', 'SVM_CLASSIFIER');
SQL> create table idx_pref_cat (id number, cat number);

次の文は、表BUILD_TERMS_OUTの中間用語を戻します。また、表FEATURE_DEFSを作成し、用語定義を移入します。

SQL>  create table build_terms_out as
select * from
table (ctxsys.drvodm.feature_prep
('build_text_idx',
'cust_id',
'idx_pref_cat',
'id',
'cat',
'feature_defs',
'idx_pref'));

次の文は、表BUILD_EXPLAIN_OUTの最終用語を戻します。

SQL> create table build_explain_out as
select a.sequence_id,
b.text,
a.value
from build_terms_out a,
table (ctxsys.drvodm.feature_explain('feature_defs')) b
where a.attribute_id = b.id;

次の文は、表MINING_BUILD_NESTED_TEXTを作成します。この表には、元の作成表からの非テキスト属性と、コメントのネストした表が格納されています。この表は、モデルの作成に使用されます。

SQL> create table mining_build_nested_text
nested table comments store as build_comments
as select non_text.cust_id,
non_text.age,
non_text.education,
non_text.occupation,
txt.comments
from mining_build_text non_text,
(select features.sequence_id,
cast(collect(dm_nested_numerical(features.text,features.value))
as dm_nested_numericals)  comments
from build_explain_out features
group by features.sequence_id) txt
where non_text.cust_id = txt.sequence_id(+);

次の文は、適用表MINING_APPLY_TEXTのコメント列の中間用語表を作成します。その際、MINING_BUILD_TEXTのコメント列の前処理で作成されたFEATURE_DEFS表の用語定義を使用します。

SQL>  create table apply_terms_out as
select * from
table (ctxsys.drvodm.feature_prep
('apply_text_idx',
'cust_id',
'feature_defs'));

次の文は、適用の最終用語表を作成します。

SQL> create table apply_explain_out as
select a.sequence_id,
b.text,
a.value
from apply_terms_out a,
table (ctxsys.drvodm.feature_explain('feature_defs')) b
where a.attribute_id = b.id;

次の文は、表MINING_APPLY_NESTED_TEXTを作成します。この表には、元の適用表からの非テキスト属性と、コメントのネストした表が格納されています。この表は、モデルの適用に使用されます。

SQL> create table mining_apply_nested_text
nested table comments store as apply_comments
as select non_text.cust_id,
non_text.age,
non_text.education,
non_text.occupation,
txt.comments
from mining_apply_text non_text,
(select features.sequence_id,
cast(collect(dm_nested_numerical(features.text,features.value))
as dm_nested_numericals)  comments
from apply_explain_out features
group by features.sequence_id) txt
where non_text.cust_id = txt.sequence_id(+);

5 モデルの作成

この章では、データ・マイニング・モデルを作成し、モデルの詳細を取得する方法について説明します。

注意:
この章の内容は、『Oracle Data Mining概要』で説明されているマイニング機能やマイニング・アルゴリズムを基本的に理解していることを前提としています。

この章には、次の項が含まれます。

- モデルの作成手順

- モデルの設定

- モデルの作成

- モデルの詳細

- マイニング・モデルのスキーマ・オブジェクト

モデルの作成手順

データ・マイニング・モデル作成の一般的な手順を次に示します。

1. データを準備します。(第3章を参照。)

2. オプションで、モデルの設定を指定します。(「モデルの設定」を参照。)

3. モデルを作成します。(「モデルの作成」を参照。)

4. モデルの詳細を確認します。(「モデルの詳細」を参照。)

5. モデルをテストします。(分類と回帰の詳細は、Oracle Data Mining概要を参照してください。)

6. 次のような問題についてモデルを評価します: モデルはどの程度正確か。モデルに関連付けられているルールがある場合、それらのルールの信頼度や支持度はどれほどか。モデルがビジネス上の問題にどのくらいよく対応しているか。

注意:
このプロセスをさらに詳しく理解するために、Oracle Database付属のサンプル・データ・マイニング・プログラムのソース・コードを見ることができます。「サンプル・マイニング・モデル」を参照してください。

関連項目:
モデルの作成プロセスの詳細は、『Oracle Data Mining概要』を参照してください。

モデルの設定

データ・マイニング・モデルは、作成時に多数の設定を使用してモデルを構成できます。設定を指定するには、設定表を作成してそれをモデル作成プロセスへ渡します。すべての設定がデフォルト値を持つため、設定表はオプションです。

モデルの設定の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。HTMLバージョンの『Oracle Data Miningアプリケーション開発者ガイド』を使用している場合は、表5-1のリンクから、各タイプのモデル設定についてのドキュメントに直接移動することができます。

表5-1 モデルの設定

設定

ドキュメント

マイニング機能の変更

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。

アルゴリズムの変更

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。

グローバルなモデルの特性の設定

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。

自動データ準備の有効化/無効化

『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照。

設定表の指定

設定表は、表5-2に示す列を持つ必要があります。

表5-2 設定表に必要な列

列名

データ型

setting_name

VARCHAR2(30)

setting_value

VARCHAR2(4000)

setting_name列に挿入する値は、DBMS_DATA_MININGパッケージで定義されている1つ以上の定数です。設定名(setting_name)が示す内容に応じて、setting_value列の値には、設定自体に対応する実際の数値や事前定義の定数を指定できます。setting_value列は、VARCHAR2として定義されます。TO_CHAR()関数を使用して数値入力を文字列に明示的にキャストするか、あるいはデータベースから提供される暗黙的な型変換を使用できます。

例5-1では、SVM分類モデルの設定表を作成します。SVMはデフォルトの分類機能ではないため、ALGO_NAME設定を使用してこのアルゴリズムを指定します。SVMS_KERNEL_FUNCTIONをSVMS_LINEARに設定することにより、モデルは線形カーネルを使用して作成されます。カーネル関数を指定しない場合、アルゴリズムがデータの属性の数に基づいてカーネルを選択します。

例5-1 設定表の作成

CREATE TABLE svmc_sh_sample_settings (
setting_name VARCHAR2(30),
setting_value VARCHAR2(4000));

BEGIN
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
(dbms_data_mining.algo_name, dbms_data_mining.algo_support_vector_machines);
INSERT INTO svmc_sh_sample_settings (setting_name, setting_value) VALUES
(dbms_data_mining.svms_kernel_function, dbms_data_mining.svms_linear);
COMMIT;
END;
/

アルゴリズムの指定

ALGO_NAME設定では、モデルのアルゴリズムを指定できます。特定のマイニング機能に対してデフォルトのアルゴリズムを使用する場合、または使用できるアルゴリズムが1つしかない場合は、ALGO_NAME設定を指定する必要はありません。

表5-3 データ・マイニングのアルゴリズム

ALGO_NAMEの値

アルゴリズム

デフォルトかどうか

マイニング・モデルの機能

ALGO_AI_MDL

最小記述長

-

属性評価

ALGO_APRIORI_ASSOCIATION_RULES

Apriori

-

相関

ALGO_DECISION_TREE

ディシジョン・ツリー

-

分類

ALGO_GENERALIZED_LINEAR_MODEL

一般化線形モデル

-

分類、回帰

ALGO_KMEANS

k-Means

デフォルト

クラスタリング

ALGO_NAIVE_BAYES

Naive Bayes

デフォルト

分類

ALGO_NONNEGATIVE_MATRIX_FACTOR

Non-Negative Matrix Factorization

-

特徴抽出

ALGO_O_CLUSTER

O-Cluster

-

クラスタリング

ALGO_SUPPORT_VECTOR_MACHINES

Support Vector MachineSuppor

デフォルト

デフォルトの回帰アルゴリズム

回帰、分類、異常検出(ターゲットのない分類)

コストの指定

CLAS_COST_TABLE_NAME設定は、ディシジョン・ツリー・モデルの作成に使用するコスト・マトリックス表の名前を指定します。コスト・マトリックスは、分類モデルにバイアスをかけて、コストのかかる分類ミスを最小化します。コスト・マトリックス表は、表5-4に示す列を持つ必要があります。

表5-4 コスト・マトリックス表に必要な列

列名

データ型

actual_target_value

CHAR、VARCHAR2、NUMBER、またはFLOAT

predicted_target_value

CHAR、VARCHAR2、NUMBER、またはFLOAT

cost

NUMBER

ディシジョン・ツリーは、作成時にコスト・マトリックスを指定できる唯一のアルゴリズムです。ただし、スコアリングの際には、どの分類モデルにもコスト・マトリックスを作成して関連付けることができます。

スコアリングにコストを使用する場合は、表5-4に示す列を持つ表を作成し、DBMS_DATA_MINING.ADD_COST_MATRIXプロシージャを使用してコスト・マトリックス表をモデルに追加します。PREDICTION関数を呼び出すときに、コスト・マトリックスをインラインで指定することもできます。

関連項目:
コストの詳細は、『Oracle Data Mining概要』を参照してください。

事前確率の指定

CLAS_PRIORS_TABLE_NAME設定は、Naive Bayesモデルの作成に使用する事前確率表の名前を指定します。事前確率は、作成データと実際の母集団の間の分布の差を埋めるために使用されます。事前確率表は、表5-5に示す列を持つ必要があります。

表5-5 事前確率表に必要な列

列名

データ型

target_value

CHAR、VARCHAR2、NUMBER、またはFLOAT

prior_probability

NUMBER

関連項目:
事前確率の詳細は、『Oracle Data Mining概要』を参照してください。

クラスの重みの指定

CLAS_WEIGHTS_TABLE_NAME設定は、より高い重み付けのクラスを優先するようにロジスティック回帰(GLM分類)またはSVM分類のモデルにバイアスをかけるために使用する、クラスの重み表の名前を指定します。重み表は、表5-6に示す列を持つ必要があります。

表5-6 クラスの重みの表に必要な列

列名

データ型

target_value

CHAR、VARCHAR2、NUMBER、またはFLOAT

class_weight

NUMBER

関連項目:
クラスの重みの詳細は、『Oracle Data Mining概要』を参照してください。

データ・ディクショナリにおけるモデルの設定

マイニング・モデルの設定に関する情報は、データ・ディクショナリ・ビューALL/USER/DBA_MINING_MODEL_SETTINGSから取得できます。ALL接頭辞を使用した場合、このビューは、現在のユーザーがアクセスできるモデルの設定に関する情報を戻します。USER接頭辞を使用した場合は、ユーザー・スキーマ内のモデルの設定に関する情報を戻します。DBA接頭辞を使用できるのはDBAのみです。

ALL_MINING_MODEL_SETTINGSの列は次のとおりです。各列の説明は、表5-7を参照してください。

SQL> describe all_mining_model_settings
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
OWNER                                     NOT NULL VARCHAR2(30)
MODEL_NAME                                NOT NULL VARCHAR2(30)
SETTING_NAME                              NOT NULL VARCHAR2(30)
SETTING_VALUE                                      VARCHAR2(4000)
SETTING_TYPE                                       VARCHAR2(7)

表5-7 ALL_MINING_MODEL_SETTINGS

列

説明

owner

マイニング・モデルの所有者

model_name

マイニング・モデルの名前

setting_name

設定の名前

setting_value

設定の値

setting_type

値がユーザーによって指定される場合はINPUT、システム生成値の場合はDEFAULT

次の問合せを発行すると、SVM分類モデルSVMC_SH_CLAS_SAMPLEの設定が表示されます。ALGO_NAME、CLAS_PRIORS_TABLE_NAMEおよびSVMS_KERNEL_FUNCTIONの設定はユーザーが指定しています。これらの設定は、モデルの設定表で指定されています。

例5-2 ALL_MINING_MODEL_SETTINGS

SQL> COLUMN setting_value FORMAT A35
SQL> SELECT setting_name, setting_value, setting_type
FROM all_mining_model_settings
WHERE model_name in 'SVMC_SH_CLAS_SAMPLE';

SETTING_NAME                   SETTING_VALUE                       SETTING
------------------------------ ----------------------------------- -------
SVMS_ACTIVE_LEARNING           SVMS_AL_ENABLE                      DEFAULT
PREP_AUTO                      OFF                                 DEFAULT
SVMS_COMPLEXITY_FACTOR         0.244212                            DEFAULT
SVMS_KERNEL_FUNCTION           SVMS_LINEAR                         INPUT
CLAS_WEIGHTS_TABLE_NAME        svmc_sh_sample_class_wt             INPUT
SVMS_CONV_TOLERANCE            .001                                DEFAULT
ALGO_NAME                      ALGO_SUPPORT_VECTOR_MACHINES        INPUT

7 rows selected.

SQL> COLUMN setting_value FORMAT A25
SQL> SELECT setting_name, setting_value, setting_type
FROM all_mining_model_settings
WHERE model_name in 'SVMC_SH_CLAS_SAMPLE';

SETTING_NAME                   SETTING_VALUE                  SETTING_TYPE
------------------------------ -------------------------      ------------
ALGO_NAME                      ALGO_SUPPORT_VECTOR_MACHINES   INPUT
SVMS_ACTIVE_LEARNING           SVMS_AL_ENABLE                 DEFAULT
CLAS_PRIORS_TABLE_NAME         svmc_sh_sample_priors          INPUT
PREP_AUTO                      OFF                            DEFAULT
SVMS_COMPLEXITY_FACTOR         0.244212                       DEFAULT
SVMS_KERNEL_FUNCTION           SVMS_LINEAR                    INPUT
SVMS_CONV_TOLERANCE            .001                           DEFAULT

注意:
設定表で指定されていないモデル設定の一部はアルゴリズムによって決定されます。システム生成の設定値は、ALL_MINING_MODEL_SETTINGSビューを問い合せることによって確認できます。

関連項目:
モデル設定の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

モデルの作成

DBMS_DATA_MININGパッケージのCREATE_MODELプロシージャは、指定された名前、マイニング機能およびケース表(作成データ)を持つマイニング・モデルを作成します。

DBMS_DATA_MINING.CREATE_MODEL (
model_name            IN VARCHAR2,
mining_function       IN VARCHAR2,
data_table_name       IN VARCHAR2,
case_id_column_name   IN VARCHAR2,
target_column_name    IN VARCHAR2 DEFAULT NULL,
settings_table_name   IN VARCHAR2 DEFAULT NULL,
data_schema_name      IN VARCHAR2 DEFAULT NULL,
settings_schema_name  IN VARCHAR2 DEFAULT NULL,
transform_list        IN DM_TRANSFORMS DEFAULT NULL;)

関連項目:
『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』のDBMS_DATA_MINING.CREATE_MODELに関する項を参照してください。

マイニング機能

マイニング機能は、CREATE_MODELプロシージャに必須の引数です。データ・マイニング機能によって、モデル化や解決の対象となり得る問題のクラスが特定されます。

データ・マイニング機能は、監視あり学習または監視なし学習のいずれかを実装しています。監視あり学習では、独立属性のセットを使用して従属属性の値またはターゲットを予測します。監視なし学習では従属属性と独立属性は区別されません。

監視あり機能は予測的です。監視なし機能は記述的です。

CREATE_MODELのmining_functionパラメータに指定できる値を表5-8に示します。

表5-8 マイニング・モデルの機能

Mining_Functionの値

説明

ASSOCIATION

相関(Association)は、記述マイニング機能の一種。相関モデルは、関係と、その関係がデータセット内で発生する確率を特定する。

相関モデルではAprioriアルゴリズムが使用される。

ATTRIBUTE_IMPORTANCE

属性評価(Attribute Importance)は、予測マイニング機能の一種。属性評価モデルは、特定の結果を予測する中で属性の相対的な重要度を識別する。

属性評価モデルでは、最小記述長アルゴリズムが使用される。

CLASSIFICATION

分類(Classification)は、予測マイニング機能の一種。分類モデルは、履歴データを使用して質的ターゲットを予測する。

分類モデルでは、Naive Bayes、ディシジョン・ツリー、ロジスティック回帰またはサポート・ベクター・マシンの各アルゴリズムが使用される。デフォルトはNaive Bayes。

分類機能は、異常検出にも使用可能。この場合、ターゲットがNULLであるSVMアルゴリズムが使用される(1クラスSVM)。

CLUSTERING

クラスタリング(Clustering)は、記述マイニング機能の一種。クラスタリング・モデルは、データセットの中で自然なグループを識別する。

クラスタリング・モデルでは、k-MeansまたはO-Clusterアルゴリズムが使用される。デフォルトはk-Means。

FEATURE_EXTRACTION

特徴抽出(Feature Extraction)は、記述マイニング機能の一種。特徴抽出モデルは、モデルのベースとなる最適化されたデータセットを作成する。

特徴抽出モデルでは、Non-Negative Matrix Factorizationアルゴリズムが使用される。

REGRESSION

回帰(Regression)は、予測マイニング機能の一種。回帰モデルは、履歴データを使用して量的ターゲットを予測する。

回帰モデルでは、サポート・ベクター・マシンまたは線形回帰を使用できます。デフォルトはサポート・ベクター・マシン。

関連項目:
マイニング機能の概要は、『Oracle Data Mining概要』を参照してください。

変換リスト

アルゴリズムによる処理が実行される前に作成データに適用する変換のリストを、必要に応じて指定できます。DBMS_DATA_MINING_TRANSFORMのSTACKインタフェースを使用して様々な属性の変換式のリストを作成したり、DBMS_DATA_MINING_TRANSFORMのXFORMインタフェースを使用して単一の変換を指定したり、または独自のSQL式を作成したりすることが可能です。

CREATE_MODELに対する変換リスト引数は、自動データ準備(ADP)を制御するPREP_AUTO設定と次のように相互作用します。

- ADPが有効で、変換リストを指定した場合、ユーザー指定の変換は自動変換とともに適用されてモデルに組み込まれます。

- ADPが無効で、変換リストを指定した場合、ユーザー指定の変換が適用されてモデルに組み込まれますが、システム生成の変換は実行されません。

- ADPが有効で、変換リストを指定しなかった場合、システム生成の変換が適用されてモデルに組み込まれます。

- ADPが無効で、変換リストも指定しなかった場合、変換はモデルに組み込まれません。モデルの作成、テストおよびスコアリングに使用するデータセットは別個に準備する必要があります。これは、リリース11以前の動作であり、11gではデフォルトの動作です。

関連項目:
自動データ準備の詳細は、『Oracle Data Mining概要』を参照してください。

モデルの詳細

モデルの詳細とは、モデルの属性やルールなどのモデルに関する情報を記述したものです。GET_MODEL_DETAILSファンクションを呼び出すと、モデルの詳細を取得できます。各アルゴリズム用に個別のGET_MODEL_DETAILSファンクションが存在します。

モデルの詳細は、属性に適用された変換を元に戻すため、情報がユーザーにとって理解しやすくなります。モデルに組み込まれた変換を取得するには、GET_MODEL_TRANSFORMATIONSファンクションを呼び出します。

表5-9にまとめたモデルの詳細によって、モデルの透明性が確保されています。

表5-9 モデルの詳細

アルゴリズム

モデルの詳細

Apriori(相関ルール)

相関ルールと高頻度項目セット

ディシジョン・ツリー

モデル全体(モデルの内容とルール)

一般化線形モデル

属性レベルの係数および統計情報(GET_MODEL_DETAILS_GLM)、グローバルなモデルの情報(GET_MODEL_DETAILS_GLOBAL)

k-Means

各クラスタの統計情報と階層の情報、重心、属性ヒストグラム、ルール

MDL(属性評価)

各属性のランク付けされた重要度

Naive Bayes

条件付き確率と事前確率

Non-Negative Matrix Factorization

係数

O-Cluster

各クラスタの統計情報と階層の情報、重心、属性ヒストグラム、ルール

サポート・ベクター・マシン

線形モデルの係数

マイニング・モデルのスキーマ・オブジェクト

マイニング・モデルはデータベース・スキーマ・オブジェクトです。システム権限やオブジェクト権限によりデータ・マイニング操作を制御します(『Oracle Data Mining管理者ガイド』のユーザーと権限に関する項を参照)。さらに、マイニング・モデルはSQL AUDITとSQL COMMENTもサポートしています(『Oracle Data Mining管理者ガイド』のマイニング・モデルのスキーマ・オブジェクトに関する項を参照)。

データ・ディクショナリのマイニング・モデル

マイニング・モデル・オブジェクトに関する情報は、データ・ディクショナリ・ビューALL/USER/DBA_MINING_MODELSから取得できます。ALL接頭辞を使用した場合、このビューは、現在のユーザーがアクセスできるマイニング・モデルに関する情報を戻します。USER接頭辞を使用した場合は、ユーザー・スキーマ内のマイニング・モデルに関する情報を戻します。DBA接頭辞を使用できるのはDBAのみです。

ALL_MINING_MODELSの列は次のとおりです。各列の説明は、表5-10を参照してください。

SQL> describe all_mining_models
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
OWNER                                     NOT NULL VARCHAR2(30)
MODEL_NAME                                NOT NULL VARCHAR2(30)
MINING_FUNCTION                                    VARCHAR2(30)
ALGORITHM                                          VARCHAR2(30)
CREATION_DATE                             NOT NULL DATE
BUILD_DURATION                                     NUMBER
MODEL_SIZE                                         NUMBER
COMMENTS                                           VARCHAR2(4000)

表5-10 ALL_MINING_MODELS

列

説明

owner

マイニング・モデルの所有者。

model_name

マイニング・モデルの名前。

mining_function

マイニング・モデルの機能。「マイニング機能」を参照。

algorithm

マイニング・モデルで使用されるアルゴリズム。「アルゴリズムの指定」を参照。

creation_date

マイニング・モデルが作成された日付。

build_duration

マイニング・モデル作成プロセスの期間(秒単位)。

model_size

マイニング・モデルのサイズ(MB単位)。

comments

マイニング・モデルにSQL COMMENTが適用された結果。

例5-3の問合せでは、DMUSERスキーマ内のマイニング・モデルに関する情報が戻されます。

例5-3 ALL_MINING_MODELS

SQL> select model_name, mining_function, algorithm, creation_date, build_duration
FROM all_mining_models WHERE owner IN 'DMUSER';

MODEL_NAME              MINING_FUNCTION         ALGORITHM                  CREATION_DATE BUILD_DURA
---------------------   ---------------------  --------------------------- -----------------------
AI_SH_SAMPLE            ATTRIBUTE_IMPORTANCE   MINIMUM_DESCRIPTION_LENGTH   13-JUN-07         1
AR_SH_SAMPLE            ASSOCIATION_RULES      APRIORI_ASSOCIATION_RULES    13-JUN-07         5
DT_SH_CLAS_SAMPLE       CLASSIFICATION         DECISION_TREE                13-JUN-07         4
KM_SH_CLUS_SAMPLE       CLUSTERING             KMEANS                       13-JUN-07         7
NB_SH_CLAS_SAMPLE       CLASSIFICATION         NAIVE_BAYES                  13-JUN-07         3
OC_SH_CLUS_SAMPLE       CLUSTERING             O_CLUSTER                    13-JUN-07        14
NMF_SH_SAMPLE           FEATURE_EXTRACTION     NONNEGATIVE_MATRIX_FACTOR    13-JUN-07         2
SVMC_SH_CLAS_SAMPLE     CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         4
GLMR_SH_REGR_SAMPLE     REGRESSION             GENERALIZED_LINEAR_MODEL     13-JUN-07         3
GLMC_SH_CLAS_SAMPLE     CLASSIFICATION         GENERALIZED_LINEAR_MODEL     13-JUN-07         3
SVMR_SH_REGR_SAMPLE     REGRESSION             SUPPORT_VECTOR_MACHINES      13-JUN-07         7
SVMO_SH_CLAS_SAMPLE     CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         3
T_SVM_CLAS_SAMPLE       CLASSIFICATION         SUPPORT_VECTOR_MACHINES      13-JUN-07         8
T_NMF_SAMPLE            FEATURE_EXTRACTION     NONNEGATIVE_MATRIX_FACTOR    13-JUN-07         7

マイニング・モデルの権限

独自のスキーマにモデルを作成するには、CREATE MINING MODEL権限を所有している必要があります。所有しているモデルに対しては、どのような操作も実行できます。これには、モデルの適用、コスト・マトリックスの追加、モデルの名前の変更、およびモデルの削除が含まれます。

適切なシステム権限を所有している場合、他のスキーマのマイニング・モデルに対しても特定の操作を実行できます。たとえば、CREATE ANY MINING MODELを所有している場合、他のスキーマにモデルを作成できます。SELECT ANY MINING MODELを所有している場合、他のスキーマにあるモデルを適用できます。モデルにコメントを追加するには、COMMENT ANY MINING MODEL権限を所有している必要があります。

関連項目:
詳細は、『Oracle Data Mining管理者ガイド』を参照してください。

サンプル・マイニング・モデル

例5-3で示されたモデルは、Oracle Database付属のOracle Data Miningサンプル・プログラムによって作成されます。これらのPL/SQLまたはJavaサンプル・プログラムは、Oracle Data Miningでサポートされている各アルゴリズムに対応するマイニング・モデルを作成します。

サンプル・プログラムは、Oracle Database Companionからインストールされます。インストール後は、Oracleホームのrdbms/demoサブディレクトリに格納されます。Linuxシステムでは、次のようなコマンドを使用してPL/SQLデータ・マイニング・サンプル・プログラムを表示できます。

> cd $ORACLE_HOME/rdbms/demo
> ls dm*.sql

同様に、Javaデータ・マイニング・サンプル・プログラムは次のようなコマンドを使用して表示できます。

> cd $ORACLE_HOME/rdbms/demo
> ls dm*.java

関連項目:
データ・マイニング・サンプル・プログラムのインストール、設定および実行方法については、『Oracle Data Mining管理者ガイド』を参照してください。

6 スコアリングと配置

この章では、データ・マイニング・モデルを使用してデータをマイニングする方法について説明します。

この章には、次の項が含まれます。

- インデータベースでのスコアリング

- 配置とは

- リアルタイムのスコアリング

- コスト重視の意思決定

- バッチの適用

インデータベースでのスコアリング

スコアリング(新しいデータにモデルを適用すること)は、データ・マイニングにおける主要な目的です。モデルを作成した後は、最適な結果を得るためにそれらのモデルを配置し、本番環境内でメンテナンスすることが課題となります。

従来のデータ・マイニングでは、リモート・システムの専用ソフトウェアを使用してモデルを作成し、スコアリング用の別のシステムに配置していました。この方法は、面倒なだけでなく間違いやセキュリティ侵害が発生しやすく、さらにデータの同期をとることも困難です。

Oracle Data Miningでは、スコアリングを簡単かつ安全に実行できます。スコアリング・エンジンとデータの両方がデータベース内に存在するためです。スコアリングはSQL言語の拡張機能であるため、マイニング結果をアプリケーションやレポート作成システムに簡単に組み込むことができます。

インデータベース・マイニングによって、セキュリティ、バックアップとリカバリおよび高パフォーマンスが提供されます。これによって、データ・マイニングの構想をサポートするために必要なIT作業が最小限に抑えられます。標準的なデータベース技術を使用して、モデルをより新しいデータに簡単にリフレッシュ(再作成)および再デプロイできます。スコアリング問合せが同じままであるため、データベースで基礎となるモデルが置き換えられるのみであり、デプロイは迅速です。

配置とは

モデルの配置とは、ターゲット環境でモデルを使用することです。モデルの配置によって次のようなことを実現できます。

- モデルを使用したバッチまたはリアルタイム処理によるデータのスコアリング

- モデルの詳細の抽出とレポートの作成。例: ディシジョン・ツリー・モデルからのルール、または属性評価モデルからの属性ランキング

- アプリケーションや業務系システムにマイニング結果を組み込むことによるデータ・ウェアハウスのビジネス・インテリジェンス・インフラストラクチャの強化

- モデルを作成したデータベースからスコアリング用データベースへのモデルの移動(エクスポートとインポート)

関連項目:
データ・マイニング・モデルのエクスポートおよびインポートについては、『Oracle Data Mining管理者ガイド』を参照してください。

リアルタイムのスコアリング

Oracle Data MiningのSQL関数では、稼動中の本番システムや業務系システムに簡単に組み込むことが可能な、予測、クラスタリングおよび特徴抽出の分析を行うことができます。マイニング結果はSQL問合せ内で戻されるため、リアルタイムでマイニングを実行できます。

リアルタイムのスコアリングでは、販売時点のデータベース・トランザクションをマイニングできます。現場の従業員がより適切な分析的判断を下すために役立つ予測やルール・セットを生成することが可能です。リアルタイムのスコアリングによって、不正の検知、潜在的負債の判別、マーケティングや販売の好機の把握ができるようになります。

例6-1の問合せでは、dt_sh_clas_sampleというディシジョン・ツリー・モデルを使用して、顧客101488がアフィニティ・カードを使用する確率を予測しています。顧客担当者は、電話でこの顧客と会話しているときに、リアルタイムでこの情報を取得できます。問合せの結果によれば、顧客がカードを使用する確率は73%であるため、担当者は付加価値の高いカードを提案することができます。

例6-1 予測確率を求めるリアルタイムの問合せ

SELECT PREDICTION_PROBABILITY(dt_sh_clas_sample, 1 USING *) cust_card_prob
FROM mining_data_apply_v
WHERE cust_id = 101488;

CUST_CARD_PROB--------------    .727642276

予測

Oracle Data Miningは、予測モデル(分類または回帰)から結果を戻す6種類のSQL関数をサポートしています。

予測モデルは、スコアリング・データの各行(ケース)に対するターゲット値を生成します。各SQL関数は、スコアリング結果から異なる情報を戻します。

関連項目:
分類および回帰の詳細は、『Oracle Data Mining概要』を参照してください。

最適な予測

(分類または回帰)。分類の場合、PREDICTIONファンクションは最も高い確率で(またはコストを指定した場合は最も小さいコストで)予測されるターゲット値を返します。回帰の場合、PREDICTIONは予測されたターゲット値を返します。

PREDICTIONでは、分類に対してコストを使用できます。「コスト重視の意思決定」を参照してください。

関連項目:
PREDICTIONを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

信頼限界(GLMのみ)

(分類または回帰)PREDICTION_BOUNDS関数は、モデルによって計算された上限信頼限界または下限信頼限界を戻します。

信頼度とは、実際の値(回帰)または確率(分類)が有界区間内に収まることの確からしさの度合いです。デフォルトの信頼度は.95です。信頼度は、モデルのGLMS_CONF_LEVEL設定でユーザーが指定できます。ユーザーがPREDICTION_BOUNDS関数を呼び出すときにインラインで信頼度を指定することによって、モデルに関連付けられた信頼度を上書きできます。

アルゴリズムによってリッジ回帰が使用されている場合、信頼限界は戻されません。

関連項目:

- PREDICTION_BOUNDSを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

- GLMの詳細は、『Oracle Data Mining概要』を参照してください。

- GET_MODEL_DETAILS_GLMについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

コスト

(分類のみ)PREDICTION_COST関数は、最もコストが低いと予測されるクラスに関連付けられたコストを戻します。クラスを指定した場合は、そのクラスに関連付けられたコストを戻します。

コストは、ユーザーが指定する分類用のバイアス・メカニズムです。「コスト重視の意思決定」を参照してください。

関連項目:
PREDICTION_COSTを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

ルール(ディシジョン・ツリーのみ)

(分類のみ)PREDICTION_DETAILS関数は、特定の予測に対応するディシジョン・ツリー・モデルのルールを戻します。ルールとは、特定の分類を導く条件(属性値の組合せ)のことです。

ディシジョン・ツリー・ルールの識別子はXMLとして戻されます。ルール全体は、GET_MODEL_DETAILS_XML関数を使用して取得できます。

関連項目:

- PREDICTION_DETAILSを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

- ディシジョン・ツリーの詳細は、『Oracle Data Mining概要』を参照してください。

- GET_MODEL_DETAILS_XMLについては、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

確率

(分類のみ)PREDICTION_PROBABILITY関数は、最適な予測(確率が最も高い予測)に関連付けられた確率、またはユーザーが指定したクラスに関連付けられた確率を戻します。

関連項目:
PREDICTION_PROBABILITYを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

クラスごとの結果

(分類のみ)PREDICTION_SET関数は、スコアリング対象の各行について、すべてのターゲット・クラス、関連する確率、および関連するコスト(指定した場合)を戻します。パラメータを指定することにより、関数の出力を制限できます。

関連項目:

- PREDICTION_SETを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

- 「コスト重視の意思決定」

クラスタリング

Oracle Data Miningは、クラスタリング・モデルを適用したときの結果を戻す3種類のSQL関数をサポートしています。

クラスタリング・モデルは、関連する確率を持つクラスタに各行を割り当てます。各SQL関数は、スコアリング結果から異なる情報を戻します。

関連項目:
クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

クラスタ識別子

CLUSTER_ID関数は、最も確率が高いと予測されるクラスタの識別子(ID)を戻します。

関連項目:
CLUSTER_IDを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

確率

CLUSTER_PROBABILITY関数は、ケースが割り当てられる可能性が最も高いクラスタに関連付けられた確率を戻します。クラスタIDを指定した場合は、そのクラスタに関連付けられた確率を戻します。

関連項目:
CLUSTER_PROBABILITYを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

クラスタごとの確率

CLUSTER_SET関数は、スコアリング対象の各行について、各クラスタに関連付けられた確率を戻します。パラメータを指定することにより、関数の出力を制限できます。

特徴抽出

Oracle Data Miningは、特徴抽出モデルの結果を戻す3種類のSQL関数をサポートしています。

特徴抽出モデルは、属性を組み合せて、データの重要な特性を抽出した特徴のセットを作成します。スコアリング・プロセスにより、各行について個々の特徴の値が生成されます。この値は、その特徴に対するケースの一致の質を示す数値です。各SQL関数は、スコアリング結果から異なる情報を戻します。

特徴識別子

FEATURE_ID関数は、データに対して最も高い値(一致の質)を持つ特徴の識別子(ID)を戻します。

関連項目:
FEATURE_IDを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

一致の質

FEATURE_VALUE関数は、最も高い特徴値を戻します。特徴IDを指定した場合は、その特徴の値を戻します。

関連項目:
FEATURE_VALUEを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

特徴ごとの値

FEATURE_SET関数は、スコアリング対象の各行について、各特徴に関連付けられた値を戻します。パラメータを指定することにより、関数の出力を制限できます。

関連項目:
FEATURE_SETを使用する構文および例については、『Oracle Database SQL言語リファレンス』を参照してください。

表へのスコアリング結果の保存

スコアリング関数の結果を保存する場合は、表に保存できます。

この例は、顧客反応モデルのスコアリング結果を保存する方法を示しています。

UPDATE CUST_RESPONSE_APPLY_UPDATE
SET prediction = prediction(CUST_RESPONSE19964_DT using *),
probability =  prediction_probability(CUST_RESPONSE19964_DT using *)

問題の表はすべての予測子を含んでおり、予測と確率を保持する列を持っています。必要な変換がすべてモデルに組み込まれていることが前提となります(組み込まれていない場合、using句を使用してそれらを含める必要があります)。

コスト重視の意思決定

コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。

すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。PREDICTION、PREDICTION_COSTおよびPREDICTION_SETのすべての関数がコストをサポートしています。

コスト・マトリックス表の例を表6-1に示します。

表6-1 コスト・マトリックス表の例

ACTUAL_TARGET_VALUE

PREDICTED_TARGET_VALUE

コスト

0

0

0

0

1

2

1

0

1

1

1

0

表6-1のコスト・マトリックスは、2項ターゲットのコストを指定しています。このマトリックスから、0に分類ミスした場合、1に分類ミスした場合の2倍のコストがかかるものとして処理されることがわかります。この表の名前がcost_tblで、Naive Bayesモデルnb_sh_clas_sampleと関連付けられている場合、次の問合せは、nb_sh_clas_sampleをスコアリングするときにcost_tblを考慮します。出力は、1を予測するほうが0を予測するよりコストが低い行に制限されます。

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION (nb_sh_clas_sample COST MODEL
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

コスト・マトリックス表がない、またはモデルに対してコスト・マトリックス表が指定されていない可能性があるときは、COST MODELでAUTOキーワードを使用すれば、コスト・マトリックス表を利用できる場合に限りスコアリングでコストが使用されるようにすることが可能です。

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION (nb_sh_clas_sample COST MODEL AUTO
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

スコアリング関数を呼び出すときに、コストをインラインで指定できます。インラインで指定したコストは、コスト・マトリックス表がモデルに関連付けられている場合でもスコアリングに使用されます。次の問合せは、インラインで指定したコストを使用している同じ内容の問合せです。

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION (nb_sh_clas_sample
COST (0,1) values ((0, 2),
(1, 0))
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

コスト・マトリックス表をスコアリング用のモデルに関連付けるには、DBMS_DATA_MININGパッケージのADD_COST_MATRIXプロシージャを使用します。コスト・マトリックスは、GET_COST_MATRIX関数を使用して取得できます。REMOVE_COST_MATRIXプロシージャを使用するとコスト・マトリックスが削除されます。1つのモデルに対して別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。

-- add cost matrix table cost_tbl
-- to model nb_sh_clas_sample
-- for scoring
--
EXEC DBMS_DATA_MINING.ADD_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl');
--
-- replace cost_tbl with cost_tbl_2
--
EXEC DBMS_DATA_MINING.REMOVE_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl');
EXEC DBMS_DATA_MINING.ADD_COST_MATRIX('nb_sh_clas_sample', 'cost_tbl_2');

ディシジョン・ツリー・アルゴリズムでは、コストを使用してモデル作成にバイアスをかけることができます。コストを使用するディシジョン・ツリー・モデルを作成する場合は、コスト・マトリックス表を作成し、モデルのCLAS_COST_TABLE_NAME設定にその表の名前を指定します。モデルのスコアリング時にコストを指定すると、モデル作成用のコスト・マトリックスが使用されます。スコアリング用に別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。

バッチの適用

Oracle Data Miningでは、スコアリングの結果を表に直接書き込むバッチでの適用操作を実行できます。表の列は、マイニング機能によって異なります。適用操作はDBMS_DATA_MINING.APPLYで実行できます。

APPLYによって作成される出力表の列を表6-2に示します。

表6-2 APPLY出力表

マイニング機能

出力列

分類

CASE_ID

PREDICTION

PROBABILITY

回帰

CASE_ID

PREDICTION

異常検出(1クラスSVM)

CASE_ID

PREDICTION

PROBABILITY

クラスタリング

CASE_ID

CLUSTER_ID

PROBABILITY

特徴抽出

CASE_ID

FEATURE_ID

MATCH_QUALITY

例6-2は、APPLYを使用した異常検出の例です。このAPPLY出力表の問合せは、表の最初の10名の顧客を戻します。各顧客について、典型的(1)または異常(0)である確率が示されます。

例6-2 DBMS_DATA_MINING.APPLYを使用した異常検出

EXEC dbms_data_mining.apply
('SVMO_SH_Clas_sample','svmo_sh_sample_prepared',
'cust_id', 'one_class_output');

SELECT * from one_class_output where rownum < 11;

CUST_ID PREDICTION PROBABILITY
---------- ---------- -----------
101798          1  .567389309
101798          0  .432610691
102276          1  .564922469
102276          0  .435077531
102404          1   .51213544
102404          0   .48786456
101891          1  .563474346
101891          0  .436525654
102815          0  .500663683
102815          1  .499336317

APPLYとSQLスコアリング関数の比較

APPLYとSQLスコアリング関数のどちらによって実行しても、スコアリングでは同じマイニング結果が生成されます。たとえば、分類では各ケースの予測と確率が生成され、クラスタリングでは各ケースのクラスタIDと確率が生成されます。異なっているのは、スコアリング結果の取得方法と、その取得に使用できるメカニズムです。

APPLYの出力はスコアリング・データとは別に保存されるため、マイニングされたデータ属性(スコアリング結果の行)を含めた問合せをサポートするには、出力とスコアリング・データを結合する必要があります。したがって、APPLYで使用されるモデルにはケースIDが必要となります。

ケースIDは、SQLスコアリング関数で適用されるモデルには不要です。同様に、スコアリング結果はSQL問合せ内でリアルタイムに生成および使用されるため、保存や結合も不要です。

SQLスコアリング関数には柔軟性があります。ユーザーは、必要とする特定の情報を戻す関数を呼び出すことができます。モデルを参照して、取得したいマイニング結果の種類を特定するだけです。

7 データ・マイニングJava API

この章では、Oracle Data MiningのJava APIの概要について説明します。このJava APIは、JDM(データ・マイニング用の業界標準であるJava API)に準拠しています。

Java APIは、Oracle Data MiningのPL/SQLおよびSQL言語インタフェースのレイヤーに位置します。このマニュアルで説明するSQLベースの機能もすべて、このJava APIに実装されています。

また、Java APIでは、テキスト変換およびマイニング・タスクの非同期実行など、SQLに実装されていないいくつかの機能がサポートされています。

注意:
Oracle Data Mining Java APIは、このリリースでは非推奨です。
新しいアプリケーションでは、非推奨となった機能を使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

関連項目:
『Oracle Data Mining Java API Reference』(Javadoc)

この章には、次の項が含まれます。

- Javaの環境

- データ・マイニング・エンジンへの接続

- API設計の概要

Javaの環境

Oracle Data Mining Java APIには、Oracle Database 11gリリース2 (11.2)とJ2SE 1.5が必要です。下位互換性があり、Oracle Database 10.2でも使用できます。

Oracle Data Mining Java APIを使用するには、次のライブラリをCLASSPATHに含める必要があります。

$ORACLE_HOME/rdbms/jlib/jdm.jar
$ORACLE_HOME/rdbms/jlib/ojdm_api.jar
$ORACLE_HOME/rdbms/jlib/xdb.jar
$ORACLE_HOME/jdbc/lib/ojdbc5.jar
$ORACLE_HOME//oc4j/j2ee/home/lib/connector.jar
$ORACLE_HOME/jlib/orai18n.jar
$ORACLE_HOME/jlib/orai18n-mapping.jar
$ORACLE_HOME/lib/xmlparserv2.jar

データ・マイニング・エンジンへの接続

データ・マイニング・エンジン(DME)は、一連のデータ・マイニング・サービスをそのJDMクライアントに提供するインフラストラクチャです。Oracle Databaseは、Oracle Data Miningのコア・マイニング・オプションを通じて、JDMにインデータベース・データ・マイニング機能を提供しています。したがって、以降はOracle DatabaseのことをDMEと呼ぶことにします。

データベース内のデータ・マイニング機能にアクセスするには、DME Connectionを作成する必要があります。DMEに接続するために、OJDMでは次の様々なオプションをサポートしています。

DME Connectionオブジェクトの詳細は、「DME Connectionの機能」を参照してください。

コネクション・ファクトリ

コネクション・ファクトリは、DME接続の作成に使用されます。JDM標準では、DME Connectionを作成する上でベンダー中立のアプローチをとれるようにするため、JavaインタフェースとしてConnectionFactory(コネクション・ファクトリ)を定義しています。このアプローチでは、アプリケーションのインフラストラクチャで、ConnectionFactoryのインスタンスをJNDIサーバーに登録する必要があります。登録すると、アプリケーションは、JNDIサーバーのConnectionFactoryをルックアップし、このファクトリを使用してConnectionをインスタンス化できます。

OJDMではoracle.dmt.jdm.resource.OraConnectionFactoryクラスが提供されており、このクラスは、インスタンス化してアクセスすることにより接続を作成するか、またはJNDIサーバーに登録して使用できます。次のコードでは、コネクション・ファクトリを作成するためのこれらの2つのアプローチを示します。

OraConnectionFactoryを使用したConnectionFactoryの作成

//Create OraConnectionFactory
javax.datamining.resource.ConnectionFactory connFactory =
oracle.dmt.jdm.resource.OraConnectionFactory();

JNDIサーバーからのConnectionFactoryのルックアップ

//Setup the initial context to connect to the JNDI server
Hashtable env = new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY,
"oracle.dmt.jdm.resource.OraConnectionFactory" );
env.put( Context.PROVIDER_URL, "http://myHost:myPort/myService" );
env.put( Context.SECURITY_PRINCIPAL, "user" );
env.put( Context.SECURITY_CREDENTIALS, "password" );
InitialContext jndiContext = new javax.naming.InitialContext( env );
// Perform JNDI lookup to obtain the connection factory
javax.datamining.resource.ConnectionFactory dmeConnFactory =
(ConnectionFactory) jndiContext.lookup("java:comp/env/jdm/MyServer");
//Lookup ConnectionFactory
javax.datamining.resource.ConnectionFactory connFactory =
(ConnectionFactory) jndiContext.lookup("java:comp/env/jdm/MyServer");

JDBCを使用した接続

この方法は、OJDM外でJDBC接続をアプリケーションにより制御し、指定したOracleDataSourceをOraConnectionFactoryで使用してデータベース接続を作成できるようにする場合に役立ちます。この方法によって、必要に応じてアプリケーションで暗黙的な接続のキャッシング機能を使用できるようになります。デフォルトでは、OJDMでは暗黙的な接続のキャッシングが有効にされていません。接続のキャッシングについては、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

//Create an OracleDataSource
OracleDataSource ods = new OracleDataSource();
ods.setURL(URL);
ods.setUser(user);
ods.setPassword(password);

//Create a connection factory using the OracleDataSource
javax.datamining.resource.ConnectionFactory connFactory =
oracle.dmt.jdm.resource.OraConnectionFactory(ods);
//Create DME Connection
javax.datamining.resource.Connection dmeConn =
connFactory.getConnection();

ConnectionSpecを使用した接続

この方法は、アプリケーションでJDBC接続を事前に作成せず、JDBC接続をOJDMで維持できるようにする場合に役立ちます。この方法では、ユーザーがoracle.dmt.jdm.resource.OraConnectionFactoryクラスのgetConnectionSpec()メソッドを使用して空のConnectionSpecインスタンスを作成し、そのConnectionSpecを使用してDME Connectionを作成する必要があります。次のコードで使用例を示します。

//Create ConnectionSpec
ConnectionSpec connSpec = m_dmeConnFactory.getConnectionSpec();
connSpec.setURI("jdbc:oracle:thin:@host:port:sid");
connSpec.setName("user");
connSpec.setPassword("password");

//Create DME Connection
javax.datamining.resource.Connection m_dmeConn =
m_dmeConnFactory.getConnection(connSpec);

DME Connectionの機能

Oracle Data Mining Java APIでは、DME Connectionは主要なファクトリ・オブジェクトです。Connectionは、getFactoryメソッドを使用してオブジェクト・ファクトリをインスタンス化します。Connectionオブジェクトは、名前付きオブジェクトのルックアップ、永続化およびタスク実行機能を備えています。

オブジェクト・ファクトリの作成

Connection.getFactoryメソッドは、ファクトリ・オブジェクトを作成します。たとえば、PhysicalDataSetオブジェクトのファクトリを作成するには、そのオブジェクトの絶対名をこのメソッドに渡します。getFactoryメソッドは、PhysicalDataSetFactoryのインスタンスを作成します。

javax.datamining.data.PhysicalDataSetFactory pdsFactory =
dmeConn.getFactory("javax.datamining.data.PhysicalDataSet");

マイニング・オブジェクトのメタデータへのアクセス

Connectionオブジェクトには、マイニング・オブジェクトのメタデータを取得するためのメソッドがあります。

メソッド

説明

getCreationDate

指定された名前付きオブジェクトの作成日を戻す。

getCreationDate(java.lang.String objectName,
NamedObject objectType)
returns java.util.Date

getDescription

指定されたマイニング・オブジェクトの説明を戻す。

getDescription(java.lang.String objectName,
NamedObject objectType)
returns java.lang.String

getObjectNames

指定された型のオブジェクトの名前の集合を戻す。

getObjectNames(NamedObject objectType)
returns java.util.Collection

getObjectNames

これは、スキーマを越えて、またはスキーマ内でマイニング・オブジェクト名のリストを使用できるように、11.1で追加されたOracle JDMの追加メソッドです。様々なオプションのメソッド引数があり、それを使用して引数のリストを絞り込むことができます。

getObjectNames(
java.lang.String schemaPattern,
NamedObject objectType,
java.lang.String objectNamePattern,
javax.datamining.Enum minorType_1,
javax.datamining.Enum minorType_2 ):
returns java.sql.ResultSet

例7-1を参照。

例7-1 Oracle JDMの拡張メソッドgetObjectNames

この例では、getObjectNamesメソッドの使用例を示します。

ユーザーSCOTTが計算した分類のテスト・メトリックの名前をリスト表示するには、次のように指定します。

schemaPattern: "SCOTT"
objectType: NamedObject.testMetrics
objectPattern: NULL
minorType_1: MiningFunction.classification
minorType_2: NULL

getObjectNamesメソッドは、指定されたフィルタのタイプに関係なく、次の列でjava.sql.ResultSetオブジェクトを戻します。

列名

データ型

説明

SCHEMA_NAME

String

スキーマの名前(NULLの場合もある)。

TYPE

String

マイニング・オブジェクトのタイプ。

NAME

String

マイニング・オブジェクトの名前。

MINOR_TYPE_1

String

マイニング・オブジェクトはマイナー(サブ)タイプを持つ場合がある。たとえば、モデル・オブジェクトはマイナー・タイプとして機能とアルゴリズムを持つことがある。

MINOR_TYPE_2

String

マイニング・オブジェクトは複数のマイナー・タイプを持つ場合がある。マイニング・オブジェクトが2つ目のマイナー・タイプを持つ場合、この列が使用される。

CREATION_DATE

Timestamp

このオブジェクトが作成された日付。

DESCRIPTION

String

オブジェクトの説明。

マイニング・オブジェクトの永続化と取得

Connectionオブジェクトには、マイニング・オブジェクトを取得したり、マイニング・オブジェクトをDMEに保存したりするためのメソッドがあります。永続オブジェクトは、データベース・オブジェクトとして格納されます。一時オブジェクトは、Connectionオブジェクトによって、メモリーに格納されます。

メソッド

説明

saveObject

接続に関連付けられているメタデータ・リポジトリに名前付きオブジェクトを保存する。

saveObject(java.lang.String name, MiningObject object,
boolean replace)

retrieveObject

接続に関連付けられているメタデータ・リポジトリから、指定された名前付きオブジェクトのコピーを取得する。

retrieveObject(java.lang.String objectIdentifier)
returns MiningObject

retrieveObject

接続に関連付けられているメタデータ・リポジトリから、名前付きオブジェクトのコピーを取得する。

retrieveObject(java.lang.String name,
NamedObject objectType)
returns MiningObject

retrieveObjects

指定の期間(createAfterからcreateBefore)内に作成された特定のタイプのマイニング・オブジェクトの集合を戻す。

(java.util.Date createdAfter, java.util.Date createdBefore,
NamedObject objectType):
returns java.util.Collection

retrieveObjects

指定の期間(createAfterからcreateBefore)内に作成された指定したタイプのマイニング・オブジェクトの集合を戻す。

retrieveObjects(java.util.Date createdAfter,
java.util.Date createdBefore, NamedObject objectType,
Enum minorType):
returns java.util.Collection

関連項目:

- 第2章「データ・マイニングAPIの概要」

- 「API設計の概要」

マイニング・タスクの実行

Connectionオブジェクトには、マイニング・タスクを非同期または同期で実行できるexecuteメソッドがあります。DMEでは、データベース・スケジューラを使用してマイニング・タスク(ユーザーのスキーマにスケジューラ・ジョブとして格納)を実行します。次のメソッドはこうしたタスクを実行するために使用します。

タスクの実行

executeメソッドの構文

非同期

execute(java.lang.String taskName)
returns ExecutionHandle

同期

execute(Task task,java.lang.Long timeout))
returns ExecutionHandle

通常、単一レコードのスコアリングで使用されるが、他のコンテキストでも使用可能。

関連項目:

- 「Task」

- 「マイニング・タスクの実行」

- 『Oracle Database管理者ガイド』(Oracle Databaseのスケジューラに関する情報)

DMEの機能とメタデータの取得

Connectionインタフェースには、ConnectionMetaDataおよびsupportsCapability取得メソッドがあります。この機能は、実行時にアプリケーションでDMEに関する情報を取得する場合に役立ちます。次のメソッドは、接続からこうした情報を取得するために使用します。

メソッド

説明

getMetaData

アクティブな接続を通じて表される基底のDMEインスタンスについての情報を戻す。ConnectionMetaDataは、JDMの実装とOracle Databaseのバージョン情報を提供。

getMetaData()
returns ConnectionMetaData

getSupportedFunctions

実装によってサポートされているマイニング機能の配列を戻す。

getSupportedFunctions()
returns MiningFunction[]

getSupportedAlgorithms

指定したマイニング機能によってサポートされているマイニング・アルゴリズムの配列を戻す。

getSupportedAlgorithms(MiningFunction function)
returns MiningAlgorithm[]

supportsCapability

指定した組合せのマイニング機能がサポートされている場合にTRUEを戻す。アルゴリズムが指定されていない場合は、指定の機能がサポートされていればTRUEを戻す。

supportsCapability(MiningFunction function,
MiningAlgorithm algorithm,
MiningTask taskType)
returns boolean

バージョン情報の取得

ConnectionMetaDataオブジェクトには、JDM標準のバージョン情報とOracleのバージョン情報を取得するためのメソッドがあります。

メソッド

説明

getVersion

JDM標準のAPIのバージョンを戻す。JDMの最初のリリースの場合、JDM 1.0。

getVersion()
returns String

getMajorVersion

メジャー・バージョン番号を戻す。JDMの最初のリリースの場合、1が戻される。

getMajorVersion()
returns int

getMinorVersion

マイナー・バージョン番号を戻す。JDMの最初のリリースの場合、0が戻される。

getMinorVersion()
returns int

getProviderName

プロバイダの名前(Oracle Corporationなど)を戻す。

getProviderName()
returns String

getProviderVersion

Oracle Data Mining Java APIのjarファイルが含まれていたOracle Databaseのバージョンを戻す。

getProviderVersion()
returns String

getProviderDMEVersion

プロバイダのDMEのバージョンを戻す。

getProviderDMEVersion()
returns String

API設計の概要

この項では、開発者がAPIの詳細に習熟できるように、OJDMの設計原則を簡単に説明します。JDM標準では、APIのコア設計パターンとしてファクトリ・メソッド・パターンを使用します。ユーザーは、そのファクトリを使用してJDMオブジェクトをインスタンス化できます。これによって、OracleのようなJDMベンダーがベンダー中立のAPIを実装できます。OJDMは、この拡張のために同じファクトリ・メソッド・パターンに従います。javax.dataminingは、JDM標準で定義されているクラスのベース・パッケージであり、oracle.dmt.jdmはJDM標準に対するOracle拡張機能のベース・パッケージです。

JDM標準は、マイニング機能とマイニング・アルゴリズムを基準としてパッケージを編成します。たとえばjavax.datamining.supervisedパッケージには、監視あり機能に関連するすべてのクラスと、java.datamining.supervised.classificationおよびjava.datamining.supervised.regressionのサブパッケージがあります。各機能のサブパッケージには、その機能に関連するクラスがあります。同様に、javax.datamining.algorithmはすべてのアルゴリズムのベース・パッケージであり、各アルゴリズムには、このパッケージの下にサブパッケージがあります。たとえば、javax.datamining.algorithm.naivebayesはNaive Bayesアルゴリズム関連クラスのサブパッケージです。OJDMは、拡張についても同じようなパッケージ構造に従います。たとえば、特徴抽出はOJDMによってサポートされる非JDM標準機能です。oracle.dmt.jdm.featureextractionはこの機能のパッケージであり、oracle.dmt.jdm.algorithm.nmfは特徴抽出に使用されるNon-Negative Matrix Factorizationアルゴリズムのパッケージです。

JDM標準には、タスク、モデルの詳細、ルールおよび統計用の共通クラスおよびパッケージを定義するコア・パッケージがいくつかあります。詳細については、JDMのjavadocを参照してください。図7-1のクラス図に、第2章で説明した名前付きマイニング・オブジェクトの継承階層を示します。他のOJDMオブジェクトについては、以降の項のクラス図を参照してください。OracleによるJDM拡張インタフェース/クラスは、灰色で示しています。図7-1のoracle.dmt.jdm.transform.OraTransformationSequenceは、JDM 1.1標準で定義されているマイニング・オブジェクトに対するOracleの拡張機能です。

図7-1 JDM名前付きオブジェクトのクラス図

マイニング・データの記述

JDM標準では、データを説明する統計計算のみならず、データのマイニング属性の特徴を記述する物理データ・オブジェクトおよび論理データ・オブジェクトが定義されています。

javax.datamining.dataパッケージには、データ関連クラスがすべて含まれています。図7-2のクラス図は、Oracle Data Mining Java APIでサポートされているデータ・オブジェクトのクラス関係を示しています。

図7-2 Oracle Data Mining Java APIのデータ・オブジェクト

PhysicalDataSetオブジェクトは、マイニング操作に使用されるデータセットの名前と場所を指定するために使用されます。たとえば、DMUSERスキーマ・アカウントでモデル作成の入力データセットMINING_DATA_BUILD_Vを表すには、データURI DMUSER.MINING_DATA_BUILD_Vを使用してPhysicalDataSetオブジェクトを作成します。同じユーザー・アカウントのデータセットにアクセスする場合、スキーマ名の接頭辞はオプションとなります。

図7-2のクラス図では、PhysicalDataSetにPhysicalAttributeオブジェクトがあります。PhysicalAttributeは、入力データセットの列の物理特性を表し、オプションで物理属性には列の役割を指定できます。たとえば、MINING_DATA_BUILD_Vデータセットでは、マイニングに使用される各ケースがCUST_IDによって一意に識別されます。したがって、CUST_ID列の役割はケースIDとして指定されます。

例7-2に、PhysicalDataSetオブジェクトを作成するコード例を示します。PhysicalDataSetオブジェクトが、モデル作成の入力として指定可能な名前JDM_BUILD_PDSで保存されている点に注目してください(「構築設定」を参照)。

図7-2に示したPhysicalDataRecordオブジェクトは、単一レコードのデータセットを指定する際に使用されます。これは単一レコードの適用に使用されます(この章で後述)。SignatureAttributeは、マイニング・モデルのモデル・シグネチャを指定する際に使用されます(この章で後述)。OJDMでは、マイニング属性の種類を暗黙的に示すために属性データ型が使用されます。たとえば、VARCHAR2列はすべて質的データとして扱われ、NUMBER列はすべて量的データとして扱われます。そのため、OJDMでは論理的なデータ詳細を指定する必要がありません。ただし、列の属性の名前を変更する場合は、組込み変換(次の項で説明します)を指定できます。

例7-2 物理データセットの作成

//Create PhysicalDataSetFactory
PhysicalDataSetFactory pdsFactory =
(PhysicalDataSetFactory)m_dmeConn.getFactory("javax.datamining.data.PhysicalDataSet");
//Create a PhysicalDataSet object
PhysicalDataSet buildData = pdsFactory.create("DMUSER.MINING_DATA_BUILD_V", false);
//Create PhysicalAttributeFactory
PhysicalAttributeFactory paFactory =
(PhysicalAttributeFactory)m_dmeConn.getFactory("javax.datamining.data.PhysicalAttribute");
//Create PhysicalAttribute object
PhysicalAttribute pAttr = paFactory.create(
"cust_id", AttributeDataType.integerType, PhysicalAttributeRole.caseId );
//Add the attribute to the PhysicalDataSet object
buildData.addAtribute(pAttr);
//Save the physical data set object
dmeConn.saveObject("JDM_BUILD_PDS", buildData, true);

構築設定

Oracle Data Mining Java APIでは、BuildSettingsオブジェクトがデータベースに表として保存されます。この設定表は、DBMS_DATA_MINING.CREATE_MODELプロシージャと互換性があります。設定表の名前は、ユーザー・スキーマ内で一意である必要があります。図7-3に、構築設定のクラス階層を示します。

図7-3 構築設定クラス図

例7-3のコード例では、ツリー・アルゴリズムでの分類設定オブジェクトの作成および格納方法を示します。

例7-3 ディシジョン・ツリー・アルゴリズムでの分類設定の作成

//Create a classification settings factory
ClassificationSettingsFactory clasFactory =
(ClassificationSettingsFactory)dmeConn.getFactory
("javax.datamining.supervised.classification.ClassificationSettings");
//Create a ClassificationSettings object
ClassificationSettings clas = clasFactory.create();
//Set target attribute name
clas.setTargetAttributeName("AFFINITY_CARD");
//Create a TreeSettingsFactory
TreeSettingsFactory treeFactory =
(TreeSettingsFactory)dmeConn.getFactory
("javax.datamining.algorithm.tree.TreeSettings");
//Create TreeSettings instance
TreeSettings treeAlgo = treeFactory.create();
treeAlgo.setBuildHomogeneityMetric(TreeHomogeneityMetric.entropy);
treeAlgo.setMaxDepth(10);
treeAlgo.setMinNodeSize( 10, SizeUnit.count );
//Set algorithm settings in the classification settings
clas.setAlgorithmSettings(treeAlgo);
//Save the build settings object in the database
dmeConn.saveObject("JDM_TREE_CLAS", clas, true);

自動データ準備の有効化

11.1では、すべてのマイニング・アルゴリズムで自動データ準備(ADP)がサポートされています。デフォルトでは、ADPはディシジョン・ツリー・アルゴリズムおよびGLMアルゴリズムで有効化されています。その他のアルゴリズムでは、下位互換性を保つため、デフォルトは無効となっています。ADPがデフォルトで有効になっていないアルゴリズムでADPを明示的に有効にするには、useAutomatedDataPreparationsブール値フラグをTRUEに指定して次の関数を起動します。

OraBuildSettings.useAutomatedDataPreparations
(boolean useAutomatedDataPreparations)

自動データ準備の詳細は、『Oracle Data Mining概要』を参照してください。

マイニング・タスクの実行

OJDMでは、DBMS_SCHEDULERインフラストラクチャを使用して、データベース内で同期または非同期にマイニング・タスクを実行します。マイニング・タスクは、DBMS_SCHEDULERジョブとしてユーザー・スキーマに保存され、DISABLED状態に設定されます。ユーザーがDME Connectionのexecuteメソッドをコールすると、ジョブの状態はENABLEDに変わり、スケジューラは、非同期実行のために新しいデータベース・セッションを作成することによってマイニング・タスクの実行を開始します。スケジューラは、同期実行用にも、DME接続で開かれたものと同じデータベース・セッションを使用します。

図7-4のクラス図は、OJDMで利用できる様々な種類のタスクと、そのクラス階層を示しています。この図に示されている個々のタスクの詳細は、以降の項で説明します。

図7-4タスクのクラス図

DBMS_SCHEDULERは、追加のスケジューリング機能およびリソース管理機能を提供します。スケジューラのインフラストラクチャを使用すると、Oracle Data Miningタスクの機能を拡張できます。

関連項目:
データベース・スケジューラについては、『Oracle Database管理者ガイド』を参照してください。

マイニング・タスクのワークフローの作成

Oracle Data Mining 11.1のタスク・インフラストラクチャでは、アプリケーションでAPIを通じて依存タスクを指定し、タスクの実行をデータベース・サーバーに配置できます。サーバーはAPIで指定されたタスクの完全なワークフローを実行し、配置された後はクライアントに依存しません。クライアントはこの実行プロセスをOJDM APIを使用して監視できます。たとえば、データ準備が完了した後は通常、モデルが作成され、テストおよび適用されます。テストと適用は、モデルが正常に作成された後で並列的に行うことができます。

タスク・フローを作成するには、メソッドOraTask.addDependency(String parentTaskName)を呼び出します。たとえば、例7-4のコードはマイニング・タスク・ワークフローの設定方法を示しており、最初に変換タスクを実行し、次にモデル作成タスクを実行します。作成タスクが正常に完了したら、適用を実行し、並行してタスクをテストします。

例7-4 マイニング・タスクのワークフローの作成

//Task objects declarations
private TransformationTask xformTask;
private BuildTask buildTask;
private TestTask testTask;
private DataSetApplyTask applyTask;
//Creation of the tasks and task input objects are skipped for this example
…
//Save the first task in the workflow (the transformations task)
dmeConn.saveObject("transformationTask", xformTask, true);
//Specify dependencies before saving of the tasks
buildTask.addDependency("transformationTask");
dmeConn.saveObject("modelBuildTask", buildTask, true);
testTask.addDependency("modelBuildTask");
dmeConn.saveObject("modelTestTask", testTask, true);
applyTask.addDependency("modelBuildTask");
dmeConn.saveObject("modelApplyTask", applyTask, true);
//Execute the first task in the workflow to initiate the execution of the whole workflow
dmeConn.execute("transformationTask");

マイニング・モデルの作成

javax.datamining.task.BuildTaskクラスは、マイニング・モデルの作成に使用されます。モデルの作成前に、PhysicalDataSetオブジェクトおよびBuildSettingsオブジェクトを保存する必要があります。

例7-5では、「マイニング・データの記述」で説明したPhysicalDataSet、および「構築設定」で説明したBuildSettingsを使用したツリー・モデルの作成方法を示します。

例7-5 モデルの作成

//Create BuildTaskFactory
BuildTaskFactory buildTaskFactory =
dmeConn.getFactory("javax.datamining.task.BuildTask");
//Create BuildTask object
BuildTask buildTask = buildTaskFactory.create
( "JDM_BUILD_PDS","JDM_TREE_CLAS","JDM_TREE_MODEL");
//Save BuildTask object
dmeConn.saveObject("JDM_BUILD_TASK", buildTask, true);
//Execute build task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_BUILD_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

モデルの詳細の調査

BuildTaskを使用してモデルを作成すると、モデル・オブジェクトはデータベースに永続化されます。これを取得するとモデルの詳細を調べることができます。

図7-5のクラス図は、Oracle Data Mining Java APIでサポートされている様々な種類のモデル・オブジェクトおよびモデル詳細オブジェクトを示しています。

図7-5 モデルおよびモデル詳細のクラス図

例7-6では、「マイニング・モデルの作成」で作成した分類ツリー・モデルおよびそのTreeModelDetailの取得方法を示します。

例7-6 モデルの詳細の取得

//Retrieve classification model from the DME
ClassificationModel treeModel = (ClassificationModel)dmeConn.retrieveObject
( "JDM_TREE_MODEL", NamedObject.model);
//Retrieve tree model detail from the model
TreeModelDetail treeDetail = (TreeModelDetail)treeModel.getModelDetail();
//Get the root node
TreeNode rootNode = treeDetail.getRootNode();
//Get child nodes
TreeNode[] childNodes = rootNode.getChildren();
//Get details of the first child node
int nodeId = childNodes[0].getIdentifier();
long caseCount = childNodes[0].getCaseCount();
Object prediction = childNodes[0].getPrediction();

モデルのテスト

監視ありモデルを作成したら、テスト操作を使用してそのモデルを評価できます。JDM標準では、入力としてマイニング・モデルをとるテスト操作、および実測値列と予測値列を持つ適用出力表をとるテスト操作の2種類が定義されます。

javax.datamining.supervised.TestTaskはモデルベースのテスト・タスクのベース・クラスで、javax.datamining.supervised.TestMetricsTaskは適用出力表ベースのテスト・タスクのベース・クラスです。

テスト操作により、DMEにテスト・メトリック・オブジェクトが作成され永続化されます。分類モデルのテストの場合は、次のいずれかを使用できます。

javax.datamining.supervised.classification.ClassificationTestTask
javax.datamining.supervised.classification.ClassificationTestMetricsTask

この両方のタスクでは、名前付きオブジェクトjavax.datamining.supervised.classification.ClassificationTestMetricsが作成され、ユーザー・スキーマに表として格納されます。

ClassificationTestMetricsオブジェクトに関連付けられた分類テスト・メトリックのコンポーネント、混同マトリックス、リフト結果およびROCは、ClassificationTestMetricsオブジェクトの名前に接尾辞_CFM、_LFT、_ROCがそれぞれ付いた名前の別個の表に格納されます。これらの表は、ダッシュボード、Oracle BIなどのBIプラットフォーム、ビジネス・オブジェクトなどにテスト結果を表示する目的で使用されます。

回帰モデルのテストの場合も、同様に次のいずれかを使用できます。

javax.datamining.supervised.regression.RegressionTestTask
javax.datamining.supervised.regression.RegressionTestMtericsTask

この両方のタスクでは、名前付きオブジェクトjavax.datamining.supervised.regression.RegressionTestMetricsが作成され、このオブジェクトがユーザー・スキーマに表として格納されます。

図7-6のクラス図は、テスト・メトリックのクラス階層を示しています。この図は、図7-4「タスクのクラス図」のテスト・タスクのクラス階層を参照しています。

図7-6 テスト・メトリックのクラス階層

例7-7では、データセットMINING_DATA_TEST_VでのClassificationTestTaskを使用したツリー・モデルJDM_TREE_MODELのテスト方法を示します。

例7-7 モデルのテスト

//Create & save PhysicalDataSpecification
PhysicalDataSet testData = m_pdsFactory.create(
"MINING_DATA_TEST_V", false );
PhysicalAttribute pa = m_paFactory.create("cust_id",
AttributeDataType.integerType, PhysicalAttributeRole.caseId );
testData.addAttribute( pa );
m_dmeConn.saveObject( "JDM_TEST_PDS", testData, true );
//Create ClassificationTestTaskFactory
ClassificationTestTaskFactory testTaskFactory =
(ClassificationTestTaskFactory)dmeConn.getFactory(
"javax.datamining.supervised.classification.ClassificationTestTask");
//Create, store & execute Test Task
ClassificationTestTask testTask = testTaskFactory.create(
"JDM_TEST_PDS", "JDM_TREE_MODEL", "JDM_TREE_TESTMETRICS" );
testTask.setNumberOfLiftQuantiles(10);
testTask.setPositiveTargetValue(new Integer(1));
//Save TestTask object
dmeConn.saveObject("JDM_TEST_TASK", testTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_TEST_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);
//Explore the test metrics after successful completion of the task
if(ExecutionState.success.equals(execStatus.getState())) {
//Retrieve the test metrics object
ClassificationTestMetrics testMetrics =
(ClassificationTestMetrics)dmeConn.getObject("JDM_TREE_TESTMETRICS");
//Retrieve confusion matrix and accuracy
Double accuracy = testMetrics.getAccuracy();
ConfusionMatrix cfm = testMetrics.getConfusionMatrix();
//Retrieve lift
Lift lift = testMetrics.getLift();
//Retrieve ROC
ReceiverOperatingCharacterics roc = testMetrics.getROC();
}

例7-7では、テスト・メトリック・オブジェクトはJDM_TREE_TESTMETRICSという名前の表として格納されます。混同マトリックスはJDM_TREE_TESTMETRICS_CFM表に、リフトはJDB_TREE_TESTMETRICS_LFT表に、ROCはJDM_TREE_TESTMETRICS_ROC表に格納されます。Oracle DiscovererなどのBIツールを使用すると、これらの表を問い合せてレポートを作成できます。

スコアリング・データへのモデルの適用

監視ありモデルはすべて、データに適用して予測を見つけることができます。クラスタリングや特徴抽出など一部の監視なしモデルでは、新しいレコードのクラスタIDや特徴IDを見つけるための適用操作がサポートされています。

JDM標準APIには、格納される結果のタイプを指定するApplySettingsオブジェクトがあります。javax.datamining.task.apply.ApplySettingsは、すべての適用設定のベース・クラスです。Oracle Data Mining Java APIでは、ApplySettingsは一時的であり、データベースではなくConnectionのコンテキストに格納されます。

図7-7のクラス図は、Oracle Data Mining Java APIで利用できる適用設定のクラス階層を示しています。

図7-7 適用設定

Oracle Data Mining Java APIでは、デフォルトの適用設定により固定形式の適用出力表が生成されます。表7-1に、機能別のデフォルトの出力形式を示します。

表7-1 機能別のデフォルトの出力形式

マイニング機能

分類(コストなし)

ケースID

予測

確率

分類(コストあり)

ケースID

予測

確率

コスト

回帰

ケースID

予測

特徴抽出

ケースID

特徴ID

値

どのタイプの適用設定でも、ソースと適用先の属性のマッピングがサポートされています。たとえば、元の適用表に顧客名列と年齢列があり、これらの列を適用出力表に対応付ける必要がある場合、適用設定でソースと適用先のマッピングを指定します。

Oracle Data Mining Java APIの分類適用設定では、ランク別マッピング、上位予測、カテゴリ別マッピングおよびすべての予測のマッピングがサポートされています。回帰適用設定では、予測値のマッピングがサポートされています。クラスタリング適用設定では、ランク別、クラスタID別、上位クラスタおよびすべてのクラスタのマッピングがサポートされています。特徴抽出適用設定では、ランク別、特徴ID別、上位の特徴およびすべての特徴のマッピングがサポートされています。

例7-8では、データセットMINING_DATA_APPLY_VでのClassificationApplyTaskを使用したツリー・モデルJDM_TREE_MODELの適用方法を示します。

例7-8 モデルの適用

//Create & save PhysicalDataSpecification
PhysicalDataSet applyData = m_pdsFactory.create( "MINING_DATA_APPLY_V", false );
PhysicalAttribute pa = m_paFactory.create("cust_id",
AttributeDataType.integerType, PhysicalAttributeRole.caseId );
applyData.addAttribute( pa );
m_dmeConn.saveObject( "JDM_APPLY_PDS", applyData, true );
//Create ClassificationApplySettingsFactory
ClassificationApplySettingsFactory applySettingsFactory =
(ClassificationApplySettingsFactory)dmeConn.getFactory(
"javax.datamining.supervised.classification. ClassificationApplySettings");
//Create & save ClassificationApplySettings
ClassificationApplySettings clasAS = applySettingsFactory.create();
m_dmeConn.saveObject( "JDM_APPLY_SETTINGS", clasAS, true);
//Create DataSetApplyTaskFactory
DataSetApplyTaskFactory applyTaskFactory =
(DataSetApplyTaskFactory)dmeConn.getFactory(
"javax.datamining.task.apply.DataSetApplyTask");
//Create, store & execute apply Task
DataSetApplyTask applyTask = m_dsApplyFactory.create(
" JDM_APPLY_PDS ", "JDM_TREE_MODEL", " JDM_APPLY_SETTINGS ",
"JDM_APPLY_OUTPUT_TABLE");
//Save ApplyTask object
dmeConn.saveObject("JDM_APPLY_TASK", applyTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_APPLY_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

コスト・マトリックスの使用方法

javax.datamining.supervised.classification.CostMatrixクラスは、不適切なポジティブ予測および不適切なネガティブ予測のコストを表すために使用します。これは分類問題に使用して、不適切な予測に関連するコストを示します。

Oracle Data Mining Java APIでは、すべての分類モデルの適用操作とテスト操作でコスト・マトリックスがサポートされています。ディシジョン・ツリー・アルゴリズムの場合、コスト・マトリックスは作成時に指定できます。コスト・マトリックスの詳細は、『Oracle Data Mining概要』を参照してください。

例7-9では、コスト・マトリックス・オブジェクトを作成する方法を示しています。ターゲットにはYES (1)とNO (0)の2つのクラスがあります。販促に対してポジティブ(YES)で応答すると$2が生成され、販促のコストは$1になります。ポジティブな応答を分類ミスしたコストは$2です。応答なしを分類ミスしたコストは$1です。

例7-9 コスト・マトリックスの作成

//Create category set factory & cost matrix factory
CategorySetFactory catSetFactory = (CategorySetFactory)m_dmeConn.getFactory(
"javax.datamining.data.CategorySet" );
CostMatrixFactory costMatrixFactory = (CostMatrixFactory)m_dmeConn.getFactory(
"javax.datamining.supervised.classification.CostMatrix");
//Create categorySet
CategorySet catSet = m_catSetFactory.create(AttributeDataType.integerType);
//Add category values
catSet.addCategory(new Integer(0), CategoryProperty.valid);
catSet.addCategory(new Integer(1), CategoryProperty.valid);
//create cost matrix
CostMatrix costMatrix = m_costMatrixFactory.create(catSet);
costMatrix.setCellValue(new Integer(0), new Integer(0), 0);
costMatrix.setCellValue (new Integer(1), new Integer(1), 0);
costMatrix.setCellValue (new Integer(0), new Integer(1), 2);
costMatrix.setCellValue (new Integer(1), new Integer(0), 1);
//Save cost matrix in the DME
dmeConn.saveObject("JDM_COST_MATRIX", costMatrix);

事前確率の使用方法

事前確率は、実際のデータとモデルの作成で提供されたデータでターゲット値の分布が異なる場合に、分類問題で使用します。ユーザーはsetPriorProbabilitiesMapを使用して、分類機能の設定に事前確率を指定できます。事前確率の詳細は、『Oracle Data Mining概要』を参照してください。

注意:
事前確率はディシジョン・ツリーではサポートされていません。

例7-10では、ターゲットがYES(1)とNO(0)の2つのクラスを持ち、YESの確率を0.05、NOの確率を0.95とする際に、PriorProbabilitiesオブジェクトを作成する方法を示します。

例7-10 事前確率の作成

//Set target prior probabilities
Map priorMap = new HashMap();
priorMap.put(new Double(0), new Double(0.7));
priorMap.put(new Double(1), new Double(0.3));
buildSettings.setPriorProbabilitiesMap("affinity_card", priorMap);

組込み変換

11.1のOJDMは、モデル・メタデータを利用した組込み変換をサポートしています。変換がモデル内に組み込まれると、適用に暗黙的に適用されてデータセットがテストされます。たとえば、ユーザーは応答属性値の表現を1/0からYes/Noに再コード化する変換を組み込むことができます。モデルは、モデルを新しいデータに適用するとき、この変換を使用します。

ユーザーはこれらの変換をSQL式として指定したり、第2章で説明しているOJDMの変換を使用して変換シーケンスを作成したりできます。

この項の最初の例では、モデル作成用の入力として指定されたoracle.dmt.jdm.transform.OraExpressionTransformクラスを使用した簡単な式変換について説明します。

2つ目の例では、複雑な変換のシーケンスを作成し、それらの変換を変換シーケンスとして永続化し、モデルに組み込む方法を示します。

単一式変換の組込み

ユーザーはOraTransformationFactoryを使用すると、OraTransformationSequence、OraExpressionTransform、OraBinningTransform、OraNormalizationTransformおよびOraClippingTransformなどの変換オブジェクトを作成できます。

例7-11では、age属性のシンプルな対数変換、affinity_card属性の再コード化、およびモデル作成からの元のage属性の明示的な除外を定義する式変換を作成します。このコードでは、OJDM APIを使用してこうしたシンプルなSQL式変換をモデルに組み込む方法を示しています。

例7-11 シンプルな式変換

//Create OraTransformationFactory
OraTransformationFactory m_xformFactory = (OraTransformationFactory)m_dmeConn.getFactory(
"oracle.dmt.jdm.transform.OraTransformation" );
//Create OraExpressionTransform from the transformation factory
OraExpressionTransform exprXform = m_xformFactory.createExpressionTransform();
//1) Specify log transformation of age attribute and create a new attribute call log_age
//   that can be used for mining
exprXform.addAttributeExpression("log_age", //Expression output attribute name
"log(10, age) as log_age", //Expression
"power(10, log_age)" //Reverse expression
);
//2) Recode 1/0 values of the affinity card attribute with the yes/no values and replace
//   existing attribute with the new recoded attribute
exprXform.addAttributeExpression("affinity_card", //Expression output attribute name
"CASE WHEN AFFINITY_CARD = 1 THEN 'YES' ELSE 'NO' END ",
null //No explicit reverse expression
);
//3) Exclude age attribute from mining
exprXform.addAttributeExpression("age", //Expression output attribute name
null, //Specify expression as null
//to exclude attribute from mining
null
);
//Create transformation sequence object using expression transformation
OraTransformationSequence xformSeq = m_xformFactory.createTransformationSequence(
"MINING_DATA_BUILD_V", //Input table
exprXform, //Expressions to be defined
null //Output transformed view is specified as null as we are trying to
//embed the transformations to the model
);
//Save transformation sequence object
m_dmeConn.saveObject("simpleExprXForm_jdm", xformSeq, true);
//Create build Task  with transformation sequence
BuildTask buildTask = m_buildFactory.create(
"inputPDS", //Build data specification
"inputBuildSettings", //Mining function settings name
"outputModel" //Mining model name
);
//Specify transformation sequence as one of the input to enable embedding
//of the transformations defined in the sequence with the model
//In this example only expression transformations are specified
((OraBuildTask)buildTask).setTransformationSequenceName("simpleExprXForm_jdm");
//Save and execute the build task
...
//After successful model build specified transformations are embedded with the model
//User can retrieve the transformation details that are embedded with the model by calling
//the following function in OraModel
OraExpressionTransform modelExmbeededTransforms =
((OraModel)model). GetModelTransformations();

複雑な変換シーケンスの組込み

前述の例では、ビジネス上のささいな変換のためにシンプルなSQL式変換を組み込む方法を示しました。この項では、OJDMを使用した複雑な変換シーケンスの作成方法と、これらの変換をモデルに組み込む方法について詳細に説明します。

OJDM 10.2では、ビニング、正規化および外れ値の処理(クリッピング)など、代表的なマイニング関連の個々の変換が提供されています。10.2のユーザーは、モデル作成のプロセスとは別にこれらの変換をメンテナンスし、マイニング操作とは別に、作成、適用およびテスト用の各データセットに対して一貫した変換を行う必要があります。これには、エンド・ユーザーのアプリケーションでコードを大幅に追加し、変換関連オブジェクトをメンテナンスする必要があります。

モデル組込み変換機能を使用すると、前の例で説明したように、最初にビジネス上の変換および新しい属性を追加(式変換を使用)し、次にユーザーが指定したクリッピング定義を使用して外れ値を処理し、最後にユーザーが指定した正規化手法を使用してデータを正規化するなど、複雑な変換シーケンスも組み込むことができます。

OJDMの新しいオブジェクトOraTransformationSequenceでは、変換のシーケンスを指定し、これらの変換を属性ごとのSQL式に変換してモデルに組み込む機能がサポートされています。例7-12では、OJDM APIを使用して、前述の例で作成した式変換を外れ値および正規化のデータ・マイニング変換を使用して拡張した変換シーケンスを作成し、この複雑な変換シーケンスをモデルに組み込む方法を示しています。

例7-12 複雑なシーケンスの変換

//Create a list of transformations to be performed on the input mining data
List xformList = new ArrayList();
xfromList.add( exprXform );     //Expression transformation
xformList.add( clippingXform ); //Clipping transformation to treat outliers
xformList.add( normalizeXform );//Normalization transformation
//Create transformation sequence object using list of transformation
OraTransformationSequence xformSeq = m_xformFactory.createTransformationSequence(
"MINING_DATA_BUILD_V", //Input table
xformList, //List of transformations
null //Output transformed view is specified as null as we are trying to
//embed the transformations to the model
);
//Save transformation sequence object
m_dmeConn.saveObject("complexXFormSeq_jdm", xformSeq, true);
//Create transformation task with the transformation sequence
OraTransformationTaskFactory m_xformTaskFactory =
(OraTransformationTaskFactory)m_dmeConn.getFactory(
"oracle.dmt.jdm.task.OraTransformationTask");
OraTransformationTask xformTask =  m_xformTaskFactory .create(
"complexXFormSeq_jdm",,
false //boolean flag useTransformDefinitionTables
);
//Save and execute transformation task to populate transformation sequence with the
//SQL expressions necessary before embedding them to the build task
. . . .
//Create build Task with transformation sequence
. . . .
((OraBuildTask)buildTask).setTransformationSequenceName("complexXFormSeq_jdm ");
//Save and execute the build task with the embedded transformations
...

ここに示した2つの例では、シーケンスの変換を含むデータベース・ビューを作成しなくてもいいように、変換シーケンスの出力ビューをNULLに指定している点に注目してください。ただし、ビュー名を指定して変換が含まれるデータベース・ビューを作成し、そのデータベース・ビューをモデル作成の入力として使用して、モデル作成のプロセスとは別に変換をメンテナンスすることもできます。OJDM APIでは、要件に最適な手法をアプリケーションで柔軟に選択できます。

予測分析タスク(予測、説明およびプロファイル)の使用方法

OJDMには、データ・マイニングの初心者でもデータから予測を取得し、属性評価を説明し、プロファイルを検出できるように、oracle.dmt.jdm.task.OraPredictTask、OraExplainTaskおよびOraProfileTaskが用意されています。

OraPredictTaskを使用すると、データの場所とターゲット列を指定するのみで予測が計算されます。このタスクは、入力表のターゲット列および他の列の既知の値から学習し、ターゲット列の未知の値を予測値に置き換えます。このタスクでは、データベース内で行われるすべてのデータ・マイニング・プロセスが不可視になり、予測および予測の精度が生成されます。

OraExplainTaskを使用すると、説明列に対して属性のランキング/評価が生成されます。このタスクでは、データの場所と説明列を指定するだけで、属性のランキング表が生成されます。

OraProfileTaskを使用すると、特定のターゲット属性について、データからプロファイルが検出されます。たとえば、製品の販促に反応する顧客のプロファイルを見つけるには、顧客属性および販促応答属性を持つ顧客データセットをこのプロファイル・タスクに指定します。プロフィル・タスクでは、アプリケーションで表示可能なプロファイルの定義が含まれる表が出力されます。

どちらのタスクでも、必要な場合には自動的にデータ準備が行われます。

例7-13に、予測、説明およびプロファイルの各タスクを実行する方法を示します。

例7-13 予測分析

//Get Predictive Analytics Task Factory object
OraPredictiveAnalyticsTaskFactory  m_paFactory =
(OraPredictiveAnalyticsTaskFactory)m_dmeConn.getFactory(
"oracle.dmt.jdm.task.OraPredictiveAnalyticsTask");
//Predict task
//Create predict task object
OraPredictTask predictTask = m_paFactory.createPredictTask (
"MINING_DATA_BUILD_V", //Input table
"cust_id", //Case id column
"affinity_card", //target column
"JDM_PREDICTION_RESULTS"); //prediction output table
//Save predict task object
dmeConn.saveObject("JDM_PREDICT_TASK", predictTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle1 = dmeConn.execute("JDM_PREDICT_TASK");
//Wait for completion of the task
ExecutionStatus execStatus1 = execHandle1.waitForCompletion(Integer.MAX_VALUE);
//Explain task
//Create explain task object
OraExplainTask explainTask = m_paFactory.createExplainTask (
"MINING_DATA_BUILD_V", //Input table
"affinity_card", //explain column
"JDM_EXPLAIN_RESULTS"); //explain output table
//Save predict task object
dmeConn.saveObject("JDM_EXPLAIN_TASK", explainTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle2 = dmeConn.execute("JDM_ EXPLAIN_TASK");
//Wait for completion of the task
ExecutionStatus execStatus2 = execHandle2.waitForCompletion(Integer.MAX_VALUE);
//Profile task
//Create profile task
OraProfileTask profileTask = m_paFactory.createProfileTask(
"MINING_DATA_BUILD_V", //Input table
"affinity_card", //Target column
"JDM_PROFILE_RESULTS); //Profile output table
//Save predict task object
dmeConn.saveObject("JDM_PROFILE_TASK", profileTask, true);
//Execute test task asynchronously in the database
ExecutionHandle execHandle3 = dmeConn.execute("JDM_PROFILE_TASK");
//Wait for completion of the task
ExecutionStatus execStatus3 = execHandle3.waitForCompletion(Integer.MAX_VALUE);

データの準備

Oracle Data Mining Java APIでは、モデルを作成、適用またはテストする前にデータを準備する必要があります。oracle.dmt.jdm.task.OraTransformationTaskクラスは、データ・マイニングの一般的な変換(ビニング、正規化、クリッピングおよびテキスト変換)をサポートします。変換の詳細は、『Oracle Data Mining概要』を参照してください。

図7-8のクラス図は、OraTransformationTaskとその他のオブジェクトとの関係を示しています。

図7-8 OraTransformationTaskクラス図

ビニング/離散化変換の使用方法

ビニングとは、関連する値をまとめてグループ化し、属性の離散値の数を削減するプロセスです。通常、離散値の数を少なくするとモデルがコンパクトになり、短時間でモデルを作成できるようになりますが、精度が低下する可能性もあります。

図7-9のクラス図は、ビニング変換クラスを示しています。

図7-9 OraBinningTransformationクラス図

このOraBinningTransformationにはビニングに必要なすべての設定が含まれています。Oracle Data Mining Java APIでは、質的属性の上位n個のカスタム・ビニング、および量的属性の等幅ビニング、分位ビニング、カスタム・ビニングをサポートしています。ビニング変換の実行後、1つの変換された表と複数のビニング境界表がユーザーのスキーマに作成されます。ビニング境界表の名前は、ユーザーが指定することも、システムで生成することもできます。これにより、適用データおよびテスト・データに対して、作成データのビニング用に生成されたビニング境界表を容易に再利用できます。

次のコード例では、ビューMINING_BUILD_DATA_Vでのビニング操作を示します。

//Create binning transformation instance
OraBinningTransformFactory binXformFactory =
(OraBinningTransformFactory)dmeConn.getFactory(
"oracle.dmt.jdm.transform.binning.OraBinningTransform");
OraBinningTransform binTransform = m_binXformFactory.create(
"MINING_DATA_BUILD_V", // name of the input data set
"BINNED_DATA_BUILD_V", // name of the transformation result
true); // result of the transformation is a view
// Specify the number of numeric bins
binTransform.setNumberOfBinsForNumerical(10);
// Specify the number of categoric bins
binTransform.setNumberOfBinsForCategorical(8);
// Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
binTransform.setExcludeColumnList(excludedList);
// Specify the type of numeric binning: equal-width or quantile
( default is quantile )
binTransform.setNumericalBinningType(binningType);
// Specify the type of categorical binning as Top-N: by default it is none
binTransform.setCategoricalBinningType(OraCategoricalBinningType.top_n);
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(binTransform);
//Save transformation task object
dmeConn.saveObject("JDM_BINNING_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_ BINNING _TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

正規化変換の使用方法

正規化とは、すべての属性値が同じ範囲に収まるように個々の属性値を変換することです。通常、値は0.0から1.0または-1から+1の範囲に変換されます。正規化によって、属性は、値の及ぶ範囲の違いによって生じる人為的な重み付けの影響を受けなくなります。

図7-10のクラス図は、正規化変換クラスを示しています。

図7-10 OraNormalizeTransformationクラス図

このOraNormalizeTransformationには正規化に必要なすべての設定が含まれています。Oracle Data Mining Java APIでは、z-スコア、min-maxおよび線形スケール正規化をサポートしています。正規化は、SVM、NMFおよびk-Meansの各アルゴリズムで必須です。

次のコード例では、ビューMINING_BUILD_DATA_Vでの正規化を示します。

//Create OraNormalizationFactory
OraNormalizeTransformFactory normalizeXformFactory =
(OraNormalizeTransformFactory)m_dmeConn.getFactory(
"oracle.dmt.jdm.transform.normalize.OraNormalizeTransform");
//Create OraNormalization
OraNormalizeTransform normalizeTransform = m_normalizeXformFactory.create(
"MINING_DATA_BUILD_V", // name of the input data set
"NORMALIZED_DATA_BUILD_V", // name of the transformation result
true, // result of the transformation is a view
OraNormalizeType.z_Score, //Normalize type
new Integer(6) ); //Rounding number
// Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
normalizeTransform.setExcludeColumnList(excludedList);
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(normalizeTransform);
//Save transformation task object
dmeConn.saveObject("JDM_NORMALIZE_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_NORMALIZE_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

クリッピング変換の使用方法

属性値に基づく計算の一部は、極値により大きな影響を受ける場合があります。頑強な計算を行う1つの方法として、クリッピング変換を使用したデータのウィンザライズまたはトリミングがあります。

ウィンザライズでは、特定の属性の両端の値を指定値に設定します。たとえば、ウィンザライズを90%とする場合、下位5%は6パーセンタイルの最小値と同じ値に設定され、上位5%は95パーセンタイルの最大値に一致する値に設定されます。

トリミングでは両端の値が取り除かれ、以降の値では取り除かれた値が無視されます。トリミングでは、末端値をNULLに設定します。

図7-11のクラス図は、クリッピング変換クラスを示しています。

図7-11 OraClippingTransformationクラス図

このOraClippingTransformationにはクリッピングに必要なすべての設定が含まれています。Oracle Data Mining Java APIでは、クリッピングの種類としてウィンザライズおよびトリミングをサポートしています。

次のコード例では、ビューMINING_BUILD_DATA_Vでのクリッピングを示します。

//Create OraClippingTransformFactory
OraClippingTransformFactory clipXformFactory =
(OraClippingTransformFactory)dmeConn.getFactory(
"oracle.dmt.jdm.transform.clipping.OraClippingTransform");
//Create OraClippingTransform
OraClippingTransform clipTransform = clipXformFactory.create(
"MINING_DATA_BUILD_V", // name of the input data set
"WINSORISED_DATA_BUILD_V", // name of the transformation result
true );// result of the transformation is a view
//Specify the list of excluded attributes
String[] excludedList = new String[]{"CUST_ID", "CUST_GENDER"};
clipTransform.setExcludeColumnList(excludedList);
//Specify the type of clipping
clipTransform.setClippingType(OraClippingType.winsorize);
// Specify the tail fraction as 3% of values on both ends
clipTransform.setTailFraction(0.03);
//Create and save transformation task
OraTransformationTask xformTask = xformTaskFactory.create(clipTransform);
//Save transformation task object
dmeConn.saveObject("JDM_CLIPPING_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_CLIPPING_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion(Integer.MAX_VALUE);

テキスト変換の使用方法

テキスト列でのマイニングを行うには、テキスト列をネストした表の構造に変換する必要があります。この変換では、テキスト列がネストした表の列に変換されます。テキスト変換によって、特徴表が作成されます。正確な結果を得るために、適用タスクおよびテスト・タスクには、モデル作成テキスト・データ列の特徴表を使用する必要があります。

図7-12のクラス図は、テキスト変換クラスを示しています。

図7-12 テキスト変換クラス図

このOraTextTransformationは、テキスト列およびテキスト列と関連付けられた特徴表を指定するために使用されます。

次のコード例では、表MINING_BUILD_TEXTでのクリッピングを示します。

//Create OraTextTransformFactory
OraTextTransformFactory textXformFactory = dmeConn.getFactory(
"oracle.dmt.jdm.transform.text.OraTextTransform");
//Create OraTextTransform
OraTextTransform txtXform = (OraTextTransformImpl)textXformFactory.create(
"MINING_BUILD_TEXT", // name of the input data set
"NESTED_TABLE_BUILD_TEXT ", // name of the transformation result
"CUST_ID", //Case id column
new String[] { "COMMENTS" } ); //Text column names
);
//Create transformation task
OraTransformationTask xformTask = m_xformTaskFactory.create(txtXform);
//Save transformation task object
dmeConn.saveObject("JDM_TEXTXFORM_TASK", xformTask, true);
//Execute transformation task asynchronously in the database
ExecutionHandle execHandle = dmeConn.execute("JDM_TEXTXFORM_TASK");
//Wait for completion of the task
ExecutionStatus execStatus = execHandle.waitForCompletion
(Integer.MAX_VALUE);

索引
A  B  C  D  E  F  G  I  J  K  L  M  N  O  P  R  S  T  U

A

ADD_COST_MATRIX, 6.4

ADP, 2.1.2, 3.1.2, 5.3.2

「自動データ準備」を参照

ALGO_NAME, 5.2.1 アルゴリズム, 5.2.2 ALL_MINING_MODEL_ATTRIBUTES, 2.2, 3.2.4.1 ALL_MINING_MODEL_SETTINGS, 2.2, 5.2.6 ALL_MINING_MODELS, 2.2 異常検出, 1.1.3, 5.2.2, 5.3.1, 5.3.1, 6.5 適用, 2.1.1.2

バッチ, 6.5

リアルタイム, 6.2

「スコアリング」も参照

ApplySettingsオブジェクト, 2.4.3.6 Apriori, 5.2.2, 5.2.2 相関ルール, 5.2.2, 5.3.1, 5.4 属性評価, 3.2.6, 5.2.2, 5.3.1, 5.4 属性名, 3.2.5 属性のサブ名, 3.2.5 属性, 3, 3.2

B

作成データ, 3.1.2

BuildSettingsオブジェクト, 2.4.3.4

C

ケースID, 2.4.3.1, 3.1, 3.1, 3.1.1, 3.2.4, 6.5.1

ケース表, 3

カタログ・ビュー, 2.2

質的, 3.2.3

重心, 5.4

クラス, 3.2.3

分類, 5.2.2, 5.2.2, 5.3.1

CLUSTER_ID, 1.1.1, 2.3, 6.3.2.1

CLUSTER_PROBABILITY, 2.3, 6.3.2.2

CLUSTER_SET, 2.3, 6.3.2.3

クラスタリング, 2.3, 5.2.2, 6.3.2

コレクション型, 3.3.1, 4.3

定数, 5.3.1

コスト・マトリックス, 6.4

コスト, 6.3.1.3, 6.4

CREATE_MODEL, 2.1.1.1, 5.3

CTXSYS.DRVODM, 4.1

D

データ

ディメンション化, 3.3.2

データ・マイニング, 3

欠損値, 3.4

複数レコード・ケース, 3.3.2

ネスト, 3.3

準備, 2.1.2

スパース, 3.4

トランザクショナル, 3.3.2, 3.3.4

変換, 5.3.2

データ・ディクショナリ・ビュー, 2.2 データ・マイニング・エンジン, 2.4.1, 2.4.3.4, 2.4.3.4 データ型, 3.1.1 DBMS_DATA_MINING, 2.1, 5.3 DBMS_DATA_MINING_TRANSFORM, 2.1, 2.1.2, 5.3.2 DBMS_PREDICTIVE_ANALYTICS, 1.3, 2.1, 2.1.3 DBMS_SCHEDULER, 2.4.3.3 ディシジョン・ツリー, 2.3, 5.2.2, 5.3.1, 5.4, 6.3, 6.3.1.4 デモ・プログラム, 5.5.3 ディメンション化されたデータ, 3.3.2 DM_NESTED_CATEGORICALS, 3.2.3, 3.3.1.2 DM_NESTED_NUMERICALS, 3.2.3, 3.3.1.1, 3.3.3, 4.3, 4.3, 4.4.6 dmsh.sql, 4.2 dmtxtfe.sql, 4.2

E

組込み変換, 2.1.2, 3.1.2, 5.3.2

EXPLAIN, 2.1.3

F

特徴抽出, 2.3, 5.2.2, 5.3.1, 6.3.3, 6.3.3

FEATURE_EXPLAINテーブル・ファンクション, 4.1, 4.4.1, 4.4.5.1

FEATURE_ID, 2.3, 6.3.3.1

FEATURE_PREPテーブル・ファンクション, 4.1, 4.4.1, 4.4.4.1

FEATURE_SET, 2.3, 6.3.3.3

FEATURE_VALUE, 2.3, 6.3.3.2

G

GET_MODEL_DETAILS, 2.1.1.1, 5.4

GET_MODEL_DETAILS_XML, 6.3.1.4

GLM, 5.2.2, 5.4

「一般化線形モデル」を参照

I

索引プリファレンス, 4.1

J

Java API, 2.4, 7

K

k-Means, 5.2.2, 5.3.1, 5.4

L

線形回帰, 2.3, 5.3.1

ロジスティック回帰, 2.3, 5.3.1

M

マーケット・バスケット・データ, 3.3.4, 3.3.4

最小記述長, 5.2.2, 5.2.2

マイニング・モデルのスキーマ・オブジェクト, 2.2, 5.5

欠損値の処理, 3.4.3

欠損値, 3.4

モデル, 2.4.3.4

モデルの詳細, 3.2.6, 5.1, 5.4

モデルのシグネチャ, 3.2.4

モデル

アルゴリズム, 5.2.2

配置, 6.2

権限, 5.5.2

スコアリング, 6

設定, 5.2.6

作成手順, 5.1

N

Naive Bayes, 5.2.2, 5.3.1, 5.4

ネストしたデータ, 3.3, 4.3, 4.4.6

NMF, 5.4

「Non-Negative Matrix Factorization」を参照

Non-Negative Matrix Factorization, 5.3.1 量的, 3.2.3

O

O-Cluster, 5.2.2, 5.3.1

ODMS_ITEM_ID_COLUMN_NAME, 3.3.4

ODMS_ITEM_VALUE_COLUMN_NAME, 3.3.4

1クラスSVM, 1.1.3, 5.3.1

Oracle Text, 4.1

外れ値, 1.1.3.1

P

PhysicalDataSet, 2.4.3.1

PhysicalDataSetオブジェクト, 2.4.3.1

PIPELINED, 3.2.6

PL/SQL API, 1, 1, 2.1

PREDICT, 2.1.3

PREDICTION, 1.1.2, 1.1.3.3, 2.3, 6.3.1.1, 6.4

PREDICTION_BOUNDS, 2.3, 6.3.1.2

PREDICTION_COST, 2.3, 6.3.1.3

PREDICTION_DETAILS, 1.2, 2.3

PREDICTION_PROBABILITY, 1.1.1, 1.1.2, 1.1.3.1, 2.3, 6.3, 6.3.1.5

PREDICTION_SET, 2.3, 6.3.1.6

予測分析, 1.3, 2.1.3

PREP_AUTO, 5.3.2

権限, 5.5.2

PROFILE, 1.3, 2.1.3

R

回帰, 5.2.2, 5.2.2, 5.3.1

REMOVE_COST_MATRIX, 6.4

逆変換, 3.2.4.1, 3.2.6, 3.2.6, 5.4

ルール, 6.3.1.4

S

サンプル・プログラム, 5.5.3

属性の名前の詳細, 3.2.5

スコアリング, 1.1.1, 2.1.1.2, 2.3, 6

バッチ, 6.5

データ, 3.1.2

結果の保存, 6.3.4

「適用」も参照

設定表, 2.4.3.2 スパース・データ, 3.4, 3.4 SQL AUDIT, 5.5 SQL COMMENT, 5.5 SQLデータ・マイニング関数, 1, 2.3 STACK, 2.1.2, 5.3.2 スーパーモデル, 3.1.2 監視ありマイニング機能, 5.3.1 サポート・ベクター・マシン, 5.2.2, 5.3.1, 5.4 SVM

「サポート・ベクター・マシン」を参照

SVM_CLASSIFIER索引プリファレンス, 4.1, 4.4.1, 4.4.3

T

ターゲット, 3.2.2, 3.2.4, 3.2.4.1

テスト・データ, 3.1.2

テキスト・マイニング, 4, 4

テキスト変換, 4

Java, 4.1

PL/SQL, 4.1

トランザクショナル・データ, はじめに, 3.1, 3.3.2, 3.3.2, 3.3.4, 3.3.4 変換リスト, 5.3.2 変換, 2.1.2, 3, 3.2.4.1, 3.2.6, 3.2.6, 5.3.2 透明性, 3.2.6, 5.4

U

監視なしマイニング機能, 5.3.1

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。