Date: 2017-09-26
Tags: bpstudy, 機械学習

#bpstudy 121: 地に足をつけて学ぶ機械学習、データサイエンス に参加しました

BPStudy #121 地に足をつけて学ぶ機械学習、データサイエンス に参加しました。

第1部 if文から機械学習への道

../../../../_images/nishio.jpg

西尾さん


  • if文の条件

    • if文の条件True/Falseの組み合わせがたくさんあると実装が大変

    • True/Falseを1/0に置き換えて、合計値が幾つ以上ならOKとする -> 数式化

    • 条件それぞれの重要度を設定する -> 重み付け

    • if文の組み合わせを数式化したものが一番原始的な機械学習(パーセプトロン)

  • 「資料半分を10分で紹介しちゃった!遅刻したテンションでしゃべっちゃった」w

ビジネスでは

  • 精度が高いことより、ビジネス要件を満たすこと

    • 50%の精度でも多少利益がある状況で、60%の精度に上げるだけで数倍の利益を得られることも

    • 最新の論文を追って99%の精度が出せても、利益が増えなければ意味がないかも

  • 顧客も自分もやり方が分からない

    • 株価を予測して大もうけしよう

    • 自分も誰もそんな方法があるのか分からない

    • 機械学習は、誰も知らない方法を実現するものではない

    • でも時々大量のデータがあればうまくいってしまうこともあって、話がややこしくなっている

    • 大量のデータってどのくらいあればいいですか、100行くらいあればいいですか(笑)

    • 最低1万行、画像認識ならもっとたくさん必要

  • 実行してみて顧客に見せる

    • 顧客に見せるのが怖い

    • 必要な品質に達していない

    • 必要な品質とはなにか。予測精度?売上が増えること?

    • 精度が重要と開発者が思っていても、顧客もそうだとは限らない

      • (メモ:顧客も精度が重要だと思ってたけど、実際には違った、ということもありそう。ゴールを模索するときにありがち)

    • 顧客に見せたら満足しなかった

      • その不満を明らかにすれば精度が上がる!(メモ:前提が変わることもありそう)

  • ロジスティック回帰の能動学習

    • ロジスティック回帰は「判断の自信」(probability)付きで結果を出す

    • 自信がない結果(可能性51%など)を見て、そこに自信を与えるような教師データの追加を行って改善する

    • これを能動学習という

  • まとめ

    • ビジネスでは顧客価値が重要

    • 顧客も自分も何が顧客価値かを正確に理解していない

    • 徐々に具体化して改善していく

Q&A

  • Q (Aさん) イメージを湧かすために実例を聞きたい。機械学習をリリースする場合にどのくらいのコストがかかるのか知りたい

    • A: 短い回答:ケースバイケース

    • A: ロジスティック回帰で87%の精度が出て顧客が満足すればそれで完了

    • A: 満足しなかった場合、どこまでかかるか分からない

  • Q (Aさん) モデルが一度できたら更新しなくても良いのか?

    • A: 元データの分布が変化しやすい場合かどうかで変わります

    • A: WIFIの強度情報で位置識別をするモデルが一度できても、周りのWIFI環境が変わったらそのモデルでは通用しなくなっていく

    • A: 日本語の単語分布などはそう簡単に変わらない。スパム判別などはこの例

  • Q (Bさん) ナイーブベイスで失敗したケースでも、ロジスティック回帰で能動学習したほうが良いですか?

    • A: ナイーブベイズも確率値を出せるので、ナイーブベイズで能動学習をすれば良いです

    • A: 確率値を出せるアルゴリズム、出せないアルゴリズムがあるので、それ次第です

  • Q (Cさん) あるデータに対して事前に精度は見積もれないが、ビジネスでは価格見積もりを出してくれと言われるのだけど、どうしたら良いですか

    • A: 精度は保証できない、ということを事前にちゃんと合意しておく

    • Q: 顧客が支払える額には上限があるけど、その期間いっぱいで研究開発するのでしょうか?

    • 寺田: 顧客満足度をどう見るかではないでしょうか

    • 治夫: はい、金額と期間で合意を取っておいてやります。プロセスとリスクを説明して合意してもらうのが重要

    • 西尾: 成果を確約する契約はヤバいのでやめましょう

    • Q: いままさにヤバくなりかけていて...(笑

  • Q (治夫さん): ルールベースと言われても、ルールが全く分からない場合はどうしたら良いですか?

    • A: ルールを言葉にできるかどうか

    • A: 雑なキーワード判定プログラムを書いてみて、キーワードを追加したり除外したりといったルールを調整してく

    • A: ルールが分からない状態でも機械学習でできるかというとそんなことはない。結局、機械学習の特徴量を作るところでつまづく

  • Q (Dさん) ルール化できるならアルゴリズムを書けるはずなので機械学習はいらないのでは?

    • A: 完全に書けるなら、プログラムで書いた方がよいです

    • A: 全ての条件を書けない場合に機械学習が登場します

    • A: アルバイトにマニュアルが100%渡せるなら、アルバイトのコストが安いなら、機械学習せずにやらせた方が良いです

    • A: マニュアルは100%にできないし、アルバイトは24時間働けないので、そこで機械学習が登場します

    • A: マニュアル作りは完璧である必要はない、まずはそれで動かしてみて、段階的に調整していきます

  • Q (Eさん) ゴミデータをどう除去するといいのか、1TBの巨大データをどうやって扱うといいのか

    • A: ゴミデータを綺麗にする方法は、人間ががんばるしかない

    • A: 巨大データの場合、一部の小さいデータでやってみて、データ量に応じて精度が変わっていくなら、データを増やしていくと良い

    • A: いきなり全部のデータを使うと、学習にも時間がかかるし、その時点では顧客価値が高く出来るかも分からない

感想

技術顧問してもらっているプロジェクトに自分がいるので、この考え方で日々助けられてます。

普通の開発と似ているなあ

  • 顧客から雑に渡されたデータで精度高い予測が出来る様になっても、顧客価値が増えることはない

  • 顧客から雑に頼まれたWebサイト開発を、開発者の技術をつぎ込んで開発しても、顧客価値が増えるわけではない

第2部 今データサイエンスが必要とされる理由とPythonの役割

../../../../_images/tsuji.jpg

辻さん


  • データサイエンス

    • データ駆動型サイエンス、から来ている

    • じゃあサイエンスとは? 仮説を立てて観測して評価する、というサイクルをぐるぐるまわす

    • データドリブンサイエンス: データがたくさんあるので、データ観察によって仮説を立てよう

  • データが多すぎる

    • 少し前だと現実的じゃなかった

    • 時代が追いついて解析できるようになった

    • 最近だと、ヒッグス粒子の発見にPythonが使われていてJupyter Notebookが公開されている

    • 多すぎるデータに対して、サイエンスが必要じゃないかと

  • Python急成長

  • Pythonで出来ることが増えてきた

    • pair plot もmatplotlibでがんばらないといけなかったのが seaborn の Pair Plot でできるようになった

    • mathmaticaのnotebookも、Jupyter Notebookで実現できている

    • どんどんPythonに移植されていっている

  • サイエンスの再現性

    • 事例: 2006年に抗がん剤の効きを予測する画期的な論文 -> 再現しない -> おかしい -> 全部ウソだった!! (Anil Potti)

    • サイエンスの世界で再現性は重要

    • オープンな基盤を使うのが重要(Mathmatica等のクローズドな環境は用意から大変)

    • オープンサイエンスという動きが世界中で起き始めている -> 実験環境から実験データまでオープンにしてしまう

  • まとめ

    • データサイエンスはデータ駆動型サイエンス

    • Pythonでやる意義は、汎用言語でやることにある

    • 再現性は重要、Pyhtonなどのオープンソースであれば再現性が確保しやすい

Q&A

  • Q (Fさん)お客さんは、日本語の相談文章を解析して何をしたかったのでしょう?

    • A: 最初は、自動で占いに答えるプログラムを作りたかった

    • A: 文章を分類できるようになったので、占い師の入門者向けにその情報を提供しようとしている

  • Q (Gさん)RとPythonをどう使い分けたら良いでしょうか?

    • A: 自分が欲しい関数(機能)があるかどうかで決めると良いと思う

    • A: 生存時間曲線というのを書こうとすると、Pythonにないので、Rで書きます

  • Q (Hさん)データ量に対してR/Pythonを使い分けることはありますか?

    • A: Pythonの方がデータ量には多少強いので、Pythonで助けることはあります

感想

全体的に知らない単語が多かったので、ちょっと難しかった..