この前大企業の偉い人と話をしていたら、最近は機械学習のプロジェクトを管理する側の仕事をしている、みたいな話になった。

自分は現場側ではそれなりにノウハウは貯まったが、組織側がどうすべきか、というのは良く分からない、という話を書いてみたい。

作る物はあらかじめは分からない

まず、機械学習のプロジェクトというのは、データを理解する過程であり、それは「その時作ろうとしている物が間違いである」という事を理解し続ける過程である。間違いじゃない物を作ろうと思えた時が、機械学習のプロジェクトがゴールに到達した時、と思って8割くらいは正しい。

この、「作ろうと思ってる物は基本的に間違いで、最終的に作る物とは違う」というのが、これまでのサービス開発と機械学習を用いた実サービス開発の一番大きな違いとなる。

この話は以前、データ分析を用いたサービス開発とは、データと問題を理解する過程であるで書いたのでそちらを参考のこと。

順調なプロジェクトと全然駄目なプロジェクトがある

さて、機械学習に限った話では無いが、ソフトウェア開発という物は、全然駄目な進め方と、順調な進め方がある。 全然駄目なプロジェクトにいくら金を突っ込んでも無駄なことは広く知られている。 これは機械学習のプロジェクトでも同様、、、どころか、より酷い気がする。

ディープラーニングに予算がついたが全然分かってないサブコンがディープラーニング分かります!とか言ってひたすら予算を浪費するのは凄く良く見かける光景だ。

だから、ほっといて自由にやらせれば良い、という物でも無くて、何か正しい方向に向かう為の仕組み、または間違った状態になったらどうにかそれを見抜いて、プロジェクトを畳む必要はある。

自由にやらせると、あんまり実用性のある物が出てこない

現在、機械学習を活発にやってる組織は、だいたいは自由にやらせていて、たまに何か面白い物にぶつかったらそれを発表する、というパターンが多い。

思いついた物が偶然その組織でやってるサービスとかに使える、という事は、めったに無い。だからそのたまに生まれる偶然を、何度も何度もプレゼンする事になる。

何にせよ、このやり方は主流ではあるが、実用性という観点からすると打率は良くない。

現時点での自分が思ってる、現場側のやり方

一応自分達は良くある「自由にやらせて、なんか面白いが使いみちは良く分からない事ばかり出てくる」よりはまともに、ちゃんと実サービスに応用させる事に成功して、そのやり方は分かっている気がする。

これをちゃんとまとめるのはそのうち誰かがやった方が良い事とは思ってるが、今回の本題はここじゃないので、さらっと流したい。

あんまりうまく言葉には出来ないが、ちょっと無理やり言葉にしてみよう。

  1. 関連するやりたい事のうち複数のアイデアを考える
  2. その中で出来そうな事の周辺でデータ分析する
  3. 理解がある程度深まったら、その理解に基づいて作る物を考える

1で考える物はどうせ作れない。 だが、3で着地点を考える為にはどうせ作れない物でも最初に考えるのは結構大切で、この最初の段階である程度の広さと問題理解を分析屋側に与えるのが大切に思う。 ここをうまくやる事で、どこに着地するかは分からなくても、着地する範囲くらいはある程度指定出来る(そううまくは行かないが)。

ビジネスとかプロジェクト管理とかは、この辺をうまいこと洗練するのが理想なんじゃないかなぁ。

組織的、ビジネス的な要件との折り合い

どれくらいの予算を掛けて、どんな事を実現したいのか、という事を、ビジネス側から決めたい。 だが、機械学習のプロジェクトでは何を実現したいのかを最初に決める事が出来ないので、これを管理していくのが理想的な気がする。

これまでも工数に関しては不確実性のコーンを管理してきた訳だ。 これと同様に、実現する物に関しても不確実性のコーンの管理が必要な気がする。

データ分析の進捗をどう把握するか?

理解が深まる、というあたりでの、着地点までの距離が分かりにくい。

何かをやってみると「XXな為、全然駄目な事が分かりました」という結果になる。 これは順調なのか?駄目なパターンに陥っているのか?これを区別する方法がまず良く分からない。

現状はひとえに「分析屋の腕」に掛かってる気がする。 腕の立つ分析屋にしばらくやらせておけば、やがて着地する。 だが凡庸な分析屋にやらせていると、永遠に終わらない。

だが、これでは困る気がする。これでは不確実性のコーンじゃなくて、不確実性の水平線みたいじゃないか。

やはりビジネスや組織側のステークホルダーが、ある程度はどのくらいうまく行ってるか、着地点まであとどれくらいの距離があるかを把握する必要がある気がする。しかもその認識は、だんだんと正確になっていくような物であって欲しい。

ある程度経験を積むと、進んでるパターンと駄目なパターンは感覚的には分かるようになると思う。少なくとも自分はたぶん分かる。 だから管理する側も成功する開発の経験を幾つか積み重ねて、その辺の感覚をつかむ必要がある気はする。

だがそれを経験する機会が現状はあまりにも少ない。 そこをどうすべきかは良く分からない。

実現にこぎつける何かは要ると思う

最終的になにを作るのかは分からなくても、日々の分析の中でいつも実現にこぎつける為に知恵を絞って作業するのは必要に思う。

このへんの動機づけというか、そういう姿勢をどう続けさせるかは良く分からない。 現状は現場の分析屋の意識の高さに期待している気がするが、あんまりうまくいってないケースも多い。

この辺は多分マネージャーの手腕とかプロジェクト管理とかに期待される所な気がする。

個々の分析屋の力を目的に向けて導く、みたいな。 どうやったらいいのから良く分からないけど。

結局どうしたらいいかは良く分からない

現状はまだまだ改善の余地はあって、 そこは凄く大切だと思うのだが、 この辺をちゃんと実務でやれてる組織はまだ無いのでは無いか。

脳内お花畑みたいな妄想みたいなべき論は良く見かけるが、明らかに素人で機械学習の実績無さそうな人ばかりだし。

でもやりようはあると思うし、たぶんどうにか出来ると思うんだよなぁ。 現状たぶん、ちゃんと機械学習のサービス開発出来る人でこの辺真面目に考えてる人、居ないんじゃないか。

菊田さんあたりはなんか考えてるかもしれんが。