【Kaggle】方針

ちょっと、よし、はじめよう!
と思ってもどういう手順がいいかあんまりわかっていないので一度方針を立ててみる。

データ把握フェーズ

kernelを覗き見る

車輪の再発明はしない。
既に公開してくれているデータに関するインサイトなどをまずは拾っていく。

自分でデータ構造を調べてみる

これはnotebookでやるとかキレイに作成するとかではなく、
本当にどうなっているかを調べたい。
どうするのがいいんだろうか…
とりあえず、雑なnotebookをちゃちゃっと作ったほうがよさそうではある。

データ分析フェーズ

BigQuery

とりあえず、tkmさんのフローしか知らないのでそれを踏襲するか。
データ分析系のコンペに絞られるのかな?この手法は。

価格帯

1.データの読込方法を検討する
2.不要なデータを扱うクエリを実行しない
3.理解した上でHigh-Computeクエリを実行する
4.分割テーブルやデコレータを利用して対象を絞る
5.費用管理を行い課金上限を設定しておく
6.不安な場合はdry runを実行し、データ処理量を確認する

こういうの惜しげもなく共有してくれるの本当にありがたい。
特に5,6辺りが。

これ、keggleのデータだとそんなにかからないかもしれないけど、実際のプロジェクトでやれって言われると、手に汗握ってコスト意識するでしょうね…
一度ちゃんと読もう。

BigQueryで課金される内容は
・ストレージ代金
・データ操作代金

まぁそれはそうか。
なんか微妙に毎月課金されてるのはストレージ代金だったんだな。

詳しくは料金一覧を。

データ読み込みは3パターンありますが、パターンに応じて課金のされ方が異なります。
①Google Cloud Storage(GCS)から読み込む
②データストリームで読み込む
③データを直接投入

読めば読むほど①だ。流石tkmさん。

また、実行中のクエリジョブをキャンセルするとそのクエリが完了した場合に発生する料金が全額課金される可能性があると記載されています。

こわい

・Where句でLIMIT
SELECT句で指定しているカラムの全データ分課金されてしまいます。(LIMITで絞ったデータだけでない)
オラクルのrownumと一緒で対象データ取得後に件数を絞っているのかな。

・Select句でCOUNT(*)
単純に特定テーブルに含まれるデータ数を数える場合、全行が対象であるが読み込まれるバイトが無いので無料とのこと。

・Select句にCOUNT(corpus)
一方こちらはcoupusの全データ分が課金対象。
corpusがNullであるものはカウントしない仕様であり、
判定のためにバイト読み込みが発生しているのだろうか。
以下のようなwhere句でカラムを判定している場合も同様に課金対象です。

こ、これは…

余談としてキャッシュされたクエリの場合課金されないとありますが、
キャッシュ保持が24時間(確約ではない)、データが変更されたらキャッシュが無効、
NOWなどを用いると無効など制限があるのであまり当てにしないほうがよいと感じました。

ローカルルールが半端じゃない。

クエリの実行に工夫を行なう以外にも課金上限を設定しておくことでセーフティを掛けておくことができます。
BigQueryではプロジェクトやユーザー単位でクエリ処理バイト数を1日10TB単位で割当管理出来ます。

これはやっておこう…

上記6点に注意しながら用いれば大抵のことでは大量課金されないと思いますので
今後はBigQueryをバシバシ叩こうと思います!

BigQueryで150万円溶かした人の顔

これも読んだ方がよさそうだ。
150万いかれたら辛いな…

という感じで、注意点を踏まえてとりあえずはBigQueryを使ってKaggle lifeを送ろう。
と思ってtkmさんのYoutube見直してたらkaggleでは1,000円絶対超えないので、プロジェクトの時は気をつけよう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です