ヘッダーをスキップ
Oracle Data Miningアプリケーション開発者ガイド
11g リリース2(11.2)
E57719-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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句を使用してそれらを含める必要があります)。

コスト重視の意思決定

コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。

すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。PREDICTIONPREDICTION_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 MODELAUTOキーワードを使用すれば、コスト・マトリックス表を利用できる場合に限りスコアリングでコストが使用されるようにすることが可能です。

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スコアリング関数には柔軟性があります。ユーザーは、必要とする特定の情報を戻す関数を呼び出すことができます。モデルを参照して、取得したいマイニング結果の種類を特定するだけです。