機械学習ソフト開発のフロー

先日、クラウドAPIを活用して、3週間程度で機械学習システムを開発して欲しいという案件があった。概要を聞くと、どうも依頼主が要求元ではなく、依頼主が請け負った機械学習ソフト開発案件の丸投げ先を探しているようであった。以下に示すように、受託しても費用を負担する顧客の要望を満足する精度を出すことは困難と考えたためお断りをしたが、最近の案件の傾向をみるとその様な話が増えてきている。

一般的に機械学習は、データの収集、選択、アルゴリズムの選定、データクレンジング、データ前処理などの重要な準備・設計作業があり、その後、開発と学習、評価となる。評価結果結果として評価指標が低い、精度が低いなどの当初の想定と異なる結果となった場合はデータ収集以降のフェーズを繰り返し実施することになる。

したがって、開発作業を期間を3週間と限定された場合、せいぜい、このフローを1回するだけとなり、顧客の要望を満足する精度が得られない可能性が大きくなる。

この様に開発フローだけで見ても、それほど簡単ではないことがわかるであろう、しかも、機械学習は大量のデータを学習することで精度を向上させるため大量のデータが必要となる。結果として、大量のデータのクレンジングや前処理といった学習以外の処理にも、ある程度の時間とプログラム開発が必要となるのである。

Webシステム開発のように、開発作業を画面デザイン設計、DB設計、サーバプログラミングというように複数のエンジニアに役割を分担し、顧客とフェーズ単位で仕様を詳細化しながら並行ですすめることで、短期開発を進める開発スタイルとは、機械学習ソフト開発は全く異なるものであると考える。

これらの処理や学習は数学的な理論に基づくアルゴリズムを理解したエンジニアのみが適切に設計できるものであり、その様なエンジニアの存在が現在の市場には少ないということも日本におけるAI導入推進の今後の課題として指摘されている。

一方で、そういう状況にも関わらず機械学習ソフト開発案件の発注金額の相場はWebシステム開発以下という事例が多く、現在のアプリケーション開発企業がエンジニアの育成に注力していないという状況を招いている。

この状況は、中国や韓国、ベトナム等の近隣の国のエンジニアの育成よりも遅れつつあり、数年後には機械学習ソフト開発はオフショアせざるを得ない状況になるのではないかという意見も聞かれるようになってきた。