百式さんが、「企業の体質をシミュレーションするモデル」というエントリーを書いてらっしゃる。面白そうなので、少しモデルをいじってプログラムを組んでみた。
オリジナル・モデル
百式さんが紹介なさってるモデルはこんな感じ。
- まず前提として企業はある一定の「出来る人」と「出来ない人」で構成されるとする(乱暴ですが、まぁ、仮定として)。
- ある企業が毎年30人採用したとする。
- その30人のうち、15%は出来る人で、85%は出来ない人だと仮定する。
- 1年経るごとに、出来ない人のうち95%はずっと出来ないままで、一方出来る人のうち10%が出来ない人になっちゃうと仮定する。
- 入社5年後にその人たちの20%が採用担当になる。
- 出来ない人は70%の確率で出来ない人を採用する。出来る人は5%の確率で出来ない人を採用すると仮定する。
- 3年ごとに出来ない人は15%の割合で退職し、出来る人は50%の割合で退職するとします。
- さてn年後のこの企業、「出来る人」と「出来ない人」の割合はどうなるでしょうか?
企業の体質をシミュレーションするモデルが衝撃的だったお話 - IDEA*IDEA ~ 百式管理人のライフハックブログ ~ より引用
少し修正
このまんまだと、プログラミングとかが面倒なので少しモデルを変えてみた。
- 「入社 5 年後に〜」のルールは撤廃。入社直後から採用担当に関わるとする。また、「全体の 20% が採用担当になる」ルールも撤廃。採用担当の「出来る人」と「出来ない人」の割合は、全体の「出来る人」と「出来ない人」の割合と同じとする。
- 「退社は 3 年ごと」ルールを撤廃。毎年退社するものとする (毎年 15%/50% もの人が辞めたら困るので、1/3 の 5%/15% の人が辞めるように数値を変更)。
で、プログラムはこんな感じ。初期値では、出来る人 500 人、出来ない人 1500 人で計算した。
#include <stdio.h> #define iMAX 50 static void simulate_cwork(void); int main(void) { simulate_cwork(); return 0; } #define g2b 0.1 /* Good becomes Bad */ #define b2g 0.05 /* Bad becomes Good */ #define g_retire 0.15 /* Good retires */ #define b_retire 0.05 /* Bad retires */ #define g_hire_g 0.95 /* Good hires Good */ #define b_hire_g 0.3 /* Bad hires Good */ #define newbie 30 /* Number of Newbie */ static void simulate_cwork(void) { int gn1 = 0; int bn1 = 0; int gn = 500; /* Number of Good worker */ int bn = 1500; /* Number of Bad worker */ const double g2g = (1.0-g2b); const double b2b = (1.0-b2g); const double g_hire_b = (1.0-g_hire_g); const double b_hire_b = (1.0-b_hire_g); printf("%d %d %d\n", 0, gn, bn); for (int i=1; i<iMAX; i++){ int k = gn + bn; /* Number of All worker */ double gn_g = g2g + (newbie * g_hire_g / k) - g_retire; double gn_b = b2g + (newbie * b_hire_g / k); double bn_g = g2b + (newbie * g_hire_b / k); double bn_b = b2b + (newbie * b_hire_b / k) - b_retire; gn1 = (gn_g * gn) + (gn_b * bn); bn1 = (bn_g * gn) + (bn_b * bn); gn = gn1; bn = bn1; printf("%d %d %d\n", i, gn, bn); } return; }
Makefile 等は gist に上げてあるので、気になる人はどうぞ。
結果
50 年後、この会社の社員数はどうなってるかな? 「出来る人」と「出来ない人」の社員数をグラフにしてみた。
みごとに単調減少。
考えてみたら、少くとも全社員数の 15% は退職してるのに、新入社員は 30 人しかないないんだから、200 人以上社員がいたら減るしかないんだよね。新入社員の数は、退職者とほぼ同数にしないといけないな。このモデルは、もう少し考慮が必要。でも、かうしてグラフにしてみると面白いね。色々とモデルをいじりたくなってしまう。