世間では就職活動が始まる時期です。
この記事は就活生と企業の間の就職活動をモデル化しようとした書きかけの記事です。
12月14日執筆時点ではほぼ定義だけで、今後何か有意義な結果が出せるかは全く不透明であることを予め述べておきます。
就職活動というプレッシャーの感じるイベントを少しでも楽しく考えてみようというのが本記事の主な執筆理由です。
更新履歴
2021/12/19:一時的に削除しました。すみません。
2022/1/1:復活しましたが、たぶん今後の更新はありません。
#定義
簡単のため、就活生にも企業にも個性がないような問題設定を考えます。
就活生の数を$N$人、企業の数を$M$社とします。
$i$番目の就活生($i=1,2,\cdots,N$)と$j$番目の企業と($j=1,2,\cdots,M$)の関係を表す二値変数$x_{ij},y_{ij},z_{ij},\in,\{0,1\}$を次のように定義します。
$x_{ij}$:$i$番目の就活生が$j$番目の企業に応募していたら1、応募していなかったら0
$y_{ij}$:$i$番目の就活生が$j$番目の企業に内定していたら1、内定していなかったら0
$z_{ij}$:$i$番目の就活生が$j$番目の企業に入社したら1、入社しなかったら0
応募していない会社に内定が出たり、内定が出ていない会社に入社することはできないため、$x_{ij}\geq y_{ij}\geq z_{ij}$という制約条件がつきます。
この制約条件から、
$$
P(y_{ij}=1|x_{ij}=0)=P(z_{ij}=1|x_{ij}=0)=P(z_{ij}=1|y_{ij}=0)=0
$$
が成り立ちます($P$:確率)。
$x_{ij},y_{ij},z_{ij}$を就活生$i$に関してor企業$j$に関して和をとったものを定義しておくと後々便利そうなので、次のように定義します。
$$
\begin{split}
&X_i := \sum_{j}x_{ij} \
&X^j := \sum_{i}x_{ij} \
&Y_i := \sum_{j}y_{ij} \
&Y^j := \sum_{i}y_{ij} \
&Z_i := \sum_{j}z_{ij} \
&Z^j := \sum_{i}z_{ij} \
\end{split}
$$
$j$番目の企業は応募した就活生のうち確率$p_j^{\mathrm{OAR}}$(OAR:Offer Acceptance Rate)で採用するとします。つまり、
$$
P(y_{ij}=1|x_{ij}=1) = p_j^{\mathrm{OAR}}
$$
を仮定します。
$p_j^{\mathrm{OAR}}$は$j$番目の企業に応募した就活生の数$X^j=\sum_{i=1}^N x_{ij}$の値によって企業側が何らかの法則性に基づいて設定するものとします。
この法則はどの企業も同じものとし、次式のように関数$f$を使って表します。
$$
p_j^{\mathrm{OAR}} = f(X^j)=f\left( \sum_{i=1}^N x_{ij}\right)
$$
就活生は内定の数$Y_i=\sum_{j}y_{ij}$が1以上の場合、内定が出た企業の中から無作為に入社する企業を選ぶものとします。つまり、
$$
P(z_{ij}=1|y_{ij}=1) = \frac{1}{Y_i}
$$
を仮定します。
ここで、就活生と企業とでそれぞれ「損失」を定義します。
就活生は内定が1社からももらえなかった場合に損失$\alpha_1$(正の実数)を感じるとします。
また、たくさんの企業に応募するのは大変なので、応募した企業の数に比例して損失を感じるとし、その比例係数を$\alpha_2$(正の実数)とします。
以上から、$i$番目の就活生の損失$A_i$を
$$
A_i =
\begin{cases}
\alpha+\alpha_2 X_i ,,(Y_i=0)\
\alpha_2 X_i ,,(\mathrm{otherwise})
\end{cases}
$$
と定義します。
企業はどこも$K$人だけ入社してほしいものとします。
入社する人数が$K$人から外れた分だけ損失が大きくなるものとします。
その関数形は、計算の都合上L2ノルムの形で与え、その係数を$\beta$(正の実数)とします。
応募者の数が多いと採用のための仕事が増えるので損になりそうな気がしますが、たくさん応募されて困るのは嬉しい悲鳴ということで、今回はそれを無視することにします。
以上から、$j$番目の企業の損失を$B_j$を
$$
B_j = \beta\left(Z^j-K\right)^2
$$
と定義します。
$i$番目の就活生が応募する企業の数を$n_i:=\sum_{j=1}^N x_{ij}$と定義します。
これぐらい定義すれば何か意味のある問題を設定することができるような気がしてきますね。
#就活生は何社応募すると良いか?
$i$番目の就活生は損失$A_i$の「期待値」が最小になるように企業に応募する($x_{ij}$を決める)とします。
企業の個性がないものとしていたので、$P(x_{ij}=1)$や$P(x_{ij}=0)$は$j$依存しません。
つまり、$i$番目の就活生は損失$A_i$の「期待値」が最小になるように$X_i$を定めます。
ただし、就活生は他の就活生がどこに応募しているかや企業内での意思決定がどのように行われているかの情報がなく、どの企業でも確率$p_{\mathrm{estimated}}^{\mathrm{OAR}}$で内定がもらえるだろうと予想して企業に応募するものとします。
このとき、この就活生が応募する企業の数$X_i$はどうなるでしょうか。
就活生$i$が想定する確率を$P_{就活生i}$、$X_i$が確定した上で就活生$i$が想定する$A_i$の期待値を$E_{就活生i}[A_i|X_i]$と書くことにすると、
$$
\begin{split}
E_{就活生i}[A_i|X_i] &&= P_{就活生i}(\sum_{j}y_{ij}=0|X_i)(\alpha_1+\alpha_2 X_i) + P_{就活生i}(Y_i \neq 0|X_i)\alpha_2 X_i \
&&= \alpha_1 P_{就活生i}(Y_i=0|X_i) + \alpha_2 X_i \
&&= \alpha_1 P_{就活生i}(\forall j ,, y_{ij}=0|X_i) + \alpha_2 X_i \
&&= \alpha_1 (1-p_{\mathrm{estimated}}^{\mathrm{OAR}})^{X_i} + \alpha_2 X_i
\end{split}
$$
となります(たぶん)。
この値が最小になるように$X_i$を決めます。
$X_i$は自然数ですが、$X_i$を実数に拡張して微分してみましょう。
$$
\frac{\mathrm{d}E_{就活生i}[A_i|X_i]}{\mathrm{d}X_i}=\alpha_1 (1-p_{\mathrm{estimated}}^{\mathrm{OAR}})^{X_i}\ln(1-p_{\mathrm{estimated}}^{\mathrm{OAR}})+\alpha_2
$$
一階微分が0になる$X_i$の値は、
$$
X_i = \frac{\ln \left( -\frac{\alpha_2}{\alpha_1 \ln(1-p_{\mathrm{estimated}}^{\mathrm{OAR}}) }
\right)}{\ln(1-p_{\mathrm{estimated}}^{\mathrm{OAR}})}
$$
となりました。
自然数の範囲での最適値については、計算結果が負の値になった場合には0、それ以外の場合では$\lfloor X_i \rfloor$ or $\lfloor X_i \rfloor + 1$と考えれば良いでしょう。
例として損失パラメータの比を$\alpha_2/\alpha_1 = 0.1$(10社受ける損失と無い内定になる損失が等しい)と設定すると、
$p_{\mathrm{estimated}}^{\mathrm{OAR}}=0.9$のとき$X_i=1.36$、
$p_{\mathrm{estimated}}^{\mathrm{OAR}}=0.5$のとき右辺の値は$X_i=2.79$、
$p_{\mathrm{estimated}}^{\mathrm{OAR}}=0.1$のとき右辺の値は$X_i=0.496$
となります。
実はこの$X_i$は$p_{\mathrm{estimated}}^{\mathrm{OAR}}$に対して非単調で、$p_{\mathrm{estimated}}^{\mathrm{OAR}}\to +0$の極限で$-\infty$になるので、$p_{\mathrm{estimated}}^{\mathrm{OAR}}$を小さくしすぎると$X_i=0$、すなわち「どこにも出願しない」という選択肢が最適となります($\alpha_1$由来の損失がほぼ$X_i$依存なしと見なせてしまい、$\alpha_2$由来の損失のみ考慮してしまうため)。
ニートになるのは困るので、就活の際には$\alpha_2/\alpha_1 \ll p_{\mathrm{estimated}}^{\mathrm{OAR}}$を満たすような損失関数を脳内に思い描いておくか、$p_{\mathrm{estimated}}^{\mathrm{OAR}}$が高いと楽観視しておくと良いでしょう。
#企業は何人に内定を出せば良いか?
$j$番目の企業は損失$B_j$の「期待値」が最小になるように関数$f$を定めるものとします。
このときも就活生の場合と同様に、企業視点では一部の情報が欠けています。
その欠けた情報とは、内定を与えた就活生がどれくらいの確率で入社するのかというものです。
そこで、企業側が想定する就活生の入社確率を$p_{\mathrm{estimated}}^{\mathrm{join}}$とします。
このとき、この企業が内定を出す人数$Y^j$はどうなるでしょうか。
企業$j$が想定する確率を$P_{企業j}$、内定を与える人数$Y^j$が確定した上で就活生$j$が想定する$B_j$の期待値を$E_{企業j}[B_j|Y^j]$と書くことにすると、
$$
E_{企業j}[B_j|Y^j] = \sum_{Z^j=0}^{Y^j}P_{企業j}(Z^j|Y^j)\times \beta(Z^j-K)^2
$$
となります。
ここで、$P_{企業j}(Z^j|Y^j)$は二項分布$\mathrm{B}(Y^j,p_{\mathrm{estimated}}^{\mathrm{join}})$に従うことを使って計算を進めると、
$$
\begin{split}
&&E_{企業j}[B_j|Y^j] \
&&= \beta \left[
(p_{\mathrm{estimated}}^{\mathrm{join}})^2 (Y^j)^2
+\{
p_{\mathrm{estimated}}^{\mathrm{join}}(1-p_{\mathrm{estimated}}^{\mathrm{join}})-2Kp_{\mathrm{estimated}}^{\mathrm{join}}
\}Y^j + K^2
\right]
\end{split}
$$
となります。
この期待値が最小になる$Y^j$の値は、
$$
Y^j = \frac{K}{p_{\mathrm{estimated}}^{\mathrm{join}}} - \frac{1-p_{\mathrm{estimated}}^{\mathrm{join}}}{2p_{\mathrm{estimated}}^{\mathrm{join}}}
$$
となります。
$X_i$の場合と同様に$Y^j$は本来自然数のみをとるので、計算結果が負の値になった場合には0、それ以外の場合では$\lfloor Y^j \rfloor$ or $\lfloor Y^j \rfloor + 1$とすれば良いでしょう。
$K\gg 1/p_{\mathrm{estimated}}^{\mathrm{join}}$の場合、第一項目の方が支配的となり、内定を出す最適な人数はおよそ「採用したい人数/内定を出したとき入社する確率」となり、直感的に妥当です。
企業側としては、応募した$X^j$人のうち、この最適な人数だけランダムに選べば良い。
このときの内定確率$p_j^{\mathrm{OAR}}$は
$$
p_j^{\mathrm{OAR}} = \frac{Y^jの最適値}{X^j}=
\frac{K}{p_{\mathrm{estimated}}^{\mathrm{join}}X^j} - \frac{1-p_{\mathrm{estimated}}^{\mathrm{join}}}{2p_{\mathrm{estimated}}^{\mathrm{join}}X^j}
$$
となります。
応募した人が多いほど内定確率が減るという自明な結論が出てきますね。
#もし就活生や企業があらゆる情報を知っていたら
ここまでは、就活生$i$が企業の内定確率$p^{\mathrm{OAR}}$を$p_{\mathrm{estimated}}^{\mathrm{OAR}}$だと好きに推測して自身の損失を最小化したり、企業$j$が内定者の入社確率$p^{\mathrm{join}}$を$p_{\mathrm{estimated}}^{\mathrm{OAR}}$だと好きに推測して自身の損失を最小化する問題を考えてきました。
それでは、もし全ての就活生が$p^{\mathrm{OAR}}$を知ることができ、なおかつ全ての企業が$p^{\mathrm{join}}$を知ることができた上で、自身の損失を最小化しようとしたらどうなるでしょうか?
これはあまりにも非現実的な仮定ですが、興味深いことに違いはありません(まともに計算できるかはさておき)。
工事中。。。