回帰のユースケース・シナリオ

ある不動産業者が、データ・サイエンティストであるあなたに、ボストンの住宅価格を評価するための支援を求めています。エージェントは、ターゲットを絞ったサービスをクライアントに提供するために、この情報を毎日必要とします。回帰の一般化線形モデル・アルゴリズムを使用して、ボストン地域の持ち家の中央値を推定します。

関連コンテンツ

トピック リンク
OML4SQL GitHubの例 回帰 - GLM
CREATE_MODEL2プロシージャ CREATE_MODEL2プロシージャ
一般的なモデル設定 DBMS_DATA_MINING - モデル設定
一般化線形モデルの設定 DBMS_DATA_MINING - アルゴリズムの設定: 一般化線形モデル
データ・ディクショナリ設定 Oracle Machine Learningのデータ・ディクショナリ・ビュー
一般化線形モデル - モデル・ディテール・ビュー 一般化線形モデルのモデル・ディテール・ビュー
回帰について 回帰とは
一般化線形モデル(GLM)について 一般化線形モデルとは

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

データのロード

データ・セットとその属性を詳細に調べます。データをデータベースにロードします。

このユースケースでは、データ・セットを変更して列を追加し、データ・セットをデータベースにアップロードします。Oracle Autonomous Databaseを使用している場合は、Oracle Cloud Infrastructure (OCI) Object Storageにファイルをアップロードし、サンプル表を作成し、OCI Object Storage上のファイルからサンプル表にデータをロードして、データを探索します。オンプレミス・データベースを使用している場合は、Oracle SQL Developerを使用してデータ・セットをインポートし、データを探索します。

データの調査

データ・セットには13個の属性があります。これは、元のデータ・セットから属性を1つ除外してカスタマイズされたデータ・セットです。次の表に、データ属性に関する情報を示します。

属性名 情報
CRIM 町ごとの1人当たりの犯罪率
ZN 25,000平方フィート超の区画化された宅地の比率。
INDUS 町ごとの非小売業の土地の比率
CHAS チャールズ川のダミー変数(地域が川と境界を接する場合は1、それ以外の場合は0)
NOX 窒素酸化物濃度(1000万分の1)
RM 住居当たりの平均部屋数
AGE 1940年より前に建設された所有者が居住しているユニットの比率
DIS ボストンの5つの雇用センターへの加重距離
RAD 放射状の幹線道路へのアクセスのしやすさの指標
TAX 10,000ドル当たりの全額固定資産税率
PTRATIO 町ごとの1教師当たりの生徒数
LSTAT %低い人口の状況
MEDV 1,000ドル台の持ち家の中央値

列の追加

このデータ・セットでは、データ・セット内の各レコードを一意に識別する行識別子がありません。新しいcase_id列を追加します。case_idは、再現可能な結果を支援し、個々の顧客のスコアをスコアリング・データ表などの他のデータと結合します。

House ID (HID)という列を追加します。HID値は、各レコードの識別および取得が簡単になるように主キーとして表に追加します。データベース内の各レコードはケースと呼ばれ、各ケースはcase_idで識別されます。ここでのHIDcase_idです。

HID列を追加するには:

  1. .csvファイルをスプレッドシートで開きます。
  2. 506および13の最初の行を削除します。これで、列名を持つ行が最初の行になります。
  3. データ・セットの左側に列を追加します。
  4. 列名としてHIDと入力します。
  5. HID列で、最初の行を識別する最初の値として1を入力します。
  6. スプレッドシート・セルに「+」アイコンが表示されます。「+」アイコンをレコードの最後まで右下にドラッグします。
  7. 右クリックして、「連続データ」を選択します。
  8. 列Bをデータ・セットから削除するには、列の上部を右クリックしてBというタイトルの列全体を選択し、「削除」を選択します。

データのインポート

データベースにデータをインポートするには、様々な方法があります。ここでは2つの方法を説明します。1つはSQL Developer(オンプレミス用)を使用し、もう1つはオブジェクト・ストレージ(クラウド用)を使用します。

データベース(オンプレミス)へのデータのインポート

データ・セットにアクセスするには、SQL Developerを使用して、変更したデータ・セットをデータベースにインポートします。

次のステップでは、オンプレミス・データベースにデータ・セットをインポートできます。
(オプション)ここでタスクの前提条件を入力します。
  1. システムでSQL Developerを起動します。
  2. 変更後の.csvファイルをインポートします。を参照してください。
  3. House ID (HID)を主キーとして設定します。この列は、各レコードを識別し、特定のレコードに関する情報の取得に役立ちます。HID列は、表またはビューを結合する場合に便利です。主キー制約を参照してください。
これで、SQL Developerで表を問い合せる準備ができました。
クラウドへのデータのインポート

クラウド・アカウントを使用している場合、データのインポート方法の1つとしてオブジェクト・ストレージを使用します。データ・セットをオブジェクト・ストレージにアップロードします。オブジェクト・ストレージURIは別のプロシージャで使用されます。

Oracle Databaseツールやオラクル社またはサードパーティ製のデータ統合ツールを使用して、Oracle Autonomous Database (Autonomous Data Warehouse [ADW]またはAutonomous Transaction Processing [ATP])にデータをロードできます。次のようにデータをロードできます。

  • クライアント・コンピュータのローカル・ファイルから、または
  • クラウドベースのオブジェクト・ストアに格納されているファイルから

データ・ファイルをオブジェクト・ストレージ・バケットにアップロードするステップに従います。

  1. クラウド・アカウントにログインします。
  2. 左側のハンバーガ・メニューをクリックし、メニューから「ストレージ」を選択します。
  3. 「オブジェクト・ストレージおよびアーカイブ・ストレージ」オプションから「バケット」を選択します。
  4. データをアップロードするコンパートメントを選択します。
  5. 「バケットの作成」をクリックします。
  6. バケットの名前を入力します。たとえば、Bucket1です。残りのフィールドはデフォルトのままにします。
  7. 「作成」をクリックします。
  8. 作成したバケットをクリックします。下にスクロールし、「オブジェクト」の下の「アップロード」をクリックします。
  9. 「オブジェクト名接頭辞」フィールドは空白のままにします。「ファイルを選択」をクリックして、アップロードするデータ・ファイルに移動するか、データ・ファイルをドラッグ・アンド・ドロップします。このユースケースでは、変更された.csvファイルを選択します。
  10. 「アップロード」をクリックします。データ・ファイルが「オブジェクト」の下に表示されます。
  11. データ・ファイルの右側にある省略記号をクリックしてメニューを表示します。「オブジェクト詳細の表示」をクリックします。
  12. URL PATH (URI)をテキスト・ファイルにコピーします。このURIは、DBMS_CLOUD.COPY_DATAプロシージャで使用されます。
このプロシージャでは、クラウド・アカウントにデータ・ファイルが格納されるオブジェクト・ストレージを作成します。
認証トークンの作成

認証トークンは、DBMS_CLOUD.CREATE_CREDENTIALプロシージャで必要です。クラウド・アカウントで認証トークンを生成できます。

  1. ADW Cloudアカウントにログインします。
  2. コンソールの右上隅の人間の形をしたアイコンの上にマウス・カーソルを置き、ドロップダウン・メニューから「ユーザー設定」をクリックします。
  3. コンソール左側にある「リソース」で認証トークンをクリックします。
  4. 「トークンの生成」をクリックします。ポップアップ・ダイアログが表示されます。
  5. 説明を入力します(オプション)。
  6. 「トークンの生成」をクリックします。
  7. 生成されたトークンをテキスト・ファイルにコピーします。トークンは表示されなくなります。
  8. 「閉じる」をクリックします。
オブジェクト・ストレージ資格証明の作成

オブジェクト・ストレージ資格証明は、DBMS_CLOUD.COPY_DATAプロシージャで使用されます。

  1. OML Notebooksページにログインして、ノートブックを作成します。ノートブックの作成を参照してください。
  2. 作成したばかりのノートブックを開きます。
  3. 次の問合せを入力してオブジェクト・ストレージ資格証明を作成します。
    %script
    begin
      DBMS_CLOUD.create_credential (
        credential_name => 'CRED',
        username => '<your cloud account username>',
        password => '<your Auth Token>'
      );
    end;
    /
    
    ---------------------------  PL/SQL procedure successfully completed.
        ---------------------------
    DBMS_CLOUD.CREATE_CREDENTIALプロシージャ
    問合せを詳しく見てみます。
    • credential_name: 格納する資格証明の名前。任意の名前を指定します。ここで、CREDは指定された名前です。
    • username: これは、クラウド・アカウントのユーザー名です。
    • password: 認証トークンの生成後にコピーした認証トークンのパスワードを入力します。
  4. 再生アイコンをクリックして、ノートブック内の問合せを実行します。資格証明はADWユーザー・スキーマに格納されます。
  5. 別のパラグラフで、次の問合せを実行してユーザー資格証明を確認します。
    SELECT* FROM USER_CREDENTIALS;

表の作成

BOSTON_HOUSINGという表を作成します。この表は、DBMS_CLOUD.COPY_DATAプロシージャでデータ・セットにアクセスするために使用されます。

作成したノートブックの新しい部分に次のコードを入力し、ノートブックを実行します。

%sql
CREATE table boston_housing
(
 HID NUMBER NOT NULL,
 CRIM NUMBER,
 ZN NUMBER,
 INDUS NUMBER,
 CHAS VARCHAR2(32),
 NOX NUMBER,
 RM NUMBER,
 AGE NUMBER,
 DIS NUMBER,
 RAD NUMBER,
 TAX NUMBER,
 PTRATIO NUMBER,
 LSTAT NUMBER,
 MEDV NUMBER
);

表へのデータのロード

オブジェクト・ストレージに格納されているデータ・セットをBOSTON_HOUSING表にロードします。

OML Notebooksに新しいパラグラフを追加して、次の文を入力します。
%script
BEGIN
 DBMS_CLOUD.COPY_DATA(
    table_name =>'BOSTON_HOUSING',
    credential_name =>'CRED',
    file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/filename.csv',
    format => json_object('type' value 'CSV', 'skipheaders' value 1)
 );
END;
文を詳しく見てみます。
  • table_name: ターゲット表の名前です。
  • credential_name: すでに作成した資格証明の名前です。
  • file_uri_list: ロードするソース・ファイルのカンマ区切りリストです。
  • format: ファイル・タイプがテキスト、ORC、ParquetまたはAvroのいずれであるかなど、ソース・ファイルの形式を記述するために指定できるオプションを定義します。

この例では、namespace-stringはOracle Cloud Infrastructureオブジェクト・ストレージ・ネームスペースで、bucketnameは前に作成したストレージ・バケット名(Bucket1など)で、filename.csvはストレージ・バケットにアップロードした変更済.csvファイル名です。

データの探索

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

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

  1. 次の問合せを実行して、BOSTON_HOUSING表のデータを表示します。
    SELECT * FROM BOSTON_HOUSING
    ORDER BY HID;
    BOSTON_HOUSING表のデータを表示します。
  2. 各列のデータ型を指定する表を作成したため、データ型はすでにわかっています。ただし、列のデータ型を表示するには、次のスクリプトを実行します。
    %script
    DESCRIBE BOSTON_HOUSING;
    
    
    Name    Null?    Type        
    ------- -------- ------------
    HID  NOT NULL NUMBER
    CRIM          NUMBER
    ZN            NUMBER
    INDUS         NUMBER
    CHAS          VARCHAR2(32)
    NOX           NUMBER
    RM            NUMBER
    AGE           NUMBER
    DIS           NUMBER
    RAD           NUMBER(38)
    TAX           NUMBER
    PTRATIO       NUMBER
    LSTAT         NUMBER
    MEDV          NUMBER
     
    ---------------------------
  3. データセットのCOUNTを検索して、存在する行数を確認します。
    SELECT COUNT (*) from BOSTON_HOUSING;
    
    COUNT(*)   
          506
    ---------------------------
  4. 欠損値(NULL値)があるかどうかを確認するには、次の問合せを実行します。
    SELECT COUNT(*) FROM BOSTON_HOUSING WHERE PTRATIO=NULL OR CHAS=NULL OR
     LSTAT=NULL OR TAX=NULL OR CRIM=NULL OR MEDV=NULL OR ZN=NULL OR NOX=NULL
     OR AGE=NULL OR INDUS=NULL OR DIS=NULL OR RAD=NULL OR PTRATIO=NULL OR RM=NULL;
    
    COUNT(*)   
          0
    ---------------------------

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

  5. カテゴリ列CHASの個別値とCHASの個別値ごとのレコード数をリストするには、次の問合せを実行します。
    %sql
    SELECT CHAS, COUNT(1)
    FROM BOSTON_HOUSING
    GROUP BY CHAS;
    
    CHAS   COUNT(1)   
    0             471 
    1              35 
    ---------------------------
  6. 平均、中央値、最小、最大および四分位範囲(IQR)を計算するために、unpivotedというビューを作成します。
    IQRは、最低から最高の順に並べられたときに、値の中間50% (ミッドスプレッドまたはHスプレッドとも呼ばれる)を示します。IQRを見つけるには、まずデータの下半分と上半分の中央値(中間値)を見つけます。これらの値は四分位1 (Q1)および四分位3 (Q3)です。IQRは、Q3とQ1の差異です。このアセスメントは、データの外れ値を見つけるのに役立つ場合があります。
    %sql
    create or replace view unpivoted as
    select *
      from (
           
    SELECT 'CRIM' COL, ROUND(MIN(CRIM),2) MIN_VAL, PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY CRIM) FIRST_QUANTILE, ROUND(AVG(CRIM),2) MEAN_VAL, ROUND(MEDIAN(CRIM),2) MEDIAN_VAL, PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY CRIM) THIRD_QUANTILE, ROUND(MAX(CRIM),2) MAX_VAL
    FROM BOSTON_HOUSING
    UNION
    SELECT 'AGE' COL, ROUND(MIN(AGE),2) MIN_VAL,  PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY AGE) FIRST_QUANTILE, ROUND(AVG(AGE),2) MEAN_VAL, ROUND(MEDIAN(AGE),2) MEDIAN_VAL, PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY AGE) THIRD_QUANTILE, ROUND(MAX(AGE),2) MAX_VAL
    FROM BOSTON_HOUSING
    UNION
    SELECT 'DIS' COL, ROUND(MIN(DIS),2) MIN_VAL,  PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY DIS) FIRST_QUANTILE, ROUND(AVG(DIS),2) MEAN_VAL, ROUND(MEDIAN(DIS),2) MEDIAN_VAL, PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY DIS) THIRD_QUANTILE, ROUND(MAX(DIS),2) MAX_VAL
    FROM BOSTON_HOUSING
      ) a
    unpivot
    (
      VALUE
        for stat in ("MIN_VAL", "FIRST_QUANTILE", "MEAN_VAL","MEDIAN_VAL", "THIRD_QUANTILE", "MAX_VAL")
    );
  7. 値を表示するには、次の問合せを実行して表をピボットします。
    %sql
    select *
      from unpivoted
    pivot(
      SUM(VALUE)
        for COL in ('CRIM', 'AGE','DIS')
    );
    
    
    STAT             'CRIM'      'AGE'    'DIS'      
    MEAN_VAL                3.61    68.57        3.8 
    THIRD_QUARTILE     3.6770825   94.075   5.188425 
    MAX_VAL                88.98      100      12.13 
    FIRST_QUARTILE      0.082045   45.025   2.100175 
    MEDIAN_VAL              0.26     77.5       3.21 
    MIN_VAL                 0.01      2.9       1.13 
    
    
    6 rows selected. 
    
    ---------------------------
これで、データの理解およびデータの準備ステージが完了します。OMLでは、自動データ準備(ADP)をサポートしています。ADPはモデル設定によって有効になります。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、モデルに埋め込まれます。このステップは、モデルの構築ステージで実行します。一般的に使用されるデータの準備方法には、ビニング、正規化、欠損値の処理があります。

モデルの構築

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

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

アルゴリズムの選択

モデルを構築する前に、適切なアルゴリズムを選択します。次のアルゴリズムのいずれかを選択して、回帰の問題を解決できます。
  • Extreme Gradient Boosting
  • 一般化線形モデル
  • ニューラル・ネットワーク
  • サポート・ベクター・マシン

データ・セットを理解する場合は、常に単純で簡単なベースライン・モデルから始めます。一般化線形モデル・アルゴリズムは、特徴とターゲット間の線形関係に適合するので単純で簡単に解釈できるため、適切な選択です。線形モデルの結果から新しいデータ・セットの最初の理解を得ることができます。

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

  1. トレーニング・データとテスト・データとしてデータを80対20に分割します。次の文を実行します。
    BEGIN
        EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW TRAINING_DATA AS SELECT * FROM BOSTON_HOUSING SAMPLE (80) SEED (1)';
        DBMS_OUTPUT.PUT_LINE ('Created TRAINING_DATA');
        EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW TEST_DATA AS SELECT * FROM BOSTON_HOUSING MINUS SELECT * FROM TRAINING_DATA';
        DBMS_OUTPUT.PUT_LINE ('Created TEST_DATA');
        
    END;
    データを分割した後、TRAINING_DATAおよびTEST_DATAの行数を表示します。トレーニング・セットとテスト・セットの行数をチェックすることで、トレーニング・データとテスト・データの比率を確認できます。
  2. TRAINING_DATAの行数を検索するには、次の文を実行します。
    select count(*) from TRAINING_DATA;
    COUNT(*)
    400
    ---------------------------
  3. TEST_DATAの行数を検索するには、次の文を実行します。
    select COUNT(*) from TEST_DATA;
    COUNT(*)
    106
    ---------------------------
  4. TRAINING_DATATEST_DATAの両方でサンプリングされていない(除外されている)行があるかどうかを確認するには、次の問合せを実行します。
    SELECT COUNT(1)
    FROM TRAINING_DATA train
    JOIN TEST_DATA test
    ON train.HID = test.HID
    COUNT(*)
    0
    ---------------------------
  5. CREATE_MODEL2プロシージャを使用してモデルを構築します。最初に、モデル設定またはハイパーパラメータを格納する変数を宣言します。次のスクリプトを実行します。
    %script
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
        BEGIN
        v_setlst('PREP_AUTO') := 'ON';
        v_setlst('ALGO_NAME') := 'ALGO_GENERALIZED_LINEAR_MODEL';
        v_setlst('GLMS_DIAGNOSTICS_TABLE_NAME') := 'GLMR_DIAG';
        v_setlst('GLMS_FTR_SELECTION') := 'GLMS_FTR_SELECTION_ENABLE';
        v_setlst('GLMS_FTR_GENERATION') := 'GLMS_FTR_GENERATION_ENABLE';
         
        DBMS_DATA_MINING.CREATE_MODEL2(
          MODEL_NAME          =>  'GLMR_REGR',
          MINING_FUNCTION     => 'REGRESSION'
          DATA_QUERY          =>  'SELECT * FROM TRAINING_DATA',
          SET_LIST            =>  v_setlst,
          CASE_ID_COLUMN_NAME =>  'HID',
          TARGET_COLUMN_NAME  =>  'MEDV');
    END;

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

    • v_setlstは、SETTING_LISTを格納する変数です。
    • SETTING_LISTは、モデルのモデル設定またはハイパーパラメータを定義します。
    • DBMS_DATA_MININGは、Oracle Machine Learningに使用されるPL/SQLパッケージです。これらの設定の詳細は、DBMS_DATA_MINING - モデル設定を参照してください。
    • ALGO_NAMEは、アルゴリズム名を指定します。一般化線形モデルをアルゴリズムとして使用しているため、ALGO_GENERALIZED_LINEAR_MODELを設定します。
    • PREP_AUTOは、自動データ準備に使用する設定です。ここでは、自動データ準備を有効にします。設定の値はONです。
    • GLMS_DIAGNOSTICS_TABLE_NAMEは、診断表の名前を設定に指定した場合に、行単位の統計を生成します。設定の値はGLMR_DIAGです。
    • GLMS_FTR_SELECTIONは、特徴の選択を示します。値GLMS_FTR_SELECTION_ENABLEは、特徴の選択が有効になっていることを示します。特徴の選択では、ターゲット属性の予測で最も重要な列を選択します。特徴の選択が選択されていない場合は、すべての列が分析対象とみなされ、正確な結果が得られない可能性があります。
    • GLMS_FTR_GENERATIONは、特徴生成を示します。値GLMS_FTR_GENERATION_ENABLEは、特徴生成が有効になっていることを示します。特徴生成では、分析に役立つ可能性がある既存の特徴から新しい特徴が生成されます。

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

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

    ノート:

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

評価

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

ディクショナリ・ビューおよびモデル・ディテール・ビューを問い合せれば、モデルのパフォーマンスを測定するのに十分な場合もあります。ただし、平均絶対誤差(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の設定を表示します。
    SELECT * FROM USER_MINING_MODEL_SETTINGS WHERE MODEL_NAME='GLMR_REGR';
    この文では、モデル名がGLMR_REGRであるUSER_MINING_MODEL_SETTINGSビューで使用可能なすべての列を選択します。
    user_mining_model_settings
  2. 次の文を実行して、前述の表のSETTING_NAME列とSETTING_VALUE列のみを表示します。
    SELECT SETTING_NAME, SETTING_VALUE FROM USER_MINING_MODEL_SETTINGS WHERE MODEL_NAME = 'GLMR_REGR' ORDER BY SETTING_NAME;
    user_mining_model_settings
  3. 次の文を実行して、USER_MINING_MODEL_ATTRIBUTESビューの属性情報を表示します。
    SELECT ATTRIBUTE_NAME, ATTRIBUTE_TYPE FROM USER_MINING_MODEL_ATTRIBUTES WHERE MODEL_NAME = 'GLMR_REGR' ORDER BY ATTRIBUTE_NAME;
    user_mining_model_attributes
  4. 次の文を実行して、USER_MINING_MODEL_VIEWSの様々なビューに関する情報を表示します。
    SELECT VIEW_NAME, VIEW_TYPE FROM USER_MINING_MODEL_VIEWS WHERE MODEL_NAME='GLMR_REGR' ORDER BY VIEW_NAME;
    user_mining_model_views
  5. 前述の表から、線形回帰についてグローバル詳細を問い合せます。一般化線形モデルのモデル・ディテール・ビューを参照してください。次の問合せを実行して、ビューのすべての列を表示します。
    SELECT * FROM DM$VGGLMR_REGR;
    グローバル詳細ビュー
  6. 前述の表から、最初の列PARTITION_NAMEを無視して問合せを絞り込み、残りの列を名前順に表示できます。次の文を実行します。
    SELECT NAME, NUMERIC_VALUE, STRING_VALUE FROM DM$VGGLMR_REGR ORDER BY NAME;
    モデルを比較する際、二乗平均平方根誤差(RMSE)値が低いモデルほど適切です。RMSEは、誤差を二乗して大きい誤差にさらに重みを付けます。RMSE値が低い場合、そのモデルはターゲットの予測に適していると言えます。
    グローバル詳細ビュー
  7. GLM回帰属性診断ビューを問い合せます。
    SELECT FEATURE_EXPRESSION, round(COEFFICIENT,6) COEFFICIENT, round(P_VALUE,4) P_VALUE,
    CASE
        when p_value < 0.001 THEN '***'
        when p_value < 0.01 THEN '**'
        when p_value < 0.05 THEN '*'
        when p_value < 0.1 THEN '.'
        else ' '
    END AS significance_statement
    FROM DM$VDGLMR_REGR ORDER BY FEATURE_EXPRESSION;
    ビューの列の詳細は、一般化線形モデルのモデル・ディテール・ビューを参照してください。
    文を詳しく見てみましょう。
    • round(COEFFICIENT,6) COEFFICIENT: 小数点以下6桁に丸めた係数を返します。
    • p_value: 帰無仮説を受け入れるか拒否するかを決定できるように、依存変数と独立変数との間の関係に関する情報を指定します。通常、p_valueが0.05未満の場合は、帰無仮説を拒否し、重要な係数値を持つ依存変数と独立変数との間に相関があることを受け入れることができます。
    属性診断ビュー
  8. ここでは、次の文を実行して、正規化および欠損値の処理ビューを問い合せます。ビューの列の詳細は、正規化および欠損値の処理のモデル・ディテール・ビューを参照してください。
    SELECT ATTRIBUTE_NAME, round(NUMERIC_MISSING_VALUE,2) NUMERIC_MISSING_VALUE FROM DM$VNGLMR_REGR
    ORDER BY ATTRIBUTE_NAME;
    問合せを詳しく見てみます。
    • ATTRIBUTE_NAME: データ・セットの列名を指定します。
    • round(NUMERIC_MISSING_VALUE,2)NUMERIC_MISSING_VALUE: データ・セット内の欠損値(NULL)の数値置換を指定します。ROUND (n,integer)は、小数点以下integer桁に丸めたNUMERIC_MISSING_VALUEの結果を返します。
    正規化および欠損値ビュー

    データに欠損値(NULL)がないため、結果を無視できます。

モデルのテスト

このユースケースでは、既知のターゲット値が含まれるテスト・データについて二乗平均平方根誤差(RMSE)および平均絶対誤差(MAE)を計算し、予測値を既知の値と比較することによって回帰モデルを評価します。

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

このユースケースでは、二乗平均平方根誤差(RMSE)および平均絶対誤差(MAE)の値を計算します。RMSEとMAEは、一般的な回帰統計です。RMSEは、予測モデルの見積り機能です。スコアは、各ケースの残差を平均して、モデルの誤差の単一インジケータを生成します。平均絶対誤差は、予測全体が実際の値にどの程度近いかを理解するのに役立ちます。スコアが小さいほど、予測が正確だったことを意味します。

次のステップでは、モデルの誤差メトリックを計算します。

  • RMSEおよびMAEを計算するには、次の文を実行します。
    %sql
    SELECT round(SQRT(AVG((A.PRED_MEDV - B.MEDV) * (A.PRED_MEDV - B.MEDV))),2) RMSE,
           round(AVG(ABS(A.PRED_MEDV - B.MEDV)),2) MAE
      FROM (SELECT HID, PREDICTION(GLMR_REGR using *) PRED_MEDV
              FROM TEST_DATA) A,
           TEST_DATA B
      WHERE A.HID = B.HID;

    この文は、予測問合せを使用してテスト・データから中央値をスコアリングしています。テスト・データからの予測値と実際の値を使用してRMSEおよびMAEが計算されます。

    RMSEとMAEの値
RMSEとMAEは、ターゲット変数と一致した単位で平均モデル予測誤差を伝達します。モデルを比較した際、値が小さいモデルほど適切です。RMSEは、誤差を二乗して大きい誤差にさらに重みを付けますが、MAE誤差は直線的に増加します。したがって、予測は偏りがなく、モデルは予測に適しています。

スコア

スコアリングでは、モデルをターゲット・データに適用します。PREDICTION問合せを使用して、テスト・データについてMEDV値を予測します。

次のステップでは、元のデータと比較してテスト・データをスコアリングします。

  • TEST_DATAからボストン地域の持ち家の中央値を予測し、予測されるMEDV値を結果の実際のMEDV値と比較します。
    SELECT HID, ROUND(PREDICTION(GLMR_REGR USING *), 1) AS 
    PREDICTED_MEDV, MEDV AS ACTUAL_MEDV FROM TEST_DATA ORDER BY HID;

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

    • HID: House IDです。
    • ROUND (n,integer): この場合は、ROUND (PREDICTION(GLMR_REGR USING *), 1)であり、小数点以下integer桁に丸めたPREDICTION(GLMR_REGR USING *)の結果を返します。ここでは、小数点以下1桁に丸められます。
    • PREDICTED_MEDV: 予測されるMEDV値です。
    • ACTUAL_MEDV: テスト・データのMEDV値です。
    予測値と実際の値
結論として、一般化線形モデル・アルゴリズムを使用してボストンの中間住宅価格を予測することに成功しました。