はじめに
基本的な機械学習の手順:①分類モデルでは、BigQueryからPython環境にデータを取り込んで、scikit-learnで分析を行っています。
ただ、最近はBigQueryMLの様に、BigQueryの中だけで、機械学習を行うことができるようになっています。
今回は、BigQueryMLを試してみようと思います。
分析環境
Google BigQuery
Google Colaboratory
参考にしたページ
- Google Cloud、SQL文で機械学習ができる「BigQuery ML」を提供開始
- Bridging the gap between data and insights
- BigQuery ML のドキュメント
対象とするデータ
以前と同様に、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でそれぞれ作成したモデルを呼び出すだけ。
かなり簡単に使えます。
おわりに
まだまだ使える手法が限られていますが、基本的な機械学習の手順:①分類モデルで作ったときよりも、簡単に使えますね。
逆に、ここまで簡単に作れてしまうと、モデルを改善していこうというときに、何をすればいいか悩みますね。
どの変数を用いるのかで改善していくのかな。