アルゴ式の次の問題の解説で少し疑問に感じた点があったので少し考えてみました。
https://algo-method.com/tasks/702
100点満点のテストを$N$人が受けたときの偏差値の最大値はいくつか
直感的には次の考え方でAC可能です。
一人が100点(満点)で残りの全員が0点となるとき,100点をとった一人の偏差値がとりうる偏差値の最大値となる。 N = int(input())
A = [0] * N
A[0] = 100 #一人だけ100点
avA = sum(A)/N #平均
var = sum(map(lambda a:(a-avA)**2 , A))/N #分散
sd = var ** 0.5 #標準偏差
print(10*(100-avA)/sd + 50) #偏差値
これでACですが,解説には以下のような記載がありました。
(偏差値の)最大値は$T = 50 + 10\sqrt{N-1}$
X さん以外のN−1 人の点数は全て等しい。これをもとに,X さんが 1 点を,残りの人が 0点を取った場合のX さんの偏差値を考えると次のようになります。
と続き,この仮定をもとに計算して,偏差値の最大値として,上述の$T = 50 + 10\sqrt{N-1}$を得ています。
ん?なぜXさんは1点なのだ?100点満点じゃないの?
この記載を読んで,このように思った人は僕だけではないはず。
ということで,次の問題を考えることにします。
N人(Xさんと,残りN-1人)の人がテストを受けるとき,Xさんの偏差値が最大となるのは,次の条件を満たすときで,N人それぞれの得点(の値)は偏差値には無関係である。
(条件)Xさん以外のN-1人の点数が全て等しい
(条件)を満たすときにXさんの偏差値が最大となることの証明はアルゴ式に記載があるので,そこは認めることとします。
ここでは,次の条件において具体的にXさんの偏差値を計算します。
**平均について **
$$\mu = \frac{a+(N-1)b}{N}$$
また,今後よく出てくるので次の値も計算しておく。
\begin{align*}
a-\mu &= a-\dfrac{a-(N-1)b}{N} \\
&= \dfrac{(N-1)a-(N-1)b}{N} \\
&= \dfrac{N-1}{N}(a-b)
\end{align*}
同様に$b-\mu$も計算しておく。
\begin{align*}
b-\mu &= b-\dfrac{a-(N-1)b}{N} \\
&= \dfrac{-a+b}{N}
\end{align*}
**分散について **
\begin{align*} V &= \dfrac{1}{N}\left( (a-\mu)^2 + (N-1)(b-\mu)^2 \right) \\ &= \dfrac{1}{N}\left( \left(\dfrac{N-1}{N}\right)^2(a-b)^2 + (N-1) \left( \dfrac{-a+b}{N} \right)^2 \right) \\ &= \dfrac{1}{N}\left( \left(\dfrac{N-1}{N}\right)^2 (a-b)^2 + \left(\dfrac{N-1}{N^2} \right) (a-b)^2 \right) \\ &= \dfrac{1}{N}\left(\dfrac{N^2-N}{N^2}\right) (a-b)^2 \\ \end{align*}
標準偏差について
$$sd = \sqrt{V} = \sqrt{\dfrac{1}{N}\left(\dfrac{N^2-N}{N^2}\right) (a-b)^2} = \sqrt{\dfrac{1}{N}\left(\dfrac{N^2-N}{N^2}\right)}(a-b) $$
Xさんの偏差値について
$$ T = 50 + 10\dfrac{a-\mu}{sd} $$
であるから,$T' := \dfrac{a-\mu}{sd}$について計算する。
\begin{align*} T' &= \dfrac{a-\mu}{sd} \\ &= \dfrac{N-1}{N}(a-b) \dfrac{1}{\sqrt{\dfrac{1}{N}\left(\dfrac{n^2-N}{N^2}\right)}(a-b) } \\ &= \sqrt{N-1} \end{align*}
したがって,このときのXさんの偏差値$T$はXさんや,そのほかの人の得点($a$や$b$に依らず)
$$T = 50 + 10\sqrt{N-1}$$
となる。
なかけん さんに次のような助言をいただいたので追記します。
全体の点数をx倍(正の値)すると、平均と点数との差はx倍、分散はxの2乗倍、標準偏差はx倍になり、偏差値の式の分数の分母分子への影響が打ち消し合います。なので、1点のケースは全体を100倍した時と同じ偏差値になります。
Xさんが$a$点をとったときの偏差値$T$は$T = 50 + 10\dfrac{a-\mu}{sd}$でした。
このとき,(Xさんも含めて)全員の得点が$k$($>0$)倍されたときのXさんの偏差値を考えることとします。
このとき,$k$倍されたあとの各値を下つき文字$_k$をつけて表すとすると
$$a_k = ka$$
$$\mu_k = k\mu$$
$$sd_k = k\cdot sd$$
が成り立ちます(証明は後述)。したがって,
\begin{align*}
T_k &= 50 + 10\dfrac{a_k-\mu_k}{sd_k} \\
&= 50 + 10\dfrac{ka-k\mu}{k\cdot sd} \\
&= 50 + 10\dfrac{a-\mu}{sd} \\
&= T
\end{align*}
となり,偏差値$T$は全員の得点が定数倍されても不変であるということがわかります。ここで,$a=1$,$k = 100$とすればもともとの疑問への回答が得られたことになります。
$N$個のデータ$x_1,x_2,\cdots , x_N$がある。この$N$個のデータの平均を$\bar{x}$,分散を$V_x$,標準偏差を$\sigma_x$とする。また,各データ$x_i$に対して,$y_i = kx_i + d$なる変換を施す(全員のテストの得点を$k$倍して$d$加える)。この変換後の平均を$\bar{y}$,分散を$V_y$,標準偏差を$\sigma_y$とする。このとき,次が成り立つ。
$\bar{y} = k\bar{x} + d$
$V_y = k^2 V_x$
$\sigma_y = k\sigma_x$
ただし,$k>0$とする。
\begin{align*} \bar{y} &= \dfrac{{\sum_{i=0} ^ N (kx_i+d)}}{N}\\ &= \dfrac{k{ \sum_{i=0} ^ Nx_i + Nd}}{N}\\ &= k\bar{x} + d \\ \\ V_y &= \dfrac{\sum_{i=0}^N (y_i-\bar{y})^2}{N}\\ &= \dfrac{\sum_{i=0}^N (kx_i+d-(k\bar{x}+d))^2}{N} \\ &= \dfrac{\sum_{i=0}^N (kx_i-k\bar{x})^2}{N} \\ &= k^2\dfrac{\sum_{i=0}^N (x_i-\bar{x})^2}{N} \\ &= k^2V_x\\ \\ \sigma_y &= \sqrt{V_y}\\ &= \sqrt{k^2 V_x} \\ &= k\sqrt{V_x} \\ &= k\sigma_x \end{align*}
これを利用すると,元の得点$a$をとったときの偏差値$T$と,全体の得点を$k$倍して$d$加えたあとの$ka+d$点(もともとの$a$点)の偏差値$T'$の関係は次のように計算することができる。
\begin{align*}
T' &= 50 + 10 \dfrac{ka+d-(k\mu + d)}{k\cdot sd} \\
&= 50 + 10 \dfrac{k(a-\mu)}{k\cdot sd} \\
&= 50 + 10\dfrac{a-\mu}{sd} \\
&= T
\end{align*}
したがって次の結論を得る。
偏差値は線形変換に対して不変である