26 スコアリングと配置
Oracle Data Miningのスコアリングおよび配置機能について説明します。
26.1 スコアリングと配置について
スコアリングとは、新しいデータにモデルを適用することです。Oracle Data Miningでは、スコアリングはSQL言語関数によって実行されます。
予測ファンクションは、分類、回帰、または異常検出を実行します。クラスタリング・ファンクションは、行をクラスタに割り当てます。特徴抽出ファンクションは、入力データをより高い順序の予測子セットに変換します。DBMS_DATA_MINING
PL/SQLパッケージでは、スコアリング・プロシージャも使用可能です。
配置とは、ターゲット環境でモデルを使用することです。モデルを作成した後は、最適な結果を得るためにそれらのモデルを配置し、本番環境内でメンテナンスすることが課題となります。 デプロイメントは次のいずれかになります。
-
バッチまたはリアルタイム処理によるデータのスコアリング。スコアには、予測、確率、ルールおよびその他の統計を含めることができます。
-
モデルの詳細の抽出とレポートの作成。(例: クラスタリング・ルール、ディシジョン・ツリー・ルール、属性評価モデルの属性のランク付けなど)。
-
アプリケーションや業務系システムにマイニング結果を組み込むことによるデータ・ウェアハウスのビジネス・インテリジェンス・インフラストラクチャの強化。
-
モデルを作成したデータベースからスコアリング用データベースへのモデルの移動(エクスポートとインポート)
Oracle Data Miningでは、これらの配置シナリオすべてをサポートしています。
26.2 データ・マイニングSQL関数の使用
データ・マイニングにおけるSQL関数の利点について説明します。
データ・マイニングSQL関数には、次のメリットがあります。
-
既存のSQLアプリケーションのコンテキストで、モデルを簡単に配置できます。
-
スコアリング操作では、既存の問合せ実行機能を利用します。これにより、パフォーマンスが向上します。
-
スコアリング結果がパイプライン化され、実体化を行わずに行を処理することができます。
データ・マイニング関数は、選択した各行のスコアを生成します。これらの関数は、マイニング・モデルのスキーマ・オブジェクトを適用してスコアを計算することも、事前定義されたモデルを使用せずに動的なスコアリングを行うこともできます(「動的スコアリング」を参照)。
26.2.1 予測子の選択
データ・マイニング関数では、スコアリングに使用する属性を指定するUSING
句をサポートしています。選択した属性の一部またはすべてを指定でき、また式を指定することができます。次の例では、すべてPREDICTION
関数を使用してアフィニティ・カードを使用しそうな顧客を検出していますが、各例で異なる予測子のセットを使用しています。
例26-1の問合せでは、すべての予測子を使用しています。
例26-2の問合せでは、予測子として性別、未婚/既婚、職業および所得のみを使用しています。
例26-3の問合せでは、予測子として3つの属性と1つの式を使用しています。予測は、性別、未婚/既婚、職業に加えて、すべての顧客が最高額所得者階層に属するという前提に基づいて行われています。
例26-1 すべての予測子を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING *) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 25 38 M 213 43
例26-2 一部の予測子を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING cust_gender,cust_marital_status, occupation, cust_income_level) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 30 38 M 186 43
例26-3 一部の予測子と1つの式を使用した場合
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION(dt_sh_clas_sample USING cust_gender, cust_marital_status, occupation, 'L: 300,000 and above' AS cust_income_level) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 30 38 M 186 43
26.2.2 単一レコード・スコアリング
データ・マイニング関数は、単一レコードのスコアを生成できます(例26-4および例26-5を参照)。
例26-4では、分類モデルNB_SH_Clas_sample
を適用することによって、顧客102001に対する予測が戻されます。結果として生成されるスコアは0 (この顧客がアフィニティ・カードを使用する可能性は低い)です。
例26-5では、テキスト・マイニング・モデルT_SVM_Clas_sample
を適用することによって、コメント属性として「Affinity card is great」を使用した場合の予測が戻されます。結果として生成されるスコアは1 (この顧客がアフィニティ・カードを使用する可能性は高い)です。
例26-4 単一の顧客または単一のテキスト式のスコアリング
SELECT PREDICTION (NB_SH_Clas_Sample USING *) FROM sh.customers where cust_id = 102001; PREDICTION(NB_SH_CLAS_SAMPLEUSING*) ----------------------------------- 0
例26-5 単一のテキスト式のスコアリング
SELECT PREDICTION(T_SVM_Clas_sample USING 'Affinity card is great' AS comments) FROM DUAL; PREDICTION(T_SVM_CLAS_SAMPLEUSING'AFFINITYCARDISGREAT'ASCOMMENTS) ----------------------------------------------------------------- 1
26.3 予測の詳細
予測の詳細は、スコアに関する情報を提供するXML文字列です。すべてのタイプのスコアリング(クラスタリング、特徴抽出、分類、回帰および異常検出)に対して詳細を使用できます。詳細は、スコアリングが動的であるかモデル適用の結果であるかに関係なく使用できます。
詳細関数CLUSTER_DETAILS
、FEATURE_DETAILS
およびPREDICTION_DETAILS
では、スコアリングに使用された属性の実測値およびスコアの判断における属性の相対的な重要度が戻されます。これらの関数では、デフォルトで5つの最も重要な属性が重要度が高い順に戻されます。
26.3.1 クラスタ詳細
顧客100955の最も可能性が高いクラスタ割当て(20%を超える割当ての確率)について次の例の問合せでは、可能性の高いクラスタごとに最も影響がある属性を5つ生成します。クラスタリング関数により、mining_data_apply_v
から選択したデータにem_sh_clus_sample
という期待値最大化モデルが適用されます。デフォルトで5つの属性が戻されるため、CLUSTER_DETAILS
で指定されている「5」は必須ではありません。
例26-6 クラスタの詳細
SELECT S.cluster_id, probability prob, CLUSTER_DETAILS(em_sh_clus_sample, S.cluster_id, 5 USING T.*) det FROM (SELECT v.*, CLUSTER_SET(em_sh_clus_sample, NULL, 0.2 USING *) pset FROM mining_data_apply_v v WHERE cust_id = 100955) T, TABLE(T.pset) S ORDER BY 2 DESC; CLUSTER_ID PROB DET ---------- ----- ---------------------------------------------------------------------------- 14 .6761 <Details algorithm="Expectation Maximization" cluster="14"> <Attribute name="AGE" actualValue="51" weight=".676" rank="1"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".557" rank="2"/> <Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".412" rank="3"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".171" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION"actualValue="1" weight="-.003" rank="5"/> </Details> 3 .3227 <Details algorithm="Expectation Maximization" cluster="3"> <Attribute name="YRS_RESIDENCE" actualValue="3" weight=".323" rank="1"/> <Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".265" rank="2"/> <Attribute name="EDUCATION" actualValue="HS-grad" weight=".172" rank="3"/> <Attribute name="AFFINITY_CARD" actualValue="0" weight=".125" rank="4"/> <Attribute name="OCCUPATION" actualValue="Crafts" weight=".055" rank="5"/> </Details>
26.3.2 特徴の詳細
次の例の問合せでは、顧客101501に関する最上位の主成分分析(PCA)投影に最も影響を与える3つの属性が戻されます。FEATURE_DETAILS
関数により、svd_sh_sample_build_num
から選択したデータにsvd_sh_sample
という特異値分解モデルが適用されます。
例26-7 特徴の詳細
SELECT FEATURE_DETAILS(svd_sh_sample, 1, 3 USING *) proj1det FROM svd_sh_sample_build_num WHERE CUST_ID = 101501; PROJ1DET -------------------------------------------------------------------------------- <Details algorithm="Singular Value Decomposition" feature="1"> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".352" rank="1"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".249" rank="2"/> <Attribute name="AGE" actualValue="41" weight=".063" rank="3"/> </Details>
26.3.3 予測の詳細
次の例の問合せでは、顧客100010の年齢を予測する場合に最も重要な属性が戻されます。予測関数により、mining_data_apply_v
から選択したデータにGLMR_SH_Regr_sample
という一般化線形モデル回帰モデルが適用されます。
例26-8 回帰用の予測の詳細
SELECT cust_id, PREDICTION(GLMR_SH_Regr_sample USING *) pr, PREDICTION_DETAILS(GLMR_SH_Regr_sample USING *) pd FROM mining_data_apply_v WHERE CUST_ID = 100010; CUST_ID PR PD ------- ----- ----------- 100010 25.45 <Details algorithm="Generalized Linear Model"> <Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".025" rank="1"/> <Attribute name="OCCUPATION" actualValue="Crafts" weight=".019" rank="2"/> <Attribute name="AFFINITY_CARD" actualValue="0" weight=".01" rank="3"/> <Attribute name="OS_DOC_SET_KANJI" actualValue="0" weight="0" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight="-.004" rank="5"/> </Details>
次の例の問合せでは、技術サポートで働いている、アフィニティ・カードを使用する可能性が高い(85%より高い確率)顧客が戻されます。予測関数により、mining_data_apply_v
から選択したデータにsvmc_sh_clas_sample
というサポート・ベクター・マシン(SVM)分類モデルが適用されます。問合せには、学歴が最も重要な予測子であることを示す予測の詳細が含まれています。
例26-9 分類用の予測の詳細
SELECT cust_id, PREDICTION_DETAILS(svmc_sh_clas_sample, 1 USING *) PD FROM mining_data_apply_v WHERE PREDICTION_PROBABILITY(svmc_sh_clas_sample, 1 USING *) > 0.85 AND occupation = 'TechSup' ORDER BY cust_id; CUST_ID PD ------- --------------------------------------------------------------------------------------- 100029 <Details algorithm="Support Vector Machines" class="1"> <Attribute name="EDUCATION" actualValue="Assoc-A" weight=".199" rank="1"/> <Attribute name="CUST_INCOME_LEVEL" actualValue="I: 170\,000 - 189\,999" weight=".044" rank="2"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".028" rank="3"/> <Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".024" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight=".022" rank="5"/> </Details> 100378 <Details algorithm="Support Vector Machines" class="1"> <Attribute name="EDUCATION" actualValue="Assoc-A" weight=".21" rank="1"/> <Attribute name="CUST_INCOME_LEVEL" actualValue="B: 30\,000 - 49\,999" weight=".047" rank="2"/> <Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".043" rank="3"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".03" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight=".023" rank="5"/> </Details> 100508 <Details algorithm="Support Vector Machines" class="1"> <Attribute name="EDUCATION" actualValue="Bach." weight=".19" rank="1"/> <Attribute name="CUST_INCOME_LEVEL" actualValue="L: 300\,000 and above" weight=".046" rank="2"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".031" rank="3"/> <Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".026" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight=".024" rank="5"/> </Details> 100980 <Details algorithm="Support Vector Machines" class="1"> <Attribute name="EDUCATION" actualValue="Assoc-A" weight=".19" rank="1"/> <Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".038" rank="2"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".026" rank="3"/> <Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".022" rank="4"/> <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight=".02" rank="5"/> </Details>
次の例の問合せでは、他の顧客と最も異なる2人の顧客が戻されます。予測関数により、mining_data_apply_v
から選択したデータにSVMO_SH_Clas_sample
という異常検出モデルが適用されます。異常検出では、1クラスSVM分類子を使用します。
例26-10 異常検出用の予測の詳細
SELECT cust_id, pd FROM (SELECT cust_id, PREDICTION_DETAILS(SVMO_SH_Clas_sample, 0 USING *) pd, RANK() OVER (ORDER BY prediction_probability( SVMO_SH_Clas_sample, 0 USING *) DESC, cust_id) rnk FROM mining_data_one_class_v) WHERE rnk <= 2 ORDER BY rnk; CUST_ID PD ---------- ----------------------------------------------------------------------------------- 102366 <Details algorithm="Support Vector Machines" class="0"> <Attribute name="COUNTRY_NAME" actualValue="United Kingdom" weight=".078" rank="1"/> <Attribute name="CUST_MARITAL_STATUS" actualValue="Divorc." weight=".027" rank="2"/> <Attribute name="CUST_GENDER" actualValue="F" weight=".01" rank="3"/> <Attribute name="HOUSEHOLD_SIZE" actualValue="9+" weight=".009" rank="4"/> <Attribute name="AGE" actualValue="28" weight=".006" rank="5"/> </Details> 101790 <Details algorithm="Support Vector Machines" class="0"> <Attribute name="COUNTRY_NAME" actualValue="Canada" weight=".068" rank="1"/> <Attribute name="HOUSEHOLD_SIZE" actualValue="4-5" weight=".018" rank="2"/> <Attribute name="EDUCATION" actualValue="7th-8th" weight=".015" rank="3"/> <Attribute name="CUST_GENDER" actualValue="F" weight=".013" rank="4"/> <Attribute name="AGE" actualValue="38" weight=".001" rank="5"/> </Details>
26.3.4 GROUPINGヒント
データ・マイニング機能は、PREDICTION*
、CLUSTER*
、FEATURE*
およびORA_DM_*
などのSQL関数で構成されます。GROUPING
ヒントは、パーティション化されたモデルをスコアリングするときに、データ・マイニング・スコアリング関数に適用されるオプションのヒントです。
拡張されたPREDICTION関数コマンド・フォーマット
このヒントによって、入力データ・セットが個別のデータ・スライスにパーティション化されるため、次のパーティションに進む前に各パーティション全体がスコアリングされます。ただし、パーティションによるパラレル化も使用できます。データ・スライスは、モデルの構築時に使用されたパーティション化キー列によって決定されます。この方法は、パーティション化されたモデルに対するデータ・マイニング機能とともに使用できます。このヒントにより、多くのパーティションに関連付けられている大規模データをスコアリングするときは問合せパフォーマンスが向上する可能性がありますが、大規模システムでパーティションが少ない大規模データをスコアリングするときはパフォーマンスが低下する可能性があります。通常、ヒントを単一行問合せに使用する場合、パフォーマンスは向上しません。
<prediction function> ::=
PREDICTION <left paren> /*+ GROUPING */ <prediction model>
[ <comma> <class value> [ <comma> <top N> ] ]
USING <mining attribute list> <right paren>
PREDICTION
関数専用の構文が指定されますが、PREDICTION
、CLUSTERING
およびFEATURE_EXTRACTION
スコアリング関数が発生するデータ・マイニング機能に適用可能です。
例26-11 例
SELECT PREDICTION(/*+ GROUPING */my_model USING *) pred FROM <input table>;
26.4 リアルタイムのスコアリング
Oracle Data MiningのSQL関数では、稼働中の本番システムや業務系システムに簡単に組み込むことが可能な、予測、クラスタリングおよび特徴抽出の分析を行うことができます。マイニング結果はSQL問合せ内で戻されるため、リアルタイムでマイニングを実行できます。
リアルタイムのスコアリングでは、販売時点のデータベース・トランザクションをマイニングできます。現場の従業員がより適切な分析的判断を下すために役立つ予測やルール・セットを生成することが可能です。リアルタイムのスコアリングによって、不正の検知、潜在的負債の判別、マーケティングや販売の好機の把握ができるようになります。
次の例では、dt_sh_clas_sample
というディシジョン・ツリー・モデルを使用して、顧客101488がアフィニティ・カードを使用する確率を予測しています。顧客担当者は、電話でこの顧客と会話しているときに、リアルタイムでこの情報を取得できます。問合せの結果によれば、顧客がカードを使用する確率は73%であるため、担当者は付加価値の高いカードを提案することができます。
26.5 動的スコアリング
データ・マイニングSQL関数は、2つのモード(事前定義されたモデルの適用または分析句の実行)で実行されます。モデル名ではなく分析句を指定すると、関数では1つ以上の一時モデルを作成し、これらのモデルを使用してデータをスコアリングします。
事前定義されたモデルを使用せずに動的なデータのスコアリングを行う機能によって、基本的な組込みデータ・マイニング手法が、モデルを使用できない環境にまで拡張して適用されます。ただし、動的スコアリングには制限があります。動的スコアリング中に作成された一時モデルは、検査や細かいチューニングには使用できません。モデルの検査、スコアリング結果とモデルとの相関、特別なアルゴリズム設定、または同じモデルを使用する複数のスコアリング問合せが必要なアプリケーションでは、事前定義されたモデルが必要です。
次の例は、動的スコアリング問合せを示しています。この例では、特異な顧客の年齢値を含む入力データの行を特定します。
例26-13 動的予測
SELECT cust_id, age, pred_age, age-pred_age age_diff, pred_det FROM (SELECT cust_id, age, pred_age, pred_det, RANK() OVER (ORDER BY ABS(age-pred_age) DESC) rnk FROM (SELECT cust_id, age, PREDICTION(FOR age USING *) OVER () pred_age, PREDICTION_DETAILS(FOR age ABS USING *) OVER () pred_det FROM mining_data_apply_v)) WHERE rnk <= 5; CUST_ID AGE PRED_AGE AGE_DIFF PRED_DET ------- ---- ---------- -------- -------------------------------------------------------------- 100910 80 40.6686505 39.33 <Details algorithm="Support Vector Machines"> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059" rank="1"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059" rank="2"/> <Attribute name="AFFINITY_CARD" actualValue="0" weight=".059" rank="3"/> <Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".059" rank="4"/> <Attribute name="YRS_RESIDENCE" actualValue="4" weight=".059" rank="5"/> </Details> 101285 79 42.1753571 36.82 <Details algorithm="Support Vector Machines"> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059" rank="1"/> <Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".059" rank="2"/> <Attribute name="CUST_MARITAL_STATUS" actualValue="Mabsent" weight=".059" rank="3"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059" rank="4"/> <Attribute name="OCCUPATION" actualValue="Prof." weight=".059" rank="5"/> </Details> 100694 77 41.0396722 35.96 <Details algorithm="Support Vector Machines"> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059" rank="1"/> <Attribute name="EDUCATION" actualValue="< Bach." weight=".059" rank="2"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059" rank="3"/> <Attribute name="CUST_ID" actualValue="100694" weight=".059" rank="4"/> <Attribute name="COUNTRY_NAME" actualValue="United States of America" weight=".059" rank="5"/> </Details> 100308 81 45.3252491 35.67 <Details algorithm="Support Vector Machines"> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059" rank="1"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059" rank="2"/> <Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".059" rank="3"/> <Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".059" rank="4"/> <Attribute name="CUST_GENDER" actualValue="F" weight=".059" rank="5"/> </Details> 101256 90 54.3862214 35.61 <Details algorithm="Support Vector Machines"> <Attribute name="YRS_RESIDENCE" actualValue="9" weight=".059" rank="1"/> <Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059" rank="2"/> <Attribute name="EDUCATION" actualValue="< Bach." weight=".059" rank="3"/> <Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059" rank="4"/> <Attribute name="COUNTRY_NAME" actualValue="United States of America" weight=".059" rank="5"/> </Details>
26.6 コスト重視の意思決定
コストは、分類にバイアスをかけるためにユーザーが指定する数値です。コストのより低い結果に対してコストのより高い結果にペナルティを課すために、アルゴリズムでは正の数を使用します。数値が大きいほどコストが高いことを示します。
一方、利益のより低い結果に対して利益のより高い結果を支持するためには負の数が使用されます。負の数が小さいほど利益が高いことを示します。
すべての分類アルゴリズムで、スコアリング用のコストを使用できます。コスト・マトリックス表でコストを指定するか、スコアリング時にインラインでコストを指定します。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。PREDICTION
関数、PREDICTION_SET
関数およびPREDICTION_COST
関数がコストをサポートしています。
コストを使用してモデル作成にバイアスをかけることができるのは、ディシジョン・ツリー・アルゴリズムのみです。コストを使用するディシジョン・ツリー・モデルを作成する場合は、コスト・マトリックス表を作成し、モデルのCLAS_COST_TABLE_NAME
設定にその表の名前を指定します。モデルの作成時にコストを指定すると、モデルの作成に使用したコスト・マトリックスがスコアリング時に使用されます。スコアリング用に別のコスト・マトリックス表を使用する場合は、既存のコスト・マトリックス表を削除してから新しいコスト・マトリックス表を追加します。
次の表に、コスト・マトリックスの例の表を示します。コスト・マトリックスは、2項ターゲットのコストを指定しています。このマトリックスから、0に分類ミスした場合、1に分類ミスした場合の2倍のコストがかかるものとして処理されることがわかります。
表26-1 コスト・マトリックスの例
ACTUAL_TARGET_VALUE | PREDICTED_TARGET_VALUE | COST |
---|---|---|
0 |
0 |
0 |
0 |
1 |
2 |
1 |
0 |
1 |
1 |
1 |
0 |
例26-14 コストを使用した問合せの例
表nbmodel_costs
には、表26-1で説明されているコスト・マトリックスが含まれています。
SELECT * from nbmodel_costs; ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE COST ------------------- ---------------------- ---------- 0 0 0 0 1 2 1 0 1 1 1 0
次の文では、コスト・マトリックスをnbmodel
という名前のNaive Bayesモデルに関連付けます。
BEGIN dbms_data_mining.add_cost_matrix('nbmodel', 'nbmodel_costs'); END; /
次の問合せでは、mining_data_apply_v
のスコアリング時にコスト・マトリックスが考慮されます。出力は、1を予測するほうが0を予測するよりコストが低い行に制限されます。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION (nbmodel COST MODEL USING cust_marital_status, education, household_size) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 25 38 M 208 43
スコアリング関数を呼び出すときに、コストをインラインで指定できます。インラインでコストを指定したのに、モデルにもコスト・マトリックスが関連付けられている場合は、インラインで指定したコストのみが使用されます。インラインで指定した異なるコストを使用している同じ内容の問合せを次に示します。コスト・マトリックス表(表26-1)で示されている「2」のかわりに、インラインで指定したコストでは「10」が指定されています。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION (nbmodel COST (0,1) values ((0, 10), (1, 0)) USING cust_marital_status, education, household_size) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 74 39 M 581 43
コストのかわりに確率に基づいた同じ内容の問合せを次に示します。
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age FROM mining_data_apply_v WHERE PREDICTION (nbmodel USING cust_marital_status, education, household_size) = 1 GROUP BY cust_gender ORDER BY cust_gender; C CNT AVG_AGE - ---------- ---------- F 73 39 M 577 44
26.7 DBMS_DATA_MINING.Apply
DBMS_DATA_MINING
のAPPLY
プロシージャは、スコアリングの結果を表に直接書き込むバッチでの適用操作です。
表の列は、マイニング機能によって異なります。
APPLY
によるスコアリングでは、SQLスコアリング関数によるスコアリングと同じ結果が生成されます。たとえば、分類では各ケースの予測と確率が生成され、クラスタリングでは各ケースのクラスタIDと確率が生成されます。異なっているのは、スコアリング結果の取得方法と、その取得に使用できるメカニズムです。
APPLY
によって作成される出力表の列を次の表に示します。
表26-2 APPLY出力表
マイニング機能 | 出力列 |
---|---|
分類 |
|
回帰 |
|
異常検出 |
|
クラスタリング |
|
特徴抽出 |
|
APPLY
の出力はスコアリング・データとは別に保存されるため、スコアリング結果の行を含めた問合せをサポートするには、出力とスコアリング・データを結合する必要があります。したがって、APPLY
で使用されるモデルにはケースIDが必要となります。
ケースIDは、SQLスコアリング関数で適用されるモデルには不要です。同様に、スコアリング結果はSQL問合せ内でリアルタイムに生成および使用されるため、保存や結合も不要です。
次の例は、APPLY
による異常検出を示しています。このAPPLY
出力表の問合せは、表の最初の10名の顧客を戻します。各顧客について、典型的(1)または異常(0)である確率が示されます。
例26-15 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