KaggleカーネルでBigQuery MLを使う
KaggleのカーネルでBigQueryが公式にサポート
先日(2019/6)、KaggleのカーネルでBigQueryが公式にサポートされました。
早速、使ってみようと思ったのですが、デフォルトでは開催中のコンペに対して
client = bigquery.Client()
dataset_ref = client.dataset("titanic", project="kaggle-official")
のような感じでデータセットとして指定できる訳ではなく、あくまで自分のGCPプロジェクトにデータセットを用意する必要があるようです。(せっかくなら直接アクセスできるようにして欲しい。。。)
ということで、実際のコンペ(Titanic)のデータからBigQueryデータセットおよびテーブルを作成するカーネルを公開しました。テーブルを作成したあとは、BigQuery MLを使ってロジスティック回帰でモデルの作成および予測を行い、submitファイルの作成をしています。簡単のためCVは行なっていませんが、PublicLBで0.722くらいが出ます。
ぜひ、BIgQuery MLを触ったことがない方は、これを使ってカーネル上で遊んでみてください。必要なものはGCPプロジェクトとの紐づけのみで、GCPコンソール上でのデータセットの操作は一切不要です。
BigQueryデータセットおよびテーブルを作成、と言っても単にカーネル上からgoogle.cloud.bigqueryクライアントを実行しているだけです。(データが大きければ結局GCSが必要になるはずなので、あまり汎用性ない)
下記のカーネルの画面で「BigQuery」をクリックして、
下記の画面で「Link an account」するだけです。
当たり前なのかもしれませんが、外部のサービスと連携させているため、
- 冪等性
- 非同期処理
辺りを意識して実装する必要があります。(普段カーネルを作る際は、カーネル内にスコープが閉じているので、冪等性を意識しなくてもよかった)
公開したカーネルでは、BigQuery MLの学習ジョブをポーリングしていますが、もっといいやり方があったら、コメントで教えていただけると嬉しいです。
今後もGCPとKaggleが連携しやすくなっていくと、コンペが捗りそうですね!