このページでは、グルーピングの方法をご説明します。
人が集まったとき、うまく組み合わさると、お互いに刺激をしあって仲間として動けるようになります。
仲間ができた人は、より活発に活動し、より良い成果が出せるようになります。
無関係の人同士が集まっても、気まずいだけです。最初は知らなくても、話してみると共通点があったり、話が盛り上がる人がいます。
Buddyup!では、独自の手法を使ってイベントのグルーピングを行っています。
なるべく共通点があったり、会話のタネが見つかったりするような組み合わせのグルーピングをします。
このページでは、Buddyup!のグルーピング手法を解説します。
グルーピングをするために、イベント参加者がどんな人かを予め知っておく必要があります。
以下の方法を使って、グルーピングをするためのキーワードを探ります。
質問をすることで、参加者がどんな人かを探ります。予め用意しておいた質問をイベント前に答えてもらうことが可能です。答えてもらった回答を使ってグルーピングをします。
個人を表しているプロフィールでは、共通点を見つけられることもあります。プロフィールにある共通点を利用してグルーピングする方法も有効です。
Buddyup!で使っている、これから使っていくグルーピング手法は以下の5つです。
head_count
simmulated annealing (開発中)
less_holder(開発中)
需要と供給のマッチをするグルーピング(開発中)
類義語グルーピングと抽象語ラベリング(開発中)
タグが一致する人を優先してグルーピングする方法です。
母集団からN人組を作る際に、事前に入力した質問やタグから主入力項目は一致・サブ項目はなるべくバラバラになるようにグルーピングします。
head_countでは、グルーピング時の特徴として以下の3点があります。
Nにちょうど一致するタグ数のグループを優先して作成
無回答者や不一致者を一緒くたにまとめるロジック
現状、完全一致のみが対象
現在、Buddyup!で使っているグルーピングの手法はこの方法です。
母集団全員の入力タグヒストグラムを集計し、多い順にタグをソート
あるタグAを持つユーザ数がグループサイズ(設定項目)とちょうど一致するものをAのグループとする
あるタグBを持つユーザ数がグループサイズより大きい場合、指定のグループサイズのBのグループをできるだけ切り出す
(この際サブ項目でばらばらになるように選出する、具体的には該当者をサブ項目でソートしN人飛ばしで選出するとバラバラになる)
合計してグループサイズになるような組み合わせでグループサイズ以下の大きさを持つユーザ群をグループ化する
無回答者をグループ化する
端数のユーザを一グループとする
「焼きなまし手法」とも呼ばれる、複数の組み合わせを高速に検索する手法です。
「独りぼっちをつくらずに全員の評価を上げる」ことがsimmulated annealingの特徴です。
イメージとしては、大雑把に組み合わせの解を探してから細かい最適解を探していきます。
質問回答やタグを入力にし、それらの一致度を全グループで高得点にする解を探索します。
オリジナルの特徴として、「独りぼっち」を防止するための補正コストを考慮しています。
headcountやlessholderと違い、全テーブルの評価を総合的に高める目的で利用します。
全種類のタグ入力をone-hotベクトルに変換
例:Aさん {プラモ:1, デザイン1, ベンチャー0, Instagram0}
初期のランダムな組み合わせを作成
温度という概念でグルーピングのコスト変化の激しさを変化させながら、以下繰り返す
初期は温度を高温に、だんだん高温↔低温に繰り返し、最終的に低温になるよう変化をスケジュール
現在の総コストを算出(組み合わされた人のone-hotベクトル内積和)
組み合わせの1名を任意に入れ替える
この際、高温時は総コストの差分が大きくなるような変化を、低温時は小さくなるような変化をさせる
確率で組み合わせを入れ替える
(差分の大きさについて考慮し、改善方向または改悪方向いずれにも変化させることを許可する)
母集団全員を分類し、独りぼっちを作らないことを重視したグルーピングです。
入力した質問の回答数やタグの保持数が少ない人から順にグルーピングの対象とすることで、誰とも会話できない人をなるべく生みません。
無回答や他の誰とも一致しない入力を持つ人は考慮できません。そのためhead_countと同様に無回答グループ、端数グループとします。
母集団全員のタグヒストグラムを集計
母集団となる参加者それぞれタグの保持数を取得。保持数の少ない順に参加者をソート
その内、無回答者を別途退避させる
N人組のグループを作ることを目指して以下を繰り返す
保持数の少ない参加者1名を対象とする
対象の参加者の持つタグのうち最も集計結果の多かったタグを1つ選択
そのタグについて集計結果がN/2人未満のタグ保持者数であった場合、対象の参加者をいったん端数回答者枠に退避させる
対象の参加者をある新規グループに割り当てる
残りの参加者から同じタグを持つ参加者を、タグ保持数の少ない順に走査し同グループに割り当てる
N人にグループが満たない場合は、不足を残したままいったん割り当てを終了する
無回答者でも端数回答者でもない、まだグループに割り当たっていない残りの参加者がN人未満となった時点で繰り返しを終了し、残りを端数回答者に追加する
繰り返しの後、不足しているグループに無回答者、端数回答者を不足人数に補う
人数の少ないグループ順にN人となるまで補っていく
(この際端数回答者については、グループのタグとの近傍距離を考慮できるとよいが未検討)
需要と供給をマッチさせるグルーピングです。
例えば、デザイナーと出会いたいエンジニアとエンジニアと出会いたいデザイナーをマッチングできます。
準備中です。
タグの類似性を考慮して、グルーピングの精度をゆるくした方法です。
類義語グルーピングはwiki文章をもととしたWord2Vecモデルを用いてタグの類似性を考慮してグルーピングを行います。
他のグルーピングではタグの完全一致のみをグルーピングの判定基準としています。しかし、類義語グルーピングでは完全一致でなくても類義語であれば同じグルーピングとして扱います。
例:{旅行,観光,新幹線}の単語では、旅行と観光は関係性が近いが、旅行と新幹線は関係性が遠い。そのため、旅行と観光のタグを持っている人を同じグループとして扱います。
同様のロジックでハイライト画面に表示されるおススメの人も類義語判定できます。
グルーピングの精度がゆるくなったことで、出会える人が広範囲に。他のグルーピングと併用することも可能です。
なんらかのグルーピングでできたグループの名前を、中央値で選びます。
shiroyagiと呼ばれるWord2Vecモデルを用いて、タグの重心となる単語を求め、ある集団に名づけを行うための仕組みです。(グルーピングではありません)
例:{旅行, 観光, 新幹線,}の重心に位置する単語は「旅」などが挙げられます。
この際、重心となった単語を基準にします。偏差が特定の範囲に収まらない単語は排除、再度単語を算出するといった工夫をして、なるべく意味の近い単語の範囲から重心を求めます。
グルーピングなど特定のタグがテーマ名に直結するような場合は良いですが、例えば会いたいボタンによってできたチームや端数者でできてしまったグループなど、チーム名に困る場合もあります。その際はなるべく共通するテーマをラベル付けし、共通点をもたせます。