本文へスキップ
stats-basics#4

標準化と z スコア

読了 約15一覧

単位もスケールも違う数字を 1 つの軸に乗せる道具が標準化です。平均を原点に、標準偏差を 1 単位に置き直すと、数字は「平均から何 σ 離れているか」だけで語れます。stats-03 の歪度・尖度が「すでに標準化された量」だったことまで回収します。

数学のテストで 75 点、英語のテストで 80 点を取ったとします。英語の方が点数は高いです。ただ「クラスの中でより上位か」を素点だけで判断することはできません。数学の平均は 60 点でクラスの散らばりは σ = 10 点、英語の平均は 70 点で散らばりは σ = 5 点というデータが手元にあったとして、素点の差だけで比べるのは平均もばらつきも無視した比較になります。

単位もスケールも違う 2 つの数字を、同じ軸で比べるには何が必要でしょうか。stats-02 で学んだ平均 μ と標準偏差 σ を使えば、「平均から何 σ 離れているか」という単位のない数に変換できます。この変換が標準化で、変換後の値が z スコアです。

Part 1(平均・分散・分布の形)はここで最終回です。stats-01 で中心(平均と中央値)、stats-02 で広がり(分散と標準偏差)、stats-03 で形(歪度と尖度)を揃えました。stats-04 はその道具立てを使い切り、「記述統計の道具を単位の共通軸に乗せる」操作を担当します。次回 stats-05 では、これらが「確率変数」の言葉に拡張されます。

なぜこの道具が必要か

数字を表で並べると構造が見えます。

科目太郎の点数クラス平均 μ標準偏差 σ平均との差 x − μ
数学75 点60 点10 点+15 点
英語80 点70 点5 点+10 点

素点で見ると英語(80 点)が数学(75 点)より高いです。平均との差で見ると数学(+15 点)が英語(+10 点)より大きいです。素点でも平均差でも、どちらが「本当にすごいか」の答えは出ません。

ここで「平均との差を σ で割る」操作を加えます。数学では +15 点 ÷ 10 点 = +1.5、英語では +10 点 ÷ 5 点 = +2.0 となります。この数字で比べると英語の方が上です。

英語の方が σ で割ったとき値が大きくなるのは、英語のクラスはばらつきが小さく(σ = 5)、同じ 10 点の差が「珍しさ」として大きく効いているからです。σ が小さい集団では、全員の点数が平均の近くに密集します。その中で 10 点も上にいるというのは、σ = 10 のクラスで 10 点上にいるより、統計的にずっと希少な位置です。裏返せば、「σ が大きいクラスでは 10 点の差は珍しくない」と言えます。

「平均との差をそのまま比べてはいけない理由」を別の角度から言うと、点数の単位(点)同士を比べているうちは「1 点の重さ」がクラスごとに違うからです。数学クラスでは 1 点の重みが薄く、英語クラスでは 1 点の重みが濃いです。σ で割ることで、その重さを揃えます。

下の図は、その「揃える」操作を 2 本の数直線でやっています。μ を中央、±σ を同じ間隔に揃えると、ドットの位置がそのまま z スコアになります。数学 75 点(z = 1.5)と英語 80 点(z = 2.0)を同じ軸に乗せると、素点では英語が上、相対位置でも英語がさらに上だと一目で分かります。生点を動かすと、σ が小さい科目ほど同じ点差でも z が大きくなるのを確かめられます。

触って確かめる:同じ点差でも σ が違えば z が違う

  • 数学(μ=60, σ=10
  • 英語(μ=70, σ=5
触って確かめる:同じ点差でも σ が違えば z が違う数学3040506070809075(z=1.50英語5560657075808580(z=2.00共通 z 軸-3-2-10123

2 本の数直線は μ を中央、±σ を同じ間隔で揃えてあります。だからドットの位置がそのまま z スコアです。生点を動かすと、同じ点数でも σ が小さい科目ほど z が大きく(相対的に上に)なるのが分かります。

数学 の z
1.50
英語 の z
2.00
相対的に上
英語

直感: 平均を原点に動かす

「μ を引く」だけの操作から見ていきます。σ で割るのはその後です。

数学クラスのいくつかの点数を数直線に乗せると、60, 70, 75, 80, 90 という点が並びます。この数直線の 0 点は「点数がゼロ」を意味していて、平均の 60 点は特別な位置に見えません。ここから全員の点数に μ = 60 を引くと、数直線の原点が平均の位置に来ます。60 → 0、70 → 10、75 → 15、80 → 20、90 → 30 となります。

平均より下の点数も同じ操作を受けます。55 点のとき、55 − 60 = −5 点。負の数は「平均より下に 5 点いる」ことを意味します。stats-02 で「偏差」と呼んでいたものがこれです。μ を引くと、各データ点の偏差が並んだ数直線になります。

μ を引いた後の数直線には「原点 = 平均」という意味が生まれました。これで全員の点数が「平均からの距離」として読めます。ただしまだ単位は「点」のままで、数学クラスと英語クラスの比較には使えません。

標準偏差を 1 目盛りに引き直す

μ を引いた数直線(0, 10, 15, 20, 30)を σ = 10 で割ります。10 ÷ 10 = 1.0、15 ÷ 10 = 1.5、20 ÷ 10 = 2.0、30 ÷ 10 = 3.0 となります。この数直線では「1 目盛り = 1σ」です。平均から 1σ 分離れた点が「1」、2σ 分離れた点が「2」に来るように目盛りを引き直しました。

英語クラス(μ = 70、σ = 5)で同じことをします。80 点のとき、80 − 70 = 10 点、10 点 ÷ 5 点 = 2.0。数学の 75 点が 1.5 になり、英語の 80 点が 2.0 になります。この 2 つの数字はどちらも「単位のない数」なので、並べて比べられます。

単位が消える仕組みは単位解析で説明できます。75 点 − 60 点 = 15 点(点が残る)、15 点 ÷ 10 点 = 1.5(点が約分されて無次元になる)。170 cm − 165 cm = 5 cm、5 cm ÷ 5 cm = 1.0 でも同じです。500 万円 − 400 万円 = 100 万円、100 万円 ÷ 50 万円 = 2.0 でも同じです。物理学の Reynolds 数(速度 × 長さ ÷ 動粘度)やマッハ数(速度 ÷ 音速)も同じ発想で、次元を持つ量をその量の「基準スケール」で割って無次元にしています。

数学 1.5 と英語 2.0 が比べられるのは、両方が「単位のない数」だからです。「クラスの中で英語 80 点の方が数学 75 点より相対的に高い」と断言できる根拠は、σ を 1 単位とした目盛り上で英語 2.0 > 数学 1.5 であることです。

平均より下の点数を標準化すると z がマイナスになります。数学で 55 点(μ = 60、σ = 10)のとき z = (55 − 60) / 10 = −0.5。z = −0.5 は「平均より下に 0.5σ 離れている」という符号付きの距離です。プラスが平均より上、マイナスが平均より下、ゼロが平均ぴったり。この 3 つさえ押さえれば z の符号は自然に読めます。

z スコアの定義式

ここまでの 2 段の操作を 1 行にまとめると:

z=xμσz = \frac{x - \mu}{\sigma}

記号の意味:

  • xx: ある 1 つのデータ値(例: 太郎の点数 75)
  • μ\mu: そのデータが属する集団の平均(本記事では標本平均 xˉ\bar{x} を代入します。stats-02 と整合)
  • σ\sigma: そのデータが属する集団の標準偏差(本記事では標本標準偏差 ssnn 割り版。stats-02 と整合)
  • zz: 標準化後の値(単位なし、平均から何 σ 離れているか)

数学と英語の数字を代入して確認します。数学では z=(7560)/10=15/10=1.5z = (75 - 60) / 10 = 15 / 10 = 1.5。英語では z=(8070)/5=10/5=2.0z = (80 - 70) / 5 = 10 / 5 = 2.0。前のセクションで言葉と表で求めた数字と一致します。式は「前の 2 つのセクションで絵で追った 2 段操作」を 1 行に圧縮したものです。

統計学の教科書では、母集団の平均を μ、標準偏差を σ と書き分け、標本値を xˉ\bar{x}ss と表記します。本記事では入門として、母集団量の記号 μ と σ を「標本から計算した平均と標準偏差をそのまま代入するもの」として扱います。この区別の厳密な議論は stats-09 以降(推測統計)で扱います。

偏差値への変換

z スコアを 偏差値 = 50 + 10z に直すと、平均が偏差値 50、1σ ぶんが 10 ポイントに対応します。z = 2.0 なら偏差値 70、z = -0.5 なら 45 です。

なぜこの式なのか

z スコアは 2 段の合成操作です。平行移動で中心を 0 に揃え、σ で割って 1 目盛りを σ にします。この 2 段の組み合わせを「affine 変換(平行移動と尺度変更の合成)」と呼びます。

標準化は affine 変換

z=(xμ)/σz = (x - \mu) / \sigma は「xx から μ\mu を引く(平行移動)」と「σ で割る(尺度変更)」の 2 段操作の合成です。z=(1/σ)x+(μ/σ)z = (1/\sigma) \cdot x + (-\mu/\sigma) という形に書き直すと、a=1/σa = 1/\sigmab=μ/σb = -\mu/\sigma とおいた z=ax+bz = ax + b の形になります。これは affine 変換(定数 aa 倍して定数 bb を足す、という単純な変換)の特殊ケースです。この操作は分布の「位置と尺度だけを揃えて形は不変に保つ」という性質を持ちます。

μ を引く操作の意味を振り返ります。xμx - \mu は stats-02 で「偏差」と呼んだ量です。数直線上で原点(0 の位置)を μ に動かす平行移動に対応します。

σ で割る操作は数直線の目盛り単位を σ に取り直す尺度変更です。1 目盛り = 1σ に揃えると、「元の数直線では 10 点の差」が「標準化後では 1 目盛りの差」として統一されます。

2 段の合成操作が分布の統計量をどう変えるかを表で確認します。E[Y]E[Y]YY の平均、Var[Y]\mathrm{Var}[Y]YY の分散を表します。一般の affine 変換 Y=aX+bY = aX + b に対するモーメント変換則は次の通りです。

統計量Y=aX+bY = aX + b 後の値
平均 E[Y]E[Y]aE[X]+baE[X] + b
分散 Var[Y]\mathrm{Var}[Y]a2Var[X]a^2 \mathrm{Var}[X]
歪度 γ1[Y]\gamma_1[Y]sign(a)γ1[X]\mathrm{sign}(a) \cdot \gamma_1[X]a>0a > 0 なら不変)
超過尖度 γ2[Y]\gamma_2[Y]γ2[X]\gamma_2[X]aa の値によらず常に不変)

標準化は a=1/σ>0a = 1/\sigma > 0b=μ/σb = -\mu/\sigma の場合です。この値を表に代入します。平均は aμ+b=(1/σ)μ+(μ/σ)=0a \cdot \mu + b = (1/\sigma) \cdot \mu + (-\mu/\sigma) = 0。分散は a2σ2=(1/σ)2σ2=1a^2 \cdot \sigma^2 = (1/\sigma)^2 \cdot \sigma^2 = 1歪度a>0a > 0 なので変化なし。超過尖度も変化なし。どんな元データでも、標準化後の平均はほぼ 0、分散はほぼ 1(丸め誤差を除けば厳密に 0 と 1)になります。

ここで stats-03 で出てきた歪度の定義を振り返ります。(1/n)(xixˉ)3/s3(1/n) \sum (x_i - \bar{x})^3 / s^3 という式で、分子 (xixˉ)3(x_i - \bar{x})^3 は偏差(μ を引いた量)の 3 乗、分母の s3s^3 は標準偏差の 3 乗です。つまり歪度の定義の中身は「(xixˉ)/s(x_i - \bar{x}) / s、すなわち ziz_i の 3 乗の平均」です。歪度は最初から「データを z 化してから 3 乗の平均をとる」操作として定義されていました。超過尖度も同様に「ziz_i の 4 乗の平均から 3 を引いた値」です。歪度・尖度の定義がすでに z 化を内包しているため、さらに z スコアにもう一段の標準化を掛けても同じ量を見ていることになり、値は変わりません。stats-01 で中心、stats-02 で広がり、stats-03 で形を学び、stats-04 でその形を表す量がすでに標準化された量として設計されていたことが分かります。Part 1 の 4 記事は、いずれも「データを z 化してから何乗するか」という同じ枠組みで記述できる関係にあります。

計算標準化後の平均・分散が 0 と 1 になる計算を追う

データを x1,x2,,xnx_1, x_2, \ldots, x_n とし、標本平均を xˉ\bar{x}、標本標準偏差(nn 割り版)を ss とします。

標準化後の値は zi=(xixˉ)/sz_i = (x_i - \bar{x}) / s です。

平均が 0 になること:

zˉ=1ni=1nzi=1ni=1nxixˉs=1s1ni=1n(xixˉ)\bar{z} = \frac{1}{n} \sum_{i=1}^{n} z_i = \frac{1}{n} \sum_{i=1}^{n} \frac{x_i - \bar{x}}{s} = \frac{1}{s} \cdot \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})

(xixˉ)=0\sum (x_i - \bar{x}) = 0(偏差の合計はゼロ、stats-02 で確認済み)なので zˉ=0\bar{z} = 0 です。

分散が 1 になること:

sz2=1ni=1n(zizˉ)2=1ni=1nzi2=1ni=1n(xixˉ)2s2=1s21ni=1n(xixˉ)2=s2s2=1s_z^2 = \frac{1}{n} \sum_{i=1}^{n} (z_i - \bar{z})^2 = \frac{1}{n} \sum_{i=1}^{n} z_i^2 = \frac{1}{n} \sum_{i=1}^{n} \frac{(x_i - \bar{x})^2}{s^2} = \frac{1}{s^2} \cdot \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2 = \frac{s^2}{s^2} = 1

どちらも正確に 0 と 1(浮動小数点演算では 101210^{-12} 以下の誤差が出ることはありますが、統計的には厳密に成立します)。

計算(バイト時給 8 人)

stats-02 で登場したアルバイトの時給 8 人分のデータで z スコアを計算します。データは {1,000, 1,050, 1,050, 1,100, 1,150, 1,200, 1,300, 4,500} 円(A〜H さん)、平均 xˉ=1,543.75\bar{x} = 1{,}543.75 円、標準偏差 s1,121s \approx 1{,}121 円(nn 割り版)です。

時給(円)xxˉx - \bar{x}(円)z=(xxˉ)/sz = (x - \bar{x}) / s
A1,000−543.75−0.485
B1,050−493.75−0.440
C1,050−493.75−0.440
D1,100−443.75−0.396
E1,150−393.75−0.351
F1,200−343.75−0.307
G1,300−243.75−0.217
H4,500+2,956.25+2.64

A〜G の z スコアはすべて −0.5 付近に集まり、H さんだけ +2.64 と突出します。z の合計を計算すると、( −0.485 − 0.440 − 0.440 − 0.396 − 0.351 − 0.307 − 0.217 + 2.64 ) ≈ 0.00 となり、zˉ=0\bar{z} = 0 が確認できます。

分散の検算もします。zi2z_i^2 を合計して 8 で割ります。A〜G の zi2z_i^2 の合計は小さく、H さんの zH2=2.6426.97z_H^2 = 2.64^2 \approx 6.97 が全体の大半を占めます。全部足して 8 で割ると sz21.00s_z^2 \approx 1.00 です。H さんの z スコア +2.64 が stats-03 で計算した超過尖度の主因だったことも、数値から確認できます。zi4z_i^4 の平均(= 超過尖度 + 3)の大半が H さんの寄与 2.64448.62.64^4 \approx 48.6 から来ているためです。8 人の z スコアのうち A〜G 全員が −0.5 付近(−0.217〜−0.485)に密集し、H さんだけが +2.64 に位置します。zH26.97z_H^2 \approx 6.97 は A〜G 全員の zi2z_i^2 の合計(約 1.04)の 6 倍以上です。「分散 = 1」という条件はこの H さんの寄与で成立しており、平均 0・分散 1 がどのように実現されているかの内訳が見えます。

偏差値の計算もします。偏差値の式は:

T=50+10zT = 50 + 10z

TT が偏差値で、z を 10 倍して 50 を足すと平均 50・標準偏差 10 の軸に乗り直します。z = 0(平均ぴったり)→ T = 50、z = +1 → T = 60、z = −2 → T = 30。偏差値は z スコアにもう 1 段の affine 変換(10 倍 + 50)を掛けただけで、z スコアと同じ情報を別の目盛りで表します。

別の例で確認します。数学の別のテスト(平均 70 点・σ 5 点)で太郎が 80 点、英語のテスト(平均 60 点・σ 10 点)で太郎が 70 点を取ったとします。数学は z = (80 − 70) / 5 = +2.0 → T = 70。英語は z = (70 − 60) / 10 = +1.0 → T = 60。素点はどちらも平均から +10 点ですが、σ の小さい数学では「珍しさ」が 2 倍大きく、偏差値は数学の方が 10 ポイント高くなります。

z(無次元)偏差値 T
−2.030
−1.040
0.050
+1.060
+2.070

偏差値 30 を見たら「平均から 2σ 下」と即座に翻訳できます。

数直線で 2 段操作を見る

数学の例(x = 75、μ = 60、σ = 10)で、標準化を 3 本の数直線で確認します。3 本の数直線がそれぞれ「元の点数」「μ を引いた後」「z スコア」に対応します。

元の点数軸(0〜100)μ=60x=7540506070758090元の点数(点)0.00.20.40.60.81.0

赤破線が μ = 60(クラス平均)、青線が x = 75(太郎の点数)です。

μ を引いた後(偏差 = x − μ)0(平均)x−μ=15−20−10010152030x − μ(点)0.00.20.40.60.81.0

原点が平均(60 点)の位置に移りました(赤破線が原点 0)。青線の x = 75 が 15 点(平均より上に 15 点)として表れます。

z スコア軸(σ で割って無次元に)0(平均)z=1.5−2−101223z スコア(無次元)0.00.20.40.60.81.0

1 目盛りが「1σ(= 10 点)」になりました。z スコア軸では数字の単位(点)が消え、英語クラスの z スコア(z = 2.0)と直接比べられる状態になります。σ が小さいクラスでは、同じ「平均より 10 点上」でも z が大きくなります。英語(σ = 5)では z = 2.0、数学(σ = 10)では z = 1.5。「珍しさ」は平均からの差ではなく、その集団の σ を基準にした距離で決まります。

3 本の図を見るときは「赤破線が原点(平均)の位置」「青線がデータ点の位置」「目盛りの単位」の 3 点を確認します。1 本目は目盛り単位が「点」、2 本目も「点」(ただし原点が平均に移動)、3 本目は「σ(= 10 点)」です。3 本目ではじめて数学と英語を直接比べられる目盛りになります。

標準化と正規化は別物

「標準化」と「正規化」は混同されやすい用語です。機械学習の文脈で「normalize する」という表現が出てきたとき、それが z スコア化なのか、最小値 0・最大値 1 にするスケーリングなのかは文脈で違います。

系統変換後の平均SD範囲分布の形外れ値耐性代表的用途
標準化(z-score)z=(xμ)/σz = (x - \mu) / \sigma01不定不変弱い統計分析、PCA
正規化(min-max)z=(xxmin)/(xmaxxmin)z = (x - x_{\min}) / (x_{\max} - x_{\min})不定不定[0, 1]不変弱い機械学習前処理
ロバストスケーリングz=(xx~)/MADz = (x - \tilde{x}) / \mathrm{MAD}0 付近不定(正規分布下で約 1.48)不定不変強い外れ値が多いデータ

scikit-learn は StandardScaler(標準化、z スコア化)と MinMaxScaler(正規化、min-max)を明確に分けた命名で、この混同に対処しています。Python で書くとき、from sklearn.preprocessing import StandardScaler が z スコア化(平均 0・SD 1)、from sklearn.preprocessing import MinMaxScaler が min-max 正規化(0 以上 1 以下)です。名前が違うのは、この 2 つが数式的に別の変換だからです。「前処理で normalize する」と書かれていたら、StandardScalerMinMaxScaler かをコードで確認する必要があります。

本記事が扱うのは標準化のみです。ロバストスケーリング(中央値と MAD を使う外れ値耐性の高い変換)は補足記事 stats-supplement-robust-standardization で、min-max 正規化の実務的な使い分けは実践記事で扱います。

金融での登場場面

リターンの z スコア化は金融で広く使われています。ある銘柄の今日のリターンを「過去 N 日リターンの平均を引いて σ で割った値(z スコア)」として表すと、「今日の差が過去の変動に比べて何 σ 分か」が分かります。Bollinger Band は価格を「20 日移動平均 ± 2σ」で挟む指標ですが、これは「価格を 20 日の平均と σ で標準化したとき、z = ±2 の境界を引いている」のと同じ発想です。

金融データでは正規分布を仮定したときの予測と実測がずれることがあります。正規分布では z>3|z| > 3 となる確率は約 0.27%(P(Z>3)0.0027P(|Z|>3) \approx 0.0027)ですが、株式リターンのような fat tail を持つデータでは z>3|z| > 3 の観測が 0.27% をはるかに超える頻度で起きます。z スコアそのものは線形変換なので分布の形を仮定しません。ただし「z = 3 以上は何 %」のように確率に翻訳した瞬間に、分布の形(正規かどうか)の前提が入ります。

また、過去 N 日の全データで μ と σ を計算してからバックテストに使うと、未来のデータが σ の計算に含まれる「look-ahead bias」が発生します。この問題の具体的な実装と回避手法は実践記事 stats-practice-asset-return-zscore で扱います。

fat tail では |z|>3 が想定より頻発する

正規分布の仮定では P(Z>3)0.27%P(|Z|>3) \approx 0.27\% です。しかし株式リターン・為替変動・商品価格は正規分布より裾が厚い(fat tail)ため、z>3|z| > 3 の観測日が年に数回どころか数十回出ることがあります。「z スコアが大きい = 正規分布での確率が低い」という翻訳は、元データが正規分布に従う場合のみ成立します。

次に学ぶこと

次回 stats-05「確率の直感」では、「珍しさを確率で測る」話に進みます。本記事の E[Z]=0E[Z] = 0Var[Z]=1\mathrm{Var}[Z] = 1 という結果は、Part 2 では確率変数期待値・分散として同じ構造が出てきます。z スコアが正規分布と組み合わさると「z = 1.96 以上は全体の 5%」のような確率的な主張ができますが、その接続は stats-08(中心極限定理)まで待ちます。

Part 1 の道具立て

stats-01 の中心(平均・中央値)、stats-02 の広がり(分散・標準偏差)、stats-03 の形(歪度・尖度)と並べてきて、stats-04 の標準化(z スコア・affine 変換)を加えると、各記事が扱った量(z 化した量の冪乗)として歪度・尖度が定義されている構造が見えてきます。

シェアポストブックマーク
この記事は役に立ちましたか?