この章では、データ・マイニング・モデルを使用してデータをマイニングする方法について説明します。
この章には、次の項が含まれます。
スコアリング(新しいデータにモデルを適用すること)は、データ・マイニングにおける主要な目的です。モデルを作成した後は、最適な結果を得るためにそれらのモデルを配置し、本番環境内でメンテナンスすることが課題となります。
従来のデータ・マイニングでは、リモート・システムの専用ソフトウェアを使用してモデルを作成し、スコアリング用の別のシステムに配置していました。この方法は、面倒なだけでなく間違いやセキュリティ侵害が発生しやすく、さらにデータの同期をとることも困難です。
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言語リファレンス』 を参照してください。 |
(分類または回帰)PREDICTION_BOUNDS
関数は、モデルによって計算された上限信頼限界または下限信頼限界を戻します。
信頼度とは、実際の値(回帰)または確率(分類)が有界区間内に収まることの確からしさの度合いです。デフォルトの信頼度は.95です。信頼度は、モデルのGLMS_CONF_LEVEL
設定でユーザーが指定できます。ユーザーがPREDICTION_BOUNDS
関数を呼び出すときにインラインで信頼度を指定することによって、モデルに関連付けられた信頼度を上書きできます。
アルゴリズムによってリッジ回帰が使用されている場合、信頼限界は戻されません。
関連項目:
|
(分類のみ)PREDICTION_COST
関数は、最もコストが低いと予測されるクラスに関連付けられたコストを戻します。クラスを指定した場合は、そのクラスに関連付けられたコストを戻します。
コストは、ユーザーが指定する分類用のバイアス・メカニズムです。「コスト重視の意思決定」を参照してください。
関連項目: PREDICTION_COSTを使用する構文および例については、『Oracle Database SQL言語リファレンス』 を参照してください。 |
(分類のみ)PREDICTION_DETAILS
関数は、特定の予測に対応するディシジョン・ツリー・モデルのルールを戻します。ルールとは、特定の分類を導く条件(属性値の組合せ)のことです。
ディシジョン・ツリー・ルールの識別子はXMLとして戻されます。ルール全体は、GET_MODEL_DETAILS_XML
関数を使用して取得できます。
関連項目:
|
(分類のみ)PREDICTION_PROBABILITY
関数は、最適な予測(確率が最も高い予測)に関連付けられた確率、またはユーザーが指定したクラスに関連付けられた確率を戻します。
関連項目: PREDICTION_PROBABILITYを使用する構文および例については、『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言語リファレンス』 を参照してください。 |
Oracle Data Miningは、特徴抽出モデルの結果を戻す3種類のSQL関数をサポートしています。
特徴抽出モデルは、属性を組み合せて、データの重要な特性を抽出した特徴のセットを作成します。スコアリング・プロセスにより、各行について個々の特徴の値が生成されます。この値は、その特徴に対するケースの一致の質を示す数値です。各SQL関数は、スコアリング結果から異なる情報を戻します。
FEATURE_ID
関数は、データに対して最も高い値(一致の質)を持つ特徴の識別子(ID)を戻します。
関連項目: FEATURE_IDを使用する構文および例については、『Oracle Database SQL言語リファレンス』 を参照してください。 |
FEATURE_VALUE
関数は、最も高い特徴値を戻します。特徴IDを指定した場合は、その特徴の値を戻します。
関連項目: FEATURE_VALUEを使用する構文および例については、『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のコスト・マトリックスは、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出力表
マイニング機能 | 出力列 |
---|---|
分類 |
|
回帰 |
|
異常検出(1クラスSVM) |
|
クラスタリング |
|
特徴抽出 |
|
例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スコアリング関数のどちらによって実行しても、スコアリングでは同じマイニング結果が生成されます。たとえば、分類では各ケースの予測と確率が生成され、クラスタリングでは各ケースのクラスタIDと確率が生成されます。異なっているのは、スコアリング結果の取得方法と、その取得に使用できるメカニズムです。
APPLY
の出力はスコアリング・データとは別に保存されるため、マイニングされたデータ属性(スコアリング結果の行)を含めた問合せをサポートするには、出力とスコアリング・データを結合する必要があります。したがって、APPLY
で使用されるモデルにはケースIDが必要となります。
ケースIDは、SQLスコアリング関数で適用されるモデルには不要です。同様に、スコアリング結果はSQL問合せ内でリアルタイムに生成および使用されるため、保存や結合も不要です。
SQLスコアリング関数には柔軟性があります。ユーザーは、必要とする特定の情報を戻す関数を呼び出すことができます。モデルを参照して、取得したいマイニング結果の種類を特定するだけです。