この記事では、LAPRASにおける技術力スコアの算出方法について説明をします。

技術力スコア算出方法の概要

LAPRASには、技術力スコア、ビジネススコア、影響力スコアの3つの指標がありますが、いずれも1.0〜5.0の間で人数が正規分布に近くなるように点数を付けられています。

技術力スコアは6つの子指標を統合して算出されており、詳細表示 ボタンを押すことによりその6つの子指標のそれぞれのスコアを確認することができます。


例えば、 GitHub Repo の指標はこのようなロジックで採点されています。

この子指標の点数を重み付き平均することで、最終的な技術力スコアを算出しています。


 

ロジックの詳細とスコアリングの考え方

以下、
"技術力スコア" を 技術力スコア
その "子指標のスコア" を 子指標スコア
"子指標のスコアを出す元になっているスコア" を rawスコア
と表現します。
(GitHub Repoの例であれば、サイト内の説明で 最終スコア と記載されているものが rawスコア に当たります)

Q. 子指標スコアはどのような分布をしているのですか?

A. 平均が3.0, 分散が0.5の正規分布になるように点数を振っています。グラフを描くとこのような分布になります。

 

Q. 子指標に使われているSNSのアカウントを持っていないのに子指標スコアが付いています。これはどういうことでしょうか?

A. アカウントを保有していない人は、アカウントを保有しているが全く活動していない人と同じrawスコアとして子指標スコアを計算しているため、点数がつくようになっています。

アカウントを保有している人のみを母集団として、正規分布となるようにrawスコアと子指標スコアのマッピングを作成しています。しかし多くのSNSではアカウントは持っているが全く活動していないユーザ(ここではrawスコア=0とする)がたくさん存在しています。

わかりやすくするために、あるSNSの全アカウントのうち半数が全く活動をしていないアカウントだったとしましょう。すると上の正規分布のグラフに忠実に分布を作ろうとすると、同じ rawスコア=0 のアカウントでも子指標スコアは1.0から3.0のいずれかが付き、子指標スコアにばらつきがでてしまいます。そのため同じrawスコアの集団には同じ子指標スコアがつくように、集団の子指標スコアの総和を集団の人数で割った値を真の子指標スコアとして採用しています。この場合では rawスコア=0 の場合には子指標スコアが2.6強ぐらいとなるわけです。そしてこの場合には子指標スコアの分布は半分は2.6強、残りの半分は3.0から5.0の範囲で正規分布に近い分布となります。

これは全10万アカウントのうち、半数が全く活動していない場合の子指標スコアの分布です。

つまり、子指標スコアは綺麗な正規分布を目指しているものの、活動をしていないアカウントの影響により、低い点数帯では正規分布とはかけ離れた点数分布になってしまっているのです。

アカウントを持っているが活動していない人に2.6強のスコアがつくことは理解できたが、なぜアカウントを持っていない人も同じスコアになるのか、0点ではないのか。と思われる方がいると思います。

LAPRASの考え方では、アウトプットをしていないのであればアカウントを持っていても持っていなくても同じ、と捉えてこのような判断をしています。アカウントを持っていないだけで、アカウントを持っている人と技術力スコアに差が付いてしまうのはおかしいと考えているのも理由の一つです。
(詳細は次Qをご覧ください)
 
 

Q. 特定のSNSを使っていないだけで点数が下がるのはどうにかなりませんか?連携しているSNSだけで技術力スコアを計算すべきではないのですか?

A. LAPRASは「特定のSNSをやっていないことで減点」ではなく「このSNSもやっているので加点」という捉え方をしています。技術力スコアは、(GitHubによる)コーディング力、(Qiitaによる)テクニカルライティング力、(イベント参加による)インプット量/コミュニティへの貢献、(teratailによる)的確な説明力といった要素を複合的に判断し計算されています。(ここで示した能力はあくまで一例です)
ある特定のSNSだけで飛び抜けている方よりも、様々な場所で活躍している方を高く評価したいという思想のもとこのような計算方法になっています。

子指標スコアが3.0よりも低い場合には、技術力スコアを計算するときにその子指標の重みを半分にするロジックが入っています。例えば、teratail Score の子指標スコアだけ3.0よりも低い場合、それ以外の重みはサイトの説明に記載のままで、teratail Score の重みは半分の2として重み付き平均されます。これは特定のSNSのアカウントを持っていないことや、持っていても普段から使っている訳ではない場合に、その子指標の技術力スコアへの影響度を下げ、できるだけ普段から使っているSNSで技術力スコアの算出をしたいという意図によるものです。
 

Q. 現行の技術力スコアで正しく技術力を表現できていると考えていますか?

A. いいえ、改善の余地だらけだと考えています。
1つ目の課題として、技術力スコアとしてひとまとめにしてしまっていることで、具体的にどういった能力をもっているのか分からなくなっている点があげられます。技術力の中には、コーディングの速度、メンタリング力、学習能力、説明力など列挙しきれないほどの細かい要素があり、その中でもネット上のアウトプットから推測しやすいもの、推測しにくいものがあります。その中でLAPRASが推測可能であると判断した要素に対してスコアリングを行い、この方はマネジメントに強い方なのか、プレイヤーとして強い方なのか、今はまだプレイヤーとしての力は弱いがすごい勢いで学習しているのか等がパッとわかるような指標を用意すべきだと考えています。

2つめの課題として、収集できている情報が不十分な点があげられます。現状Webエンジニアのアウトプットする場所に特化して情報収集をしていますが、それでもSlideShareやStack Overflow、AtCoderなど情報収集が行き届いていない場所がたくさんあります。またKaggleを対象とすることで機械学習エンジニアを正しく評価できるようにもなるでしょう。情報収集先が増えることで、より多くの情報から技術力を判断できるようになり、より精度の高いスコアリングが可能になると考えています。

いずれの課題も解決すべく、現在進行系でプロジェクトが進んでいます。終わりのない地道な改善ですが、気がついたら あれ?精度が良くなっているかも? と感じていただけるように取り組んでいきます。


回答が見つかりましたか?