【GCP】BigQuery MLを触りたいときに読むブログ

こんにちは。SCSKの山口です。

今回はBigQuery MLを使って機械学習モデルの作成、テストをやってみます。

こんな方にオススメの記事です。
・とにかくBigQuery MLを触ってみたい
・BigQuery MLでモデルを作成してみたい
・BigQuery MLでモデルを使って推論してみたい
筆者はこんな人です。
・Google Cloud歴:約2年
・BigQueryのコンソール操作には慣れている
SQLが少し書ける
・AI/MLの知識はあまりない
今回のブログでは、BigQuery MLを試すために最低限必要な事項にフォーカスして書きます。
より詳細な概念、知識に関しては後続のブログをお待ちください。

BigQuery ML

BigQuery ML とは  |  Google Cloud
まずはBigQuery MLについて紹介します。
BigQuery MLでは、GoogleSQLクエリを使用して、MLモデルの作成と実行を行うことができます。
BigQuery MLを使用する最大のメリットは、
AI/MLのプログラミング経験が少ないデータアナリストでも、SQLの知識とツールでモデルの構築・評価ができる点
にあるといえます。
大規模なデータセットでAI/MLタスクを実行するには、各フレームワークに対する高度なプログラミング技術と知識が必要になります。
そのためデータをよく理解しているアナリストが、プログラミング経験が少ないばかりにソリューション開発から除外されてきましたが、BigQuery MLはそれを解決してくれます。
BigQuery MLは、下記の方法で使用できます。
  • Google Cloudコンソール
  • bqコマンドラインツール
  • BigQuery REST API
  • BigQueryに統合されたColab Enterpriseノートブック
  • Jupyter ノートブックやビジネス インテリジェンス プラットフォームなどの外部ツール

今回は、Google Cloudコンソール(BigQuery画面)でBigQuery MLを触ってみます。

また、BigQuery MLでは下記のモデルが内部でトレーニング済みで、BigQuery MLに組み込まれています。

  • 線形回帰
  • ロジスティック回帰
  • K平均法クラスタリング
  • 行列分解
  • 主成分分析(PCA)
  • 時系列

上記以外にも様々なモデルが使用可能です。詳細はこちらの公式ドキュメントをご参照ください。

今回は、線形回帰のモデルを使用して予測を行います。

 

BigQuery ML使ってみた

では、さっそく触ってみます。

事前準備

今回は、モデルのトレーニング用とテスト用で二つのテーブルを用意しました。(※同一データは含んでいない)

スキーマ情報(2テーブル共通)
training:80行
test:20行

モデルを作成し推論するにあたって、下記を決めておきます。

  • 目的変数:予測したいデータ
  • 説明変数:予測するために使用するデータ

今回は目的変数を「cost_material:原材料費」とし、説明変数をその他のカラムとします。

モデル作成・トレーニング

下記SQLを実行して、モデルを作成します。

CREATE OR REPLACE MODEL
  `yamaguchi_test_bqml.test_model_liner_reg` OPTIONS(model_type='linear_reg') AS
SELECT
  IFNULL(cost_manufacturing, 0) AS cost_mf,
  IFNULL(cost_material, 0) AS label, --目的変数
  IFNULL(cost_employees, 0) AS cost_emp,
  IFNULL(manufacturing_line, 0) AS manu_line,
  IFNULL(manufacturing_efficiency, 0) AS manu_eff,
  IFNULL(employees, 0) AS emp
FROM
  `yamaguchi_test_bqml.training` ;

CREATE MODEL文で簡単にモデルを作成することが可能です。OPTIONS句内で今回使用する線形回帰(linear_reg)を指定しています。

その後のSELECT文によって指定されたデータを使用してモデルをtrainingします。

また、「cost_material」に対して、「label」というエイリアスを作成することで、cost_materialが目的変数であることを示しています。CREATE句でinput_label_cols=オプションを使用して目的変数を設定することも可能です。

最後のFROM句でトレーニング用のテーブル「training」を指定しています。

モデル作成が完了すると、エクスプローラ画面の「モデル」配下に作成したモデルが表示されます。

以上でモデルの作成・トレーニングは完了です。

モデルテスト

作成したモデルを使って予測をしてみます。

下記SQLを実行します。

SELECT
  predicted_label AS predicted_costs
FROM
  ML.PREDICT(MODEL `yamaguchi_test_bqml.test_model_liner_reg`,
    (
    SELECT
      IFNULL(cost_manufacturing, 0) AS cost_mf,
      IFNULL(cost_employees, 0) AS cost_emp,
      IFNULL(manufacturing_line, 0) AS manu_line,
      IFNULL(manufacturing_efficiency, 0) AS manu_eff,
      IFNULL(employees, 0) AS emp
    FROM
      `yamaguchi_test_bqml.test`
    WHERE
      employees=476 ))

ML.PREDICT関数を使って予測を行います。モデルの出力列名はpredicted_<label_column_name>としています。

SELECT句で指定しているpredicted_labelはlabelの推定値になります。

ネストされたSELECT句は、モデル作成のCREATE MODEL句と同じにしていますが、FROM句にはtestテーブルを指定しています。

trainingのデータでモデルを学習させ、testのデータを使って予測の挙動を見る。といった狙いです。今回は、「従業員数が476人の場合の原材料費」を予測しています。

予測結果を見てみましょう。

1344.5283 …という予測が得られました。testテーブルの実際のデータを比較してみると、

、、、、何とも言えない結果ですね。。

とはいえ、そこまでかけ離れている数値ではないです。

予測の精度が良くない原因として、そもそも学習に使用するデータ量が少ない点がまず考えられます。

それ以外にもモデルを学習させる際に、CREATE句のOPTION内で様々な設定をし、予測精度を上げることも可能です。ここについては後続のブログで書きたいと思います。

 

まとめ

今回は、BigQuery MLを使ってモデルを作成し、実際に予測をしてみました。

今回は公式ドキュメントに沿って実践を進めたのですが、「モデルの評価」については本ブログでは触れませんでした。(長くなりそうだったので。)

今回作成したモデルの評価結果を先出しておきます。

こんな感じです。初めて見る評価指標がズラリと並んでいたので、この辺りは別のブログで深堀していきます。

著者について

Google Cloud歴2年目です。
日々捌ききれないほどのインプットを浴びているので、本ブログをアウトプットの場として活用しています。
-----
保有資格:応用情報技術者、Google Cloud 認定資格全冠(11冠)
好きな(よく触っている)サービス:BigQuery、Cloud Functions、Data Fusion

山口翔平をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(Google Cloud)は、Google Cloudの多彩なAIや各種サービスを活用したワンストップソリューションを提供します。SCSKのノウハウや体制を有効活用し、業務課題の解決に必要な全体検討と組み合わせで、最適な業務実装まで支援します。

AI・MLGoogle Cloudデータ分析・活用基盤
シェアする
タイトルとURLをコピーしました