BigQueryで行う、機械学習のためのデータ前処理GCPUG TokyoDecember 2019長谷川大耀 (Fringe81)
View Slide
自己紹介長谷川大耀(@Hase8388) で機械学習の開発やってます
BigQueryで機械学習が行えると何が嬉しい?● 大量のデータから、安く簡単にデータセットを構築できる● SQLで処理ができるので、誰でも簡単に実行可能● BQMLで構築したモデルにシームレスにデータを流し込める今回話すことさらによりよいモデルを作るために、BQ(ML)での前処理を行うための方法の紹介話さないことアルゴリズムの話など、モデル自体の仕組みの話
機械学習では、前処理がなぜ重要?解くべきタスクの本質を、より明らかな形として表現するデータに加工することで、モデルの性能を更に引き出すことができる1. 概観の把握2. 特徴量の作成、変換3. モデルにデータセットを流し込むそれぞれのフェイズで代表的な関数+自分が好きな関数を紹介します
1. データの概観するための関数● 分布の概観把握なども簡単にできる● 基本的な統計集約関数
より複雑な分析や可視化はJupyterでJupyter上でBQの出力結果をDataFrameとして格納し、pandas/matplotlibなどで分析google-cloud-bigqueryでJupyter上から接続https://googleapis.dev/python/bigquery/latest/magics.html#module-google.cloud.bigquery.magics誤ったクエリでの重課金を防ぐために、課金される容量に上限もつけれる
2. 特徴量を作成するための関数様々な特徴量作成・変換のための前処理用の関数が、最近続々追加 !● ML.QUANTITLE_BUCKTIZE連続値から、多項式特徴量を作成
2. 特徴量を作成するための関数様々な特徴量作成・変換のための前処理用の関数が、最近続々追加 !● ML.FEATURE_CROSS交差特徴量を作成
2. 特徴量を作成するための関数様々な特徴量作成・変換のための前処理用の関数が、最近続々追加 !● ML.NGRAMS文章を指定した単位で分かち書き
3. 特徴量を変換するための関数特徴量の変換も、短いクエリで簡単に実行可能 !● IF二値化
3. 特徴量を変換するための関数特徴量の変換も、短いクエリで簡単に実行可能 !● ML.QUANTITLE_BUCKTIZE連続値を指定した数の binに振り分ける
3. 特徴量を変換するための関数特徴量の変換も、短いクエリで簡単に実行可能 !● ML.MIN_MAX_SCALER● ML.STANDARD_SCALER正規化、標準化
ex. 地理情報をHash化する: ST_GEOHASH地理情報をカテゴリとして扱うためにHash化するなら、ST_STGEOHASHが便利 !Hash値を長くすればするほど、より詳細な位置情報を表現できる
3. 前処理したデータをモデルに流し込む課題: BQMLで作成したモデルにデータセットを流し込むその時、学習、予測、評価で、イチイチ同じ前処理を行うのはシンドい学習データ前処理評価データ前処理予測データ前処理モデルモデルを使う人が前処理のロジックを知っている必要がある。つらい学習時 予測時重複!
3. 前処理とモデルを一体化: TRANSFORM句前処理を集約-隠蔽でき、より使いやすいモデルが構築できる学習データ評価データ前処理予測データモデル解決: 前処理モデルの中に組み込み、予測、評価ではただ元のデータを流し込むだけで良い学習時予測時
最後にBigQuery(ML)を使うと、SQLだけで簡単に前処理とモデル構築が行える新しい関数とアルゴリズムがどんどん追加されているので、今後がより楽しみ
エンジニアを積極採用中です !Front-end Back-endScala / GoPythonJS / ElmReact / RN