トップクラスのエンジニア組織にいながら副業をする理由
初めまして、荒瀬 (@KosukeArase) と申します。
株式会社メルカリにて、US Engineering チーム (US版メルカリの開発チーム) の機械学習エンジニアとして働いています。メルカリはエンジニアリング組織の開発に強く力を入れており、エンジニアにとっては非常に働きやすい環境となっております。また、技術レベルも高いため、自分が成長できる環境であるとも感じています。
インターン含め2年8ヶ月働いたメルカリJPを離れ、4月からメルカリUSの東京ブランチで働きます!
かねてからの希望が叶いプロダクトもフェーズも組織も全然違うところで働けるのでとてもワクワクしています、心機一転やっていきます
— Kosuke Arase (@KosukeArase) March 31, 2020
そのような環境にいながらも副業に取り組んでいる理由としては、メルカリがかなり大きな会社になっているということが挙げられます。
メルカリでは常に大きなプロジェクトが動いており、それぞれのメンバーは業種におけるスペシャリストとして働いています。より広い技術領域やエンジニアリングに限らないビジネス的な仕事にも触れたいことと、0からのプロダクト開発を経験したいという気持ちを持っていたため、友人が起業した社員数が10人に満たない小さな会社で副業をすることに決めました。
機械学習エンジニアにはなぜ差別化が必要なのか
モデリングの知識だけだと陳腐化の可能性
元々修士時代にインターンを始めた理由は、アカデミアとインダストリーにギャップがあると感じていたためです。特に 2017 年当時では、AI をプロダクトに落とし込み顧客に価値を提供できている会社は GAFA をはじめとする非常に少ない大手企業に限られており、なぜ AI がこれだけ盛り上がっているのにこのような状況になっているのだろう、という疑問を持っていました。
インターンを始めて、そのギャップの原因はすぐに明らかになりました。機械学習モデルがあったとしても、それをサービスに落とし込むために必要なエンジニアリングに大きな工数が必要であるということです。
以下は機械学習システムの構成要素を表した有名な図なのですが、これから分かるように実際に機械学習をサービスに落とし込むために必要な要素のうち、モデリングが占める割合は非常に小さいことがわかります。
▲機械学習システムの構成要素 (出典)
また、モデリングはコモディティ化が進んでおり、さらには AutoML などでどんどん容易に作成できるようになっています。そこで、私は自身の生存戦略として、モデリングに特化するのではなく周辺分野のエンジニアリングを含め End-to-End で開発を担えるようにし、差別化を図りました。
サービスに落とし込むために必要なエンジニアリング知識
技術選定やアーキテクチャの設計のためには、モデリング、アルゴリズムの知識はもちろんですが、API として提供するためのアプリケーションレイヤーの知識やそれを支える Kubernetes などのインフラレイヤーの知識、さらには機械学習システムを運用するにあたって特有の知見など、幅広い技術領域に明るいことが求められます。
これらの機械学習サービス開発に必要な作業とそのサイクルは総称して MLOps とも呼ばれています。また、近年ではそれらを統一的に管理するために Kubeflow などの ML Platform も開発されており、MLOps や ML Platform に関する案件も多いです。
業界理解と提案力
特に受託の場合によくありますが、クライアントによっては、具体的な要件が固まる前のざっくりとした課題感の段階で相談をいただいたり、場合によってはこちらから営業に向かい、提案を行ったりします。
エンジニアリング力のみならず、クライアントの業界やサービスを深く理解しソリューションを提案するというコンサルティング的な能力も必要となります。
副業案件の進め方の内容
受託案件の流れ
副業先は、「人と自然が、100年先も共生できる社会へ」というビジョンを掲げている株式会社イノカという会社で、AI、IoT を活用し生態系を水槽内で再現する「環境移送技術」を軸に事業を展開しております。
友人の @oboeob の会社で副業してるんですけど、誰か一緒にやりませんかー
これは MLOps 案件についての求人ですが、モデリング案件もあるので興味ある方は気軽に声かけてください!
— Kosuke Arase (@KosukeArase) April 14, 2020
一方で、まだ外部資本を入れていない小さな会社であるため、本業である環境移送技術の開発を活かして機械学習サービスの受託開発も行っております。そこでは、クライアントのビジネス要件や既存のシステムなどをヒアリングし、それを踏まえてシステムに落とし込む必要があります。
副業先での受託案件は、大まかには以下のように進みます。
- 1.コンサルティング:クライアントの業界やサービスを研究し、ビジネス要件を踏まえソリューションの提案を行う
- 2.PoC:データ分析やモデルの作成、評価を行い、サービスとして価値を提供できる精度のモデルが作成可能か判断する
- 3.開発:アーキテクチャの設計とシステムの開発を行い、作成したモデルを API として利用可能な形にする。また、必要に応じてモデルの継続的な更新の仕組みも作成する
担当工程と稼働イメージ
副業先では、これまでの経験を生かしてプロジェクトのリーディングに徹しており、上流工程を一貫して担当しています。具体的には、上記の工程のうち、以下のような仕事をしています。
- コンサルティング
- アルゴリズム選定
- アーキテクチャ設計
- 納品物のクオリティチェック
これらの上流工程での経験値は環境移送技術の開発でも役立っています。それらの開発や採用などにも深く関わっているため、受託案件以外の仕事も多いですが、合計の稼働時間は月に40〜60時間程度です。
稼働は午前中や夜、休日が中心ですが、メルカリではフレックスを導入しているため柔軟に働くことができています。
意識すべきことは機械学習を「なるべく使わない」こと
機械学習をなるべく使わない?
機械学習は、キーワードだけが一人歩きして認知されたために社会から期待が過剰に高まりある種のバブルとなっており、機械学習を使ったサービスを開発するぞ!という気持ちが先行しているケースを見かけます。しかし、機械学習はあくまで手段の1つであり、それを使ったサービスを作ることは目的ではありません。
事実、機械学習を使わなくても UI や人手でどうにかなる場合や、ルールベースやアルゴリズムの方が適しているケースは多いです。また、コストを掛けて導入しても、それに見合うビジネスインパクトが得られない場合もあります。
受託案件のコンサルティングでは「機械学習を使わないソリューションはないか」ということをまず第一に考えます。これは案件を失うことにも繋がりかねないのですが、手段ありきの提案をするよりも真摯な提案によってクライアントの信頼をいただける方がメリットが大きいと考えています。
価値を発揮できそうな部分で提案
事前にクライアントのサービスを触り持っていそうなデータを想像し、そのデータを用いて作成したモデルを導入することで大きな価値が生まれそうな箇所を事前に考えておくようにしています。また、競合の動向を含めた業界研究も重要です。
その上でクライアントとのヒアリングを行い、実現可能性が高く、やる意義も大きい提案をすることで、価値を発揮できるように心がけています。
副業は、広い技術領域やビジネス視点を持ち続けるための機会の一つ
今回は、副業、特に機械学習系の受託開発案件についてお話しました。もちろんこれは私のケースであり、機械学習エンジニアとしての働き方はこれに限らないとは思います。
一方で、広い技術領域やビジネス視点を持ち続けることはエンジニアとして非常に重要なことだと考えています。副業は、そのような経験を得るための良い選択肢の1つになるはずです。
また、私が副業をしているイノカではエンジニアを積極的に採用しています!この記事を読んでイノカでの副業に興味をもっていただけたら、是非採用ページもご覧いただけると幸いです!カジュアル面談も実施しておりますので、まずは気軽にエントリーをお願いいたします。