ブーストツリー モデルで分類を行う


このチュートリアルでは、ブーストツリー分類モデルを使用し、ユーザー属性データに基づいて個人の収入の範囲を予測する方法について説明します。このモデルは、値が 2 つのカテゴリのどちらに該当するか(この場合は、個人の年収が $50,000 を上回っているか下回っているか)を予測します。

このチュートリアルでは、bigquery-public-data.ml_datasets.census_adult_income データセットを使用します。このデータセットには、2000 年と 2010 年の米国居住者のユーザー属性と収入情報が含まれています。

目標

このチュートリアルでは、次のタスクの手順について説明します。

費用

このチュートリアルでは、Google Cloud の課金対象となるコンポーネントを使用します。これには次のコンポーネントが含まれます。

  • BigQuery
  • BigQuery ML

BigQuery の費用の詳細については、BigQuery の料金ページをご覧ください。

BigQuery ML の費用の詳細については、BigQuery ML の料金をご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、

    Enable the BigQuery API.

    Enable the API

    に移動します。

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. 「アクションを表示」> [データセットを作成] をクリックします。

    データセットを作成する。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。

      一般公開データセットは US マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

      データセットの作成ページ。

サンプルデータを準備する

このチュートリアルで作成するモデルは、次の特徴に基づいて、国勢調査の回答者の収入階層を予測します。

  • 年齢
  • 業務のタイプ
  • 配偶者の有無
  • 教育水準
  • 職業
  • 週あたりの労働時間

education 列がトレーニング データに含まれていないのは、education 列と education_num 列がどちらも、回答者の教育水準を異なる形式で表しているためです。

functional_weight 列から派生した新しい dataframe 列を作成して、データをトレーニング セット、評価セット、予測セットに分割します。データの 80% はモデルのトレーニングに使用され、残りの 20% は評価と予測に使用されます。

サンプルデータを準備するには、トレーニング データを格納するビューを作成します。このビューは、このチュートリアルの後半の CREATE MODEL ステートメントで使用されます。

サンプルデータを準備するクエリを実行します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [クエリエディタ] ペインで、次のクエリを実行します。

    CREATE OR REPLACE VIEW
    `bqml_tutorial.input_data` AS
    SELECT
    age,
    workclass,
    marital_status,
    education_num,
    occupation,
    hours_per_week,
    income_bracket,
    CASE
      WHEN MOD(functional_weight, 10) < 8 THEN 'training'
      WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
      WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
    END AS dataframe
    FROM
    `bigquery-public-data.ml_datasets.census_adult_income`;
  3. [エクスプローラ] ペインで bqml_tutorial データセットを開き、input_data ビューを見つけます。

  4. ビュー名をクリックして情報ペインを開きます。ビュースキーマが [スキーマ] タブに表示されます。

ブーストツリー モデルを作成する

国勢調査の回答者の所得階層を予測するブーストツリー モデルを作成し、国勢調査データでトレーニングします。クエリの完了には、約 30 分かかります。

次の手順でモデルを作成します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

    CREATE MODEL `bqml_tutorial.tree_model`
    OPTIONS(MODEL_TYPE='BOOSTED_TREE_CLASSIFIER',
            BOOSTER_TYPE = 'GBTREE',
            NUM_PARALLEL_TREE = 1,
            MAX_ITERATIONS = 50,
            TREE_METHOD = 'HIST',
            EARLY_STOP = FALSE,
            SUBSAMPLE = 0.85,
            INPUT_LABEL_COLS = ['income_bracket'])
    AS SELECT * EXCEPT(dataframe)
    FROM `bqml_tutorial.input_data`
    WHERE dataframe = 'training';

    クエリが完了すると、tree_model モデルが [エクスプローラ] ペインに表示されます。クエリは CREATE MODEL ステートメントを使用してモデルを作成するため、クエリの結果は表示されません。

モデルを評価する

次の手順でモデルを評価します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

      SELECT
        *
      FROM
        ML.EVALUATE (MODEL `bqml_tutorial.tree_model`,
          (
          SELECT
            *
          FROM
            `bqml_tutorial.input_data`
          WHERE
            dataframe = 'evaluation'
          )
        );

    結果は次のようになります。

    +---------------------+---------------------+---------------------+-------------------+---------------------+---------------------+
    | precision           | recall              | accuracy            | f1_score          | log_loss            | roc_auc             |
    +---------------------+---------------------+---------------------+-------------------+-------------------------------------------+
    | 0.67192429022082023 | 0.57880434782608692 | 0.83942963422194672 | 0.621897810218978 | 0.34405456040833338 | 0.88733566433566435 |
    +---------------------+---------------------+ --------------------+-------------------+---------------------+---------------------+
    

    評価指標、特に roc_auc スコア0.8 より大きいことで、モデルのパフォーマンスが良好なことが示されています。

    評価指標の詳細については、分類モデルをご覧ください。

モデルを使用して分類を予測する

次の手順でモデルを使用し、データを予測します。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタに次のクエリを貼り付け、[実行] をクリックします。

      SELECT
        *
      FROM
        ML.PREDICT (MODEL `bqml_tutorial.tree_model`,
          (
          SELECT
            *
          FROM
            `bqml_tutorial.input_data`
          WHERE
            dataframe = 'prediction'
          )
        );

    結果の最初の数列は次のようになります。

    +---------------------------+--------------------------------------+-------------------------------------+
    | predicted_income_bracket  | predicted_income_bracket_probs.label | predicted_income_bracket_probs.prob |
    +---------------------------+--------------------------------------+-------------------------------------+
    |  <=50K                    |  >50K                                | 0.05183430016040802                 |
    +---------------------------+--------------------------------------+-------------------------------------+
    |                           |  <50K                                | 0.94816571474075317                 |
    +---------------------------+--------------------------------------+-------------------------------------+
    |  <=50K                    |  >50K                                | 0.00365859130397439                 |
    +---------------------------+--------------------------------------+-------------------------------------+
    |                           |  <50K                                | 0.99634140729904175                 |
    +---------------------------+--------------------------------------+-------------------------------------+
    |  <=50K                    |  >50K                                | 0.037775970995426178                |
    +---------------------------+--------------------------------------+-------------------------------------+
    |                           |  <50K                                | 0.96222406625747681                 |
    +---------------------------+--------------------------------------+-------------------------------------+
    

    predicted_income_bracket には、モデルの予測値が含まれます。predicted_income_bracket_probs.label には、2 つのラベルが表示され、モデルがいずれかを選択する必要があります。predicted_income_bracket_probs.prob 列には、指定されたラベルが正しいラベルである確率が示されます。

    出力列の詳細については、分類モデルをご覧ください。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  • 作成したプロジェクトを削除する。
  • または、プロジェクトを保存して、データセットを削除する。

データセットを削除する

プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。

  1. 必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. ナビゲーションで、作成した bqml_tutorial データセットをクリックします。

  3. ウィンドウの右側にある [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

  4. [データセットの削除] ダイアログ ボックスでデータセットの名前(bqml_tutorial)を入力し、[削除] をクリックして確定します。

プロジェクトの削除

プロジェクトを削除するには:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ