33.3 例: 優良顧客の分析

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

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

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

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

例33-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.

例33-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

例33-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

アフィニティ所有の最上位の予測子を導き出すもう1つの方法は、属性評価マイニング機能を使用することです。最小記述長アルゴリズムを使用してモデルを作成します。mining_functionATTRIBUTE_IMPORTANCEとして定義します。その後、DM$VAモデル詳細ビューを問い合せて上位3つの予測子を取得できます。

BEGIN DBMS_DATA_MINING.DROP_MODEL('AI_EXPLAIN_OUTPUT');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
    v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
    v_setlst('ALGO_NAME') := 'ALGO_AI_MDL';
    V_setlst('PREP_AUTO') := 'ON';

    DBMS_DATA_MINING.CREATE_MODEL2(
        MODEL_NAME => 'AI_EXPLAIN_OUTPUT',
        MINING_FUNCTION => 'ATTRIBUTE_IMPORTANCE',
        DATA_QUERY => 'select * from mining_data_test_v',
        SET_LIST => v_setlst,
        CASE_ID_COLUMN_NAME => 'CUST_ID',
        TARGET_COLUMN_NAME => 'AFFINITY_CARD');
END;


Find the top 3 predictors from the DM$VA model detail view:
SELECT ATTRIBUTE_NAME, ATTRIBUTE_IMPORTANCE_VALUE, ATTRIBUTE_RANK FROM DM$VAAI_EXPLAIN_OUTPUT;

出力内容は次のようになります。


ATTRIBUTE_NAME            ATTRIBUTE_IMPORTANCE_VALUE   ATTRIBUTE_RANK   
HOUSEHOLD_SIZE            0.16154338717879052                         1 
CUST_MARITAL_STATUS       0.1561477632217005                          2 
AGE                       0.08440594628406521                         3