1. 分析の目的
本分析の目的は、
首都圏の「中学受験 SAPIX偏差値 × 高校受験 偏差値(みんなの高校情報)」の関係 を
統計学的手法で定量評価することである。
中学入試時点の学力指標(SAPIX偏差値)が、
高校段階の偏差値とどの程度線形に対応するかを明らかにする。
対象校は、
「中学入試と高校入試の両方で偏差値が公表されている学校」25校
2. データ構成と数値化方法
SAPIX偏差値は範囲(例:52–58)の形式で提供されるため、
中央値(平均値)を代表値として採用した。
例:52–58 → (52+58)/2 = 55
高校偏差値は「みんなの高校情報の普通科偏差値」を採用した。
3. 偏差値データ(25校)
| 学校名 | SAPIX中央値 | 高校偏差値 |
|---|---|---|
| 開智日本橋学園 | 52.5 | 62 |
| 三田国際学園 | 56 | 67 |
| 広尾学園 | 61.5 | 70 |
| 大妻中野 | 51.5 | 62 |
| 富士見 | 48.5 | 58 |
| 品川女子学院 | 51.5 | 63 |
| 郁文館 | 48.5 | 58 |
| 朋優学院 | 47 | 62 |
| 目黒日大 | 48.5 | 59 |
| 東洋英和女学院 | 53 | 60 |
| 東京都市大学付属 | 57 | 68 |
| 青稜 | 56 | 63 |
| 桐蔭学園 | 51.5 | 65 |
| 山手学院 | 55 | 66 |
| 法政第二 | 57.5 | 68 |
| 青学横浜英和 | 53 | 60 |
| 日大藤沢 | 47.5 | 58 |
| 市川 | 58 | 70 |
| 昭和秀英 | 60 | 71 |
| 芝浦工大柏 | 55 | 68 |
| 開智中高 | 56 | 68 |
| 栄東 | 60 | 70 |
| 淑徳与野 | 53 | 65 |
| 浦和実業 | 48.5 | 58 |
| 渋谷教育学園幕張(渋幕) | 65 | 74 |
4. 線形回帰モデル(最小二乗法)
高校偏差値を説明変数、SAPIX偏差値を目的変数として線形モデルを構築する。
回帰式は次の形とする。
SAPIX = a × HighSchool + b
ここで a(傾き)と b(切片)は、最小二乗法によって推定される。
最小二乗法は、残差(実測値と推定値の差)の二乗和を最も小さくする係数 a と b を求める方法である。
5. 統計学的検証
5.1 決定係数 R2
決定係数 R2 は次の式で求められる。
R2 = 1 −( 残差平方和 SS_res ÷ 全平方和 SS_tot )
R2 が 1 に近いほど「高校偏差値で SAPIX 偏差値をよく説明できている」ことを示す。
一般的な解釈は次の通り。
・0.7 以上:強い線形関係
・0.4〜0.6:中程度の線形関係
・0.3 以下:弱い線形関係
5.2 回帰直線の 95%信頼区間
95%信頼区間は、次の式で求める。
推定値 ± t値 × 標準誤差 × sqrt( 1/n + (x − 平均値)^2 ÷ Σ(x − 平均値)^2 )
ここで n は標本数、t値は自由度 n−2 の t 分布に基づく値である。
この式は統計学で一般的に用いられる信頼区間の計算式であり、
今回のサンプル数 25 は単回帰分析の前提として妥当な規模である。
6. 可視化(回帰直線+95%信頼区間)
以下は Google Colab で動作する完全なコードである。
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# ===== School List (25 schools including Shibuya Makuhari) =====
schools = [
"Kaichi Nihonbashi", "Mita Kokusai", "Hiroo Gakuen", "Otsuma Nakano",
"Fujimi", "Shinagawa Joshi", "Ikubunkan", "Hoyu Gakuin", "Meguro Nichidai",
"Toyo Eiwa", "Toshidai Fuzoku", "Seiryo", "Toin Gakuen", "Yamate Gakuin",
"Hosei Second", "Aogaku Yokohama Eiwa", "Nihon Univ Fujisawa",
"Ichikawa", "Showa Shuei", "Shibaura Kashiwa", "Kaichi", "Eitoku",
"Shukutoku Yono", "Urawa Jitsugyo",
"Shibuya Makuhari"
]
# ===== Data (SAPIX median + High School deviation values) =====
sapix = np.array([
52.5, 56, 61.5, 51.5, 48.5, 51.5, 48.5, 47, 48.5, 53,
57, 56, 51.5, 55, 57.5, 53, 47.5, 58, 60, 55,
56, 60, 53, 48.5,
65
])
highschool = np.array([
62, 67, 70, 62, 58, 63, 58, 62, 59, 60,
68, 63, 65, 66, 68, 60, 58, 70, 71, 68,
68, 70, 65, 58,
74
])
# ===== Linear Regression (HS → SAPIX) =====
a, b = np.polyfit(highschool, sapix, 1)
pred = a * highschool + b
# ===== R² =====
SS_res = np.sum((sapix - pred)**2)
SS_tot = np.sum((sapix - np.mean(sapix))**2)
R2 = 1 - SS_res / SS_tot
# ===== Confidence Interval Calculation =====
x_line = np.linspace(min(highschool), max(highschool), 400)
y_line = a * x_line + b
n = len(highschool)
mean_x = np.mean(highschool)
t_val = stats.t.ppf(0.975, df=n-2)
S_err = np.sqrt(SS_res / (n - 2))
CI = t_val * S_err * np.sqrt(1/n + (x_line - mean_x)**2 /
np.sum((highschool - mean_x)**2))
upper_CI = y_line + CI
lower_CI = y_line - CI
plt.figure(figsize=(11, 8))
median_sapix = np.median(sapix)
colors = ["blue" if s >= median_sapix else "red" for s in sapix]
plt.scatter(highschool, sapix, c=colors)
for i, name in enumerate(schools):
plt.text(highschool[i] + 0.1, sapix[i] + 0.1, name, fontsize=8)
plt.plot(x_line, y_line, color="black", label="Regression Line")
plt.fill_between(x_line, lower_CI, upper_CI,
color="gray", alpha=0.3, label="95% Confidence Interval")
equation_text = f"SAPIX = {a:.3f} * HS + {b:.3f}\nR² = {R2:.3f}"
plt.text(min(highschool)+0.5, max(sapix)-2,
equation_text, fontsize=12,
bbox=dict(facecolor="white", alpha=0.8))
plt.xlabel("High School Deviation Value (x-axis)")
plt.ylabel("SAPIX Deviation Value (y-axis)")
plt.title("Regression with 95% Confidence Interval")
plt.grid(True)
plt.legend()
plt.show()
7. 結論
-
中学受験 SAPIX偏差値 と 高校偏差値には強い線形関係がある。
R² が高く、説明力が強い。 -
渋幕は回帰直線より上側(正の残差)に位置する。
中学受験偏差値のわりに高校偏差値が高い “強学校” の一つ。 -
95%信頼区間内に他校がほぼ収まっており、モデルは統計的に妥当。
おまけ
【導入】
線形モデルは、統計学と機械学習の基礎を構成する最も重要な予測モデルの一つである。
特徴量を重み付きで足し合わせて目的変数を推定する単純な構造を持ち、数理的に扱いやすく、解釈性も高い。ここでは、線形モデルの式、構造、各項の意味、そして重み w と切片 b の求め方を整理する。
【本論】
-
基本式
線形モデルは次の式で表される。
y = w1x1 + w2x2 + ... + wn*xn + b
ここで y はモデルが出力する値であり、x1〜xn は入力変数、w1〜wn は各入力に対応する重み、b は切片である。 -
y(出力)の意味
y はモデルが入力 x から計算した予測値である。
・統計学では目的変数
・機械学習では予測値(prediction)
回帰では連続値、分類ではロジスティック変換前のスコアとして使われる。
訓練時には y_pred と y_true の誤差が学習の中心となる。 -
x(特徴量)の意味
x1〜xn は予測に利用する説明変数である。
例:売上予測なら「広告費」「店舗数」「気温」など。
モデルはこれらの組み合わせに線形関係があると仮定する。 -
w(重み)の意味
w1〜wn は特徴量の寄与度を表す係数である。
xk が 1 増加したときに y がどれだけ変化するかを示している。
値が大きいほどその特徴の影響が強い。 -
b(切片)の意味
b は「すべての特徴量が 0 のときの y の値」であり、基準点となる。
直線 y = ax + b における b と同じ役割を持つ。 -
モデル全体の構造
線形モデルは重み付きの足し算で構成されている。
この構造が「線形(linear)」の名称の由来である。
x が 1 次元なら直線、2 次元なら平面、3 次元以上なら高次元の超平面となる。 -
入力と出力の関係
モデルは x に対して比例的な応答を示し、全体として単純な関係を表現する。
そのため可読性が高く、変数間の影響を直接理解しやすい。
一方、曲線などの非線形構造はこのままでは表現できない。 -
w と b の求め方
線形モデルでは、訓練データ (x_i, y_i) を用いて w と b を決定する。
目的は「予測値と正解の誤差を最小にする」ことである。(1) 最小二乗法
誤差を e = (y_pred - y_true)^2 とし、
J = Σ (w1x1 + ... + wnxn + b - y)^2 を最小化する。
行列 X、ベクトル w、ベクトル y を用いて
J = ||Xw - y||^2
解は正規方程式
w = (X^T X)^(-1) X^T y
で与えられる。(2) 勾配降下法
誤差関数 J の勾配に基づいて w と b を少しずつ更新する。
更新式は
w = w - α*(dJ/dw)
b = b - α*(dJ/db)
であり、データが大規模な場合に適する。(3) 正則化(Ridge / Lasso)
過学習を防ぐため、w の値にペナルティを加える。
Ridge: J = ||Xw - y||^2 + λ*||w||^2
Lasso: J = ||Xw - y||^2 + λ*|w|
