渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

「あえて精度勝負をしない機械学習」という選択肢

少し前のことですが、こんな話題がありました。

実際問題として「ある目的のために機械学習システムを開発し、非常に高精度のものが出来上がったが、結局色々あって実戦投入されなかった」という話は、自分の身の回りでも業界内の伝聞でも事欠きません。


しかし、機械学習と言えばどちらかというと「より精度の高いモデルを追い求める」試み、もう少し下世話に言うと「精度勝負」によって、連綿と発展してきたという歴史があります。それは古くはMNISTに対する精度追求*1Deep Learning隆盛以降はImageNetに対する高精度モデルの追求*2であったりその他のドメインにおける有名ベンチマークデータに対する精度追求などに代表されてきたように見受けられます。


にもかかわらず、ビジネスを含む実務の場面においては「より高精度で優秀な機械学習モデル」が様々な実務上の制約によって使われず、そうでない何かが代わりに用いられるというケースが多いということは、言い換えると「実務上のニーズと機械学習の精度とは必ずしもマッチしない」という難しい現実を意味しているように思われます。そこで、今回の記事では「あえて精度勝負をしない機械学習」というテーマのもと、機械学習システムをいかにして現実のニーズに合わせて導入していくかについて論じてみます。


なおいつもながらですが、引用している資料や今回のテーマとしている実務ニーズへの機械学習導入について、事実誤認や認識違いなどがある可能性がありますので、お気付きの方は是非ご指摘くださると幸いです。

最高精度のモデル、必ずしも実務においては最適ならず


そもそも論として「必ずしも最高精度のアルゴリズムが実務で好まれるわけではない」というのは、何も現代の機械学習全盛時代に始まった話ではない、というポイントがあります。

例えばNetflixかつて開催したNetflix Prizeで賞金100万ドルをかけてレコメンデーションエンジンのためのベストアルゴリズムを募ったにもかかわらず、最終的に優勝したアルゴリズムは「実装コストがかかり過ぎる」という理由で退け、よりシステム統合が容易でシンプルなアルゴリズムを採用しています。


このように「学術・技術面でベスト」であっても「実務面ではベストとは限らない」アルゴリズムというのはそこかしこにあり、それが猫も杓子も人工知能やら機械学習やらと持て囃すようになった現代においては、多くの機械学習モデルの中に「精度ではベストだが実務ではベストでない」とされる事例がちらほら出てくるようになった、という側面もあるのかなと思っています。


ただ、冒頭の引用にも見えていたように「そもそも機械学習モデルで達成可能な精度の上限が『現場の人間が考える十分かつ高いと感じられる精度』に達していない」というケースもあり、これら2パターンが相俟って「実際には機械学習は実務の現場では使えない」という話に発展しているのかもしれないという印象を個人的には持っています。だとすると、これはかなりの根の深い問題なのかもしれません。


自分が過去に手掛けた事例


正直言ってこの手の議論は「事例ベース」でしか語りようがないという側面があるので、あくまでも「自分ならこうするし、実際そうしてきた」ということで自分が過去に手掛けた事例を引き合いに出してみようと思います。

「予測」ではなく「説明(解釈)」をアウトプットとして返す


これはお馴染みのYouTube動画になった公開事例*3における話で、初めから「予測」ではなく「説明(解釈)」をアウトプットとし、そのアウトプットを人間の意思決定に活用してもらうという考え方ですね。即ち「最適な広告クリエイティブを求めたい」という課題に対して「機械学習で直接予測(生成)する」のではなく、「ヒトがクリエイティブをデザインする参考となる材料を提供する」ことで解決策とする、というものです。


f:id:TJO:20200905165631p:plain

以前の記事でも述べたように、機械学習モデルの「説明可能性(解釈性)」というのは決して万能ではありません。けれども、実務上は「予測性能」よりも有用で、しかも実装や実運用が容易ということもままあります。例えば上図のWine Qualityのデータセットに対するSHAPプロットからは、ワインの味を良くするには「アルコール度数をある程度以上高くした方が良い」「硫酸塩(保存剤)の多寡はそれほど関係がない」ということが読み取れます。これはそのまま新規参入するワイン生産者にとって有益な情報となり得るわけです*4


勿論、汎化性能の低いモデルだといかな解釈メインの機械学習モデルといえども悪影響が出やすいので、精度を度外視して良いということはありません*5。けれども解釈をメインに機械学習を利用する場合は「とにかくSOTA、とにかく限界いっぱいの高精度」という点にはあまり拘らなくて良い、ということは実務の現場では往々にしてよくある話だと思っています。

「確信度」の高い予測結果だけを使い、残りは捨てる


こちらは分類モデル、特に多クラス分類を想定した話です。実務においては「後から後からやってくる大量の新規データを既存の処理系のデータ構造に合わせて振り分けて格納したい」みたいな課題がちらほら出てきますが、そういう時に「全データを完璧に分類しよう」とすると結構しんどいことが多いというのが個人的な印象だったりします。


実際、ブースティング木でもNNでも何でも頑張ればそれなりに高精度なモデルは作れるんですが、cross validationしてみると意外と「100クラス以上の多クラス分類でACCが80%ぐらい」みたいなのが割とありがちなシチュエーションで、こうなると「精度8割って本当に本番システムに使って良いものかなぁ」みたいな現場担当者のぼやきが聞こえてきそうです。特に100クラスとか1000クラスとかでACC 0.8だと、ぶっちゃけ間違ったクラスに行ってしまうサンプルの数も馬鹿にならないわけで、それをいちいち人手で修正するのもしんどい話です。


故にこれは確かに厄介な問題なんですが、僕が以前手掛けたケースでは「予測サンプル全てにクラス分類事後確率をつけて、一定値以上なら採用し、それに満たないものは捨てる」という運用をしていました。さらに、その「一定値」の閾値を何通りか用意しておいて、現場担当者の判断で「全部使う」から「信頼できるレベルのものだけ厳選して使う」まで選べるようにすることで、「捨てる」量もコントロールできるようにしたのでした*6。これなら、言い方は悪いですが現場担当者の感覚として「ゴミが多い」バルクが新規データに来た時は採用する量を絞り、「どれもOK」な時は採用する量を増やす、という運用が可能です。


その意味では、これも根っこの部分では「予測よりも説明(解釈)」のケースと思想が同じで、「現場担当者の感覚をうまく活用する」という点にメリットがあると言えそうです。


「精度」よりも「合目的性」と「現場の感覚の活用」を


色々論ってみましたが、本質的には機械学習の「価値」を何に求めるかという点が重要なのでしょう。自分の体験談として挙げた2点はいずれも「現場の感覚の活用」がキーワードになっていて、それが結果として「合目的性」の面でもacceptableだったので現場で受け入れてもらえたという側面があったのだろうと思っています。


良くも悪くも、実務の現場で機械学習を使うということは「本来なら精度さえ高ければ良いはずの機械学習が、どちらかというと精度はともかく『使い勝手の良さ』を求める人間臭い現実社会に入っていく」ということであり、その点で「人間臭さと共存できる機械学習」が求められるということなのでしょう。それを実現する選択肢の中に「あえて精度勝負をしない」機械学習が入ってくる、ということなのかなと思う次第です。

*1:LeCunのMNISTサイトを参照のこと

*2:つまりILSVRCのこと

*3:毎度毎度汚いツラをお目にかけてしまいごめんなさい

*4:実際にはこの辺はワイン業界では常識だと思われますが

*5:自分の鉄板ネタである「毎年少しずつ変数を増やして学習データへの当てはまりを良くしていった需要予測モデルがある時点から過学習を起こして、モデルパラメータの解釈に基づいて施策を打っても全く効果が出なくなった」件を思い出されたい

*6:つまりprecisionをコントロールするということ