こんにちは、この記事はGCPアドベントカレンダー10日目です。
はじめに
今年はBigQueryGIS、BigQueryMLという大きいリリースがあり、どんどんBigQueryが便利になっていきますね。
中でもBigQueryMLは、SQLのように一連の機械学習プロセスを実行できるということで、かなり注目が集まっていると思います。
今回はBigQueryMLで構築した機械学習モデルについて、同じく今年リリースされたScheduled QueryというBigQueryの新しい機能を用いて、その後のモデル運用プロセスの一部を自動化できるのでは?というお話です。
公式Docs:
・ すべての BigQuery ML ドキュメント
・ クエリのスケジューリング
機械学習モデルを構築し終わった後、することって何?
一般的な機械学習プロセスは、以下の図のようになります。
データの下処理、モデルの構築、そしてそれが未知のデータについても適合することの検証という流れを数回繰り返し、実際に予測モデルをデプロイし予測をしていくというプロセスになります。
しかし、デプロイして終わりではありません。
その後モデルを運用していくためには、性能をモニタリングし続けることが必要です。
それは、デプロイした時には性能が十分だったモデルでも、時間の経過と共にデータの特性が変化し、新しいデータに対しての性能が不十分になってしまう可能性があるからです。
これって毎回そんなに時間は取られないけれども定期的にやってくるルーティンワークで、手動でやろうとするとすごく面倒くさそうですよね。
そこで、そんなところに時間をかけず、Scheduled Queryを使って自動化してしまいましょう!
Scheduled Queryによる自動化
今回は、BigQueryMLでモデルを構築済みの状況を想定します。
モデルの作成方法など、気になる方は公式ドキュメントを読んでみて下さい。(最初の方にリンクあります)
Scheduled Queryは、その名の通り、特定のクエリを定期的に実行し、その結果をテーブルに保存したりできるものです。
詳しい仕様などここでは述べませんので気になる方はドキュメントを読んでみて下さい。書き込み先のテーブル名の指定や、実行間隔など、設定は簡単です。
また、テーブルへの書き込み形式も設定でき、全て置き換える場合と既存のテーブルに追加する場合を選択できます。(今回は後者)
それでは、具体的に仕込むクエリを描いてみます。
例えば、こんな風にBigQueryMLのML.EVALUEATE関数を使ったコードをScheduled Queryで設定します。(下の例は3ヶ月毎の実行を想定してます。)
SELECT
CURRENT_DATE() AS run_date,
mean_squared_error,
r2_score,
...
FROM
ML.EVALUATE(MODEL `モデル名`,
(
SELECT
...
FROM
`テーブル名`
WHERE timestamp BETWEEN CURRENT_DATE() AND DATE_ADD(CURRENT_DATE(), INTERVAL 3 MONTH)))
すると、このようなイメージで新しい検証結果がどんどん追加されていきます。
そんな頻繁にデータの特性が変わることは考えづらいので、実行は1ヶ月置き、3ヶ月置きなどで大丈夫だと思います。
この時点で、定期的にモデルの精度を検証するクエリが走るように設定できましたが、ついでにDataStudioでモニタリング用のダッシュボードも作成してみましょう!
##DataStudioでのモニタリング
Google DataStudio (Data Portal)
生データでも良いと思いますが、
- データが増えてきた場合に比較しづらい
- 指標の変化を一覧化できない
など課題があるため、個人的にはDataStudioなどの可視化ツールで折れ線プロットを作成してモニタリングするのが良いと思います。
DataStudioを使えばこのように指標の変化を一覧化し一目で把握できます。
また、ページネーションも効くので、複数のモデルも1つのURLにアクセスするだけで性能のモニタリングができます。
##終わりに
ここまでご覧いただきありがとうございました。
BigQueryML, Scheduled Query共にとても便利な機能なので、今後のアップデートが楽しみです。
BigQueryMLについて、前に弊社で勉強会をやった際の資料もあるのでもしご興味あればご参照下さい
また、先日行われたbq_sushiでのwantedlyの方の発表では実例が豊富に紹介されており、とても参考になるのでぜひ合わせてご覧ください!