データ分析・機械学習OSSの新潮流とその活用

 データ分析・機械学習OSSの新潮流とその活用

2月2日に開催された「情報処理学会・ソフトウェアジャパン2018・ITフォーラムセッション・ビッグデータ活用実務フォーラム」の資料。

https://www.ipsj.or.jp/event/sj/sj2018/ITF_Bigdata.html

8a7e83d2e447783ab6d824f553429a09?s=128

Shinichi Takayanagi

February 02, 2018
Tweet

Transcript

  1. 情報処理学会・ソフトウェアジャパン2018 ITフォーラムセッション・ビッグデータ活用実務フォーラム データ分析・機械学習OSSの 新潮流とその活用 2018年2月2日(金) LINE株式会社DataLabs 高柳慎一

  2. •自己紹介 •機械学習OSSの新潮流とその活用 •TensorFlow/Stan/scikit-learn •Prophet •Lime •まとめ Agenda

  3. 自己紹介

  4. 自己紹介 •氏名:高柳慎一(タカヤナギ シンイチ) •所属:LINE株式会社・DataLabs •興味:統計科学・プログラミング •Twitter: @_stakaya 4

  5. データ分析・機械学習OSSの 新潮流とその活用

  6. TensorFlow/Stan/scikit-learn

  7. TensorFlow •Dataflow Graph(DFG)による機械学習ライブラリ •Dataflowグラフを作って、その後計算(Define and Run) • 即時実行(eager execution)の機能も…(v1.5~) •TensorFlowの上に載っているライブラリが、逆に

    TensorFlowから叩ける方向に • Edward(確率的プログラミング) https://discourse.edwardlib.org/t/edward-is-officially-moving-into-tensorflow/387 • Keras(Deep Learning)
  8. TensorFlow •コードが計算グラフと対応付けられる TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems、Figure1,

    2 より
  9. TensorFlow •KerasはTensorFlowの中から叩ける •tf.kerasのコード例(あまりみないので) • 所謂、深層学習超入門なコード •まずMNISTのデータを用意&簡単な前処理

  10. TensorFlow •適当なモデル構築 •当てはめ&評価(97%くらいの正解率)

  11. Stan •確率的プログラミング言語 • データに確率モデルを当てはめる • Domain Specific Language (ドメイン特化言語) •HMCベースの推定

    • Hamiltonian Monte Carlo ※その中でもNo-U-Turn Samplerを使用 •事後分布からのモデルパラ メータのサンプリングが可能 •ビジネスに必要な統計モデリ ングを行える 単回帰モデルの例
  12. Stan パラメータの事後分布 自己相関のチェック

  13. scikit-learn • (皆大好き)Pythonの機械学習ライブラリ • 私は2013年頃に使ってその後Rに完全に転向 • 久しぶりに調べたら強力な機能が多数追加されていた… • sklearn.pipeline:2011年頃から機能は存在 •

    sklearn.model_selection: v0.18(2016年9月~) • 元々あったcross_validation, grid_search等を統合
  14. scikit-learn •複数モデル のハイパー パラメータ 探索がとて も楽に •前処理も組 み込める (pipeline)

  15. Prophet

  16. Prophet •時系列予測ツール • 統計知識不要(規定のモデルが存在) • ドメイン知識をファクターとして追加可能 • 精度評価で品質保証 ・0.3が目下開発中で、いろんな時系列評価指標が導入予定 •予測を”誰でもできる”という意味でスケール化

    •(言わずもがな)ビジネス活用としては、時系列系の予 測にガンガン使える ※詳しくは https://research.fb.com/publications/forecasting-at-scale/ を参照
  17. Prophet •テストデータに対する予測モデル構築 •prophet()にデータを食わせるだけ > tail(df) # A tibble: 6 x

    2 ds y <date> <dbl> 1 2014-05-22 60.52 2 2014-05-23 61.35 3 2014-05-27 63.48 4 2014-05-28 63.51 5 2014-05-29 63.83 6 2014-05-30 63.30
  18. Prophet •予測&その結果の可視 化もとても簡単

  19. Prophet •トレンドや週・月次レ ベルでの周期成分の推 定も自動で実行 • 直観的なのでビジネ スへの応用も簡単

  20. Prophet • version 0.2以降の新機能 • ここからが日本語情報として新しい • 時系列に対する予測精度検証機能の追加 • Simulated

    Historical Forecast/Cross Validation • version 0.3ではMAE等の指標計算も追加(現在開発中) # A tibble: 6 x 6 ds y yhat yhat_lower yhat_upper cutoff <dttm> <dbl> <dbl> <dbl> <dbl> <dttm> 1 2014-05-22 60.52 57.32036 53.94323 60.50448 2014-05-21 2 2014-05-23 61.35 57.38214 54.24548 60.61913 2014-05-22 3 2014-05-27 63.48 56.58093 53.35988 59.91789 2014-05-26 4 2014-05-28 63.51 57.19061 54.08438 60.61684 2014-05-27 5 2014-05-29 63.83 57.90791 54.37177 61.32794 2014-05-28 6 2014-05-30 63.30 58.28859 55.04133 61.55597 2014-05-29
  21. LIME

  22. LIME • KDD2016にて公表された以下の論文 • "Why Should I Trust You?": Explaining

    the Predictions of Any Classifier, Marco Tulio Ribeiro, Sameer Singh, Carlos Guestrin • Local Interpretable Model-agnostic Explanations • モデルフリーに局所的に(複雑な)モデルを解釈する手法 • LIMEにより各説明変数の寄与が読める・意思決定に資する http://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf より
  23. LIME •(実際には非線形変換してようが高次元の空間に特徴量 を埋め込んでいようが)最終結果は人がわかる形にして くれる •アルゴリズムのコンセプト • πで決まる局所的な範囲で、解釈可能なモデル群 (G)の中で、もっとも(解釈しにくい)元のモデルfを 説明できる、正則化した(Ωの項)g∈Gを見つける http://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf

    より
  24. LIME •2値クラス分類の例 • +付近のデータを使用 誤差を入れた&次元を削ったデータを生成 • 例だと線形モデルで近似 •R・Python実装がある • https://github.com/marcotcr/lime

    • https://github.com/thomasp85/lime http://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf より
  25. LIME •まずはmlrパッケージで予測モデルを構築 • mlr: 次世代版の汎用Machine Learningパッケージ

  26. LIME •lime()にデータとモデルを食わせる •explain()で指定したデータの局所解釈を作成 • glmnet(L1+L2なロジスティック回帰)で説明 case label feature feature_weight feature_desc

    data 1 116 virginica Sepal.Length 0.0095341177 5.8 < Sepal.Length <= 6.4 6.4, 3.2, 5.3, 2.3, 3.0 2 116 virginica Petal.Length 0.4583012101 5.10 < Petal.Length 6.4, 3.2, 5.3, 2.3, 3.0 3 36 setosa Species 0.0008123117 Species = setosa 5.0, 3.2, 1.2, 0.2, 1.0 4 36 setosa Petal.Length 0.4377915136 Petal.Length <= 1.60 5.0, 3.2, 1.2, 0.2, 1.0 5 4 setosa Sepal.Width -0.0010979380 3.0 < Sepal.Width <= 3.3 4.6, 3.1, 1.5, 0.2, 1.0 6 4 setosa Petal.Length 0.4591607286 Petal.Length <= 1.60 4.6, 3.1, 1.5, 0.2, 1.0 7 111 virginica Species 0.0042950996 Species = virginica 6.5, 3.2, 5.1, 2.0, 3.0 8 111 virginica Petal.Width 0.4008624393 1.8 < Petal.Width 6.5, 3.2, 5.1, 2.0, 3.0 9 37 setosa Sepal.Length 0.0097798516 5.1 < Sepal.Length <= 5.8 5.5, 3.5, 1.3, 0.2, 1.0 10 37 setosa Petal.Length 0.4625155191 Petal.Length <= 1.60 5.5, 3.5, 1.3, 0.2, 1.0
  27. LIME

  28. まとめ

  29. まとめ •OSSの新潮流とその活用について簡単に紹介 • TensorFlow/Stan/scikit-learn • Prophet • Lime •道具(TOOL)は揃ってきている •

    これらを活用して何をやるかが重要 (…という話をパネルディスカッションするんだと思っています) 29
  30. THANK YOU

  31. その他(動向を見ておきたい) • Rust • サードパーティー製のライブラリがある程度 • https://github.com/AtheMathmo/rusty-machine • https://github.com/sebcrozet/nalgebra •

    Go • https://github.com/gonum/gonum • https://github.com/sjwhitworth/golearn • Facebook Research • https://github.com/facebookresearch • Facebook • https://github.com/facebook