BrainPad株式会社ブレインパッドのデータ活用に関する取り組みや製品・サービス開発の裏側、社員の日常などをご紹介します。ブレインパッドの日常ブレインパッド社内で実施している1on1コーチングの組み合わせを、最適化のアルゴリズムを使って効率化した事例をご紹介します。最適化の初歩に近い内容ですので、簡単な解説・実装例もあわせてご紹介します。アナリティクスサービス本部の兵藤です。お客様が保有しているデータをビジネス上の価値に変えていくことです。お客様の課題を解決するために、データサイエンティストは業務の中で予測や最適化、最近だと深層学習などのさまざまな技術を駆使しています。組みの背景メンバーがコーチを自由に選べる「1on1コーチング」制度のスタート!さあマッチング!でもちゃんと考えると大変そう...。■社内で実際に使ってみた■他のビジネスへの応用は?■まとめ■取り組みの背景メンバーがコーチを自由に選べる「1on1コーチング」制度のスタート!私が所属するアナリティクスサービス本部では、「1on1コーチング」という制度を新たに開始しました。これまでも、マネージャーとメンバー間で1on1ミーティングは行われていましたが、1弊社のデータサイエンティストには様々な強みを持つ人がいること2データサイエンティストにも色々な成長パターンがあることから、各メンバーは上司に拘らず「この人に自分のキャリアを相談したい!」という人を自分で選び、コーチングを受けられる点が「1on1コーチング」の特徴です。具体的には、まず対象となる社員を「キャリア相談をするメンバー(以降、メンバーと表現します)」と「キャリア相談を受ける側のメンバー(以降、コーチと表現します)」に分けます。次に、メンバーに「1on1をお願いしたいコーチを全て選択してください」というアンケートをWEBで実施し、その結果をもとにその人のコーチを決定します。その後、マッチングしたメンバーとコーチの間で定期的に1on1を実施していきます。1on1では「自分の目指したいキャリア」や「目指す姿になるためにどんなアクションが必要なのか」を会話することで、自分のキャリアについてしっかりと考えるきっかけを提供することを目指しています。さあマッチング!でもちゃんと考えると大変そう...。相談をするメンバーは40人、コーチは20人ほどです。このマッチングは、以下のような要件を満たす必要がありました。「相談できないメンバー」が発生し、孤立してしまうのは避けたい。メンバーが選択したコーチの範囲で、マッチングを実現させたい。コーチはメンバー2人まで持担当できる。メンバーはコーチを1人だけ持つ。(1人のメンバーを複数人のコーチが担当することは避ける)メンバーは複数のコーチ候補を選択できるのでマッチング可能なメンバー・コーチの選択肢は多岐に渡ります。人数が少なければ簡単に考えられそうですが、メンバー40人・コーチ20人となると人間が組み合わせを考えるのはちょっと大変そうです...。人がやるべきでない大量かつ複雑な作業は機械(アルゴリズム)にやってもらおう、ということで数理計画問題の枠組みで組み合わせを出すことにしました!■最適化で問題を解く今回のマッチングは、最適化の典型的な問題の1つである「0-1ナップサック問題」と捉えることができます。0-1ナップサック問題とは?イメージしやすくするために、簡単な例を挙げながら説明します。1kgまで入るレジ袋に以下の果物を、できるだけ合計金額を高くするように入れることを想定してください。それぞれの果物は1個ずつしかないとします。600全部入れるとレジ袋が溢れてしまいますので、合計金額が高くなるようにレジ袋に入れる果物、入れない果物を選択しないといけません。このように、各変数について「選択しない(=0)」「選択する(=1)」の最適な選択を求める問題が「0-1ナップサック問題」というものです。今回のコーチングのお題だと、上の例のレジ袋が「コーチ」で、果物が「メンバー」ですね。コーチには担当できる人数が2人までという制約や、コーチは自身を選択したメンバーしか担当できない、という制約の中でメンバーとコーチの関係を「成立するか」「成立させないか」の最適な選択を算出することになります。■最適化問題を解く流れどんな問題かがある程度わかったところで、早速問題を解いていこうと思います。一般的に、最適化問題を解く時は、以下のような流れで解いていきます。途中、数式やコードなど出てきますので、苦手な方は適宜読み飛ばしてください。基本は「問題を明確にして」「数式にして」「その数式をコードにして機械に計算させる」という流れになります。それでは、詳細を見ていきましょう。■問題の確認まずは、解きたい問題の確認が必要です。最適化するときは、ここが一番の肝となる部分です。制約条件を見逃したり間違った形で解釈した結果、想定したものと異なる結果になってしまう可能性があるので、注意が必要です。最小化したいのか?制約の確認:各変数にどんな制約を加えないといけないか?今回のマッチングでいうと、目的は「マッチングしたメンバー数の最大化」となり、制約は以下の3つと考えられます。最終的にコードで表現するためには、上記で表現した目的や制約を数式の形で表現する必要があります。今回であれば、以下のように数式にできます。