データ サイエンティスト向けの BigQuery ML スタートガイド

は、

このチュートリアルでは、サイエンティストの方に BigQuery ML を紹介します。BigQuery ML を使用すると、BigQuery で SQL クエリを使用して機械学習モデルを作成して実行できます。このチュートリアルは、SQL のユーザーが簡単に機械学習を利用できるようにすることを目標としています。使い慣れたツールを使用してモデルを構築でき、データを移動する必要もないため、開発スピードを向上させることができます。

このチュートリアルでは、BigQuery 用の Google アナリティクス サンプル データセットを使用して、ウェブサイトの訪問者がトランザクションを完了するかどうかを予測するモデルを作成します。アナリティクス データセットのスキーマについては、Google アナリティクス ヘルプセンターで BigQuery Export スキーマをご覧ください。

目標

このチュートリアルでは、次のものを使用します。

  • BigQuery ML。CREATE MODEL ステートメントを使用して、2 項ロジスティック回帰モデルを作成します。
  • ML.EVALUATE 関数。ML モデルを評価します。
  • ML.PREDICT 関数。ML モデルを使用して予測を行います。

料金

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

  • Google BigQuery
  • BigQuery ML
  • Cloud Datalab

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

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

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

始める前に

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

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

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

    [リソースの管理] ページに移動

  3. プロジェクトに対して課金が有効になっていることを確認します。

    課金を有効にする方法について

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

    APIを有効にする

対象

これは、データ サイエンティスト向けの入門チュートリアルです。

データ サイエンティストは、BigQuery の標準 SQL と BigQuery ML を使用して次のことを行います。

  • データの探索、分析、可視化
  • 統計モデルで使用するデータセットのクリーンアップ
  • 統計モデルと ML モデルの作成
  • ML アルゴリズムとモデルの作成、トレーニング、評価、改善
  • BigQuery などのデータ ウェアハウスでのデータ探索

データ サイエンティストは次をはじめとしてさまざまなツールを使用します。

  • BigQuery コマンドライン ツール(標準 SQL を使用してクエリを実行)
  • RStudio や Matlab などの統計ソフトウェア
  • Cloud Datalab(Jupyter ノートブック)
  • Cloud ML Engine
  • Python や Java などのプログラミング言語
  • MLlib や TensorFlow などの ML ライブラリ
  • Cloud Datalab や Google データポータルなどの可視化ツール

このチュートリアルはデータ サイエンティストを対象としています。このため、ML のコンセプトの詳細な解説は行っていません。BigQuery ウェブ UI を使用するデータ アナリスト向けの詳細なチュートリアルについては、データ アナリスト向けの BigQuery ML スタートガイドをご覧ください。

ここに示したコンセプトの詳細については、以下をご覧ください。

ステップ 1: Cloud Datalab を設定する

このチュートリアルでは、Cloud Shell を使用して Cloud Datalab を設定します。Cloud Datalab は、BigQuery ML と BigQuery の操作に使用する、Jupyter ベースのノートブック環境を提供します。

Cloud Datalab を設定する前に、Compute Engine API と Cloud Source Repositories API を有効にする必要があります。これらの API を有効にする方法については、サービスの有効化と無効化をご覧ください。

Compute Engine VM 上に Cloud Datalab を設定するには:

  1. GCP Console に移動します。

    GCP Console

  2. [Cloud Shell をアクティブにする] をクリックします。

    Cloud Shell を有効にするアイコン

  3. Cloud Shell のウィンドウで次のコマンドを入力して、gcloud ツールが Cloud SDK のデフォルト ゾーンとして us-central1-a を使用するように構成します。このゾーンに Cloud Datalab のインスタンスが作成されます。

    gcloud config set compute/zone us-central1-a
    
  4. 次のコマンドを入力して、Cloud Datalab コンテナの実行に使用する Compute Engine VM を mltutorial という名前で作成します。また、このコマンドを実行すると、VM との SSH 接続が確立し、リモートの Cloud Datalab ウェブ インターフェースと localhost のポート 8081 がマッピングされます。プロンプトが表示されたら、デフォルトの Compute Engine ゾーンに対応する番号を入力します。

    datalab create mltutorial
    

    The connection to Datalab is now open and will remain until this command is killed というメッセージが表示されたら、インスタンスに接続されています。SSH 接続が確立すると、コマンドライン インターフェースからの出力は停止する場合があります。

  5. Cloud Shell ウィンドウで、ウェブでプレビュー アイコン ウェブ プレビュー アイコン をクリックします。

  6. [ポートの変更] を選択します。

  7. [プレビュー ポートの変更] ダイアログで、「8081」と入力してから [変更してプレビュー] をクリックします。Cloud Datalab が新しいタブで開きます。

    gcloud compute ssh --quiet --zone "us-central1-a" --ssh-flag="-N" --ssh-flag="-L" --ssh-flag="localhost:8081:localhost:8080" "${USER}@mltutorial"
    
  8. [Notebook] をクリックして、新しいノートブックを作成します。ノートブックが新しいタブで開きます。

  9. タイトルバーにある [Untitled Notebook] をクリックして、ノートブックの名前を変更します。

  10. [Rename Notebook] ダイアログで「BigQuery ML tutorial」と入力し、[OK] をクリックします。

  11. 最初のコードセルに次のコマンドを入力します。このコマンドにより、BigQuery Python クライアント ライブラリを最新バージョンに更新します。

    !pip install --upgrade google-cloud-bigquery
    
  12. [Run] > [Run from this cell] の順にクリックします。コードブロックの下にクエリの結果が表示されます。次のメッセージが表示されたら、インストールは完了です。

    Successfully installed ...

  13. このコードは多くの出力を生成します。出力を非表示にするには、セルメニューをクリックし、[Collapse] を選択してセルを折りたたみます。

    セル メニュー

  14. [Add Code] をクリックして、新しいコードセルを作成します。

  15. 次のコードを入力して BigQuery Python クライアント ライブラリをインポートしてクライアントを初期化します。BigQuery クライアントは、BigQuery API との間のメッセージの送受信に使用されます。

    from google.cloud import bigquery
    client = bigquery.Client()
    
  16. [Run] > [Run from this cell] の順にクリックします。このコマンドは出力を生成しません。

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

次に、ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには、次の操作を行います。

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. 次のコマンドを入力して、データセットを作成します。

    dataset = bigquery.Dataset(client.dataset('bqml_tutorial'))
    dataset.location = 'US'
    client.create_dataset(dataset)
    
  3. [Run] > [Run from this cell] の順にクリックします。コマンドの出力は次のようになります。

    Dataset '[project_ID]:bqml_tutorial' successfully created.

ステップ 3: モデルを作成する

次に、BigQuery 用の Google アナリティクス サンプル データセットを使用して、ロジスティック回帰モデルを作成します。このモデルは、ウェブサイトの訪問者がトランザクションを行うかどうかの予測に使用します。標準 SQL クエリでは、CREATE MODEL ステートメントを使用してモデルを作成し、トレーニングします。

モデルを作成してトレーニングする CREATE MODEL クエリを実行するには:

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. BigQuery Python クライアント ライブラリには、最小限のコードでクエリを実行できるマジック コマンドが用意されています。クライアント ライブラリからこのマジック コマンドを読み込むには、次のコードを入力します。

    %load_ext google.cloud.bigquery
    
  3. [Run] > [Run from this cell] の順にクリックします。このコマンドは出力を生成しません。

  4. [Add Code] をクリックして、新しいコードセルを作成します。

  5. BigQuery クライアント ライブラリにはセルマジックである %%bigquery が用意されています。このセルマジックは SQL クエリを実行して、結果を pandas DataFrame として返します。セルに次の標準 SQL クエリを入力します。クライアント ライブラリでは #standardSQL 接頭辞を使用する必要はありません。標準 SQL がデフォルトのクエリ構文です。

    %%bigquery
    CREATE OR REPLACE MODEL `bqml_tutorial.sample_model`
    OPTIONS(model_type='logistic_reg') AS
    SELECT
      IF(totals.transactions IS NULL, 0, 1) AS label,
      IFNULL(device.operatingSystem, "") AS os,
      device.isMobile AS is_mobile,
      IFNULL(geoNetwork.country, "") AS country,
      IFNULL(totals.pageviews, 0) AS pageviews
    FROM
      `bigquery-public-data.google_analytics_sample.ga_sessions_*`
    WHERE
      _TABLE_SUFFIX BETWEEN '20160801' AND '20170630'
    
  6. [Run] > [Run from this cell] の順にクリックします。

  7. クエリが完了するまでに数分かかります。最初の繰り返しが完了すると、BigQuery ウェブ UI のナビゲーション パネルにモデル(sample_model)が表示されます。このクエリでは、CREATE MODEL 文を使用してテーブルを作成しているため、クエリの結果は表示されません。空の文字列が出力されます。

ステップ 4: トレーニングの統計情報を取得する

モデルのトレーニング結果を確認するには、ML.TRAINING_INFO 関数を使用します。また、BigQuery ウェブ UI で統計情報を表示するという方法もありますが、現在、この機能は BigQuery の従来のウェブ UI で使用できません。このため、このチュートリアルでは ML.TRAINING_INFO 関数を使用します。

機械学習アルゴリズムは、多くのサンプルを検査し、損失を最小限に抑えるモデルを見つけることでモデルを構築します。このプロセスを経験損失最小化と呼びます。

損失とは、精度の低い予測に対するペナルティです。これは、1 つのサンプルで予測の精度がどのくらい低いかで表します。モデルの予測が完璧であれば、損失はゼロになります。それ以外の場合、精度に応じて損失が大きくなります。モデルをトレーニングする目的は、すべてのサンプルで平均的に損失の少ない重みの組み合わせを見つけることです。

CREATE MODEL クエリで生成したモデルのトレーニング統計を確認するには、次の操作を行います。

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. セルに次の標準 SQL クエリを入力します。

    %%bigquery
    SELECT
      *
    FROM
      ML.TRAINING_INFO(MODEL `bqml_tutorial.sample_model`)
    
  3. [Run] > [Run from this cell] の順にクリックします。

  4. クエリが完了すると、クエリの下に結果が表示されます。結果は次のようになります。

    ML.TRAINING_INFO の出力

    [loss] 列は、トレーニング データセットで所定の回数繰り返しを行った後に計算された損失指標を表します。ロジスティック回帰モデルのため、この列は対数損失になります。[eval_loss] 列は、ホールドアウト データセット(モデルを検証するためにトレーニングから返され、保存されているデータ)で計算された損失指標と同じになります。

    ML.TRAINING_INFO 関数の詳細については、BigQuery ML の構文リファレンスをご覧ください。

ステップ 5: モデルを評価する

モデルを作成したら、ML.EVALUATE 関数を使用して分類子の性能を評価します。また、ロジスティック回帰固有の指標については ML.ROC_CURVE 関数を使用できます。

分類子は、列挙されたラベルのターゲット値の 1 つです。たとえば、このチュートリアルでは、トランザクションを検出する 2 項分類モデルを使用しています。label 列にクラスの値が示されます。0 は「トランザクションなし」、1 は「トランザクションあり」です。

モデルを評価する ML.EVALUATE クエリを実行するには:

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. セルに次の標準 SQL クエリを入力します。

    %%bigquery
    SELECT
      *
    FROM ML.EVALUATE(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IF(totals.transactions IS NULL, 0, 1) AS label,
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(geoNetwork.country, "") AS country,
        IFNULL(totals.pageviews, 0) AS pageviews
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
    
  3. [Run] > [Run from this cell] の順にクリックします。

  4. クエリが完了すると、クエリの下に結果が表示されます。結果は次のようになります。

    ML.EVALUATE の出力

    ロジスティック回帰を使用しているため、結果には次の列が含まれます。

ステップ 6: モデルを使用して結果を予測する

モデルの評価を行ったので、次に、モデルを使用して結果を予測します。このモデルを使用して、ウェブサイトの訪問者が行ったトランザクションの数を国別に予測します。さらに、ユーザーあたりの購入額を予測します。

モデルを使用してトランザクション数を予測するクエリを実行するには:

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. セルに次の標準 SQL クエリを入力します。

    %%bigquery
    SELECT
      country,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY country
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. [Run] > [Run from this cell] の順にクリックします。

  4. クエリが完了すると、クエリの下に結果が表示されます。結果は次のようになります。モデル トレーニングは確定的ではないため、結果は異なる場合があります。

    ML.PREDICT の出力 1

次の例では、ウェブサイトの訪問者が行うトランザクションの数を予測します。GROUP BY 句を除くと、このクエリは前のクエリと同じです。ここでは、GROUP BY 句(GROUP BY fullVisitorId)を使用して、結果を訪問者 ID で分類します。

ユーザーあたりの購入を予測するクエリを実行するには:

  1. [Add Code] をクリックして、新しいコードセルを作成します。

  2. セルに次の標準 SQL クエリを入力します。

    %%bigquery
    SELECT
      fullVisitorId,
      SUM(predicted_label) as total_predicted_purchases
    FROM ML.PREDICT(MODEL `bqml_tutorial.sample_model`, (
      SELECT
        IFNULL(device.operatingSystem, "") AS os,
        device.isMobile AS is_mobile,
        IFNULL(totals.pageviews, 0) AS pageviews,
        IFNULL(geoNetwork.country, "") AS country,
        fullVisitorId
      FROM
        `bigquery-public-data.google_analytics_sample.ga_sessions_*`
      WHERE
        _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
      GROUP BY fullVisitorId
      ORDER BY total_predicted_purchases DESC
      LIMIT 10
    
  3. [Run] > [Run from this cell] の順にクリックします。

  4. クエリが完了すると、クエリの下に結果が表示されます。結果は次のようになります。

    ML.PREDICT の出力 2

クリーンアップ

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

  • 作成したプロジェクトを削除する。
  • あるいは、プロジェクトを保存し、Cloud Datalab VM を削除する。

Cloud Datalab VM の削除

プロジェクトを削除すると、Cloud Datalab VM が削除されます。Cloud Platform プロジェクトを削除しない場合は、Cloud Datalab VM を削除できます。

Cloud Datalab VM を削除するには:

  1. Compute Engine VM インスタンスのページを開きます。

    [VM インスタンス] ページに移動

  2. mltutorial インスタンスを確認し、[削除] をクリックします。

  3. プロンプトが表示されたら、[削除] をクリックします。

プロジェクトの削除

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

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

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

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

次のステップ

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

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

ご不明な点がありましたら、Google のサポートページをご覧ください。