📘

BigQuery MLについてまとめる

に公開

BigQuery MLは、GoogleのBigQueryに組み込まれた機械学習機能で、SQLの知識だけで高度な機械学習モデルを構築・運用できるようにしたサービスです。データサイエンティストではないアナリストやエンジニアでも機械学習を活用できる点が大きな特徴です。

BigQuery MLの主な特徴

  1. SQLベースの機械学習:データの移動なしに、SQLクエリだけでモデルを作成・学習・評価・予測が可能
  2. データ移動の最小化:BigQueryのデータをそのまま使用するため、大規模データの移動が不要
  3. 使いやすさ:Pythonなどの専門的なプログラミング言語を学ぶ必要がない
  4. スケーラビリティ:BigQueryの分散処理基盤を活用した高速な学習と予測が可能

サポートされている機械学習モデル

BigQuery MLは多様な機械学習モデルをサポートしています:

  1. 線形/ロジスティック回帰:数値予測や二値分類に
  2. K-means:クラスタリングによるセグメンテーションに
  3. 決定木・ランダムフォレスト:構造化データの分類・回帰に
  4. DNN(深層ニューラルネットワーク):複雑なパターン学習に
  5. 時系列予測:ARIMA+やSARIMAXなどの時系列分析に
  6. 行列分解:レコメンデーションシステムに
  7. AutoML:自動的にモデル選択・ハイパーパラメータチューニングを行う
  8. XGBoost:勾配ブースティングベースの高精度モデル
  9. PCA(主成分分析):次元削減に
  10. BQML TensorFlow:TensorFlowモデルのインポート・予測に

BigQuery MLの基本的な使い方

1. モデルの作成(学習)

CREATE OR REPLACE MODEL `project.dataset.model_name`
OPTIONS(
  model_type='LOGISTIC_REG',
  input_label_cols=['label_column']
) AS
SELECT
  feature1, feature2, ..., label_column
FROM
  `project.dataset.training_data`
WHERE
  条件式;

2. モデルの評価

SELECT
  *
FROM
  ML.EVALUATE(MODEL `project.dataset.model_name`,
  (
    SELECT
      feature1, feature2, ..., label_column
    FROM
      `project.dataset.evaluation_data`
  ));

3. 予測の実行

SELECT
  *
FROM
  ML.PREDICT(MODEL `project.dataset.model_name`,
  (
    SELECT
      feature1, feature2, ...
    FROM
      `project.dataset.prediction_input`
  ));

実践的なBigQuery ML活用例

例1: 顧客離反予測(ロジスティック回帰)

-- 顧客離反予測モデルの作成
CREATE OR REPLACE MODEL `project.dataset.churn_prediction`
OPTIONS(
  model_type='LOGISTIC_REG',
  input_label_cols=['is_churned']
) AS
SELECT
  days_since_last_purchase,
  total_purchases,
  average_purchase_value,
  support_tickets_count,
  is_churned  -- 0または1のラベル
FROM
  `project.dataset.customer_data`;

-- モデルを使って将来の離反予測
SELECT
  user_id,
  prob.label AS predicted_churn,
  prob.prob AS churn_probability
FROM
  ML.PREDICT(MODEL `project.dataset.churn_prediction`,
  (
    SELECT
      user_id,
      days_since_last_purchase,
      total_purchases,
      average_purchase_value,
      support_tickets_count
    FROM
      `project.dataset.active_customers`
  )) AS predictions,
  UNNEST(predicted_label_probs) AS prob
WHERE
  prob.label = 1
ORDER BY
  churn_probability DESC;

例2: 商品レコメンデーション(行列分解)

-- レコメンデーションモデルの作成
CREATE OR REPLACE MODEL `project.dataset.product_recommender`
OPTIONS(
  model_type='MATRIX_FACTORIZATION',
  feedback_type='IMPLICIT',
  user_col='user_id',
  item_col='product_id',
  rating_col='interaction_strength',
  l2_reg=0.2,
  num_factors=20
) AS
SELECT
  user_id,
  product_id,
  CAST(COUNTIF(event_type = 'purchase') * 10 +
       COUNTIF(event_type = 'view') * 1 AS FLOAT64) AS interaction_strength
FROM
  `project.dataset.user_events`
GROUP BY
  user_id, product_id;

-- ユーザーごとの商品レコメンデーション
SELECT
  user_id,
  item AS recommended_product_id,
  score AS recommendation_score
FROM
  ML.RECOMMEND(MODEL `project.dataset.product_recommender`,
  (
    SELECT DISTINCT user_id
    FROM `project.dataset.active_users`
  ))
ORDER BY
  user_id, recommendation_score DESC;

例3: 売上予測(時系列分析)

-- 時系列モデルの作成
CREATE OR REPLACE MODEL `project.dataset.sales_forecast`
OPTIONS(
  model_type='ARIMA_PLUS',
  time_series_timestamp_col='date',
  time_series_data_col='daily_sales',
  time_series_id_col='product_category',
  horizon=30  -- 30日先まで予測
) AS
SELECT
  date,
  product_category,
  SUM(sales_amount) AS daily_sales
FROM
  `project.dataset.sales_data`
WHERE
  date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 2 YEAR) AND CURRENT_DATE()
GROUP BY
  date, product_category;

-- 予測結果の取得
SELECT
  product_category,
  forecast_timestamp AS predicted_date,
  forecast_value AS predicted_sales
FROM
  ML.FORECAST(MODEL `project.dataset.sales_forecast`,
  STRUCT(30 AS horizon, 0.9 AS confidence_level));

BigQuery MLの制限事項

  1. モデルの複雑さ:非常に複雑なカスタムモデルには不向き
  2. 計算コスト:大規模なデータセットでの学習はコストがかかる場合がある
  3. ハイパーパラメータチューニング:一部のモデルタイプでは調整オプションが限定的
  4. モデルサイズ制限:一部のモデルタイプには容量制限がある

ベストプラクティス

  1. 特徴量エンジニアリング:SQLで前処理を行い、良質な特徴量を作成する
  2. 適切なデータサンプリング:大規模データセットでは適切なサンプリングを行う
  3. 適切なモデル選択:問題に合ったモデルタイプを選択する
  4. 定期的なモデル再学習:スケジュールされたクエリでモデルを定期的に更新する
  5. 解釈可能性の重視:特に初期段階では解釈しやすいモデル(線形モデルなど)から始める

BigQuery MLは、データ分析者がSQL知識だけで機械学習の力を活用できる強力なツールです。特にデータがすでにBigQueryに格納されている場合、追加のインフラやデータ移動なしに高度な分析が可能になります。

Discussion