LoginSignup
1
2

More than 3 years have passed since last update.

BigQuery MLを使ってみた

Last updated at Posted at 2020-02-29

はじめに

基本的な機械学習の手順:①分類モデルでは、BigQueryからPython環境にデータを取り込んで、scikit-learnで分析を行っています。

ただ、最近はBigQueryMLの様に、BigQueryの中だけで、機械学習を行うことができるようになっています。
今回は、BigQueryMLを試してみようと思います。

分析環境

Google BigQuery
Google Colaboratory

参考にしたページ

対象とするデータ

以前と同様に、resultをキャンペーンの反応有無、product1~を商品の購入金額として作成します。

id result product1 product2 product3 product4 product5
001 1 2500 1200 1890 530 null
002 0 750 3300 null 1250 2000

1.モデルを構築する

これまで、BigQueryにはTABLEとVIEWだけだったのですが、MODELという形式でも保存できるようになっています。(ほかにも、FUNCTION形式などもありますね)

from google.cloud import bigquery

query=f"""CREATE OR REPLACE MODEL `myproject.mydataset.mymodel`
OPTIONS
  (model_type='logistic_reg', labels = ['result']) AS #目的変数(予測される変数)

# 下記の変数を用いて予測する
SELECT result, product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable_training`
"""

job = client.query(query)
result = job.result()

model_typeには、次の3つが選べます。(Tensorflowのモデルを使うこともできるようですが、ここでは割愛します)

  • logistic_reg : ロジスティク回帰分析(目的変数がカテゴリカル変数)
  • linear_reg : 線形回帰分析(目的変数が数値変数)
  • kmeans : クラスター分析

今回は販促に反応するか否かなので、logistic_reg を用いています。

2.モデルを評価する

ML.EVALUATEで作成したモデルを呼び出して、テストデータを使って検証します。

query=f"""
SELECT
  roc_auc, precision, recall
FROM
  ML.EVALUATE(MODEL `myproject.mydataset.mymodel`,  ( #作成したモデルを呼び出す

# 別のテストデータで検証します
SELECT result, product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable_test`
))
"""

job = client.query(query)
result = job.result()

テストデータでの精度をAccuracy, Precision, Recallで評価しています。

3. モデルを適用する

ML.PREDICTで作成したモデルを呼び出して、新しいデータにモデルを適用します。

query=f"""
SELECT
*
FROM
  ML.PREDICT(MODEL `myproject.mydataset.mymodel`,  ( #作成したモデルを呼び出す

# 新たなデータにモデルを適用します
SELECT product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable`)
);
"""

# 出力するプロジェクト・データセット・テーブル名
project = "myproject"
client = bigquery.Client(project=project)
dataset = "mydataset"
ds = client.dataset(dataset)
table = "mytable_predict"

job_config = bigquery.QueryJobConfig()
job_config.destination = ds.table(table)
job = client.query(query, job_config=job_config)

result = job.result()

モデルを評価するときは、ML.EVALUATE。適用するときは、ML.PREDICTでそれぞれ作成したモデルを呼び出すだけ。
かなり簡単に使えます。

おわりに

まだまだ使える手法が限られていますが、基本的な機械学習の手順:①分類モデルで作ったときよりも、簡単に使えますね。

逆に、ここまで簡単に作れてしまうと、モデルを改善していこうというときに、何をすればいいか悩みますね。
どの変数を用いるのかで改善していくのかな。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2