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

Rubyにおける機械学習と統計分析のための環境整備の取り組み

 Rubyにおける機械学習と統計分析のための環境整備の取り組み

Ruby Business Users Conference 2017

Kenta Murata

February 23, 2017
Tweet

More Decks by Kenta Murata

Other Decks in Technology

Transcript

  1. Rubyにおける機械学習と
    統計分析のための

    環境整備の取り組み
    Kenta Murata
    Speee Inc.
    2017.02.23
    Ruby Business Users Conference 2017
    Rubyにおける機械学習と
    統計分析のための

    環境整備の取り組み
    Kenta Murata
    Speee Inc.
    2017.02.23
    Ruby Business Users Conference 2017

    View Slide

  2. Ruby Business Users Conference 2017 (2017.02.23)
    self.introduction
    • Kenta Murata (mrkn)
    • Speee Inc.
    ‣ Researcher
    • CRuby committer
    ‣ A bigdecimal maintainer

    View Slide

  3. Ruby Business Users Conference 2017 (2017.02.23)
    gems
    • bigdecimal
    • enumerable-statistics
    • daru-td
    • iruby-rails

    View Slide

  4. Ruby Business Users Conference 2017 (2017.02.23)
    謝辞

    View Slide

  5. Ruby Business Users Conference 2017 (2017.02.23)
    はじめに

    View Slide

  6. Ruby Business Users Conference 2017 (2017.02.23)
    Topics
    • 統計分析、機械学習、データサイエンスに
    ついての基礎知識
    • Ruby ではデータサイエンスのお仕事はで
    きない → なぜか?
    • Ruby のためのデータサイエンス環境整備
    プロジェクトの進捗

    View Slide

  7. Ruby Business Users Conference 2017 (2017.02.23)
    今日の流れ
    • はじめに
    • 統計分析と機械学習
    • Ruby とデータサイエンスの関係
    • Ruby のためのデータサイエンス環境
    • まとめ

    View Slide

  8. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析と機械学習
    • はじめに
    • 統計分析と機械学習
    • Ruby とデータサイエンスの関係
    • Ruby のためのデータサイエンス環境
    • まとめ

    View Slide

  9. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析と機械学習
    • 数学と計算機科学のサブカテゴリ
    • データから知識を取り出す仕組み
    • データサイエンスで使う道具

    View Slide

  10. Ruby Business Users Conference 2017 (2017.02.23)
    データサイエンス
    • ビッグデータ
    ‣ 政府や企業が大量にデータを蓄積している
    • サイエンス
    ‣ 大量のデータから科学的な知識を取り出し
    て政策や事業開発に活かしたい

    View Slide

  11. Ruby Business Users Conference 2017 (2017.02.23)
    データサイエンスのイメージ

    View Slide

  12. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析? 機械学習?
    • データサイエンスのための手法
    • 既知のデータ (訓練データ) から統計
    モデルを作る
    • 何が違う?

    View Slide

  13. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析と機械学習の違い

    View Slide

  14. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析
    • 統計分析で作った統計モデルの目的
    ‣ 統計モデルを使って既知のデータの性質
    を説明する
    • 要求されること
    ‣ 統計モデルの中身が解釈しやすいこと
    ‣ 過学習していないこと

    View Slide

  15. Ruby Business Users Conference 2017 (2017.02.23)
    データの性質の説明
    • 「なぜそうなるのか?」を説明できること
    ‣ 例1: 一般化線形モデル
    - 目的変数に対する説明変数の関与の仕方: 線形結合
    ‣ 例2: 単一決定木
    - サンプルを分ける規準: ジニ係数, エントロピー
    ‣ 例3: 統計的検定、ベイズ推定
    - 「どうしてそうなるのか?」の確率を与える
    • シンプルな統計モデルを利用する必要がある
    ‣ 未知のデータに対する予測性能は頭打ちになる

    View Slide

  16. Ruby Business Users Conference 2017 (2017.02.23)
    機械学習
    • 機械学習で作った統計モデルの目的
    ‣ 未知のデータに対して良い精度の予測を
    与える
    • 要求されること
    ‣ 予測の精度が高いこと
    ‣ 過学習していないこと

    View Slide

  17. Ruby Business Users Conference 2017 (2017.02.23)
    良い精度の予測
    • 大量の訓練データを使用
    ‣ できるだけ広いケースで学習したい
    • 交差検定による過学習の回避
    ‣ 統計モデルが複雑でも過学習しないように
    • ハイパーパラメータの機械的な最適化
    • 複数の統計モデルを組み合わせて精度を高める
    ‣ 予測結果を説明する必要がないから可能

    View Slide

  18. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析と機械学習の違い
    • 統計モデルに対して解釈性と予測性のど
    ちらを求めるか
    ‣ 統計分析では解釈性
    ‣ 機械学習では予測性
    • 理論的背景は同じ
    • 人間と機械のどちらが学ぶか?

    View Slide

  19. Ruby Business Users Conference 2017 (2017.02.23)
    人間と機械のどっちが学ぶか?
    統計モデル
    統計分析
    機械学習

    View Slide

  20. Ruby Business Users Conference 2017 (2017.02.23)
    機械 に 学習 させる

    View Slide

  21. Ruby Business Users Conference 2017 (2017.02.23)
    機械 に 学習 させる
    • 人間が自然に行っている学習能力 を

    コンピュータ上で実現するための技術
    • 問題の解き方を直接プログラムとして
    記述せずに、いろいろ 試行錯誤を通し
    て正しい解き方を見つけ出す ように記
    述されたプログラム

    View Slide

  22. Ruby Business Users Conference 2017 (2017.02.23)
    機械学習の厳密な定義
    あるプログラムの 問題 T に対する性能
    を 性能尺度 P で評価したとき 経験 E に
    よって性能が向上しているとき、

    そのプログラムは 問題 T と 性能尺度 P
    について 経験 E から 学習 している

    View Slide

  23. Ruby Business Users Conference 2017 (2017.02.23)
    例: 料理レシピのジャンル分類
    • 問題 T
    ‣ レシピのジャンルを予測
    • 経験 E
    ‣ レシピに対する適切なジャンルを人間が指定する
    • 性能尺度 P
    ‣ ジャンル予測が正しかったレシピの件数

    View Slide

  24. Ruby Business Users Conference 2017 (2017.02.23)
    プログラムが経験から学習

    View Slide

  25. Ruby Business Users Conference 2017 (2017.02.23)
    なぜ統計分析や機械学習が

    必要なのか?
    • ビジネス上の意思決定をデータに基づいて
    行うことが主目的
    • 統計分析や機械学習の利用は必須ではない
    • 大量のデータから知識を取り出してビジネ
    スに活かすには、特に機械学習の利用は避
    けられない

    View Slide

  26. Ruby Business Users Conference 2017 (2017.02.23)
    機械学習によって実現できること
    • 人間には不可能なタスク
    • 手書きのプログラムで直接表現できな
    いタスク
    • プログラムが自ら変化することで正解
    が変化する問題に対応する

    View Slide

  27. Ruby Business Users Conference 2017 (2017.02.23)
    人には不可能なタスクの例
    • 大量のデータから知識を取り出す
    ‣ 医療診断記録から予後を予測
    ‣ 10万人のユーザを購買履歴に基づいて
    グループ分けする方法
    ‣ Web のクリックログから将来のコン
    バージョンを予測

    View Slide

  28. Ruby Business Users Conference 2017 (2017.02.23)
    手でプログラミング

    できないタスクの例
    • 将棋や囲碁の指し手を求める
    • 自動車やヘリコプターの自動操縦
    • 手書き文字認識
    • 線画に対する自動色塗り
    • スパムメール判定

    View Slide

  29. Ruby Business Users Conference 2017 (2017.02.23)
    プログラムが自ら変化することで
    正解が変化する問題に対応する
    • ユーザの行動履歴に基づくコンテンツ掲出
    ‣ e.g. おすすめ商品の推薦
    • A/B テストにおける掲出パターン選択の自
    動最適化
    ‣ バンディットアルゴリズムと呼ばれてるやつ

    View Slide

  30. Ruby Business Users Conference 2017 (2017.02.23)
    要求されるスキルセットの違い
    • 統計分析では、統計モデルを理解する
    ための能力が要求される
    • 機械学習では、統計分析のプロセスを
    自動化するためのプログラミング能力
    も要求される
    ‣ 場合によってはインフラ構築・運用スキ
    ルまで要求される

    View Slide

  31. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析と機械学習
    • 統計分析はデータから人間が学んでビ
    ジネス上の意思決定に活かす
    • 機械学習はデータから機械が学び、そ
    の機械を人間が仕事に活用する
    • どちらも同じ道具を使うが、要求され
    るスキルセットが違う

    View Slide

  32. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby とデータサイエンスの関係
    • はじめに
    • 統計分析と機械学習
    • Ruby とデータサイエンスの関係
    • Ruby のためのデータサイエンス環境
    • まとめ

    View Slide

  33. Ruby Business Users Conference 2017 (2017.02.23)
    データサイエンスのワークフロー
    • データ収集
    • 探索的データ解析
    • データ・クレンジング
    • 複数データソースの統合
    • 前処理
    • 統計モデルの学習
    • 実世界への適用

    View Slide

  34. Ruby Business Users Conference 2017 (2017.02.23)
    統計分析・機械学習が

    絡むプロセス
    • データ収集
    • 探索的データ解析
    • データ・クレンジング
    • 複数データソースの統合
    • 前処理
    • 統計モデルの学習
    • 実世界への適用

    View Slide

  35. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby のみで完了できるもの
    • データ収集
    • 探索的データ解析
    • データ・クレンジング
    • 複数データソースの統合
    • 前処理
    • 統計モデルの学習
    • 実世界への適用

    View Slide

  36. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby ではデータサイ
    エンスはできない

    View Slide

  37. Ruby Business Users Conference 2017 (2017.02.23)
    なぜできないのか?
    • 使える道具がない
    • 使ってる人がいない
    • 作ろうとする人がいない

    View Slide

  38. Ruby Business Users Conference 2017 (2017.02.23)
    使える道具がない
    • 道具自体は存在する
    • でも実用的ではない
    • 品質も信頼できない

    View Slide

  39. Ruby Business Users Conference 2017 (2017.02.23)
    どんな道具があるか?
    • nmatrix
    • numo-narray
    • daru
    • statsamples
    • ai4r
    • etc.

    View Slide

  40. Ruby Business Users Conference 2017 (2017.02.23)
    実用的ではない
    • 機能が足りない
    • 道具間の連携が不十分
    • かなり頑張らなければならない

    View Slide

  41. Ruby Business Users Conference 2017 (2017.02.23)
    プルリクエストする?
    • データサイエンスがやりたいのである
    • データサイエンスのための道具を作る
    ことが目的でない
    • データサイエンスの道具を実装するの
    は、利用する人には結構大変

    View Slide

  42. Ruby Business Users Conference 2017 (2017.02.23)
    利用者と実装者の違い
    • 利用者に要求されるスキル
    ‣ 利用する道具の理論的背景
    ‣ ビジネス領域の知識と経験
    • 実装者に要求されるスキル
    ‣ 実装する道具の理論的背景
    ‣ 高度なコンピュータサイエンスの知識と経験
    ‣ 実装する道具に特有のプログラミング技能

    View Slide

  43. Ruby Business Users Conference 2017 (2017.02.23)
    品質も信頼できない
    • ユーザが少ない
    • 情報も少ない
    • 開発が継続していない

    View Slide

  44. Ruby Business Users Conference 2017 (2017.02.23)
    なぜできないのか?
    • 使える道具がない
    • 使ってる人がいない
    • 作ろうとする人がいない

    View Slide

  45. Ruby Business Users Conference 2017 (2017.02.23)
    使ってる人がいない
    • 使える道具がないから
    • Python と R を使ってる人が多い
    • Python と R の求人が多い

    View Slide

  46. Ruby Business Users Conference 2017 (2017.02.23)
    作ろうとする人がいない
    • 作ることが目的の人は少ない
    • 使われないものを作りたい人は少ない
    • 作り始めようとすると障壁が大きい

    View Slide

  47. Ruby Business Users Conference 2017 (2017.02.23)
    障壁の例
    • 数値配列、グラフィックスなどの基礎
    となるライブラリの定番がない
    • 仕事では Python と R を使っているの
    で、作っても使う機会がなさそう

    View Slide

  48. Ruby Business Users Conference 2017 (2017.02.23)
    負のサイクル
    • Ruby でデータサイエンスができない
    状態がより強くなる経済原理が働いて
    いる
    • できるだけ早く Ruby でデータサイエ
    ンスができる状態を作ってユーザを集
    め、負のサイクルを止める必要がある

    View Slide

  49. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby のためのデータサイエンス環境
    • はじめに
    • 統計分析と機械学習
    • Ruby とデータサイエンスの関係
    • Ruby のためのデータサイエンス環境
    • まとめ

    View Slide

  50. Ruby Business Users Conference 2017 (2017.02.23)
    求められる条件
    • 実用的に使える機能と品質を持つものでないと
    使ってもらえない
    • Python や R で作られた資産を捨てずに使い続
    けられないと使ってもらえない
    • できれば1年くらいでシュッと実現したい
    ‣ 早くしないと Ruby が使われなくなっちゃうかも

    View Slide

  51. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby から Python と R
    をそのまま使えれば良い

    View Slide

  52. Ruby Business Users Conference 2017 (2017.02.23)
    他の言語をそのまま使う
    • 主流の環境を Ruby からそのまま利用できる
    • スイッチングコストが低いのでユーザを集め
    やすい
    ‣ 知ってる技術だから
    ‣ 既存の資産を使い続けられる
    • ユーザが集まれば、Ruby のための独自システ
    ムを作るサイクルが軌道にのるかも

    View Slide

  53. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall を作り始めた

    View Slide

  54. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall
    Ruby と Python の橋渡し

    View Slide

  55. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall
    • Ruby から Python の処理系を呼び出
    せるようにする
    • Python のオブジェクトを Ruby から
    操作できる (一部実装完了)
    • Ruby のオブジェクトを Python から
    操作できる (未実装)

    View Slide

  56. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall の使い方
    $ git clone https://github.com/mrkn/pycall.git
    $ git checkout -t origin/eval
    $ bundle install
    $ bundle exec ruby example/hist.rb
    ⚠ まだ実用段階ではない

    View Slide

  57. Ruby Business Users Conference 2017 (2017.02.23)
    デモンストレーション

    View Slide

  58. Ruby Business Users Conference 2017 (2017.02.23)

    View Slide

  59. Ruby Business Users Conference 2017 (2017.02.23)

    View Slide

  60. Ruby Business Users Conference 2017 (2017.02.23)

    View Slide

  61. Ruby Business Users Conference 2017 (2017.02.23)

    View Slide

  62. Ruby Business Users Conference 2017 (2017.02.23)
    Python → Ruby
    # Python のこのコードを
    from sklearn.datasets import fetch_olivetti_faces
    data = fetch_olivetti_faces()
    x = data.images.reshape((len(data.images), -1))
    y = data.target
    # 現状の PyCall を使って Ruby で書くとこうなる
    require 'pycall/import'
    import PyCall::Import
    pyfrom 'sklearn.datasets', import: 'fetch_olivetti_faces'
    data = fetch_olivetti_faces.()
    x = data.images.reshape.(PyCall.tuple(PyCall.len(data.images), -1))
    y = data.target

    View Slide

  63. Ruby Business Users Conference 2017 (2017.02.23)
    Python → Ruby
    # Python のこのコードを
    from sklearn.datasets import fetch_olivetti_faces
    data = fetch_olivetti_faces() # numpy.ndarray オブジェクト
    x = data.images.reshape((len(data.images), -1))
    y = data.target
    # 現状の PyCall を使って Ruby で書くとこうなる
    require 'pycall/import'
    import PyCall::Import
    pyfrom 'sklearn.datasets', import: 'fetch_olivetti_faces'
    data = fetch_olivetti_faces.()
    x = data.images.reshape.(PyCall.tuple(PyCall.len(data.images), -1))
    y = data.target
    不自然な部分を隠すための
    ラッパーライブラリを作る
    必要がある

    View Slide

  64. Ruby Business Users Conference 2017 (2017.02.23)
    Ruby VM Python VM
    OVNQZOEBSSBZ

    ΦϒδΣΫτ
    1Z$BMM1Z0CKFDU

    ΦϒδΣΫτ
    Python 側のオブジェクト
    のポインタを保持
    SFTIBQFؔ਺ͷ

    ΦϒδΣΫτ
    reshape 属性
    1Z$BMM1Z0CKFDU

    ΦϒδΣΫτ
    [2] call メソッドの呼び出し
    [3] PyObject_Call 関数の呼び出し
    例: NumPy 配列の reshape の動き
    [1] reshape 属性の取り出し

    View Slide

  65. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall の今後の開発予定
    • Python オブジェクトを Ruby から操作するための機能の完成
    • Ruby オブジェクトを Python から操作するための機能
    • Ruby ←→ Python 両方向のコールバック機能
    • PyCall が事前に知らない型変換のサポート
    • Python オブジェクトの IRuby 対応
    • PyCall を生で使った時の Ruby としての不自然さを隠すラッ
    パーライブラリの開発

    View Slide

  66. Ruby Business Users Conference 2017 (2017.02.23)
    PyCall 以外
    • R とのブリッジ
    • Julia とのブリッジ
    • Python、R、Julia、Ruby の4者間で
    の自然なデータ交換の実現
    • etc.

    View Slide

  67. Ruby Business Users Conference 2017 (2017.02.23)
    マイルストーン
    http://www.s-itoc.jp/report/reaserch_results/439
    図: 多言語ブリッジの開発計画(上段)とRuby Grant 2016(下段)との関係

    View Slide

  68. Ruby Business Users Conference 2017 (2017.02.23)
    ITOC Report
    • 『データサイエンスにおけるRubyの
    現在の位置づけと可能性』
    • http://www.s-itoc.jp/report/
    reaserch_results/439

    View Slide

  69. Ruby Business Users Conference 2017 (2017.02.23)
    まとめ
    • はじめに
    • 統計分析と機械学習
    • Ruby とデータサイエンスの関係
    • Ruby のためのデータサイエンス環境
    • まとめ

    View Slide

  70. Ruby Business Users Conference 2017 (2017.02.23)
    まとめ
    • Ruby でデータサイエンスができる世界を作るために
    ‣ Python の機能を Ruby から使うブリッジ機能を提供す
    るライブラリを開発中
    ‣ matplotlib, scikit-learn などが動く
    ‣ Ruby を Python に見せるブリッジも必要
    ‣ R と Julia のブリッジも開発する

    View Slide

  71. Ruby Business Users Conference 2017 (2017.02.23)
    sciruby.slack.com
    • Slack で意見交換をしましょう
    ‣ https://sciruby-slack.herokuapp.com/
    • 日本語でも英語でも可

    View Slide

  72. Ruby Business Users Conference 2017 (2017.02.23)
    まとめ
    • Ruby でデータサイエンスができる世界を作るために
    ‣ Python の機能を Ruby から使うブリッジ機能を提供す
    るライブラリを開発中
    ‣ matplotlib, scikit-learn などが動く
    ‣ Ruby を Python に見せるブリッジも必要
    ‣ R と Julia のブリッジも開発する
    https://sciruby-slack.herokuapp.com/

    View Slide