21 SQLによるデータ・マイニング

Oracle Data Miningのアプリケーション・プログラミング・インタフェース(API)を使用したビジネス上の問題の解決方法について説明します。

21.1 データ・マイニングAPIの特徴

データ・マイニングのアプリケーション・プログラミング・インタフェース(API)の利点について説明します。

データ・マイニングは、多くのアプリケーション・ドメインで有益なテクノロジです。これは、業務を最適化して競争力を維持するためのツールとして、民間部門で徐々に欠かせないものになってきました。また、公共部門や科学研究でも重要なデータ・マイニングのアプリケーションがあります。ただし、データ・マイニング・アプリケーションの開発の複雑さと、データの大規模ストアの管理および保護に固有の複雑さによって、データ・マイニング・テクノロジの採用が制限されることがあります。

これらの問題に対処するには、Oracle Data Miningが最も適しています。データ・マイニング・エンジンがデータベース・カーネルに実装され、データの管理と保護にはOracle Databaseの堅牢な管理機能を使用できます。そのAPIは、広範なデータ・マイニングのアルゴリズムとプロシージャをサポートすると同時に、データ・マイニング・アプリケーションの開発を簡素化する機能も備えています。

Oracle Data Mining APIは、Oracle SQL (Oracle Databaseのネイティブ言語)に対する拡張機能で構成されています。このAPIには、次の利点があります。

  • SQL問合せのコンテキスト内のスコアリング。スコアリングは動的に実行することも、データ・マイニング・モデルの適用により実行することもできます。

  • 自動データ準備(ADP)と組込み変換。

  • モデルの透明性。アルゴリズム固有の問合せでは、モデルの作成に使用された属性に関する詳細が戻されます。

  • スコアリングの透明性。予測、クラスタリングまたは特徴抽出の操作に関する詳細をスコアとともに戻すことができます。

  • 予測分析を実行するためのシンプルなルーチン。

  • Oracle SQL Developer内のワークフローベースのグラフィカル・ユーザー・インタフェース(GUI)。SQL Developerは次のサイトから無料でダウンロードできます。

    http://www.oracle.com/pls/topic/lookup?ctx=db122&id=datminGUI

注意:

Oracle Databaseには、データ・マイニングのサンプル・プログラムのセットが付属しています。このマニュアルの例は、これらのサンプルから抜粋しています。

21.2 例: 販売促進の候補のターゲット設定

この例では、クーポンとアフィニティ・カードを提供する特別な販促に対してブラジルの顧客をターゲット設定します。

問合せでは、未婚/既婚、学歴および所得に関するデータを使用し、インセンティブを利用する可能性が最も高い顧客を予測します。問合せでは、dt_sh_clas_sampleというディシジョン・ツリー・モデルを適用して、顧客データをスコアリングします。

例21-1 アフィニティ・カードの最適な候補の予測

SELECT cust_id
  FROM mining_data_apply_v
  WHERE
      PREDICTION(dt_sh_clas_sample 
                   USING cust_marital_status, education, cust_income_level ) = 1
  AND country_name IN 'Brazil';

  CUST_ID
----------
    100404
    100607
    101113

同じ問合せですが、不適切なネガティブより不適切なポジティブを優先するバイアスを使用したものを次に示します。

SELECT cust_id
  FROM mining_data_apply_v
  WHERE
      PREDICTION(dt_sh_clas_sample COST MODEL
                   USING cust_marital_status, education, cust_income_level ) = 1
  AND country_name IN 'Brazil';

  CUST_ID
----------
    100139
    100163
    100275
    100404
    100607
    101113
    101170
    101463

COST MODELキーワードを使用すると、モデルに関連付けられたコスト・マトリックスが予測作成に使用されます。コスト・マトリックス(dt_sh_sample_costsという表に格納)は、不適切なネガティブは不適切なポジティブの8倍のコストがかかることを指定します。可能性の高い販促の候補の見落しは、可能性の低い候補を含めてしまう場合より、はるかにコストがかかります。

SELECT * FROM dt_sh_sample_cost;
 
ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE       COST
------------------- ---------------------- ----------
                  0                      0          0
                  0                      1          1
                  1                      0          8
                  1                      1          0

21.3 例: 優良顧客の分析

この項の例では、アフィニティ・カードを使用する顧客またはアフィニティ・カードを使用しそうな顧客に関する情報がわかります。

例21-2 優良顧客に関する人口統計データ情報の検出

この問合せでは、典型的なアフィニティ・カード保有者の性別、年齢および居住期間が戻されます。異常検出モデル(SVMO_SH_Clas_sample)は、一般的なケースの場合には1を、異常なケースの場合には0を戻します。人口統計データは、典型的な顧客のみについて予測されます(外れ値はサンプルに含まれません)。

SELECT cust_gender, round(avg(age)) age,
       round(avg(yrs_residence)) yrs_residence,
       count(*) cnt
FROM mining_data_one_class_v
WHERE PREDICTION(SVMO_SH_Clas_sample using *) = 1
GROUP BY cust_gender
ORDER BY cust_gender;
 
CUST_GENDER         AGE YRS_RESIDENCE        CNT
------------ ---------- ------------- ----------
F                    40             4         36
M                    45             5        304

例21-3 優良顧客と共通点のある顧客の動的な特定

この問合せでは、現在はアフィニティ・カードを持っていないが、アフィニティ・カード保有者と多くの特徴を共有する顧客を特定します。PREDICTION関数およびPREDICTION_PROBABILITY関数では、事前定義のモデルのかわりにOVER句を使用して顧客を分類します。予測と確率は動的に計算されます。

SELECT cust_id, pred_prob 
 FROM
  (SELECT cust_id, affinity_card,
    PREDICTION(FOR TO_CHAR(affinity_card) USING *) OVER () pred_card,
    PREDICTION_PROBABILITY(FOR TO_CHAR(affinity_card),1 USING *) OVER () pred_prob
   FROM mining_data_build_v)
 WHERE affinity_card = 0
  AND pred_card = 1
 ORDER BY pred_prob DESC;

  CUST_ID PRED_PROB
---------- ---------
    102434       .96
    102365       .96
    102330       .96
    101733       .95
    102615       .94
    102686       .94
    102749       .93
.
.
.
.
    102580       .52
    102269       .52
    102533       .51
    101604       .51
    101656       .51
 
226 rows selected.

例21-4 新規顧客が優良顧客になる可能性の予測

この問合せでは、新規顧客が優良顧客(アフィニティ・カード保有者)になる確率を計算します。この問合せは、販売時にリアルタイムで実行できます。

新規顧客は、44歳のアメリカ人重役で、学士の学位を持ち、年収は$300,000です。結婚していて、3人家族で暮らしており、過去6年間同じ住宅に住んでいます。この顧客が典型的なアフィニティ・カード保有者になる確立はわずか5.8%です。

SELECT PREDICTION_PROBABILITY(SVMO_SH_Clas_sample, 1 USING
                             44 AS age,
                             6 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 DUAL;  
 
PROB_TYPICAL
------------
  5.8

例21-5 予測分析を使用した最上位の予測子の検出

DBMS_PREDICTIVE_ANALYTICS PL/SQLパッケージには、事前定義のモデルなしで簡単なデータ・マイニング操作を実行するルーチンが含まれています。この例では、EXPLAINルーチンによって、アフィニティ・カードの所有に関する最上位の予測子が計算されます。結果には、世帯規模、未婚/既婚および年齢が、最上位となる3つの予測子であることが示されます。

BEGIN
    DBMS_PREDICTIVE_ANALYTICS.EXPLAIN(
        data_table_name      => 'mining_data_test_v',
        explain_column_name  => 'affinity_card',
        result_table_name    => 'cust_explain_result');
END;
/

SELECT * FROM cust_explain_result
  WHERE rank < 4;
 
ATTRIBUTE_NAME           ATTRIBUTE_SUBNAME    EXPLANATORY_VALUE       RANK
------------------------ -------------------- ----------------- ----------
HOUSEHOLD_SIZE                                       .209628541          1
CUST_MARITAL_STATUS                                  .199794636          2
AGE                                                  .111683067          3

21.4 例: 顧客データのセグメント化

この項の例では、期待値最大化クラスタリング・モデルを使用し、共通の特徴に基づいて顧客データをセグメント化します。

例21-6 顧客セグメントの計算

この問合せでは、顧客の自然なグループが計算され、各グループの顧客数が戻されます。

SELECT CLUSTER_ID(em_sh_clus_sample USING *) AS clus, COUNT(*) AS cnt
  FROM mining_data_apply_v
GROUP BY CLUSTER_ID(em_sh_clus_sample USING *)
ORDER BY cnt DESC;
 
      CLUS        CNT
---------- ----------
         9        311
         3        294
         7        215
        12        201
        17        123
        16        114
        14         86
        19         64
        15         56
        18         36

例21-7 最大セグメントに含まれる可能性が最も高い顧客の検出

例21-6の問合せは、セグメント9が最も多くの顧客を含むことを示しています。次の問合せでは、セグメント9に含まれる可能性が最も高い5人の顧客がリストされます。

SELECT cust_id
FROM (SELECT cust_id, RANK() over (ORDER BY prob DESC, cust_id) rnk_clus2
  FROM (SELECT cust_id,
          ROUND(CLUSTER_PROBABILITY(em_sh_clus_sample, 9 USING *),3) prob
          FROM mining_data_apply_v))
WHERE rnk_clus2 <= 5
ORDER BY rnk_clus2;
 
   CUST_ID
----------
    100002
    100012
    100016
    100019
    100021

例21-8 最大クラスタ内の代表的な顧客の主要な特徴の検出

例21-7の問合せでは、セグメント9に含まれる可能性が高い顧客のリストの最初に顧客100002が挙げられています。次の問合せでは、20%を超える確率で顧客100002のセグメントへの割当てを判断した場合に(この顧客の場合はセグメント9のみ)、最も重要な5つの特徴を戻します。

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 = 100002) T,
 TABLE(T.pset) S
 ORDER BY 2 desc;
 
CLUSTER_ID    PROB DET
---------- ------- --------------------------------------------------------------------------------
         9  1.0000 <Details algorithm="Expectation Maximization" cluster="9">
                   <Attribute name="YRS_RESIDENCE" actualValue="4" weight="1" rank="1"/>
                   <Attribute name="EDUCATION" actualValue="Bach." weight="0" rank="2"/>
                   <Attribute name="AFFINITY_CARD" actualValue="0" weight="0" rank="3"/>
                   <Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight="0" rank="4"/>
                   <Attribute name="Y_BOX_GAMES" actualValue="0" weight="0" rank="5"/>
                   </Details>

21.5 例: WikiデータセットによるESAモデルの構築

次の例で、類似するテキストのセットを比較して、その後で類似しないテキストのセットを比較する明示的セマンティック分析(ESA)モデルを使用したFEATURE_COMPAREファンクションを示します。

次の例は、200,000を超える特徴をレンダリングする2005 Wikiデータセットに対して構築されているESAモデルを示しています。ドキュメントはテキストとしてマイニングされ、ドキュメント・タイトルは特徴IDとして指定されます。

類似するテキスト

SELECT 1-FEATURE_COMPARE(esa_wiki_mod USING 'There are several PGA tour golfers from South Africa' text AND USING 'Nick Price won the 2002 Mastercard Colonial Open' text) similarity FROM DUAL;

SIMILARITY
----------
      .258

出力されるメトリックに、差異の計算が示されます。したがって、より小さい数値は、テキストがより類似していることを示します。そのため、問合せでは1から差異を引いた値が類似性となります。

類似しないテキスト

SELECT 1-FEATURE_COMPARE(esa_wiki_mod USING 'There are several PGA tour golfers from South Africa' text AND USING 'John Elway played quarterback for the Denver Broncos' text) similarity FROM DUAL;

SIMILARITY
----------
      .007