国勢調査データに基づいた分類モデルの構築と使用

BigQuery ML は、ロジスティック回帰モデルタイプでの教師あり学習をサポートしています。2 つのカテゴリのどちらに値が分類されるかを予測するには 2 項ロジスティック回帰モデルタイプを使用し、複数のカテゴリのうちのどれに値が分類されるかを予測するには多項回帰モデルタイプを使用します。これらはデータを 2 つ以上のカテゴリに分類するため、分類問題と呼ばれます。

このチュートリアルでは、BigQuery ML の 2 項ロジスティック回帰モデルを使用して、米国国勢調査データセットの回答者の所得階層を予測します。このデータセットには、2000 年と 2010 年の米国居住者のユーザー属性と所得情報が含まれています。このデータには、就業状況、職種、教育レベル、所得の情報が含まれています。

目標

このチュートリアルでは、次のタスクを行います。

  • ロジスティック回帰モデルを作成する。
  • ロジスティック回帰モデルを評価する。
  • ロジスティック回帰モデルを使用して予測を行う。

料金

このチュートリアルでは、以下を含む Cloud Platform の有料コンポーネントを使用します。

  • BigQuery
  • BigQuery ML

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

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

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 詳しくは、課金を有効にする方法をご覧ください。

  4. 新しいプロジェクトでは、BigQuery が自動的に有効になります。 既存のプロジェクトで BigQuery を有効にするには、以下にアクセスします。 BigQuery API を有効にします。

    APIを有効にする

はじめに

機械学習の一般的な問題は、ラベルと呼ばれる 2 つのタイプのいずれかにデータを分類することです。たとえば、小売業者は特定の顧客が新しい製品を購入するかどうかを、その顧客に関する他の情報に基づいて予測したい場合があります。この場合、2 つのラベルは「購入する」と「購入しない」になります。データセットを構築する際にはこれらのラベルを表す列を 1 つ用意します。このような 2 項ロジスティック回帰モデルのトレーニングに使用できるデータとして、顧客の場所、以前の購入、報告された顧客の好みなどがあります。

このチュートリアルでは、BigQuery ML を使用して、米国国勢調査の回答者のユーザー属性に基づいて、その回答者の所得が 2 つの範囲のどちらに分類されるかを予測する 2 項ロジスティック回帰モデルを作成します。

ロジスティック回帰モデルの作成は、次の手順で行われます。

  • ステップ 1: モデルを格納するためのデータセットを作成する。
  • ステップ 2: データを確認する。
  • ステップ 3: トレーニング データを選択する。
    次に、census_adult_income テーブルに対してクエリを実行して、2 項ロジスティック回帰モデルのトレーニングに使用するデータを準備します。このステップでは、関連性のある特徴を特定し、その後のクエリで入力データとして使用するためにビューに保存します。
  • ステップ 4: ロジスティック回帰モデルを作成する。
    ステップ 4 では、CREATE MODEL ステートメントを使用してロジスティック回帰モデルを作成します。
  • ステップ 5: ML.EVALUATE 関数を使用してモデルを評価する。
    このステップでは、ML.EVALUATE 関数でモデルの性能に関する統計を取得します。
  • ステップ 6: ML.PREDICT 関数を使用して回答者の所得を予測する。
    最後に、ML.PREDICT 関数を使用して、特定の国勢調査回答者の所得階層を予測します。

ステップ 1: データセットを作成する

最初のステップとして、モデルを格納する BigQuery データセットを作成します。データセットを作成する手順は次のとおりです。

  1. GCP Console の BigQuery ウェブ UI に移動します。

    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。

  3. 右側の詳細パネルで、[データセットを作成] をクリックします。

    データセットを作成

  4. [データセットを作成] ページで、[データセット ID] に「census」と入力します。

  5. その他のデフォルト設定はすべてそのままにし、[データセットを作成] をクリックします。

ステップ 2: データを確認する

次に、データセットを確認して、ロジスティック回帰モデルのトレーニング データとして使用する列を特定します。データセットから行を返すには、標準 SQL クエリを使用できます。

次のクエリでは、米国国勢調査データセットから 100 行が返されます。

SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.census_adult_income`
LIMIT
  100;

クエリを実行する

データセットから行を返すクエリを実行するには:

  1. BigQuery ウェブ UI で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    SELECT
      *
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
    
  3. [実行] をクリックします。

  4. クエリが完了したら、クエリテキスト領域の下にある [結果] タブをクリックします。結果は次のようになります。

    ML.EVALUATE の出力

    クエリ結果から、census_adult_income テーブルの income_bracket 列には <=50K または >50K の 2 つの値のどちらかしかないことがわかります。また、census_adult_income テーブルの列 educationeducation_num は同じデータを異なる形式で表したものであることがわかります。functional_weight 列は、国勢調査機関が特定の行に対応すると考えている人数で、この列の値は、特定の行の income_bracket の値とは関連性がないと思われます。

ステップ 3: トレーニング データを選択する

次に、ロジスティック回帰モデルのトレーニングに使用するデータを選択します。このチュートリアルでは、次の属性に基づいて国勢調査回答者の所得を予測します。

  • 年齢
  • 業務のタイプ
  • 居住国
  • 婚姻状況
  • 教育水準
  • 職業
  • 人種
  • 週あたりの労働時間

次のクエリでは、トレーニング データをまとめるビューを作成します。このビューは、チュートリアルの後半で CREATE MODEL ステートメントで使われます。

CREATE OR REPLACE VIEW
  `census.input_view` AS
SELECT
  age,
  workclass,
  native_country,
  marital_status,
  education_num,
  occupation,
  race,
  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`

クエリの詳細

このクエリは、回答者の教育水準を表す education_num や、回答者が行う業務のタイプを表す workclass など、国勢調査回答者に関するデータを抽出します。このクエリでは、データが重複するカテゴリは除外しています。たとえば、census_adult_income テーブルの列 educationeducation_num は同じデータを異なる形式で表しているため、このクエリでは education 列を除外しています。dataframe 列では、除外された functional_weight 列を使用して、データソースの 80% にトレーニング用としてラベルを付け、残りのデータを評価用と予測用として予約しています。クエリでこれらの列を含むビューを作成し、後でそれを使用してトレーニングと予測を行えるようにします。

クエリを実行する

クエリを実行して、モデル用のトレーニング データをまとめるには、次の手順に従います。

  1. BigQuery ウェブ UI で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    CREATE OR REPLACE VIEW
      `census.input_view` AS
    SELECT
      age,
      workclass,
      native_country,
      marital_status,
      education_num,
      occupation,
      race,
      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. [実行] をクリックします。

  4. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。ビューがその下に表示されます。

  5. ビューをクリックします。ビューのスキーマが、クエリエディタの下の [スキーマ] タブに表示されます。

    クエリ結果

ステップ 4: ロジスティック回帰モデルを作成する

トレーニング データを確認したら、次のステップでは、そのデータを使用してロジスティック回帰モデルを作成します。

CREATE MODEL ステートメントを 'LOGISTIC_REG' オプション付きで使用することで、ロジスティック回帰モデルの作成とトレーニングが行えます。次のクエリでは、CREATE MODEL ステートメントを使用して、前のクエリで作成したビューで新しい 2 項ロジスティック回帰モデルをトレーニングしています。

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    input_label_cols=['income_bracket'],
  ) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'

クエリの詳細

CREATE MODEL ステートメントは、SELECT ステートメントのトレーニング データを使用してモデルをトレーニングします。

OPTIONSは、モデルタイプとトレーニング オプションを指定します。ここでは、LOGISTIC_REG オプションでロジスティック回帰モデルタイプを指定しています。2 項ロジスティック回帰モデルか多項ロジスティック回帰モデルかを指定する必要はありません。BigQuery ML はラベル列の一意の値の数に基づいてどちらをトレーニングするかを判断できます。

input_label_cols オプションは、SELECT ステートメントでラベル列として使用する列を指定します。ここでは、ラベル列は income_bracket であるため、モデルは他の行の値に基づいて、income_bracket の 2 つの値のどちらに分類される可能性が高いかを学習します。

'auto_class_weights=TRUE' オプションは、トレーニング データ内のクラスラベルのバランスをとります。デフォルトでは、トレーニング データは重み付けされません。トレーニング データ内のラベルが不均衡である場合、モデルは最も出現回数の多いラベルクラスをより重視して予測するように学習することがあります。この場合、データセット内の回答者の大多数は低い方の所得階層に属します。このため、低い方の所得階層を過度に重視して予測するモデルになる可能性があります。クラスの重みは、各クラスの頻度に反比例した重みを計算して、クラスラベルのバランスをとります。

SELECT ステートメントは、ステップ 2 で作成したビューに対してクエリを実行します。このビューには、モデルをトレーニングするための特徴データの列のみが含まれます。WHERE 句は input_view の行をフィルタして、トレーニング データフレームに属する行のみがトレーニング データに含まれるようにします。

CREATE MODEL クエリを実行する

ロジスティック回帰モデルを作成するクエリを実行するには、次の手順を行います。

  1. BigQuery ウェブ UI で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

CREATE OR REPLACE MODEL
  `census.census_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
    data_split_method='NO_SPLIT',
    input_label_cols=['income_bracket'],
    max_iterations=15) AS
SELECT
  *
FROM
  `census.input_view`
WHERE
  dataframe = 'training'
  1. [実行] をクリックします。

  2. BigQuery ウェブ UI の [リソース] セクションで、プロジェクト ID > [census] を展開し、[census_model] をクリックします。

  3. [スキーマ] タブをクリックします。モデルスキーマには、BigQuery ML がロジスティック回帰の実行に使用した属性がリストされます。スキーマは次のように表示されます。

    クラスタ スキーマ情報

ステップ 5: ML.EVALUATE 関数を使用してモデルを評価する

モデルを作成したら、ML.EVALUATE 関数を使用してモデルの性能を評価します。ML.EVALUATE 関数は、実際のデータに対する予測値を評価します。

モデルの評価に使用するクエリは次のとおりです。

SELECT
  *
FROM
  ML.EVALUATE (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'evaluation'
    )
  )

クエリの詳細

ML.EVALUATE 関数は、ステップ 1 でトレーニングされたモデルと、SELECT サブクエリによって返された評価データを取得します。この関数は、モデルに関する統計を単一行で返します。このクエリは、input_view のデータを評価データとして使用します。WHERE 句で、サブクエリに evaluation データフレームの行のみが含まれるように入力データをフィルタします。

ML.EVALUATE クエリを実行する

モデルを評価する ML.EVALUATE クエリを実行するには、次の手順を行います。

  1. BigQuery ウェブ UI で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_view`
        WHERE
          dataframe = 'evaluation'
        )
      )
    
  3. (省略可)処理を行うロケーションを設定するには、[展開] > [クエリの設定] をクリックします。[処理を行うロケーション] には US を選択します。処理を行うロケーションはデータセットのロケーションに基づいて自動的に検出されるため、この手順は省略できます。

    クエリの設定

  4. [実行] をクリックします。

  5. クエリが完了したら、クエリテキスト領域の下にある [結果] タブをクリックします。結果は次のようになります。

    ML.EVALUATE の出力

    線形回帰を使用しているため、結果には次の列が含まれます。

    • precision
    • recall
    • accuracy
    • f1_score
    • log_loss
    • roc_auc

    モデルの精度は、正確に予測された値と予測全体の比率を表します。精度が .80 の場合、予測の 80% が正しいことを意味します。

ステップ 6: ML.PREDICT 関数を使用して所得階層を予測する

特定の回答者が属する所得階層を特定するには、ML.PREDICT 関数を使用します。次のクエリは、prediction データフレーム内のすべての回答者の所得階層を予測します。

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )

クエリの詳細

ML.PREDICT 関数は、モデルと、「prediction」データフレームの行のみを含めるようにフィルタされた input_view のデータを使用して、結果を予測します。先頭の SELECT ステートメントで、ML.PREDICT 関数の出力を取得します。

ML.PREDICT クエリを実行する

ML.PREDICT クエリを実行するには、次の手順を行います。

  1. BigQuery ウェブ UI で、[クエリを新規作成] ボタンをクリックします。

  2. [クエリエディタ] テキスト領域に、次の標準 SQL クエリを入力します。

SELECT
  *
FROM
  ML.PREDICT (MODEL `census.census_model`,
    (
    SELECT
      *
    FROM
      `census.input_view`
    WHERE
      dataframe = 'prediction'
     )
  )
  1. [実行] をクリックします。

  2. クエリが完了したら、クエリテキスト領域の下にある [結果] タブをクリックします。結果は次のようになります。

    ML.PREDICT の結果

    predicted_income_bracketincome_bracket の予測値です。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

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

データセットの削除

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

  1. 必要に応じて、BigQuery ウェブ UI を開きます。

    BigQuery ウェブ UI に移動

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

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

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

プロジェクトの削除

プロジェクトを削除する手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...