分類のユースケース・シナリオ

あなたは、いくつかの製品を販売する小売チェーン企業で働いています。マーケティング資料のターゲットをより的確に絞るには、ホーム・シアター・パッケージを購入する見込みのある顧客を識別する必要があります。これを解決するために、ランダム・フォレスト・アルゴリズムを使用して顧客を識別しています。

関連コンテンツ

トピック リンク
OML4SQL GitHubの例 分類 - ランダム・フォレスト
CREATE_MODEL2プロシージャ CREATE_MODEL2プロシージャ
一般的なモデル設定 DBMS_DATA_MINING - モデル設定
ランダム・フォレストの設定 DBMS_DATA_MINING - アルゴリズムの設定: ランダム・フォレスト
データ・ディクショナリ設定 Oracle Machine Learningのデータ・ディクショナリ・ビュー
ランダム・フォレスト - モデル・ディテール・ビュー ランダム・フォレストのモデル・ディテール・ビュー
分類について 分類とは
ランダム・フォレスト(RF)について ランダム・フォレストについて

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;
    Customers表
  3. 次の文を実行して、データ・セット内の行のCOUNTを検索します。
    SELECT 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 TABLE CUSTOMERDATA AS
       SELECT a.CUST_ID,
             a.CUST_INCOME_LEVEL, a.CUST_CREDIT_LIMIT,
              b.HOUSEHOLD_SIZE, b.OCCUPATION, b.HOME_THEATER_PACKAGE
       FROM SH.CUSTOMERS a, SH.SUPPLEMENTARY_DEMOGRAPHICS b
       WHERE a.CUST_ID = b.CUST_ID;
     
    
    Table 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を手動で置き換えることもできます。

  12. HOME_THEATER_PACKAGEに反応した顧客の所得レベルを知るには、次の文を実行します。
    SELECT COUNT(CUST_ID) AS NUM_CUSTOMERS, CUST_INCOME_LEVEL, HOME_THEATER_PACKAGE
    FROM   CUSTOMERDATA
    GROUP BY CUST_INCOME_LEVEL, HOME_THEATER_PACKAGE;
    
    
    NUM_CUSTOMERS   CUST_INCOME_LEVEL      HOME_THEATER_PACKAGE   
                214 K: 250,000 - 299,999                        0 
                315 L: 300,000 and above                        1 
                114 E: 90,000 - 109,999                         0 
                 27 A: Below 30,000                             0 
                 61 A: Below 30,000                             1 
                206 F: 110,000 - 129,999                        1 
                446 J: 190,000 - 249,999                        0 
                196 E: 90,000 - 109,999                         1 
                 90 B: 30,000 - 49,999                          0 
                 99 C: 50,000 - 69,999                          1 
                319 I: 170,000 - 189,999                        1 
                165 I: 170,000 - 189,999                        0 
                179 K: 250,000 - 299,999                        1 
                142 H: 150,000 - 169,999                        0 
    
    NUM_CUSTOMERS   CUST_INCOME_LEVEL      HOME_THEATER_PACKAGE   
                163 F: 110,000 - 129,999                        0 
                 83 D: 70,000 - 89,999                          1 
                 50 D: 70,000 - 89,999                          0 
                328 L: 300,000 and above                        0 
                519 J: 190,000 - 249,999                        1 
                189 G: 130,000 - 149,999                        1 
                150 G: 130,000 - 149,999                        0 
                132 B: 30,000 - 49,999                          1 
                 72 C: 50,000 - 69,999                          0 
                241 H: 150,000 - 169,999                        1 
    
    
    24 rows selected. 
    ---------------------------

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

モデルの構築

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

分類などの教師あり学習の場合は、モデルを作成する前にデータをトレーニング・データとテスト・データに分割します。データ・セット全体を使用してモデルを構築することはできますが、使用可能な新しいデータ・セットがないかぎり、モデルの検証は困難です。したがって、モデルを評価し、同じデータに対するモデルのパフォーマンスを正確に査定するには、通常、データをトレーニング・データとテスト・データに分割(分離)します。トレーニング・データ・セットを使用してモデルをトレーニングした後、テスト・データ・セットを使用して予測問合せを実行し、モデルの精度をテストします。テスト・データ・セットには、予測する属性の既知の値がすでに含まれています。したがって、モデルの予測が正しいかどうかを簡単に判断できます。

アルゴリズムの選択

モデルを構築する前に、適切なアルゴリズムを選択します。次のアルゴリズムのいずれかを選択して、分類の問題を解決できます。

  • デシジョン・ツリー
  • 明示的セマンティック分析(ESM)
  • 一般化線形モデル(GLM)
  • Naive Bayes
  • ランダム・フォレスト
  • サポート・ベクター・マシン(SVM)
  • XGBoost

前述のアルゴリズムから、ESMはどちらかといえば、自然言語処理(NLP)およびテキスト・マイニングに関するものです。ESMは、このユースケースおよびデータには適用されません。GLMなどの比較的単純な線形モデルを選択した場合、予測精度はランダム・フォレスト・アルゴリズムによってさらに向上させることができます。ランダム・フォレストは、毎回再サンプリングされるデータのサブセットについて複数のデシジョン・ツリーを構築するアンサンブル手法(バギング)です。これにより、1つのデシジョン・ツリーに対するオーバーフィッティングが回避されます。ランダム・フォレスト・モデルは、線形モデルよりも精度が高いことが知られている、広く使用されているアンサンブル手法です。したがって、このユースケースではランダム・フォレストを選択します。

このユース・ケースの場合、トレーニング・データとテスト・データとしてデータを60対40に分割します。トレーニング・データを使用してモデルを構築し、モデルが構築されたら、そのモデルを使用してテスト・データをスコアリングします。

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

  1. 60対40に分割してトレーニング・データとテスト・データを作成するには、次の文を実行します。
    CREATE OR REPLACE VIEW TRAINING_DATA AS SELECT * FROM CUSTOMERDATA SAMPLE (60) SEED (1);
    --DBMS_OUTPUT.PUT_LINE ('Created TRAINING_DATA');
    CREATE OR REPLACE VIEW TEST_DATA AS SELECT * FROM CUSTOMERDATA MINUS SELECT * FROM TRAINING_DATA;
    --DBMS_OUTPUT.PUT_LINE ('Created TEST_DATA');
     
    
    View TRAINING_DATA created.
    ---------------------------
    View TEST_DATA created.
  2. training_dataビューのデータを表示するには、次の文を実行します。
    SELECT * FROM TRAINING_DATA;
    training_dataビュー
  3. test_dataビューのデータを表示するには、次の文を実行します。
    SELECT* FROM TEST_DATA;
    TEST_DATAビュー
  4. HOME_THEATER_PACKAGE (ターゲット)所有者の分布を表示するには、次のスクリプトを実行します。
    %script
    select HOME_THEATER_PACKAGE, count(1)
    from training_data
    group by HOME_THEATER_PACKAGE;
    
    HOME_THEATER_PACKAGE   COUNT(1)   
                         1       1506 
                         0       1208 
    
    ---------------------------
  5. CREATE_MODEL2プロシージャを使用してモデルを構築します。最初に、モデル設定またはハイパーパラメータを格納する変数を宣言します。次のスクリプトを実行します。

    他の分類アルゴリズムを使用したモデルの構築

    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('MODEL_DT');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlist DBMS_DATA_MINING.SETTING_LIST;
         
    BEGIN
        v_setlist('PREP_AUTO') := 'ON';
        v_setlist('ALGO_NAME') := 'ALGO_DECISION_TREE';
        v_setlist('RFOR_NUM_TREES') := '25';
         
        DBMS_DATA_MINING.CREATE_MODEL2(
          MODEL_NAME          =>  'MODEL_DT',
          MINING_FUNCTION     => 'CLASSIFICATION',
          DATA_QUERY          =>  'SELECT * FROM TRAINING_DATA',
          SET_LIST            =>  v_setlist,
          CASE_ID_COLUMN_NAME =>  'CUST_ID',
          TARGET_COLUMN_NAME  =>  'HOME_THEATER_PACKAGE');
    END;
    %script
     
    BEGIN DBMS_DATA_MINING.DROP_MODEL('MODEL_RF');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    DECLARE
        v_setlist DBMS_DATA_MINING.SETTING_LIST;
         
    BEGIN
        v_setlist('PREP_AUTO') := 'ON';
        v_setlist('ALGO_NAME') := 'ALGO_RANDOM_FOREST';
        v_setlist('RFOR_NUM_TREES') := '25';
         
        DBMS_DATA_MINING.CREATE_MODEL2(
          MODEL_NAME          =>  'MODEL_RF',
          MINING_FUNCTION     => 'CLASSIFICATION',
          DATA_QUERY          =>  'SELECT * FROM TRAINING_DATA',
          SET_LIST            =>  v_setlist,
          CASE_ID_COLUMN_NAME =>  'CUST_ID',
          TARGET_COLUMN_NAME  =>  'HOME_THEATER_PACKAGE');
    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は、アルゴリズム名を指定します。ランダム・フォレストをアルゴリズムとして使用しているため、ALGO_RANDOM_FORESTを設定します。
    • PREP_AUTOは、自動データ準備に使用する設定です。ここでは、自動データ準備を有効にします。設定の値はONです。
    • RFOR_NUM_TREESは、フォレスト内のツリーの数です。ここでの値は25です。ランダム・フォレストは、同じトレーニング・セット全体ではなく、データの個別のサンプリングされたサブセットで複数のツリーをトレーニングすることで、オーバーフィッティングの問題を解決します。選択するツリーが多いほど、精度が高くなります。ただし、ツリー数が多いほど計算負荷は高くなり、モデルの構築時間が長くなることに注意してください。ここでは、時間コストとモデルの精度との間でトレードオフを行う必要があります。ツリー数 = 25を選択すると、適度に短い時間でモデルを構築し、十分に正確なモデルを獲得できます。

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

    • MODEL_NAME: モデルに指定する一意のモデル名。モデル名の形式は、[schema_name.]model_nameです。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。ここでのモデル名はMODEL_RFです

    • MINING_FUNCTION: 機械学習機能を指定します。このユースケースでは分類の問題であるため、CLASSIFICATIONを選択します。

    • DATA_QUERY: モデルを構築するためのトレーニング・データを提供する問合せ。ここでの問合せは、SELECT * FROM TRAINING_DATAです。

    • SET_LIST: SETTING_LISTを指定します。
    • CASE_ID_COLUMN_NAME: 構築データの一意のケース識別子列。このユースケースでは、case_idはCUST_IDです。複合キーがある場合は、モデルを作成する前に新しい属性を作成する必要があります。CASE_IDは、再現可能な結果を支援し、個々の顧客のスコアをスコアリング・データ表などの他のデータと結合します。

    ノート:

    OMLでは、システムで決定される値またはデフォルト値が未指定のパラメータまたは設定に対して使用されます。

評価

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

ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せれば、モデルのパフォーマンスを測定するのに十分な場合もあります。ただし、平均絶対誤差(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='MODEL_RF'
      ORDER BY SETTING_NAME;
    
    SETTING_NAME                   SETTING_VALUE             
    ALGO_NAME                      ALGO_RANDOM_FOREST        
    CLAS_MAX_SUP_BINS              32                        
    CLAS_WEIGHTS_BALANCED          OFF                       
    ODMS_DETAILS                   ODMS_ENABLE               
    ODMS_MISSING_VALUE_TREATMENT   ODMS_MISSING_VALUE_AUTO   
    ODMS_RANDOM_SEED               0                         
    ODMS_SAMPLING                  ODMS_SAMPLING_DISABLE     
    PREP_AUTO                      ON                        
    RFOR_NUM_TREES                 25                        
    RFOR_SAMPLING_RATIO            .5                        
    TREE_IMPURITY_METRIC           TREE_IMPURITY_GINI        
    TREE_TERM_MAX_DEPTH            16                        
    TREE_TERM_MINPCT_NODE          .05                       
    TREE_TERM_MINPCT_SPLIT         .1                        
    
    SETTING_NAME             SETTING_VALUE   
    TREE_TERM_MINREC_NODE    10              
    TREE_TERM_MINREC_SPLIT   20              
    
    
    16 rows selected. 
    ---------------------------
  2. 次の文を実行して、USER_MINING_MODEL_ATTRIBUTESビューの属性情報を表示します。
    %script
    SELECT ATTRIBUTE_NAME, ATTRIBUTE_TYPE 
    FROM USER_MINING_MODEL_ATTRIBUTES 
    WHERE MODEL_NAME = 'MODEL_RF' 
    ORDER BY ATTRIBUTE_NAME;
    
    ATTRIBUTE_NAME         ATTRIBUTE_TYPE   
    CUST_CREDIT_LIMIT      NUMERICAL        
    HOME_THEATER_PACKAGE   CATEGORICAL      
    HOUSEHOLD_SIZE         CATEGORICAL      
    OCCUPATION             CATEGORICAL      
    
    ---------------------------
  3. 次の文を実行して、USER_MINING_MODEL_VIEWSの様々なモデル・ディテール・ビューを表示します。
    %script
    SELECT VIEW_NAME, VIEW_TYPE
      FROM USER_MINING_MODEL_VIEWS
      WHERE MODEL_NAME='MODEL_RF'
      ORDER BY VIEW_NAME;
    
    VIEW_NAME       VIEW_TYPE                 
    DM$VAMODEL_RF   Variable Importance       
    DM$VCMODEL_RF   Scoring Cost Matrix       
    DM$VGMODEL_RF   Global Name-Value Pairs   
    DM$VSMODEL_RF   Computed Settings         
    DM$VTMODEL_RF   Classification Targets    
    DM$VWMODEL_RF   Model Build Alerts        
    
    
    6 rows selected. 
    ---------------------------
  4. ここで、分類ターゲットのビューを表示します。このビューは、分類モデルのターゲット(HOME_THEATER_PACKAGE)分布を示します。
    %script
    SELECT* from DM$VTMODEL_RF;
    
    PARTITION_NAME   TARGET_VALUE   TARGET_COUNT   TARGET_WEIGHT   
                                  0           1178                 
                                  1           1549                 
    
    ---------------------------

    このビューからの分布値により、トレーニング・データから取得した以前のターゲット分布が検証されます。値の違いは最小限です。

関連トピック

モデルのテスト

このユースケースでは、既知のターゲット値を持つテスト・データについてリフトおよび混同行列を計算し、予測値を既知の値と比較することによって分類モデルを評価します。

これらの既知の値をモデルがどれくらい正確に予測するかを評価するために、テスト・メトリックが使用されます。モデルの性能が高くビジネス要件を満たす場合は、新しいデータにそのモデルを適用して将来の予測に役立てることができます。これらの行列は、モデルを比較して、評価基準を満たす1つのモデルに到達するのに役立ちます。

リフトは、ランダムに生成された予測と比較して、分類モデルの予測がどの程度信頼できるかを計算したものです。リフトは、モデルによる正確なポジティブ分類の割合対テスト・データでの実際のポジティブ分類の割合という、2つの割合の比率として考えることができます。

混同マトリックスは、モデルによる予測をテスト・データでの実際の分類と比較した場合の、正確な予測と不正確な予測の数を表したものです。この行列はn×nの行列(nはクラスの数)です。

  1. 見込みがある確率と見込みがない確率で各行の予測を格納する結果表を作成します。次のスクリプトを実行します。
    %script
     
    BEGIN EXECUTE IMMEDIATE 'DROP TABLE APPLY_RESULT PURGE';
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
     
    CREATE TABLE APPLY_RESULT AS
        SELECT cust_id, t.prediction, t.probability
        FROM TEST_DATA, TABLE(PREDICTION_SET(MODEL_RF USING *)) t;
     
    
    PL/SQL procedure successfully completed.
    ---------------------------
    Table APPLY_RESULT created.
    ---------------------------

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

    APPLY_RESULT: 予測の結果を格納する表です。

    TABLE(PREDICTION_SET(MODEL_RF USING *)): PREDICTION_SET問合せの結果が含まれる表です。PREDICTION_SET問合せでは、各行の確率が返されます。

  2. DBMS_DATA_MINING.APPLYおよびDBMS_DATA_MINING.COMPUTE_LIFTプロシージャを使用してリフトを計算します。
    %script
     
    BEGIN EXECUTE IMMEDIATE 'DROP TABLE APPLY_RESULT PURGE';
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
     
    BEGIN
      DBMS_DATA_MINING.APPLY('MODEL_RF','TEST_DATA','CUST_ID','APPLY_RESULT');
       
                                      
         
           DBMS_DATA_MINING.COMPUTE_LIFT (
              apply_result_table_name           => 'APPLY_RESULT',
              target_table_name                  => 'TEST_DATA',
              case_id_column_name               => 'CUST_ID',
              target_column_name                 => 'HOME_THEATER_PACKAGE',
              lift_table_name                       => 'LIFT_TABLE',
              positive_target_value           =>  to_char(1),
              score_column_name                  => 'PREDICTION',
              score_criterion_column_name    => 'PROBABILITY',
              num_quantiles                       =>  10,
              cost_matrix_table_name             =>  null,
              apply_result_schema_name         =>  null,
              target_schema_name                 =>  null,
              cost_matrix_schema_name           =>  null,
              score_criterion_type             =>  'PROBABILITY');
         
                                      
    END;
     
    
    PL/SQL procedure successfully completed.
    ---------------------------
    PL/SQL procedure successfully completed.

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

    • DBMS_DATA_MINING.APPLY: このプロシージャでは、ユーザーのスキーマに表を作成して結果を保持します。APPLYプロシージャでは、ターゲット列に予測(スコア)を生成します。

      APPLYプロシージャには、次のパラメータがあります。

      • model_name: [schema_name.]model_name形式のモデル名。スキーマを指定しない場合は、ユーザー独自のスキーマが使用されます。ここでのモデル名はMODEL_RFです。
      • data_table_name: スコアリング対象のデータが格納される表またはビューの名前。ここでは、TEST_DATAを使用しています。
      • case_id_column_name: ケース識別子列の名前。ケースIDはCUST_IDです。
      • result_table_name: 適用結果が格納される表の名前。ここでの結果表の名前はAPPLY_RESULTです。
    • DBMS_DATA_MINING.COMPUTE_LIFT: このプロシージャでは、リフトを計算してユーザーのスキーマに格納します。リフトを計算するには、ターゲット値のいずれかをポジティブ・クラスに指定する必要があります。
      COMPUTE_LIFTプロシージャには、次のパラメータがあります。
      • apply_result_table_name: 予測が格納される表。このユースケースの場合、APPLY_RESULTです。
      • target_table_name: テスト・データの既知のターゲット値が格納される表。このユースケースでは、ターゲット表名はTEST_DATAです。
      • case_id_column_name: 適用結果表のケースID列。ターゲット表のケースIDと一致する必要があります。ケースID列はCUST_IDです。
      • target_column_name: ターゲット表のターゲット列。テスト・データの既知のターゲット値が格納されます。このユースケースでは、ターゲットはHOME_THEATER_PACKAGEです。
      • lift_table_name: リフト統計が格納される表。この表は、このプロシージャによってユーザーのスキーマ内に作成されます。Type LIFT_TABLE.
      • positive_target_value: ポジティブ・クラス。リフトの計算対象となるクラスです。ターゲット列がNUMBERである場合は、TO_CHAR()演算子を使用して数値を文字列に変換します。
      • score_column_name: 適用結果表内の予測が格納される列。デフォルトの列名は'PREDICTION'で、APPLYプロシージャで作成されるデフォルト名です。
      • score_criterion_column_name: 適用結果表のスコアリング基準が格納される列。予測を決定する確率またはコストが格納されます。デフォルトでは、スコアリングは確率に基づくため、各ケースに対して最も確率の高いクラスが予測されます。スコアリングがコストに基づく場合は、最もコストの低いクラスが予測されます。score_criterion_typeパラメータは、スコアリングに確率またはコストのいずれを使用するのかを示します。デフォルトの列名は'PROBABILITY'で、APPLYプロシージャで作成されるデフォルト名です。
      • num_quantiles: リフト計算に使用されるクオンタイルの数。デフォルトは10です。
      • cost_matrix_table_name: (オプション)分類ミスに関連付けられたコストを定義する表。コスト行列表が指定され、score_criterion_typeパラメータが'COST'に設定されている場合、スコアリング基準としてこのコストが使用されます。
      • apply_result_schema_name: 適用結果表のスキーマ。NULLの場合、ユーザーのスキーマと想定されます。
      • target_schema_name: 既知のターゲットが格納される表のスキーマ。NULLの場合、ユーザーのスキーマと想定されます。
      • cost_matrix_schema_name: コスト行列表のスキーマ(指定されている場合)。NULLの場合、ユーザーのスキーマと想定されます。
      • score_criterion_type: スコアリング基準として確率またはコストのいずれを使用するか。確率またはコストは、score_criterion_column_nameパラメータで識別される列に渡されます。score_criterion_typeのデフォルト値は'PROBABILITY'です。スコアリング基準としてコストを使用するには、'COST'と指定します。score_criterion_type'COST'に設定されているにもかかわらずコスト行列が指定されていない場合に、モデルにスコアリング・コスト行列が関連付けられていると、この関連付けられているコストがスコアリングに使用されます。
  3. 累積増加を表示するには、次の文を実行します。

    累積増加は、クオンタイルのポジティブ・ターゲット(HOME_THEATER_PACKAGE)の総数に対するポジティブ・ターゲットの累計数の割合です。累積増加は、モデルのパフォーマンスを測定するための視覚補助として機能します。グラフは、曲線とベースラインで構成されます。曲線とベースライン間の領域が大きいほど、モデルの性能は高いです。

    %sql
    SELECT QUANTILE_NUMBER, GAIN_CUMULATIVE FROM LIFT_TABLE;
    HOME_THEATER_PACKAGEのポジティブ回答者が含まれる累積増加各クオンタイルの累積増加。
  4. 混同行列を計算するには、次の文を実行します。
    混同行列では予測結果を評価します。これにより、誤った予測による影響を理解して見積もることが簡単になります。この行列の各セルの数と割合を観察し、モデルが正確に予測した頻度を認識できます。
    %script
    
    DECLARE
       v_accuracy NUMBER;       
       BEGIN
            DBMS_DATA_MINING.COMPUTE_CONFUSION_MATRIX (
                       accuracy => v_accuracy,
                       apply_result_table_name => 'apply_result',
                       target_table_name => 'test_data',
                       case_id_column_name => 'cust_id',
                       target_column_name => 'HOME_THEATER_PACKAGE',
                       confusion_matrix_table_name => 'confusion_matrix',
                       score_column_name => 'PREDICTION',
                       score_criterion_column_name => 'PROBABILITY',
                       cost_matrix_table_name => null,
                       apply_result_schema_name => null,
                       target_schema_name => null,
                       cost_matrix_schema_name => null,
                       score_criterion_type => 'PROBABILITY');
            DBMS_OUTPUT.PUT_LINE('**** MODEL ACCURACY ****: ' || ROUND(v_accuracy,4));
          END;
          /
    **** MODEL ACCURACY ****: .696
    ---------------------------
    PL/SQL procedure successfully completed.
    ---------------------------
    

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

    v_accuracyは、このプロシージャでモデルの精度率を格納および出力するために宣言された変数です。

    COMPUTE_CONFUSION_MATRIXプロシージャには、次のパラメータがあります。

    • accuracy: 予測の全体的な精度(率)が含まれる出力パラメータ。ここでは、v_accuracyです。
    • apply_result_table_name: 予測が格納される表。このユースケースでは、APPLY_RESULTです。
    • target_table_name: テスト・データの既知のターゲット値が格納される表。このユースケースでは、TEST_DATAを使用します。
    • case_id_column_name: 適用結果表のケースID列。ターゲット表のケースIDと一致する必要があります。ここでは、CUST_IDです。
    • target_column_name: ターゲット表のターゲット列。テスト・データの既知のターゲット値が格納されます。このユースケースでは、ターゲット列はHOME_THEATER_PACKAGEです。
    • confusion_matrix_table_name: 混同行列が格納される表。この表は、このプロシージャによってユーザーのスキーマ内に作成されます。ここでは、confusion_matrixと設定します。
    • score_column_name: 適用結果表内の予測が格納される列。デフォルトの列名はPREDICTIONで、APPLYプロシージャで作成されるデフォルト名です。
    • score_criterion_column_name: 適用結果表のスコアリング基準が格納される列。予測を決定する確率またはコストが格納されます。デフォルトでは、スコアリングは確率に基づくため、各ケースに対して最も確率の高いクラスが予測されます。スコアリングがコストに基づく場合は、最もコストの低いクラスが予測されます。score_criterion_typeパラメータは、スコアリングに確率またはコストのいずれを使用するのかを示します。デフォルトの列名は'PROBABILITY'で、APPLYプロシージャで作成されるデフォルト名です。
    • cost_matrix_table_name: (オプション)分類ミスに関連付けられたコストを定義する表。コスト・マトリックス表があり、score_criterion_typeパラメータが'COSTS'に設定されている場合は、スコアリング基準としてこの表のコストが使用されます。それ以外の場合は、nullと設定します。
    • apply_result_schema_name: 適用結果表のスキーマ。NULLの場合、ユーザーのスキーマと想定されます。
    • target_schema_name: 既知のターゲットが格納される表のスキーマ。NULLの場合、ユーザーのスキーマと想定されます。
    • cost_matrix_schema_name: コスト行列表のスキーマ(指定されている場合)。NULLの場合、ユーザーのスキーマと想定されます。
    • score_criterion_type: スコアリング基準として確率またはコストのいずれを使用するか。確率またはコストは、 score_criterion_column_nameパラメータで識別される列に渡されます。score_criterion_typeのデフォルト値は'PROBABILITY'です。スコアリング基準としてコストを使用するには、'COST'と指定します。score_criterion_type'COST'に設定されているにもかかわらずコスト行列が指定されていない場合に、モデルにスコアリング・コスト行列が関連付けられていると、この関連付けられているコストがスコアリングに使用されます。

    DBMS_OUTPUT.PUT_LINE('**** MODEL ACCURACY ****: ' || ROUND(v_accuracy,4)): 小数点以下4桁に丸めたモデルの精度率を出力します。

  5. 予測値と実際の値の混同行列を確認するには、次の文を実行します。
    select * from confusion_matrix;
    
    ACTUAL_TARGET_VALUE   PREDICTED_TARGET_VALUE   VALUE   
                        0                        1     501 
                        0                        0     282 
                        1                        0      38 
                        1                        1     952 
    
    ---------------------------

    ここでの値列は分類を示します。この混同行列から、モデルは、このユースケースについて実際のポジティブ・クラスを予測(真陽性(TP)とも呼ばれる)したのが952回、不正確に予測(偽陰性(FN)とも呼ばれる)したのが38回です。モデルは、このユースケースについてネガティブ・クラスを正確に予測(真陰性(TN)とも呼ばれる)したのが282回、不正確に予測(偽陽性(FP)とも呼ばれる)したのが501回です。

精度率69%は、モデルがこのユースケースではかなり良好であることを示しています。

関連トピック

スコア

HOME_THEATER_PACKAGEの回答者に対する見込み客を予測する準備ができました。分類の問題の場合、PREDICTIONまたはPREDICTION_PROBABILITYを使用するか、分析構文を使用して予測に到達できます。

  1. ホーム・シアター・パッケージを購入する見込みが50%を超える顧客を表示するには、次の文を実行します。
    %sql
    SELECT CUST_ID, PREDICTION PRED, ROUND(PROBABILITY,3) PROB, ROUND(COST,2) COST
      FROM APPLY_RESULT WHERE PREDICTION = 1 AND PROBABILITY > 0.5
      ORDER BY PROBABILITY DESC;
    製品購入の見込みが50%を超える顧客の予測
  2. 複数のテスト・データ行に対してスコアリングできます。これはバッチ・スコアリングと呼ばれます。このステップでは、50%を超える確率とコスト行列を使用してHOME_THEATER_PACKAGEに反応する見込みがある、または見込みがない顧客を表示して選択できる方法を示します。
    %sql
     
    SELECT CUST_ID, PREDICTION, ROUND(PROBABILITY,2) PROB, ROUND(COST,2) COST
      FROM APPLY_RESULT WHERE PREDICTION = ${PREDICTION='1','1'|'0'}
      AND PROBABILITY > 0.5 ORDER BY PROBABILITY DESC;
    顧客がホーム・シアター・パッケージを購入する見込みがある、または見込みがないことを示す、50%を超える確率。
  3. HOME_THEATER_PACKAGEの回答者の確率を対話形式で表示するには、次の文を実行します。
    %sql
    SELECT A.*, B.*
      FROM APPLY_RESULT A, TEST_DATA B
      WHERE PREDICTION = ${PREDICTION='1','1'|'0'} AND A.CUST_ID = B.CUST_ID;
    対話形式の予測
  4. ホーム・シアター・パッケージを購入する見込みが50%を超える顧客を動的にスコアリングして選択するには、次の文を実行します。
    %sql
     
    SELECT *
    FROM (  SELECT CUST_ID, ROUND(PREDICTION_PROBABILITY(MODEL_RF, '1'  USING A.*),3) PROBABILITY
        FROM TEST_DATA A)
    WHERE PROBABILITY > 0.5;
    
    PREDICTION_PROBABILITYを使用すると、リアルタイムでスコアリングできます。
    動的スコアリング
  5. 単一レコードにモデルを適用(シングルトン・スコアリング)するには、次の文を実行します。
    %script
    SELECT ROUND(PREDICTION_PROBABILITY(MODEL_RF, '1' USING
                                        '3' AS HOUSEHOLD_SIZE,
                                         5 AS YRS_RESIDENCE,
                                         1 AS CUST_INCOME_LEVEL),3) PROBABILITY_HOME_THEATER_PACKAGE_RESPONDER
      FROM DUAL;

    これは、モデルを手動でテストし、モデルの動作を確認する場合に役立ちます。

    
    PROBABILITY_HOME_TEATER_PACKAGE_RESPONDER   
                                           0.65 
    
    ---------------------------
結論として、HOME_THEATER_PACKAGEを購入する見込みがある顧客の識別に成功しました。この予測は、ターゲット顧客に対してホーム・シアター・パッケージを販促し、オファーするのに役立ちます。