If文から機械学習への道

429 views

Published on

機械学習とif文が地続きであることを解説しました

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
429
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

If文から機械学習への道

  1. 1. if文から機械学習への道 2017-09-26 BPStudy#121 サイボウズラボ / BeProud技術顧問 理学博士 / 技術経営学修士 西尾泰和
  2. 2. 機械学習って 今書いてるプログラムから 遠い世界だと思ってませんか? 2
  3. 3. このスライドの目的 みんなのよく知っているif文と機械学習の 橋渡しをすることで地続きにし、 実務で機械学習を使えるようにする。 また、機械学習のビジネス導入の進め方を 4ステップに分けて一歩一歩解説する。 3
  4. 4. if文 if(`条件`){ … } 4
  5. 5. if文の仕組み 条件がTrueの時に、 中身を実行 5
  6. 6. 条件が複数ある時 条件x1と条件x2の どちらかがTrueの時に 実行したいなら、どうする? 6
  7. 7. or if(x1 or x2){ … } 7
  8. 8. 条件が複数ある時 条件x1と条件x2の 両方がTrueの時に 実行したいなら、どうする? 8
  9. 9. and if(x1 and x2){ … } 9
  10. 10. 条件が複数ある時 条件x1, x2, x3の内、 2つ以上がTrueの時に 実行したいなら、どうする? 10
  11. 11. 複雑! if((x1 and x2) or (x1 and x3) or (x2 and x3)){ … } 11
  12. 12. 条件が複数ある時 条件x1, x2, …, x5の内、 3つ以上がTrueの時に 実行したいなら、どうする? 12
  13. 13. 複雑! if((x1 and x2 and x3) or (x1 and x2 and x4) or (x1 and x2 and x5) or…){ … } 13
  14. 14. もっと良い方法がある! 14
  15. 15. 真偽値を数値にする Trueを1、Falseを0に変換すると 「3つ以上がTrue」は 「足したら3以上」に変わる。 if((x1 + x2 + x3 + x4 + x5) >= 3){ … } 15
  16. 16. andもorも同じ形にできる x1 and x2 and x3 and x4 and x5 = 条件x1, x2, …, x5の、すべてがTrue = 足したら5以上 x1 or x2 or x3 or x4 or x5 = 条件x1, x2, …, x5の、どれかがTrue = 足したら1以上 16
  17. 17. andもorも同じ形にできる 条件x1, x2, …, x5の、すべてがTrue (x1 + x2 + x3 + x4 + x5) >= 5 条件x1, x2, …, x5のうち3つ以上True (x1 + x2 + x3 + x4 + x5) >= 3 条件x1, x2, …, x5の、どれかがTrue (x1 + x2 + x3 + x4 + x5) >= 1 17
  18. 18. 右辺をそろえてみる 条件x1, x2, …, x5の、すべてがTrue(弱い) ( 𝟏 𝟓 * x1 + …) >= 1 条件x1, x2, …, x5のうち3つ以上True ( 𝟏 𝟑 * x1 + …) >= 1 条件x1, x2, …, x5の、どれかがTrue(強い) (1 * x1 + …) >= 1 18
  19. 19. 強さ=重み 条件の「強さ」のようなものが 係数(重み)の大きさで表現される。 19
  20. 20. 問 条件x1, x2, …, x5の、すべてがTrueまたは 条件x6, x7, …, x10のうち3つ以上Trueまたは 条件x11, x12, …, x15の、どれかがTrue を表現するにはどうすればよい? 20
  21. 21. 重みは条件ごとに異なってもよい 𝟏 𝟓 * x1 + … + 𝟏 𝟑 * x6 + … + 1 * x11 + … >= 1 21
  22. 22. 重み付き和の方法 真偽値のTrueを1、Falseを0にし、 条件の強さを重みにして掛け合わせ、 足し合わせることによって andやorの組み合わせでは苦労するような 複雑な条件を記述することができる。 22 否定が負の重みで実現できることと、xorが表現できないことは割愛
  23. 23. 重みはどうやって調整する? 1: 今やったみたいに人間が決める 2: 大量のデータを元に機械が決める=機械学習 23
  24. 24. 具体的なコード 今回解説した内容はロジスティック回帰 from sklearn.linear_model import LogisticRegression ってやって fit(X, y)を呼べば重みが自動調整されて predict(X)を呼べば重み付き和を計算して 判断してくれる。楽ちん。 24
  25. 25. まとめ 複雑な条件はand/orで書くのが大変。 重み付き和で置きかえると楽になる。 重みはデータが十分あれば 機械学習で決められる。 今回説明した程度のことは scikit-learnを使えば数行でできる。 25
  26. 26. ここまで 機械学習の技術 ここから 機械学習のビジネス 4つのステップ 26
  27. 27. アカデミアとビジネスの違い アカデミア • データが公開されている • 枯れた技術はとっくの昔に調査済み • 新しい手法を考案して精度を競い合う ビジネス • データが公開されてない 27 枯れた技術を使う
  28. 28. ビジネスの目的 顧客価値 28 新規性ではない
  29. 29. 問 ある宝石の原石は、割ると1/2の確率で宝石が 入っていて2万円で売れる。原石は1つ9500円で 買える。原石は硬いので1日に20個しか割れない Q1: 1日に稼げる期待値はいくらか Q2: 原石を割る速度を2倍にする機械が買えると する。期待値はいくら増えるか? Q3: 宝石の入った原石を60%の確率で当てる識別 器が買えるとする。期待値はいくら増えるか? 29
  30. 30. 答 A1: 1/2の確率で20000手に入るので、1個あたり の収入の期待値は10000。1個あたりの仕入れ価 格は9500なので、1個あたりの収益は500。1日に 20個処理できるので1日あたりの収益は10000。 A2: 1日あたりに処理できる量が2倍になる。つまり1 日あたりの収益が20000になる。この機械を導入 することで増える収益は1日あたり10000。 30
  31. 31. 答 A3: 60%の確率で20000手に入るので、1個あたりの 収入の期待値は12000。 1個あたりの仕入れ価格は9500なので、1個あた りの収益は2500。 1日に20個処理できるので1日あたりの収益は 50000。40000増える。 31
  32. 32. 教訓 この問題設定では、 「識別率50%を60%に上げる装置」が 「加工速度を2倍にする装置」よりも 4倍の顧客価値を持っている。 どの程度の精度でどの程度の顧客価値を 生み出すことができるかは ビジネス要件によって決まる。 32 精度は必ずしも重要ではない
  33. 33. ビジネス要件 精度を高めようと考える前に、 まず顧客が何を求めていて、 どういう制約条件があるのかを 明確化する必要がある。 最新の論文に書かれた手法を実装しても、 その手法が要求する量のデータを 顧客が用意できないのであれば、 その実装は顧客価値を持たない。 33
  34. 34. 顧客は専門家ではない 多くの場合顧客は機械学習の専門家ではないので 必要な精度も、満たすべき制約条件も、 明確に言語化することができない。 なので、これを高速に学び取ることが必要。 34
  35. 35. Minimum Viable Product ITベンチャー経営の方法論 「リーン・スタートアップ」で提唱された 考え方。ベンチャーは資金に限りがあるので 素早く顧客ニーズを理解しなければならない。 そこで、最小限のコストで雑な製品を作り、 それを実際に顧客に見せてみることで、 顧客のニーズがどこにあるのかを探る。 35
  36. 36. 最小限の実装=実装しない 「コンシェルジュ型MVP」と呼ばれる 36
  37. 37. ステップ1 人間がやると想定して次の質問に答えよう (1) 顧客は何がどうなると嬉しいのか (2) それを人間がやるならどうやってやるか (既にやっている人間がいるのか?いないのか?) 37
  38. 38. (2)人間がどうやってやるか 既にやっている人がいる、または、 やり方はわかる。 しかし時間や労力が掛かりすぎる。 → チャンス!機械化で時間や労力を減らすこと が顧客価値になる! 38
  39. 39. (2)人間がどうやってやるか 顧客側などでやっている人がいる、しかし、 自分はやり方がわからない。 → 何か重要な情報の伝達漏れが発生している。 39
  40. 40. (2)人間がどうやってやるか 人間がやる方法を、顧客も自分もわからない → そもそも無茶なことを妄想している可能性。 40
  41. 41. 例: スパムフィルタ Q1 顧客は何がどうなると嬉しいのか A1 顧客はメールボックスにスパムメールがたく さんあって困っている、スパムがなくなるとうれ しい Q2 それを人間がやるならどうやってやるか A2 メールの本文を見て、スパムかどうか判定し て、スパムは別のフォルダに移動する 41
  42. 42. ステップ2 人間を箱に入れる。 この箱には電子データしか出し入れできない。 (リモートワークと考えてもよい) 42
  43. 43. ステップ2 (3) 人間が(2)をするために、箱にどんなデータを 入れるのか? (4) 人間が(2)をすることで、箱からどんな出力 データが出てくるのか? 43
  44. 44. ステップ2 (5) 入力データ(3)はどうやって入手するのか? (最初の一歩と継続的にやる方法) (6) 出力データ(4)をどうやって顧客価値(1)につな げるのか? 44
  45. 45. 答える順番は問わない この4つの質問の答える順番は問わない。 例1: 顧客に~をするために(6)、~を出力する(4)、 そのため入力~を入れる(3)、これをどうやって 入手しようか?(5) 例2: 今~データが入手できている(5, 3) ここから顧客価値を生むにはどうするか?(6) そのためにはどういう出力が必要か?(4) 45
  46. 46. 例: スパムフィルタ >Q2 それを人間がやるならどうやってやるか >A2 人間がやるなら、メールの本文を見て、ス パムかどうか判定して、スパムは別のフォルダに 移動する Q3 人間が(2) するために、どんなデータを入れる 必要があるか? A3 メールの本文の情報が必要。タイトルや送信 者も貰えるなら貰いたい 46
  47. 47. 例: スパムフィルタ Q4 人間が(2)をすることで、箱からどんな出力 データが出てくるのか? A4 各メールに対して「スパムである、スパムで ない」のラベルを出力 47
  48. 48. 例: スパムフィルタ Q5 入力データ(3)はどうやって入手するのか? A5 最初の一歩としてはとりあえずメールをエク スポートしてもらえれば。 継続的にやるにはメーラからデータを取る方法を 作るか、メールサーバの側に手を加えるかが必要 そう。 48
  49. 49. 例: スパムフィルタ Q6 出力データ(4)をどうやって顧客価値(1)につな げるのか? A6 スパムである/ないのラベルを見て、メールを 振り分けする 49
  50. 50. アルバイト (7) 箱の中の人が、まったく知識のないアルバイ トだとしたら、どんなマニュアルを用意する必要 があるか? これを考えておくと次のステップが楽になる。 50
  51. 51. ステップ3 ステップ1: 人間がやる ステップ2: 箱の中の人間がやる ステップ3: 箱の中の機械がやる 箱の中の人をコンピュータに置き換える。 51
  52. 52. 最初のプログラム (8) 箱の中のコンピュータが(2)をするためのプロ グラムを書く 完璧である必要はない 高度なアルゴリズムである必要はない 精度は低くてよい 「とりあえず動く」ぐらいでよい 52
  53. 53. 実行してみて顧客に見せる (9) プログラム(8)に実際にデータを入れて振る舞 いを観察する。(精度はどう?速度は?) (10) 顧客はこれで満足する? 53
  54. 54. 顧客に見せるのが怖い? 精度が出ていないのに顧客に見せるのは怖い? しかし顧客が何を重視するかは顧客にしかわから ない。低品質だと顧客に言われたとしても、それ は顧客が何を重視するかを知るチャンスになる。 54 see 「リーン・スタートアップ」
  55. 55. 顧客が満足しないなら (11) どう満足しないのか具体的不満を収集する (どういう入力の時にはどういう出力が出てほしいのか? これを教師データという) 55
  56. 56. ステップ4 ようやく機械学習! (12) 教師データ(11)を使って学習をする 56
  57. 57. 科学的方法論 教師データが充実すると、アルゴリズムの良し悪 しが定量的に測れるようになる。 (教師データの一部を検証用のデータに使う) 機械学習にしたからと言ってよくなるとは限らな いのでプログラム(8)とキチンと比較する。 仮説・実験・検証・修正のサイクルを回す。 (PDCAサイクル/科学的方法論) サイクルを回して改善していく。 57
  58. 58. 改善の具体的方法 「現時点のアルゴリズムが正しく分類できてない データ」を抽出して眺め、それらを正しく分類す るためにはどうすれば良いかを考える。 (特徴量の追加など) ロジスティック回帰などの「判断の自信」を返し てくれるアルゴリズムなら、「自信のない結果」 を見て教師データの追加を行う。 (能動学習) 58
  59. 59. 間違えないように何度も言う ビジネス上重要なのは顧客価値。精度ではない。 例え精度が99%でも、間違う1%が顧客にとって致命的なら、精度 60%でその間違いをしないプログラムの方が顧客価値が高い。 59
  60. 60. おさらい • ビジネスでは顧客価値が重要 • 顧客もあなたも何が顧客価値か 正確に理解していない • 素早く理解するために最小限の工数で 実験を繰り返す(Minimum Viable Prodict) • 実験によって不満点や顧客価値が 徐々に具体化されていく • 改善を繰り返して顧客価値を増やしていく 60
  61. 61. 補足 これは「顧客の要求が明瞭でない、仕様書がない 状態でのソフトウェア開発」に似ている。 違う点は、顧客が不満な場合に「ソフトウェアを 作り直す」ではなく「学習データにその情報を追 加」で解決できる可能性があるところ。 とはいえ常にデータで解決できるわけではないの で、やはり最小限の実装で実験するのは大事。 61
  62. 62. 補足: バッドパターン 62 これを避けるためにも 実験を繰り返せる形に することが大事
  63. 63. 補足 (7)と(8)についての会場からの質問: “アルバイトのためのマニュアルが書けるなら プログラムも書けるはずでは” はい「アルバイトのためのマニュアルが書けない ぐらい仕様が曖昧だったらプログラムを書くのは 無理だよね」が言いたいことでした。 「マニュアルをどう書くか?」を考えることで まだ言語化されていないものに気付き、 言語化が促されるのです。(次ページに具体例) 63
  64. 64. 例: スパムフィルタ >(2)“メールの本文を見て、スパムかどうか判定し、ス パムは別のフォルダに移動する” あなた「本文を見てスパムかどうか判断して」 バイト「どうやって判断するんですか~?」 あなた「例えば○○って単語が入ってたらスパム」 最初の一歩のプログラム(8)を「NGキーワードが 含まれてるか判定」にしたらよい、と気づく。 64 補足の補足: アルバイト向けマニュアルの作成は「最初のプアなプログラム」を書く上 での助けになることが目的なので、さらさらプログラムを書けるなら飛ばしてもよい。
  65. 65. 補足(宣伝) 「データを観察することが大事」 と明記・強調することを忘れていた。 僕が監修したPyQの「はじめての機械学習」では データを観察してif文を作るところから ロジスティック回帰までを 小さいステップで一歩一歩解説しています 機械学習の基本をif文から学ぼう しきい値を見つけよう 可視化してしきい値を見つける しきい値が決められないデータの扱い方 2次元のデータから分類 2次元データをプロット 1次方程式を用いた分類 はじめての機械学習:ロジスティック回帰 65

×
Save this presentationTap To Close