Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GCPUG kitakyu#1/熊本#1「BigQuery+BigQueryMLでKaggle機械学習を攻略してみた」

piacerex
February 14, 2019

GCPUG kitakyu#1/熊本#1「BigQuery+BigQueryMLでKaggle機械学習を攻略してみた」

piacerex

February 14, 2019
Tweet

More Decks by piacerex

Other Decks in Programming

Transcript

  1. GCPUG kitakyu#1/熊本 第1回
    BigQuery+BigQuery MLで
    Kaggle機械学習を攻略してみた
    ~SQLだけでモデル構築と予測ができてしまう新世代AI・ML開発~
    2019/02/11 ver 0.5作成
    2019/02/13 ver 0.9作成
    2019/03/16 ver 1.0作成

    View Slide

  2. カラビナテクノロジー株式会社 CTO 常務 / 他2社経営
    プログラマ歴36年 / XPer歴18年 / 福岡 技術顧問 (3社)
    AIジョブカレ 福岡代表 / enPiT (文科省 社会人IT育成) 講師
    。 森 正和 |> 。
    福岡Elixirコミュニティ「fukuoka.ex」
    北九州GCPユーザグループ「GCPUG kitakyu」
    福岡 理学部 / IAI Fukuoka / 「通常の3倍」福岡
    「量子コンピュータ by Blueqat」 / 「OpenQL」
    福岡Elixirプログラマ / データサイエンティスト / 重力プログラマ
    my favotite technology & implements.
    Twitter/Qiita/GitHub
    @piacere_ex

    View Slide

  3. OSS書いて、仕事作りつつ、AIチームのトップもやります

    View Slide

  4. プログラマを35年間続け、現在、「重力プログラマ」中
    重力波解析するし、重力・流体・天体シミュレータも作る

    View Slide

  5. 4
    2018/9/13 福岡 理学部 十限目
    「重力と宇宙を愛する全ての人に」 #3

    View Slide

  6. 重力・宇宙イベント会 第1回は、こんな感じでした

    View Slide

  7. 福岡で人工衛星飛ばす企業、QPS大西さんも登壇

    View Slide

  8. View Slide

  9. マイナー言語でも、地味に皆様の生活を支えるインフラ

    View Slide

  10. ライブデモする「MeetUp」+入門者OKな「もくもく会」
    仕事終わり、くつろぎ、ほろ酔いつつ、Elixir/Phoenix
    による先端プログラミングに触れるイベントを定期開催
    リモート参加もできますので、よろしければ、
    ”福岡 Elixir” でググって、connpassご登録ください
    もくもく会 (毎月、入門者もOK)
    MeetUp (隔月、経験者向け)

    View Slide

  11. GPUドライバとscikit-learn/Keras相当を実装中
    「Elixir」の性能・並列性・生産性をAI・ML文脈でも活かすため、
    fukuoka.exでGPU実装を行い、機械学習エンジン開発中です
    半年後にはscikit-learn相当、1年以内には、GPU対応済の
    Keras相当をリリース予定です
    北九大、京大の先生と共に
    Elixir GPU活用の共同研究
    論文も書いてます

    View Slide

  12. AI・MLに欠かせない前処理系をOSSで無償提供
    AI・MLには、前処理 (データクレンジング、変換・集計・加工) が
    欠かせませんが、Elixir+Phoenix+Vue.jsで開発したOSS
    「Esuna」を使えば、UI上でデータ処理を設定でき、AI・MLへと
    スムースにデータを流せます

    View Slide

  13. AI学校「AIジョブカレ」の福岡代表&講師やってます
    AI権威の松尾研出身で「詳解ディープラーニング」著者、
    巣籠さん監修のAI学校、現役のエンジニアが講義中
    https://www.aijobcolle.com/

    View Slide

  14. View Slide

  15. 2019年1月にGCPUG kitakyuを発足しました
    初回から、GCE/GKE/CloudSQL/BigQuery ML
    (とElixir)で動くアプリをライブデモする実践セッション

    View Slide

  16. 15
    本編ここから

    View Slide

  17. 16
    目次
    1. BigQuery/BigQuery MLとは?
    2. KaggleをBigQuery MLで攻略する
    3. BigQuery入門
    4. BigQuery ML入門
    5. Kaggleで予測結果を評価してもらう

    View Slide

  18. 17
    1.BigQuery/BigQuery MLとは?

    View Slide

  19. 18
    1.BigQuery/BigQuery ML (BQML) とは?
    BigQueryは、GCPで提供される、ペタバイト級のビッグデータを
    手軽に扱えるデータウェアハウスです
    ポピュラーなSQLにより、既存DBと同じ操作感を実現しつつ、
    巨大なデータを数秒で処理できる (裏でオートスケールされる)、
    容易性と高速処理を両立した、列指向ストレージです
    https://cloud.google.com/bigquery/
    BigQuery ML (Machine Learning) は、上記BigQuery
    に投入済のデータから、SQLだけで機械学習モデルの自動構築
    と予測ができる、新世代のAI・ML開発環境です
    https://cloud.google.com/bigquery/#bigqueryml

    View Slide

  20. 19
    2.KaggleをBigQuery MLで攻略する

    View Slide

  21. 20
    2.KaggleをBigQuery MLで攻略する
    Kaggleとは、全世界のデータサイエンティストが賞金獲得を争う
    コンペサイトで、上位入賞者は高額でヘッドハンティングされます
    今回、BigQuery MLを使って、このKaggleのコンペを攻略して
    みたいと思います

    View Slide

  22. 21
    2.KaggleをBigQuery MLで攻略する
    対象コンペとして、Kaggleで最も有名なチュートリアル的存在、
    「タイタニック生存者予測」を扱います
    (上部「Data」から訓練データとテストデータをダウンロードします)

    View Slide

  23. 22
    2.KaggleをBigQuery MLで攻略する
    ちなみに、データ前処理は、Elixirで開発したデータサイエンス
    OSS「Esuna」を使って実施しました (手順は下記コラム参照)
    https://qiita.com/piacere_ex/items/ab0b32c521293d4ab38e

    View Slide

  24. 23
    3.BigQuery入門

    View Slide

  25. 24
    3.BigQuery入門
    「BigQuery」は、GCPメニュー下方にあります

    View Slide

  26. 25
    3.BigQuery入門
    左メニューのインスタンスを選び、「データセットを作成」をクリック

    View Slide

  27. 26
    3.BigQuery入門
    データセットはDB的な存在で、配下にテーブル追加できます
    日数指定で自動削除も可能です
    (うっかり課金が気になる方はコレ)

    View Slide

  28. 27
    3.BigQuery入門
    「テーブルを作成」でテーブル作成およびデータ投入ができます

    View Slide

  29. 28
    3.BigQuery入門
    GCS/アップロード/GoogleDriveで投入データを指定します

    View Slide

  30. 29
    3.BigQuery入門
    投入データのフォーマットは、CSV含む5種類から選べます

    View Slide

  31. 30
    3.BigQuery入門
    テーブルの列型は、投入データから「自動検出」で判別できます

    View Slide

  32. 31
    3.BigQuery入門
    CSVにヘッダー行がある場合は、「スキップするヘッダー行」に「1」
    を指定してください (先々月は要らなかった…)

    View Slide

  33. 32
    3.BigQuery入門
    投入データから「自動検出」された列型でテーブル作成されます

    View Slide

  34. 33
    3.BigQuery入門
    投入データの行数が正しいかを「詳細」タブで確認します

    View Slide

  35. 34
    3.BigQuery入門
    投入データの内容は、「プレビュー」タブで確認できます

    View Slide

  36. 35
    3.BigQuery入門
    「クエリエディタ」でSQLを編集/実行できます

    View Slide

  37. 36
    3.BigQuery入門
    結果は、DL/テーブル保存/GoogleDrive保存が選べます

    View Slide

  38. 37
    3.BigQuery入門
    SQLは、「クエリを保存」「保存したクエリ」で保存/復帰できます

    View Slide

  39. 38
    3.BigQuery入門
    「クエリをエディタで開く」か[↓]アイコンでSQLを再編集できます

    View Slide

  40. 39
    3.BigQuery入門
    ■注意点
    • scikit-learnやKerasで利用することを想定した前処理後
    のデータを投入する場合、キーが削除済みであることが多い
    ですが、キーが無いと、BigQueryではソートできなくなるため、
    キーが残っているデータを使ってください
    • 特徴量と正解データは、分割されていない方が、BigQuery
    では扱いやすいです (分割されていても、joinすればOK)

    View Slide

  41. 40
    4.BigQuery ML入門

    View Slide

  42. 41
    4.BigQuery ML入門
    モデル構築は、SQLの「create model」で行います

    View Slide

  43. 42
    4.BigQuery ML入門
    create modelでは、モデルタイプとして、以下2つが選べます
    ① linear_reg…線形回帰モデル
    ② logistic_reg…ロジスティック回帰モデル
    続くselect文にて、特徴量 (入力データのこと、キー列は削除)
    と正解データのセットを設定しますが、正解データの列名として、
    「label」という固定列名を指定する必要があります
    create model titanic.linear_model
    options( model_type = 'linear_reg' ) as
    select
    --t.PassengerId,
    t.Pclass, t.Sex, t.Age, t.SibSp, t.Parch, t.Fare, t.Embarked,
    s.Survived as label -- 正解データは「label」とする必要がある
    from titanic.fit_train t, titanic.fit_supervised s
    where t.PassengerId = s.PassengerId

    View Slide

  44. 43
    4.BigQuery ML入門
    【参考:機械学習、ディープラーニングに詳しい方向け】
    option指定できるパラメータは、機械学習やディープラーニング
    をやっている方には、お馴染みのものが利用できます
    https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-create

    View Slide

  45. 44
    4.BigQuery ML入門

    View Slide

  46. 45
    4.BigQuery ML入門

    View Slide

  47. 46
    4.BigQuery ML入門

    View Slide

  48. 47
    4.BigQuery ML入門
    モデルによる予測は、「ml.predict」で行います

    View Slide

  49. 48
    4.BigQuery ML入門
    ml.predictで、テストデータと予測値「predicted_label」が
    セットになったものが返ってくるので、Kaggle提出用の加工として、
    キーの「PasesngerId」と、予測値を「Survived」と列名変更
    した2列を出力します
    なお、キーでソートしないと、データ順がバラバラになるので、
    order byでキーを指定しておきます
    select
    PassengerId,
    predicted_label as Survived
    from
    ( select * from
    ml.predict( model titanic.linear_model, table titanic.fit_test ) ) predict
    order by PassengerId

    View Slide

  50. 49
    4.BigQuery ML入門
    結果は、CSV/JSONダウンロードしたり、テーブル化できます

    View Slide

  51. 50
    4.BigQuery ML入門
    ■注意点
    • predicted_labelが、欲しい答えの桁になっていない場合
    (たとえば、0/1が欲しいところが、小数点数値で返ってきて
    いる等)は、データ加工が必要です

    View Slide

  52. 51
    5.Kaggleで予測結果を評価してもらう

    View Slide

  53. 52
    5.Kaggleで予測結果を評価してもらう
    「Submit Predictions」から結果CSVをアップロードします

    View Slide

  54. 53
    5.Kaggleで予測結果を評価してもらう
    線形/ロジスティック共にスコア更新ならずも、DLの結果に肉薄
    以前、適当なKerasモデルで出したスコア
    https://qiita.com/piacere_ex/items/771389e1fe66dcf795c5
    今回、BigQuery MLで出したスコア
    (Kerasモデルより0.02低い)

    View Slide

  55. 54
    ご清聴ありがとうございます

    View Slide