いかに機械学習を使わないかを考えるのも機械学習エンジニアだと思う
今まで、業務として機械学習に触れてきた経験から、色々と思料したので共有します。
機械学習を適用することのデメリット
機械学習を用いると、それ以外では叶わなかった問題の解決などが可能になる場合があります。ですが、機械学習は良いことばかりではありません。特有のデメリットを克服するか、あるいは上回る利点を出す必要があります。
出てきた結果の説得力が無い
出力された分類結果や回帰の値に対して、どうしてそうなったかという理由は付与してくれません。ニューラルネットワークの場合を考えると、ただ内部で数値が変動し、それが出力になるだけです。そしてそれがプロダクトになったとき、それを使用する人に説明する機会でその問題が顕在化する可能性があります。
透明性、保守性、拡張性が下がる
機械学習は大抵の場合、こういう入力があればああいう出力になるといった結果が、完全には予想しきれないという性質があります。タスクの粒度にもよりますが、その出力をなにか別のアルゴリズムの入力にしようとしたときに、この曖昧さがネックになり得ます。入力が曖昧なので出力も曖昧になる。つまりアルゴリズムをつなげていく中で、機械学習を含むアルゴリズムが途中に挟まっていると、全体にその曖昧さ、不安定さが出てくるようになります。このようにして、内部のデータで何が起こっているかという透明性を失うと、不備が明るみになったときの修正が難しくなるという保守性の問題や、一部に新しいアルゴリズムを適用としたときに全体の流れを把握しづらくなる拡張性の問題が発生します。機械学習の入出力形式が変わる場合は、精度検証なども必要になるため大仕事になるでしょう。
顧客の立場を意識してアウトプットを出す
いろいろなアルゴリズムを学んでいくと、難しいアルゴリズムを使いたくなったり、そういうものを使ったほうが精度が良くなることを期待したりします。ですが、プロダクトを使う側からすれば、内部で何が動いているかは関係ないので、手法にこだわりすぎると時間を浪費する原因になります。
また、アウトプットをどう見せるかによっても、求められる性能(Precision や Recall)が変わってくるため、それによって機械学習手法を設定したり、場合によっては機械学習自体から離れるということも検討したほうがよかったりもするでしょう。