11/9 ハンズオン勉強会
BigQueryMLハンズオン柳沼 慎哉グロービス データサイエンティスト2018/11/9
View Slide
自己紹介柳沼 慎哉- 株式会社グロービス データサイエンティスト- Tableau, DataStudioなどBIツールが得意- 機械学習、統計学勉強中twitter : @shinmaidssinQiita : @s_yaginuma
これの分析やってます- 「BigQuery ML」でSQLを書いて機械学習モデルを構築&予測できる!- BigqueryMLで作成したモデルをGoogle Data Studioで可視化してみた- ビギナーズラックで跳ねた記事:新米データサイエンティスト、研修プログラムを考える。
Qiita書いてます- 「BigQuery ML」でSQLを書いて機械学習モデルを構築&予測できる!- BigqueryMLで作成したモデルをGoogle Data Studioで可視化してみた
アジェンダ- BigQueryMLの概要- ハンズオン- BigQueryMLの強み、弱み- 懇親会
BigQueryMLの概要・BigQuery:SQLライクなクエリを用いて大規模なデータに対しても高速に結果を返すことのできるDW・BigQueryML:BigQueryのクエリエディタ上からSQLを書くように機械学習モデルの構築、評価、予測ができるDocs : すべての BigQuery ML ドキュメント
機械学習モデルとは?与えられたデータ(説明変数)から、ターゲットとなる変数(目的変数)を予測するモデル。目的変数が離散値:分類 目的変数が連続値:回帰
学習のプロセス(線形回帰)①初期化y = a0x + b0
学習のプロセス(線形回帰)②損失関数の計算y = a0x + b0
学習のプロセス(線形回帰)①重みの更新y = a1x + b1
学習のプロセス(線形回帰)④最適化y = ax + b
学習のプロセス線形回帰y = ax1 + bx2 + cx3 + dx4 + ea~d:最適化された重み重みが格納された配列 = モデル
機械学習モデルとは?具体例:コースの完了率y = ax1 + bx2 + cx3 + d1ヶ月以内の完了率 コースの長さ コースの難易度 1動画の長さ説明変数の重みが分かっていれば、新しいコースのリリース前にコース完了率を予測できる
Python, R vs BigQueryML機械学習用のパッケージがあり、それを利用する必要がある。モデルの構築、評価、予測の一連のプロセスをSQLライクに書いて実行できる学習コストが高い学習コストが低い
機械学習の流れデータの下処理モデルの作成モデルの評価新データに対しての予測SQLで加工、集計
Boston Housing データ・ボストン近辺の住宅価格の予測https://www.kaggle.com/c/boston-housing
BigQueryにデータセットを作成する・GCPコンソールのナビゲーションメニューからBigQueryを開く・自分のプロジェクト名にカーソルを合わせる・データセットを作成をクリック・データセットIDを入力し、データセットを作成する
・作成したデータセットをクリック・テーブルを作成をクリック・ソースデータ:アップロード → Slackからダウンロードしたデータを選択。形式はcsvを選択・テーブル名を入力、スキーマの自動検出をチェック、作成作成したデータセット内にテーブルを作成する
データの中身- 目的変数- medv : 区画の家の値段の中央値(/1000$)- 説明変数(13個):- crim : 犯罪発生率- zn : 住宅地の割合- indus : 非小売業種の割合- chas : チャールズ川の河川境界線かどうか- nox : 窒素酸化物濃度- rm : 住居あたりの部屋数- age : 1940年以前に建設された建物の割合- dis : 5つのボストン雇用センターまでの距離の加重平均- rad : 高速道路へのアクセスの良さ- tax : 1万ドルあたりの固定資産税率- ptratio : 生徒と教師の比率- black : 黒色人種居住者の割合- lstat : 低所得者の割合
機械学習モデルの作成CREATE MODEL ステートメントCREATE MODEL `<データセット名>.<モデル名>`OPTIONS(model_type='<使用するアルゴリズム>',input_label_cols=['<ターゲットのカラム名>'],...) AS (SELECT<学習に使用するデータを抽出するクエリ>...)
トレーニングデータと評価データについてデータ・NGなケース学習用評価用モデルは学習データに対して適合するので、評価用データに学習用データと同じものを使うと実際よりも高い精度で予測され、真に未知のデータに対しての予測性能が測定できない!
トレーニングデータと評価データについてデータ・OKなケース学習用評価用予め学習用と評価用に分けておくことで、未知のデータへの予測性能を測定することができる
機械学習モデルの評価ML.EVALUATE 関数SELECT*FROMML.EVALUATE(MODEL `<モデル名>`,(<モデル作成に使用した特徴量を抽出するクエリ>))
モデルの評価出力される評価指標:- mean_absolute_error:平均絶対値誤差- mean_squared_error:平均二乗誤差- mean_squared_log_error:平均二乗対数誤差- median_absolute_error:絶対値誤差の中央値- r2_score:決定係数- explained_variance:因子寄与平均二乗誤差:データに対するズレ → 低い方が良い決定係数:データに対する当てはまり → 1に近い方が良い
作成したモデルで予測ML.PREDICT 関数SELECT*FROMML.PREDICT(MODEL `<モデル名>`,(<予測するのに必要な特徴量を抽出するクエリ>))
特徴量の重みの確認ML.WEIGHTS 関数SELECT*FROMML.WEIGHTS(MODEL `<モデル名>`y = ax1 + bx2 + cx3 + d
BigQueryMLが自動でやってくれること数値変数の標準化単位:cm, %, kg, $... → 単位が違うと重みを比較できない標準化:各データをそれぞれの特徴量の平均値を引き、標準偏差で割る特徴量の無次元化、スケーリング異なる単位でも重みを比較できる
分類:アイリスデータの分類BigQueryMLで多クラス分類が可能に!Google Cloud ブログ折角なのでやってみましょう。
分類:アイリスデータの分類- 特徴量:- sepal length(cm)- sepal width(cm)- petal length(cm)- petal width(cm)- クラス:- Setosa- Versicolour- Virginica
手順:- BigQueryにアイリスデータを読み込む- iris/create_model.sqlでモデルを作成- iris/evaluate_model.sqlでモデルを検証- iris/predict.sqlで予測結果を出力
分類モデルの評価出力:- 予測値- 予測確率
BigQueryMLの良いところ- 簡単!- データと同じ場所にモデルを置いておける- BIツールと連携しやすい(可視化)- 自動で色々やってくれる(データの分割、標準化)
(補足)BigQueryMLが自動でやってくれること②カテゴリ変数のダミー化カテゴリ:カテゴリA、カテゴリB、カテゴリC...というデータはそのまま機械学習に使えないID カテゴリ1 A2 B3 CID カテゴリ_A カテゴリ_B カテゴリ_C1 1 0 02 0 1 03 0 0 1
BigQueryMLの微妙なところ- 現状使用可能なモデルが少ない- BigQueryML単体だと可視化ができない- パラメータサーチがしづらい
BigQueryMLの微妙なところ現状使用可能なモデルが少ない機械学習教師あり学習教師なし学習:未対応回帰:線形回帰のみ分類:ロジスティック回帰のみクラスタリングや、人気のあるランダムフォレストなどの手法に対応していない。
BigQueryMLの微妙なところBigQueryML単体だと可視化ができない下処理モデルの作成モデルの評価新データに対しての予測EDAEDA:探索的データ解析分析の初期段階にデータの分布や目的変数への影響をデータを可視化、集計しながら観察する手法BigQueryで可視化や集計結果の保持はしづらいため、他のサービスを使用する必要がある
BigQueryMLの微妙なところパラメータサーチがしづらいハイパーパラメータ:人間が設定する必要のあるパラメータ(例)最適なパラメータAを探したい場合:A = 0, 1, 2, 3, 4, 5, 10, ...に対しモデルを作成し精度を計算最も精度の高いパラメータの値が最適と判断、採用しかし、BigQueryMLではループ処理をサポートしていないため、不可能
現状考えられるユースケース・BigQueryMLのみで全てやるのは考えづらい下処理モデルの作成モデルの評価新データに対しての予測EDAモニタリングDatalabBigQuery
ご静聴ありがとうございました!
懇親会!!