クラスタリングのユースケース・シナリオ

あなたはゲーム・データ・サイエンティストです。マーケティング・チームが、新しいゲームを販促しようと考えており、ゲーム製品を購入した、与信限度額の高い顧客を求めています。チームはゲーム購入および与信レベルに基づいて顧客をセグメント化することを希望しています。あなたは、チームがターゲット顧客を識別し、k-Meansを使用して母集団をセグメント化することを支援します。

関連コンテンツ

トピック リンク
OML4SQL GitHubの例 クラスタリング - k-Means
CREATE_MODEL2プロシージャ CREATE_MODEL2プロシージャ
一般的なモデル設定 DBMS_DATA_MINING - モデル設定
k-Meansの設定 DBMS_DATA_MINING - アルゴリズムの設定: k-Means
データ・ディクショナリ設定 Oracle Machine Learningのデータ・ディクショナリ・ビュー
k-Means - モデル・ディテール・ビュー k-Meansのモデル・ディテール・ビュー
クラスタリングについて クラスタリングについて
k-Meansについて k-Meansについて

OML4SQLユースケースの探求を開始する前に、次の用意ができていることを確認します。

  • データ・セット

    このユースケースに使用されるデータ・セットは、SHスキーマからのものです。SHスキーマは、Oracle Autonomous Databaseで簡単にアクセスできます。オンプレミス・データベースの場合、スキーマはインストール時にインストールされるか、スクリプトをダウンロードして手動でインストールできます。サンプル・スキーマのインストールを参照してください。

  • データベース
    次のオプションからデータベースを選択または作成します:
  • 機械学習ツール
    データベースの選択内容に応じて、次のいずれかを実行します。
    • Oracle Autonomous Database用のOML Notebooksを使用します。
    • オンプレミス・データベースまたはDBCSに接続されたOracle SQL Developerをインストールして使用します。SQL Developerのインストールおよび起動を参照してください。
  • その他の要件

    データ・マイニング権限(ADWに対して自動的に設定されます)。Oracle Machine Learning for SQLのためのシステム権限を参照してください。

データのロード

SHスキーマからデータ・セットにアクセスし、属性を理解するためにデータを探索します。

注意:

このユースケースに使用されるデータ・セットは、SHスキーマからのものです。SHスキーマは、Oracle Autonomous Databaseで簡単にアクセスできます。オンプレミス・データベースの場合、スキーマはインストール時にインストールされるか、スクリプトをダウンロードして手動でインストールできます。サンプル・スキーマのインストールを参照してください。

データを理解するために、次を実行します。
  • データにアクセスします。
  • データ・セットの様々な属性または列を詳細に調べます。
  • データ品質を(データを探索することで)評価します。

データへのアクセス

SHスキーマのCUSTOMERSおよびSUPPLEMENTARY_DEMOGRAPHICS表データを使用します。

データの調査

次の表に、SUPPLEMENTARY_DEMOGRAPHICSの属性に関する情報を示します。

属性名 情報
CUST_ID 顧客のID
EDUCATION 顧客の教育情報
OCCUPATION 顧客の職業
HOUSEHOLD_SIZE 一戸当たりの人数
YRS_RESIDENCE 居住年数
AFFINITY_CARD 顧客がアフィニティ・カードを保有するかどうか
BULK_PACK_DISKETTES

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

FLAT_PANEL_MONITOR

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

HOME_THEATER_PACKAGE

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

BOOKKEEPING_APPLICATION

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

PRINTER_SUPPLIES

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

Y_BOX_GAMES

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

OS_DOC_SET_KANJI

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

COMMENTS

製品。顧客がすでに当該製品を所有しているかどうかを示します。

1は「はい」を意味します。0は「いいえ」を意味します

データの探索

データにアクセスできたら、データを調べ、データの品質を理解して評価します。このステージでは、データを評価してデータ内のデータ型およびノイズを識別します。欠損値および数値外れ値を探します。

データ品質の評価

データを評価するには、まずデータベース内のデータを表示できる必要があります。このため、SQL文を使用してSH.CUSTOMERS表およびSH.SUPPLEMENTARY_DEMOGRAPHICS表を問い合せます。

Oracle Autonomous Databaseを使用している場合は、データ品質の評価など、データ・サイエンス・プロジェクトのためにOracle Machine Learning (OML) Notebooksを使用できます。オンプレミスのOracle Databaseを使用している場合は、Oracle SQL Developerを使用してデータ品質を評価できます。説明に従ってSHスキーマを問い合せます。

ノート:

データベース内の各レコードはケースと呼ばれ、各ケースはcase_idで識別されます。このユースケースでは、CUST_IDcase_idです。

次のステップは、データの探索的分析に役立ちます。

  1. 次の問合せを実行して、SH.CUSTOMERS表のデータを表示します。
    SELECT * FROM SH.CUSTOMERS;
  2. 表の個別データを表示するには、次の問合せを実行します。
    SELECT DISTINCT * FROM SH.CUSTOMERS;
    顧客の個別数
  3. データ・セット内の行のCOUNTを検索するには、次の文を実行します。
    SELECT DISTINCT COUNT(*) from SH.CUSTOMERS;
    COUNT(*)   
         55500 
    ---------------------------
  4. 表内の個別顧客または一意の顧客を検索するには、次の文を実行します。
    %script
    SELECT COUNT (DISTINCT CUST_ID) FROM SH.CUSTOMERS;
    COUNT(DISTINCTCUST_ID)   
                       55500 
    ---------------------------
  5. 同様に、SH.SUPPLEMENTARY_DEMOGRAPHICS表を問い合せます。
    SELECT * FROM SH.SUPPLEMENTARY_DEMOGRAPHICS;
    SH.SUPPLIMENTARY_DEMOGRAPHICS表
  6. SH.SUPPLEMENTARY_DEMOGRAPHICS表の行数を表示するには、次の文を実行します。
    SELECT COUNT(*) from SH.SUPPLEMENTARY_DEMOGRAPHICS;
    
    COUNT(*)   
          4500 
    ---------------------------
  7. SH.CUSTOMERS表およびSH.SUPPLIMENTARY_DEMOGRAPHICS表から必要な列を選択して、CUSTOMERDATAという表を作成します。
    %script
     
    CREATE OR REPLACE VIEW CUSTOMERDATA AS
       SELECT a.CUST_ID, a.CUST_GENDER, a.CUST_MARITAL_STATUS,
              a.CUST_YEAR_OF_BIRTH, a.CUST_INCOME_LEVEL, a.CUST_CREDIT_LIMIT,
              b.HOUSEHOLD_SIZE, b.YRS_RESIDENCE, b.Y_BOX_GAMES
       FROM SH.CUSTOMERS a, SH.SUPPLEMENTARY_DEMOGRAPHICS b
       WHERE a.CUST_ID = b.CUST_ID;
     
    View CUSTOMERDATA created.
  8. CUSTOMERDATA表を表示します。
    SELECT * FROM CUSTOMERDATA;
    CUSTOMERDATA表
  9. 新しいCUSTOMERDATA表の行数を検索します。
    SELECT COUNT(*) FROM CUSTOMERDATA;
    COUNT(*)   
          4500 
    ---------------------------
  10. 列のデータ型を表示するには、次の文を実行します。
    %script
    DESCRIBE CUSTOMERDATA;
    
    Name                Null?    Type        
    ------------------- -------- ------------
    CUST_ID       	   NOT NULL  NUMBER
    CUST_GENDER 	   NOT NULL  CHAR(1)
    CUST_MARITAL_STATUS          VARCHAR2(20)
    CUST_YEAR_OF_BIRTH NOT NULL  NUMBER(4)
    CUST_INCOME_LEVEL            VARCHAR2(30)
    CUST_CREDIT_LIMIT            NUMBER
    HOUSEHOLD_SIZE               VARCHAR2(21)
    YRS_RESIDENCE                NUMBER
    Y_BOX_GAMES          	 NUMBER(10)
     
    ---------------------------
  11. 欠損値(NULL値)があるかどうかを確認するには、次の文を実行します。
    SELECT COUNT(*) FROM CUSTOMERDATA WHERE CUST_ID=NULL OR CUST_GENDER=NULL
     OR CUST_MARITAL_STATUS=NULL OR CUST_YEAR_OF_BIRTH=NULL OR CUST_INCOME_LEVEL=NULL
     OR CUST_CREDIT_LIMIT=NULL OR HOUSEHOLD_SIZE=NULL OR YRS_RESIDENCE=NULL OR Y_BOX_GAMES=NULL;
    
    
    COUNT(*)   
             0 
    ---------------------------

    見つかった場合、NULLはOMLアルゴリズムによって自動的に処理されます。あるいは、NVL SQLファンクションを使用してNULLを手動で置き換えることもできます。

これで、データの探索ステージが完了します。OMLでは、自動データ準備(ADP)をサポートしています。ADPはモデル設定によって有効になります。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、モデルに埋め込まれます。このステップは、モデルの構築ステージで実行します。一般的に使用されるデータの準備方法には、ビニング、正規化、欠損値の処理があります。

モデルの構築

データ・セットを使用してモデルを構築します。DBMS_DATA_MINING.CREATE_MODEL2プロシージャを使用してモデルを構築し、モデル設定を指定します。

モデルを評価し、同じデータに対するモデルのパフォーマンスを正確に査定するには、通常、データをトレーニング・データとテスト・データに分割(分離)します。クラスタリングなどの教師なし学習の場合、精度を計算したりパフォーマンスを評価するためのラベルまたは予測子がありません。したがって、分割せずにデータ・セットを使用してモデルを作成できます。教師なし学習の場合、モデルがどの程度優れているかを知る本当の方法がありません。そのため、トレーニングやテスト分割は有用ではありません。

アルゴリズムの選択

モデルを構築する前に、適切なアルゴリズムを選択します。次のアルゴリズムのいずれかを選択して、クラスタリングの問題を解決できます。
  • k-Means
  • 期待値最大化(EM)
  • 直交クラスタ(O-Cluster)

K-Meansでは、データの特定の分布が想定されません。k-Meansアルゴリズムは、指定した数のクラスタにデータを分割する、距離ベースのクラスタリング・アルゴリズムです。EMアルゴリズムは確率密度推定の手法です。EM手法は、データに複数のクラスタがあり、各クラスタが特定のガウス分布に従って分散されている前提に基づいています。O-Clusterはネイバー・ベースの手法です。データ内で高密度の領域を特定し、密領域をクラスタに分割します。特定の形状を形成するデータ・ポイントをクラスタ化できます。形状は、円、らせん、ネクタイ型などの複雑なパターンになる場合があります。

K-Meansは、互いに近いポイントのみをクラスタ化する傾向があり、必ずしも形状に基づいてデータをクラスタ化するわけではありません。そのため、K-Means手法は前提が最も単純な手法です。したがって、始めに使用するクラスタリング手法となります。

次のステップでは、選択したアルゴリズムを使用してモデルを構築する方法について説明します。

  1. CREATE_MODEL2プロシージャを使用してモデルを構築します。最初に、モデル設定またはハイパーパラメータを格納する変数を宣言します。次のスクリプトを実行します。
    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('KM_SH_CLUS1');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlist DBMS_DATA_MINING.SETTING_LIST;
    BEGIN
        v_setlist('ALGO_NAME')        := 'ALGO_KMEANS';
        V_setlist('PREP_AUTO')        := 'ON';
        V_setlist('KMNS_DISTANCE')    := 'KMNS_EUCLIDEAN';
        V_setlist('KMNS_DETAILS')     := 'KMNS_DETAILS_ALL';
        V_setlist('KMNS_ITERATIONS')  := '10';
        V_setlist('KMNS_NUM_BINS')    := '10';
        v_setlist('CLUS_NUM_CLUSTERS'):= '1';
     
        DBMS_DATA_MINING.CREATE_MODEL2(
            MODEL_NAME          => 'KM_SH_CLUS1',
            MINING_FUNCTION     => 'CLUSTERING',
            DATA_QUERY          => 'select * from CUSTOMERDATA',
            SET_LIST            => v_setlist,
            CASE_ID_COLUMN_NAME => 'CUST_ID');
    END;
     
    
    
    PL/SQL procedure successfully completed.
    ---------------------------
    PL/SQL procedure successfully completed.
    

    スクリプトを詳しく見てみます。

    • v_setlistは、SETTING_LISTを格納する変数です。
    • SETTING_LISTは、モデルのモデル設定またはハイパーパラメータを指定します。
    • DBMS_DATA_MININGは、機械学習に使用されるPL/SQLパッケージです。これらの設定の詳細は、DBMS_DATA_MINING - モデル設定を参照してください。
    • ALGO_NAMEは、アルゴリズム名を指定します。k-Meansをアルゴリズムとして使用しているため、ALGO_KMEANSを設定します。
    • PREP_AUTOは、自動データ準備に使用する設定です。ここでは、自動データ準備を有効にします。設定の値はONです。
    • KMNS_DISTANCEは、k-Meansのケース間の類似性を測定する距離関数です。ここでの値はKMNS_EUCLIDEANです。これはデフォルト値です。
    • KMNS_DETAILSは、クラスタ詳細のレベルを決定します。KMNS_DETAILS_ALLは、クラスタ階層、レコード数および記述統計(平均値、分散値、最頻値、ヒストグラムおよびルール)を計算します。
    • KMNS_ITERATIONSは、k-Meansの最大反復数を定義します。最大反復数に到達するか、KMNS_CONV_TOLERANCEで指定された最小収束許容値を満たすまで、アルゴリズムは反復します。デフォルトの反復回数は20です。
    • KMNS_NUM_BINSは、k-Meansで生成される属性ヒストグラムでのビンの数を指定します。
    • CLUS_NUM_CLUSTERSは、クラスタリング・アルゴリズムによって生成されるリーフ・クラスタの最大数です。このアルゴリズムでは、データによって、より少ない数のクラスタが返される場合があります。通常、拡張k-Meansでは、個別のデータ・ポイントの数の方が多ければ、CLUS_NUM_CLUSTERSで指定された数に正確に一致する数のクラスタが生成されます。

    CREATE_MODEL2プロシージャでは、次のパラメータを使用します。

    • MODEL_NAME: モデルに指定する一意のモデル名。モデル名の形式は、[schema_name.]model_nameです。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。ここでのモデル名はKM_SH_CLUS1です。
    • MINING_FUNCTION: 機械学習機能を指定します。このユースケースではクラスタリングの問題を解決するため、CLUSTERINGを選択します。
    • DATA_QUERY: モデルを構築するためのトレーニング・データを提供する問合せ。ここでの問合せは、SELECT * FROM CUSTOMERDATAです。
    • SET_LIST: SETTING_LISTを指定します。
    • CASE_ID_COLUMN_NAME: 構築データの一意のケース識別子列。このユースケースでは、case_idはCUST_IDです。複合キーがある場合は、モデルを作成する前に新しい属性を作成する必要があります。これには、列の値を連結したり、一意の識別子を値の個別の組合せにマップすることが含まれる場合があります。CASE_IDは、再現可能な結果を支援し、個々の顧客のスコアをスコアリング・データ表などの他のデータと結合します。

    ノート:

    指定されていないパラメータまたは設定は、システムによって決定されるか、デフォルト値が使用されます。

評価

診断メトリックを表示し、品質チェックを実行してモデルを評価します。

ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せれば、モデルのパフォーマンスを測定するのに十分な場合もあります。ただし、平均絶対誤差(MAE)、二乗平均平方根誤差(RMSE)、混同行列、リフト統計、コスト行列などのテスト・メトリックを計算して、モデルを評価できます。相関ルールの場合、様々なルールを調査して、それらによって項目の依存関係(前件の項目セットが後件を暗に示す)または項目間の想定外の関係について新しいインサイトが明らかになるかどうかを確認できます。

ディクショナリ・ビューおよびモデル・ビュー

モデルおよびビュー・モデル設定に関する情報を取得するには、データ・ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せることができます。モデル・ディテール・ビューの特定のビューには、モデルの評価に役立つモデル統計が表示されます。

次の表に、Oracle Machine Learningのデータ・ディクショナリ・ビューを示します。ビューのデータベース管理者(DBA)およびUSERバージョンも使用可能です。

ビュー名 説明
ALL_MINING_MODELS アクセス可能なすべての機械学習モデルに関する情報を示します
ALL_MINING_MODEL_ATTRIBUTES アクセス可能なすべての機械学習モデルの属性に関する情報を示します
ALL_MINING_MODEL_SETTINGS アクセス可能なすべての機械学習モデルの構成設定に関する情報を示します
ALL_MINING_MODEL_VIEWS アクセス可能なすべての機械学習モデルのモデル・ビューに関する情報を示します
ALL_MINING_MODEL_XFORMS アクセス可能なすべての機械学習モデルに埋め込まれたユーザー指定の変換を示します。

モデル・ディテール・ビューはアルゴリズムに固有です。モデル・ディテール・ビューを表示することで、作成したモデルに関する詳細なインサイトを取得できます。モデル・ディテール・ビューの名前はDM$xxで始まります(xxはビュー接頭辞に相当します)。「モデル・ディテール・ビュー」を参照してください。

次のステップを使用すると、様々なディクショナリ・ビューおよびモデル・ディテール・ビューを表示できます。

  1. 次の文を実行して、USER_MINING_MODEL_SETTINGSの設定を表示します。
    %script
    SELECT SETTING_NAME, SETTING_VALUE
    FROM USER_MINING_MODEL_SETTINGS
    WHERE MODEL_NAME = 'KM_SH_CLUS1'
    ORDER BY SETTING_NAME;
    SETTING_NAME                   SETTING_VALUE             
    ALGO_NAME                      ALGO_KMEANS               
    CLUS_NUM_CLUSTERS              1                         
    KMNS_CONV_TOLERANCE            .001                      
    KMNS_DETAILS                   KMNS_DETAILS_ALL          
    KMNS_DISTANCE                  KMNS_EUCLIDEAN            
    KMNS_ITERATIONS                3                         
    KMNS_MIN_PCT_ATTR_SUPPORT      .1                        
    KMNS_NUM_BINS                  10                        
    KMNS_RANDOM_SEED               0                         
    KMNS_SPLIT_CRITERION           KMNS_VARIANCE             
    ODMS_DETAILS                   ODMS_ENABLE               
    ODMS_MISSING_VALUE_TREATMENT   ODMS_MISSING_VALUE_AUTO   
    ODMS_SAMPLING                  ODMS_SAMPLING_DISABLE     
    PREP_AUTO                      ON                        
    
    
    
    14 rows selected. 
    
    
    ---------------------------
    
  2. 次の文を実行して、USER_MINING_MODEL_ATTRIBUTESビューの属性情報を表示します。
    %script
    SELECT ATTRIBUTE_NAME, ATTRIBUTE_TYPE
    FROM USER_MINING_MODEL_ATTRIBUTES
    WHERE MODEL_NAME = 'KM_SH_CLUS1'
    ORDER BY ATTRIBUTE_NAME;
    
    ATTRIBUTE_NAME        ATTRIBUTE_TYPE   
    CUST_CREDIT_LIMIT     NUMERICAL        
    CUST_GENDER           CATEGORICAL      
    CUST_INCOME_LEVEL     CATEGORICAL      
    CUST_MARITAL_STATUS   CATEGORICAL      
    CUST_YEAR_OF_BIRTH    NUMERICAL        
    HOUSEHOLD_SIZE        CATEGORICAL      
    YRS_RESIDENCE         NUMERICAL        
    Y_BOX_GAMES           NUMERICAL        
    
    
    8 rows selected. 
    ---------------------------
  3. 次の文を実行して、USER_MINING_MODEL_VIEWSの様々なビューに関する情報を表示します。
    %script
    SELECT VIEW_NAME, VIEW_TYPE FROM USER_MINING_MODEL_VIEWS
    WHERE MODEL_NAME='KM_SH_CLUS1'
    ORDER BY VIEW_NAME;
    
    VIEW_NAME          VIEW_TYPE                                  
    DM$VAKM_SH_CLUS1   Clustering Attribute Statistics            
    DM$VCKM_SH_CLUS1   k-Means Scoring Centroids                  
    DM$VDKM_SH_CLUS1   Clustering Description                     
    DM$VGKM_SH_CLUS1   Global Name-Value Pairs                    
    DM$VHKM_SH_CLUS1   Clustering Histograms                      
    DM$VNKM_SH_CLUS1   Normalization and Missing Value Handling   
    DM$VRKM_SH_CLUS1   Clustering Rules                           
    DM$VSKM_SH_CLUS1   Computed Settings                          
    DM$VWKM_SH_CLUS1   Model Build Alerts                         
    
    
    9 rows selected. 
    
    
    ---------------------------
  4. ここでは、Clustering Descriptionモデル・ディテール・ビューを表示します。
    SELECT CLUSTER_ID CLU_ID, RECORD_COUNT REC_CNT, PARENT,
           TREE_LEVEL, ROUND(TO_NUMBER(DISPERSION),3) DISPERSION
    FROM   DM$VDKM_SH_CLUS1
    ORDER BY CLUSTER_ID;
    
    CLU_ID   REC_CNT   PARENT   TREE_LEVEL   DISPERSION   
           1      4500                     1        6.731 
    
    ---------------------------
  5. リーフ・クラスタIDを表示するには、次の問合せを実行します。

    Oracleでは、階層クラスタリングがサポートされています。階層クラスタリングでは、類似した特性を持つデータ・ポイントがグループ化されます。クラスタ階層はツリー構造として表されます。リーフ・クラスタは、アルゴリズムによって生成される最終クラスタです。階層内で上位にあるクラスタは中間クラスタです。

    SELECT CLUSTER_ID
    FROM   DM$VDKM_SH_CLUS1
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL
    ORDER BY CLUSTER_ID;
    
    CLUSTER_ID   
               1 
    ---------------------------

    問合せを詳しく見てみます。

    LEFT_CHILD_ID IS NULL: 階層ツリーの左側のリーフ・ノードを出力します

    RIGHT_CHILD_ID IS NULL: 階層ツリーの右側のリーフ・ノードを出力します

  6. リーフ・クラスタIDの分散の詳細またはクラスタの説明を表示します。
    分散とはクラスタ品質の指標であり、計算的には二乗誤差の合計です。これは、クラスタ・モデルの品質も示します。
    %script
    SELECT CLUSTER_ID CLU_ID, RECORD_COUNT REC_CNT, PARENT, 
           TREE_LEVEL, ROUND(TO_NUMBER(DISPERSION),3) DISPERSION
    FROM   DM$VDKM_SH_CLUS1
    WHERE CLUSTER_ID IN (SELECT CLUSTER_ID
                         FROM   DM$VDKM_SH_CLUS1
                         WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL)
    ORDER BY CLUSTER_ID;
    
    CLU_ID   REC_CNT   PARENT   TREE_LEVEL   DISPERSION   
           1      4500                     1        6.731 
    
    ---------------------------
  7. データのK (クラスタの数)の最適値を決定するには、エルボー手法を使用してデータを視覚化します。
    エルボー手法はリーフ・クラスタを使用して行われます。クラスタ分析では、エルボー手法はデータ・セット内のクラスタ数の決定に使用されるヒューリスティックです。この手法では、クラスタ数の相関関係として変動(分散)をプロットし、使用するクラスタの数としてカーブの肘を選択します。
    %sql
    SELECT 1 ID, AVG(DISPERSION) DISPERSION_MEAN
    FROM   DM$VDKM_SH_CLUS1 
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL
    UNION
    SELECT 2 ID, AVG(DISPERSION) DISPERSION_MEAN
    FROM   DM$VDKM_SH_CLUS2
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL
    UNION
    SELECT 3 ID, AVG(DISPERSION) DISPERSION_MEAN
    FROM   DM$VDKM_SH_CLUS3
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL
    UNION
    SELECT 4 ID, AVG(DISPERSION) DISPERSION_MEAN
    FROM   DM$VDKM_SH_CLUS4
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL
    UNION
    SELECT 5 ID, AVG(DISPERSION) DISPERSION_MEAN
    FROM   DM$VDKM_SH_CLUS5
    WHERE LEFT_CHILD_ID IS NULL AND RIGHT_CHILD_ID IS NULL;
    k値のグラフエルボー手法からの最適なk値

    結果のグラフから、3以降の曲線が平坦に(ID 3以降の分散値が平坦に)なります。つまり、Kの最適値(データを切り分ける必要があるクラスタの最適な数)は3です。

    ノート:

    Oracle SQL Developerでは、グラフを表示する視覚補助は適用できません。分散スコアの計算のみできます。
  8. KM_SH_CLUS3モデルの属性の詳細を表示するには、次の文を実行します。
    属性の詳細ビューには、モデルの平均、中央値、モードなどの統計が表示されます。
    %script
    SELECT CLUSTER_ID, ATTRIBUTE_NAME, ATTRIBUTE_SUBNAME, MEAN, VARIANCE, MODE_VALUE
    FROM  DM$VAKM_SH_CLUS3;
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   MEAN                  VARIANCE             MODE_VALUE             
               1 CUST_CREDIT_LIMIT                         7924.222222222223     15914238.670321768                          
               1 CUST_YEAR_OF_BIRTH                        1964.6244444444444    187.1267639722414                           
               1 YRS_RESIDENCE                             4.021999999999995     3.617430984663253                           
               1 Y_BOX_GAMES                               0.31244444444444447   0.2148706626163839                          
               1 CUST_GENDER                                                                          M                      
               1 CUST_INCOME_LEVEL                                                                    J: 190,000 - 249,999   
               1 CUST_MARITAL_STATUS                                                                  Married                
               1 HOUSEHOLD_SIZE                                                                       3                      
               2 CUST_CREDIT_LIMIT                         7833.002645502645     15543554.858080933                          
               2 CUST_YEAR_OF_BIRTH                        1957.631283068783     121.54941469457282                          
               2 YRS_RESIDENCE                             4.8611111111111045    2.7838791487484835                          
               2 Y_BOX_GAMES                               0.0                   0.0                                         
               2 CUST_GENDER                                                                          M                      
               2 CUST_INCOME_LEVEL                                                                    J: 190,000 - 249,999   
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   MEAN                 VARIANCE              MODE_VALUE             
               2 CUST_MARITAL_STATUS                                                                  Married                
               2 HOUSEHOLD_SIZE                                                                       3                      
               3 CUST_CREDIT_LIMIT                         8111.111111111114    16632730.696798513                           
               3 CUST_YEAR_OF_BIRTH                        1978.9518970189702   15.976667585319932                           
               3 YRS_RESIDENCE                             2.3028455284552827   0.9272054568003305                           
               3 Y_BOX_GAMES                               0.9525745257452575   0.04520692664553768                          
               3 CUST_GENDER                                                                          M                      
               3 CUST_INCOME_LEVEL                                                                    J: 190,000 - 249,999   
               3 CUST_MARITAL_STATUS                                                                  NeverM                 
               3 HOUSEHOLD_SIZE                                                                       1                      
               4 CUST_CREDIT_LIMIT                         3126.6094420600857   2978559.2320826976                           
               4 CUST_YEAR_OF_BIRTH                        1978.4978540772531   22.143006137800537                           
               4 YRS_RESIDENCE                             2.270386266094421    0.8944759795099003                           
               4 Y_BOX_GAMES                               0.8819742489270386   0.10431953481932726                          
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   MEAN                 VARIANCE              MODE_VALUE             
               4 CUST_GENDER                                                                          F                      
               4 CUST_INCOME_LEVEL                                                                    B: 30,000 - 49,999     
               4 CUST_MARITAL_STATUS                                                                  NeverM                 
               4 HOUSEHOLD_SIZE                                                                       1                      
               5 CUST_CREDIT_LIMIT                         10410.891089108914   6172923.883072166                            
               5 CUST_YEAR_OF_BIRTH                        1979.1613861386138   13.01158975164117                            
               5 YRS_RESIDENCE                             2.3178217821782146   0.9424967372852242                           
               5 Y_BOX_GAMES                               0.9851485148514851   0.01464541895220246                          
               5 CUST_GENDER                                                                          M                      
               5 CUST_INCOME_LEVEL                                                                    J: 190,000 - 249,999   
               5 CUST_MARITAL_STATUS                                                                  NeverM                 
               5 HOUSEHOLD_SIZE                                                                       1                      
    
    
    40 rows selected.

    クラスタID 5はY_BOX_GAMESユーザー数の平均が最も高くCUST_CREDIT_LIMITが最も高いことに注目してください。

  9. ここでは、モデルKM_SH_CLUS3について、各リーフ・クラスタの特定の属性を持つヒストグラムの詳細を表示します。このユースケースでは、Y_BOX_GAMESおよびCUST_INCOME_LEVEL属性のヒストグラムの詳細を表示します。このステップでは、リーフ・クラスタID 5および属性Y_BOX_GAMESが選択されます。
    %sql
     
    SELECT CLUSTER_ID, ATTRIBUTE_NAME, ATTRIBUTE_SUBNAME,
           BIN_ID, LOWER_BIN_BOUNDARY, UPPER_BIN_BOUNDARY, ATTRIBUTE_VALUE, COUNT
    FROM DM$VHKM_SH_CLUS3
    WHERE CLUSTER_ID = 5 AND ATTRIBUTE_NAME = 'Y_BOX_GAMES'
    ORDER BY BIN_ID;
    OML Notebooksで、棒グラフ・アイコンをクリックし、設定を展開します。BIN_ID「キー」に、COUNTを「値」にドラッグします。
    Y_BOX_GAMES属性を持つKM_SH_CLUS3モデルのクラスタID 5のヒストグラム

    このヒストグラムから、クラスタID 5がY_BOX_GAMESユーザーの数を示すビンにグループ化されていることがわかります。ビン9は、Y_BOX_GAMESユーザーの数が最も多くなっています。

  10. 同様に、クラスタID 5について、CUST_INCOME_LEVEL属性のヒストグラムの詳細を表示します。
    %sql
     
    SELECT CLUSTER_ID, ATTRIBUTE_NAME, ATTRIBUTE_SUBNAME,
           BIN_ID, LOWER_BIN_BOUNDARY, UPPER_BIN_BOUNDARY, ATTRIBUTE_VALUE, COUNT
    FROM DM$VHKM_SH_CLUS3
    WHERE CLUSTER_ID = 5 AND ATTRIBUTE_NAME = 'CUST_INCOME_LEVEL'
    ORDER BY BIN_ID;
    OML Notebooksで、棒グラフ・アイコンをクリックし、設定を展開します。BIN_IDおよびATTRIBUTE_VALUE「キー」に、COUNTを「値」にドラッグします。xAxisオプションで、「ローテーション」をクリックします。
    CUST_INCOME_LEVEL属性を持つリーフ・クラスタID 5のKM_SH_CLUS3モデルのヒストグラム

    このヒストグラムでは、クラスタID 5はCUST_INCOME_LEVELの顧客の数を示すビンにグループ化され、最も多い顧客数が年間190,000 - 249,999の給与パッケージを手に入れていることを示しています。

  11. ここでは、リーフ・クラスタ(2、4および5)のルールの詳細を表示し、サポートおよび信頼度レベルを確認します。
    支持度および信頼度は、クラスタリング・ルールとケースとの関係を説明するメトリックです。支持度は、ルールに該当するケースの割合です。信頼度は、このルールによって説明されるケースが実際にクラスタに割り当てられる確率です。
    %script
     
    SELECT CLUSTER_ID, ATTRIBUTE_NAME, ATTRIBUTE_SUBNAME, OPERATOR,
           NUMERIC_VALUE, ATTRIBUTE_VALUE, SUPPORT, ROUND(CONFIDENCE,3) CONFIDENCE
    FROM DM$VRKM_SH_CLUS3
    WHERE cluster_id IN (SELECT cluster_id
                         FROM DM$VDKM_SH_CLUS3
                         WHERE LEFT_CHILD_ID is NULL and RIGHT_CHILD_ID is NULL)
    ORDER BY CLUSTER_ID, ATTRIBUTE_NAME, ATTRIBUTE_SUBNAME, OPERATOR, NUMERIC_VALUE, ATTRIBUTE_VALUE;
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE   ATTRIBUTE_VALUE        SUPPORT   CONFIDENCE   
               2 CUST_CREDIT_LIMIT                         <=         15000.0                                     3024            0 
               2 CUST_CREDIT_LIMIT                         >=         1500.0                                      3024            0 
               2 CUST_GENDER                               IN                         F                           3024        0.002 
               2 CUST_GENDER                               IN                         M                           3024        0.002 
               2 CUST_INCOME_LEVEL                         IN                         B: 30,000 - 49,999          2750            0 
               2 CUST_INCOME_LEVEL                         IN                         E: 90,000 - 109,999         2750            0 
               2 CUST_INCOME_LEVEL                         IN                         F: 110,000 - 129,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         G: 130,000 - 149,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         H: 150,000 - 169,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         I: 170,000 - 189,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         J: 190,000 - 249,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         K: 250,000 - 299,999        2750            0 
               2 CUST_INCOME_LEVEL                         IN                         L: 300,000 and above        2750            0 
               2 CUST_MARITAL_STATUS                       IN                         Divorc.                     2720        0.014 
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE        ATTRIBUTE_VALUE   SUPPORT   CONFIDENCE   
               2 CUST_MARITAL_STATUS                       IN                              Married                2720        0.014 
               2 CUST_MARITAL_STATUS                       IN                              NeverM                 2720        0.014 
               2 CUST_YEAR_OF_BIRTH                        <=         1977.888888888889                           2854        0.041 
               2 CUST_YEAR_OF_BIRTH                        >          1937.3333333333333                          2854        0.041 
               2 HOUSEHOLD_SIZE                            IN                              2                      2699        0.016 
               2 HOUSEHOLD_SIZE                            IN                              3                      2699        0.016 
               2 HOUSEHOLD_SIZE                            IN                              9+                     2699        0.016 
               2 YRS_RESIDENCE                             <=         7.777777777777778                           2804        0.019 
               2 YRS_RESIDENCE                             >          1.5555555555555556                          2804        0.019 
               2 Y_BOX_GAMES                               <=         0.1111111111111111                          3024        0.056 
               2 Y_BOX_GAMES                               >=         0.0                                         3024        0.056 
               4 CUST_CREDIT_LIMIT                         <=         7500.0                                       466        0.128 
               4 CUST_CREDIT_LIMIT                         >=         1500.0                                       466        0.128 
               4 CUST_GENDER                               IN                              F                       466        0.023 
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE        ATTRIBUTE_VALUE        SUPPORT   CONFIDENCE   
               4 CUST_GENDER                               IN                              M                            466        0.023 
               4 CUST_INCOME_LEVEL                         IN                              A: Below 30,000              466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              B: 30,000 - 49,999           466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              C: 50,000 - 69,999           466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              D: 70,000 - 89,999           466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              E: 90,000 - 109,999          466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              F: 110,000 - 129,999         466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              G: 130,000 - 149,999         466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              H: 150,000 - 169,999         466        0.079 
               4 CUST_INCOME_LEVEL                         IN                              I: 170,000 - 189,999         466        0.079 
               4 CUST_MARITAL_STATUS                       IN                              Married                      413        0.043 
               4 CUST_MARITAL_STATUS                       IN                              NeverM                       413        0.043 
               4 CUST_YEAR_OF_BIRTH                        <=         1986.0                                            451        0.103 
               4 CUST_YEAR_OF_BIRTH                        >          1969.7777777777778                                451        0.103 
    
    CLUSTER_ID   ATTRIBUTE_NAME      ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE       ATTRIBUTE_VALUE        SUPPORT   CONFIDENCE   
               4 HOUSEHOLD_SIZE                          IN                             1                            418        0.043 
               4 HOUSEHOLD_SIZE                          IN                             2                            418        0.043 
               4 HOUSEHOLD_SIZE                          IN                             3                            418        0.043 
               4 HOUSEHOLD_SIZE                          IN                             9+                           418        0.043 
               4 YRS_RESIDENCE                           <=         4.666666666666667                                464        0.086 
               4 YRS_RESIDENCE                           >=         0.0                                              464        0.086 
               4 Y_BOX_GAMES                             <=         1.0                                              466        0.083 
               4 Y_BOX_GAMES                             >=         0.0                                              466        0.083 
               5 CUST_CREDIT_LIMIT                       <=         15000.0                                         1010        0.056 
               5 CUST_CREDIT_LIMIT                       >          6000.0                                          1010        0.056 
               5 CUST_GENDER                             IN                             F                           1010        0.002 
               5 CUST_GENDER                             IN                             M                           1010        0.002 
               5 CUST_INCOME_LEVEL                       IN                             F: 110,000 - 129,999         906        0.024 
               5 CUST_INCOME_LEVEL                       IN                             G: 130,000 - 149,999         906        0.024 
    
    CLUSTER_ID   ATTRIBUTE_NAME        ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE        ATTRIBUTE_VALUE        SUPPORT   CONFIDENCE   
               5 CUST_INCOME_LEVEL                         IN                              I: 170,000 - 189,999         906        0.024 
               5 CUST_INCOME_LEVEL                         IN                              J: 190,000 - 249,999         906        0.024 
               5 CUST_INCOME_LEVEL                         IN                              K: 250,000 - 299,999         906        0.024 
               5 CUST_INCOME_LEVEL                         IN                              L: 300,000 and above         906        0.024 
               5 CUST_MARITAL_STATUS                       IN                              Married                      944        0.046 
               5 CUST_MARITAL_STATUS                       IN                              NeverM                       944        0.046 
               5 CUST_YEAR_OF_BIRTH                        <=         1986.0                                           1003         0.12 
               5 CUST_YEAR_OF_BIRTH                        >          1969.7777777777778                               1003         0.12 
               5 HOUSEHOLD_SIZE                            IN                              1                            859        0.036 
               5 HOUSEHOLD_SIZE                            IN                              2                            859        0.036 
               5 HOUSEHOLD_SIZE                            IN                              3                            859        0.036 
               5 YRS_RESIDENCE                             <=         4.666666666666667                                 993        0.079 
               5 YRS_RESIDENCE                             >=         0.0                                               993        0.079 
               5 Y_BOX_GAMES                               <=         1.0                                               995        0.136 
    
    CLUSTER_ID   ATTRIBUTE_NAME   ATTRIBUTE_SUBNAME   OPERATOR   NUMERIC_VALUE        ATTRIBUTE_VALUE   SUPPORT   CONFIDENCE   
               5 Y_BOX_GAMES                          >          0.8888888888888888                           995        0.136 
    
    
    71 rows selected. 
    
    ---------------------------
  12. 各クラスタのサイズを表示するには、次の文を実行します。

    OML Notebooksでは、棒グラフまたは円グラフ・アイコンをクリックして、棒グラフまたは円グラフを表示することもできます。

    %sql
    SELECT CLUSTER_ID(KM_SH_CLUS3 USING *) AS CLUS, COUNT(*) AS CNT
    FROM CUSTOMERDATA
    GROUP BY CLUSTER_ID(KM_SH_CLUS3 USING *)
    ORDER BY CNT DESC;
    
    CLUS   CNT    
         2   3024 
         5   1010 
         4    466 
    ---------------------------

スコア

スコアリングでは、モデルをターゲット・データに適用します。CLUSTER_PROBABILITY関数を使用してクラスタを予測します。クラスタリングの場合、"スコアリング"では、各レコードを一定の確率でクラスタに割り当てます。ただし、各クラスタに属するレコードの確率を取得することもできます。

  1. 次のステップでは、クラスタ5に属する上位10顧客の確率をスコアリングしています。
    %script
     
    SELECT CUST_ID,
           ROUND(CLUSTER_PROBABILITY(KM_SH_CLUS3, 5 USING *),3)
           PROB
    FROM CUSTOMERDATA
    WHERE rownum < 10
    ORDER BY PROB DESC;
    
    CUST_ID   PROB    
       102308   0.539 
       101232   0.502 
       101610   0.374 
       102828   0.303 
       100134   0.302 
       103948   0.297 
       100696    0.25 
       103791   0.141 
       100804   0.104 
    
    
    9 rows selected. 
    
    ---------------------------
  2. 特定のCUST_ID (顧客)のクラスタIDをスコアリングするには、このユースケースの場合は、新しいゲーム製品を販売するために、Y_BOX_GAMESをすでに購入している、クレジット限度額が高い顧客をターゲットにする必要があります。前の段階で、クラスタ5は、Y_BOX_GAMESをすでに購入している顧客が最も多く、平均CUST_CREDIT_LIMITが10410であることが判明しています。したがって、ターゲット・グループはクラスタID 5です。特定のCUST_ID (102308)をスコアリングし、確率スコアを表示するには、次の問合せを実行します。
    %sql
    SELECT CLUSTER_ID(KM_SH_CLUS3 USING *) AS CLUSTER_ID, round (CLUSTER_PROBABILITY (KM_SH_CLUS3 USING *),3) AS PROB
      FROM CUSTOMERDATA
    where cust_id = 102308;
    
    CLUSTER_ID   PROB    
               5   0.539 
    ---------------------------

    問合せを詳しく見てみます。

    • CLUSTER_ID(KM_SH_CLUS3 USING *) AS CLUSTER_ID: KM_SH_CLUS3モデルのCLUSTER_IDを指定します。

    • round(CLUSTER_PROBABILITY(KM_SH_CLUS3 USING *),2) AS PROB: KM_SH_CLUS3モデルを使用してクラスタ確率を指定します。ROUND (n,integer)は、nを小数点以下integer桁に丸めたCLUSTER_PROBABILITYの結果を返します。ここでは、4桁です。

  3. また、次の問合せを実行して、各クラスタ(5、3、2など)に属するレコードの確率を取得できます。
    %script
    select CLUSTER_PROBABILITY(KM_SH_CLUS3,
          5 USING *) from CUSTOMERDATA;
    
    CLUSTER_PROBABILITY(KM_SH_CLUS3,5USING*)   
    0.30701266050607                           
    0.3064062868515786                         
    0.2862730847381108                         
    0.2868527181838429                         
    0.3721982825972361                         
    0.2816026555211009                         
    0.30936576857241027                        
    0.3051489029060863                         
    0.1915573544647028                         
    0.25158448263351973                        
    0.37204422449011026                        
    0.3064062868515786                         
    0.35693390244389295                        
    0.1902596096427133 
    ...     
結論として、母集団を様々なクラスタに切り分けことに成功し、クラスタ5にユースケースのターゲット母集団があると判断しました。新しいゲーム製品を販売するために、クラスタ5の顧客を問題なくターゲット設定できます。ステップ1から顧客IDを選択できます。WHERE句を削除することで、ターゲット顧客の完全なリストを表示することもできます。