機械学習で業務改善プロジェクトを行う時の7つの具体的な注意点

機械学習で業務改善プロジェクトを行う時の7つの具体的な注意点

機械学習やディープラーニングといった言葉がバズワードになってはや数年、機械学習という言葉は一般に浸透したと言えます。同時にトップダウンで「機械学習で良い感じに何かやれ」といった無茶ぶりも概ね一巡したかな…というところでしょうか。大体そういう案件は失敗するのですが。

別にOpenAIやDeepMindといった最先端・最高峰の技術者集団でなくても機械学習は扱えます。必ずしもニューラルネットワークが良いわけでもありません。場合によっては自然言語処理、画像認識・音声認識や強化学習といった特定の分野以外であれば従来の手法の方が利点があったりします。

今回は一般に機械学習を業務改善の一環として適用する上で注意したいポイントを7つほど具体的に紹介したいと思います。

それ本当に機械学習じゃなきゃダメ?

そもそも機械学習を使う意味がない・うま味がない課題に対して、機械学習を使うのは時間とリソースの無駄遣いです。

例えば決められたルールに従って出力されるものを機械学習を使って予測する意味はありません。特に設計業務に多いのですが、物理的な法則に従っているデータを機械学習で予測させてみたところで、あまり意味のある結果は得られないでしょう。

例えばある重さのボールをある高さから地面に落とした時に、跳ね返る高さを予測するのに機械学習は不要です。

機械学習でできることを把握するのも重要です。機械学習は大きく分類問題、回帰問題を解くことができます。平たく言えば分類問題は二値分類・多クラス分類に分けられ、0か1か、AかBかCかのようなカテゴリーを予測する問題です。回帰問題は0.4, 10.5のような連続値を予測する問題です。

クラスタリングや次元削減のようにデータをグルーピングしたりデータ量の圧縮・高次元の可視化も可能です。それらを組み合わせてレコメンデーションや顧客グルーピング、異常検出などを実装することも可能です。AmazonやYoutubeのおすすめ機能を使ったことがあるでしょう。

基本的に機械学習を使いたい場合、そもそもルールベースで決まるかどうかをチェックした上で、そうでないものに対して上記のどれに当てはまるのかを確認する必要があります。

うま味に関して言えば、例えば人間が同様の業務を行ってすぐにこなすことができる場合も機械学習である必要はありません。

機械学習はモデリングが大変、データの傾向が変わる、属人的になりやすい、複雑なモデリングでデバッグが困難というように負の側面も多く持っています。機械学習に精通したエンジニアが常にサポートできる体制であれば問題は小さくなりますが、そのような幸運な組織は稀でしょう。

他にも、例えばある店舗の今月の売り上げを予測する際、様々なデータから機械学習で売り上げを予測することは可能ですが、単純な回帰分析でも同様な予測はできるでしょう。では、機械学習を使う利点がそこにあるでしょうか。500件ぐらい特徴量があったら、確かに回帰分析はつらいかも知れませんので、その場合は機械学習が有効でしょう。

機械学習を使う場合は、

  • ルールベース(決定論的)ではない
  • 従来のロジックツリーや回帰分析などのアプローチでは限界がある
  • データが大量に存在する(人間が簡単に見切れない量、タスクによるが例えば1000件以上)
  • 従来人間が判断を下す必要があった(=間違いを最小限にしたいが、0は無理)

の4点に当てはまっているかどうかを確認してからにしましょう。

何でもディープラーニング

ディープラーニングを使うことが目的となっているパターンがよくあります。機械学習ですら何かわかっていないけどとりあえずディープラーニングだ…というトップダウンの命令を経験した方もいるでしょう。

対外的に「いやー、うちはすでにディープラーニングを使っていてね…」と言いたいだけのモチベーションで始まるなどした場合は最悪です。ほぼうまくいきません。

ディープラーニング自体は画像認識、音声認識、高度な言語処理や強化学習などの分野で強みを発揮します。が、例えばプロジェクト完成までの期間を見積もりたいといったシンプルな回帰問題や顧客情報を元にサービス継続・解約を予測したいといった分類問題であれば、ディープラーニングを使うまでもありません。

むしろディープラーニングを使ってしまうことで、多くのハイパーパラメータのチューニングやモデル選択などの性能評価、学習・予測にかかるコストなど運用が非常に大変になるうえ、解釈可能性はほぼありません。

それよりもリッジ回帰やランダムフォレストといった堅牢かつ解釈可能性が高かったり、特徴量の重要度を抽出できるアルゴリズムを使った方が良い場面は多くあります。更に性能を求めるならブースティングの新しい実装やSVMなどを試しても良いでしょう。いずれも実装・チューニング共にディープラーニングより敷居が低く、専門のデータサイエンティストでなくても食らいついていける程度のものです。

ディープラーニングは隠れ層の設計、ニューロンの数、活性化関数の選択、dropoutなど汎化性能を高めるための工夫、これら以外にも多くの考慮を必要とします。考えられる組み合わせが多いうえ学習に時間がかかるため、適切なモデルを選択するまでに数か月かかることも珍しくありません。おまけに完全にブラックボックスです。

専門・専任のデータサイエンティストがいないのにディープラーニングを使うことはそもそもおすすめできませんが、どうしてもという場合は外注するか既存の画像認識等のアルゴリズムを利用するようにしましょう。

言い換えれば、ディープラーニングを使って今までにない新しいことをしようとしないでください。

ビジネス課題の設定は?ゴールは?

トップダウンで降りてくる機械学習案件にありがちですが、そもそも何をもってゴールとするのかが決まっていないパターンがあります。

担当者は機械学習プロジェクトを始めたはいいものの、何をゴールとして設定すればよいか、どのぐらいの性能を求められるのか、といった疑問がわくこともあるでしょう。

機械学習プロジェクトは成果が出るまで時間がかかり、その性能もどのぐらい期待できるか未知数の状態で始める必要があります。そのため費用対効果やROIといったものを事前に把握するのは難しいのも特徴です。要するに不確実なんです。

なので上から「精度100%の分類モデルを作れ」とか「RMSEが元データ平均値の0.5%以内に収まる予測モデルを作れ」のような指令が来てもそれを達成できる保証はどこにもありません。しかもたいていの場合機械学習に必要以上の期待を抱いているため、無茶ぶりとなってしまうわけです。

上記を把握したうえで、適切なゴールを設定する必要があります。例えばある昆虫の雄・雌分類作業を人間が行っていたと考えます。それをディープラーニング・画像認識で置き換えたい場合は、まず少なくとも超えるべきゴールは「人間が分類にかかる時間よりも短いこと」、「人間の分類精度よりも高いこと」の二つを満たす予測モデルの構築です。

もちろん多少分類精度が落ちても分類時間が10分の1になることでビジネス上の利点が最大化されるならば採用の余地はあります。

機械学習を使うことで楽をしたいのか、何かの精度を上げたいのか。そういった目的を明確にして、従来との比較で適切なベンチマーク(機械学習を使う基準となる目標値)を設定することが大切です。

小さく始めましょう

トップダウンの場合にありがちですが、1億かけて超高精度の自社製ディープラーニングソフトを作るぞ!といったアプローチは破滅的な結末をもたらす場合があります。

もしくは大々的に宣伝しすぎて後に引けなくなり、担当者がLeakageなどのミスに気付かず誤ったモデルを提出してしまうことなどもあるでしょう。

小さく始めるというのは、効果もはっきりしないまま大きなコストや長い時間をかけることを回避するという意味です。

例えば100万行あるビッグデータを扱うのなら、特徴量の数にもよりますがまずは1万ぐらいのデータに落としてから機械学習をざっくりとやってみましょう。特にチューニングやFeature Engineeringをゴリゴリやらなくてもそこそこ精度が出るのであれば、それから100万行に挑戦しても決して遅くはありません。

データ読み込みから結果出力までチューニングも含め全自動でやってくれるソフトウェアを作る前に、まずはJupyter Notebookでランダムフォレストを回してみる。そうしてコマンドプロンプト上で走らせれば十分なものと判断できれば、そんなに凝ったソフトは作らなくていいわけです。

機械学習はギャンブルに近いものがあります。業務改善のレベルであれば、場合によっては大きなコストをかけなくても良い結果が出る場合もあるのです。また多くの場合はデータを追加するのではなく、適切な前処理・Feature Engineeringを行う方が精度へ貢献します。

とにかく機械学習プロジェクトでは不確定要素が多すぎるので、目的と適切なベンチマークを設定したら、走りながらプロジェクトの要件定義を修正していくのがおすすめです。
まずは小さく作り、テストして少しづづ機械学習プロジェクトに慣れていくことが持続可能な機械学習文化へと繋がっていきます。

(機械学習扱えるのあの人しかいない…)

機械学習を扱える人材は貴重な存在です。実務で機械学習を扱ったことがあったり、ディープラーニングまで実装できるとなればその数は更に少なくなっていくでしょう。機械学習エンジニアと呼べる人材は、非常に少ないものです

こうした状況は組織の中では頻繁に起こります。機械学習を扱える人材がいるだけでも幸運ですが、一方でその人が何をやっているのかよくわからんというのが上位者及び組織の悩みとなるでしょう。

組織によっては回帰分析でもよくわからん…となる以上、機械学習を自在に扱う人材は魔法使いにしか見えません。

担当から生み出される予測モデルは、機械学習を扱える人材が辞めてしまったり、転勤になったりした瞬間にオーパーツと化します。なんかうまく動いてるけど使い方は誰でもわからないといった状況はよくあります。時間が経ち、データの傾向が変わってきた場合にはその変化に対応できず予測精度は落ちていく一方でしょう。

更にレビュワー不在という深刻な問題もあります。機械学習を扱える人材がたまたま居ても、その人が何をやっているのかよくわからんという状況があります。

何をやっているかわからない以上問題やミスを指摘することはできません。特に機械学習ではLeakageや過学習に代表されるように誤ったモデルを作りかねない落とし穴が複数あるため、本来はコードレビューがあってしかるべきです。

上記の状況を防ぐためには、まず機械学習を扱える人材を歓迎・厚遇し、辞めないように整備していく必要があります。特に今どき機械学習、もしくはAI・人工知能エンジニアは引く手あまたというレベルではありませんので、転職先に困りません。

同時に機械学習を組織に文化として根付かせるために、情報系出身や数字に強いSEなどを数名ピックアップしてデータサイエンティスト研修を受講させてチームを作るのも良いでしょう。

間違っても機械学習を業務の片手間に導入しようとしないでください。その火は必ず消えます。やるなら、専任を。

うーん、よくわかんないからやっぱ回帰分析にしよ?(やっぱ従来のやり方にしよ?)

仕方がない側面もあるのですが、上位者やマネジメントのようなレビューする側にとって機械学習は複雑怪奇な魔法にしか見えません。

よってハイパーパラメーターがーとか過学習がーとかバイアスバリアンスがーといか言っても呪文を詠唱しているようにしか聞こえません。

当然それでは判断材料にならないので、マネジメントが「まぁそれは今度にして今回はそっちの従来のやり方でやってよ」「よくわかんないから線形回帰でよろしく」という言葉が飛び出すわけです。

そうして意気揚々とチューニングした予測モデルはスクラップとなり電子の海をさまようことに。

このような状況はとても勿体無いと言えます。タスクにもよるのですが、当面Plan A, Plan Bという形で平行して進めるのが良いでしょう。従来のやり方で引き続きやる一方で、「もし機械学習を適用していたらどうなっていたか?」ということを検証するために同じ作業を出来上がった予測モデルでもやってみるのです。

当然コストは大きくなりますがこの場合は安全に機械学習を試せますし、もし機械学習の予測精度が許容可能なものだと判断できれば置き換えていけば良いだけです。

機械学習する必要があるか?はよく考える必要がありますが、もしすることのメリットが大きそうだと判断できれば積極的に導入していくことで早期の競争力向上・差別化へと繋がります。

完璧を求めない

AI・人工知能を使えば100%完璧な予測ができると信じている人が依然として存在します。また、業務改善において100%を改善できなければ満足しないマネジメントも一定数存在します。

これは機械学習に限った話ではなく、いきなり従来のやり方の完全上位互換的な手法が出てくるはずがありません。むしろ出てくるようでは従来のやり方に大きな疑問符がついてしまいます。

例え機械学習といえども、いきなり精度が大きく改善したり、完璧な予測を返すようになるといったことは難しいものです。機械学習での予測で精度100%はよほどの理想的なデータでない限りは難しく、しかもそれであっても過学習と呼ばれる問題を起こしていることが多くあります。

実際問題初めて機械学習を回してみたら70-80%程度の精度になることは多くあります。その上でできるだけ90%ぐらいまで向上させようとするのですが、汎化性能を上げきれず運用に回したら80%付近をうろうろする…といったことが起きます。

それが実用に耐えうる精度なのか、またメリットがあるのかどうかは残りの20%をどう仕組みやレビューでカバーできるか、どの程度の効率化につながったのかというインパクトと天秤にかけて判断します。

100%じゃないならやらない、というのは非常に勿体無いと考えましょう。間違いを許容できないのなら、機械学習をやらない方が良いです。

再現率や精度といった指標にこだわって目的を果たすこともできるかも知れませんが、100%志向のマネジメントがいる組織ではなかなか業務改善を通したり、機械学習を根付かせるのは苦労すると思います。

まとめ

今までのポイントをまとめると、

  • ルールベース(決定論的)ではない
  • 従来のロジックツリーや回帰分析などのアプローチでは限界がある
  • データが大量に存在する(人間が簡単に見切れない量、タスクによるが例えば1000件以上)
  • 従来人間が判断を下す必要があった(=間違いを最小限にしたいが、0は無理)
  • ディープラーニングで今までにない新しいことをやろうとしない、ディープラーニングを目的にしない
  • 機械学習する前にゴールを明確にする
  • 小さく始めて柔軟に軌道修正する
  • 機械学習できる人材を育成し、専任チームを作って文化として根付かせる
  • 機械学習の意味があると判断されたら、積極的に利用してみる
  • 完璧を求めない

機械学習はややハードルが高いですが、決して全く扱うことのできない高度な技術でもありません。

リテラシーがあり興味もある優秀な人材と少しの勇気(と予算)があれば導入へと動くことも可能です。まずは、小さくトライしてみましょう。

スポンサーリンク

機械学習カテゴリの最新記事