論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
説明変数
Explanatory Variable
ML基礎
別称: 独立変数 / 予測変数

🔖 キーワード索引

説明変数 独立変数 予測変数 x feature covariate regressor input 重回帰 多重共線性 VIF 因果 交絡 ダミー変数

💡 30秒で分かる結論

説明変数(Explanatory Variable):予測に使う変数。 ML 用語では「特徴量 (feature)」、 統計では「説明変数」「独立変数」

📍 あなたが今見ているもの

このページは「説明変数(Explanatory Variable)」の用語解説です。 機械学習の基礎カテゴリにおける重要概念で、 機械学習の基礎 グループ教材の中で繰り返し登場します。 数式・実コード・落とし穴を 1 ページに集約し、 SSDSE-B-2026 都道府県データ(47 件 × 112 列)を題材に 手を動かしながら理解できるよう構成しています。

別称:独立変数 / 予測変数 / x。 まず 💡 30秒結論 で全体像を、 次に 🎨 直感📐 数式🧮 実値🐍 Python の順で読むのがおすすめ。

🎨 直感で掴む

説明変数は「原因側 / 入力」の変数です。 統計では $x$、 ML では特徴量、 計量経済では共変量と呼ぶことも。 「都道府県の総人口で 15 歳未満人口を説明する」と言うとき、 総人口が説明変数、 15 歳未満人口が目的変数です。

複数の説明変数を同時に使うのが 重回帰。 ただし説明変数同士の相関が強い(多重共線性)と係数が暴れ、 解釈が困難に。 VIF(分散拡大係数)が 10 を超えるなら片方を除外。

📐 数式または定義

本概念は次のように記述されます(KaTeX で描画)。

$$y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \varepsilon,\qquad \mathrm{VIF}_j = \frac{1}{1 - R_j^2}$$

英語名 Explanatory Variable。 別称:独立変数 / 予測変数 / x。

🔬 数式を言葉で読み解く

記号と意味を逐一突き合わせて読みます。 慣れないうちは式を「日本語で読む」ことが理解の近道です。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B から 3 つの説明変数 で 15 歳未満人口を重回帰し、 VIF を確認します。

データ出典:SSDSE-B-2026(独立行政法人統計センター)。 47 都道府県 × 複数年(最新 2023)の社会統計データ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)

# 説明変数を 3 つ
X = df[['総人口','15~64歳人口','65歳以上人口']]
y = df['15歳未満人口']

# 重回帰
X_const = sm.add_constant(X)
model = sm.OLS(y, X_const).fit()
print(model.summary().tables[1])

# VIF
for i, name in enumerate(X.columns):
    vif = variance_inflation_factor(X.values, i)
    print(f'VIF({name}) = {vif:.2f}')

実行結果の要約(出力は環境依存。 概算値):

項目
β(総人口)0.041 (p<0.01)
β(15~64歳人口)0.052 (p<0.05)
β(65歳以上人口)−0.183 (p<0.001)
VIF(総人口)248 (極めて高い)
VIF(15~64歳人口)190
VIF(65歳以上人口)44

🐍 Python 実装

scikit-learn / pandas を使った最小実装パターン。 上の SSDSE-B 計算と同じスタイルですが、 ここでは「読み込み→前処理→学習→評価」のテンプレを 4 つのスニペットに分けます。

① データ読み込み & 概観

1
2
3
4
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
df = df[df['年度'] == 2023].reset_index(drop=True)
print(df.shape, df.columns.tolist()[:8])

② 特徴量と目的変数

1
2
3
X = df[['総人口','65歳以上人口']].values
y = df['15歳未満人口'].values
print('X shape =', X.shape, ',  y shape =', y.shape)

③ 訓練/テスト分割 + モデル学習

1
2
3
4
5
6
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestRegressor(n_estimators=300, random_state=0).fit(X_tr, y_tr)
print('R^2 (test) =', model.score(X_te, y_te))

④ 評価と可視化

1
2
3
4
5
6
import matplotlib.pyplot as plt
pred = model.predict(X_te)
plt.scatter(y_te, pred)
plt.plot([y_te.min(), y_te.max()], [y_te.min(), y_te.max()], 'r--')
plt.xlabel('実測'); plt.ylabel('予測'); plt.title('「説明変数」関連モデルの予測精度')
plt.tight_layout(); plt.savefig('out.png', dpi=150)

※ 「説明変数」固有の本格コードは上の 🧮 SSDSE-B 実値計算 節を参照。

⚠️ よくある落とし穴(5 つ)

❌ 多重共線性を無視
VIF>10 の変数を入れると係数の符号が反転することも。 1 つに絞るか PCA で合成。
❌ 因果と相関を混同
回帰係数 $\beta$ は条件付き相関に過ぎない。 因果効果は無作為割付か準実験が必要。
❌ 交絡変数を含めない
本当の原因(交絡)を除外すると、 説明変数の係数が歪む。 ドメイン知識で吟味。
❌ 過剰な説明変数
p>n になると OLS が解けない。 Lasso などで変数選択。
❌ カテゴリ変数のダミー化忘れ
都道府県名を文字列のまま入れると ML はエラー。 OneHot か Target Encoding。

🔎 深掘り解説

説明変数の選び方

  1. ドメイン知識:理論的に y に影響する変数を最優先
  2. 単変量スクリーニング:相関係数・χ²でフィルタ
  3. 多変量フィルタ:多重共線性をVIFで確認
  4. ラッパー法:Forward/Backward selection、 Step-wise
  5. 組込み法:LASSO による自動選択
  6. 解釈性:報告先が理解できるか

説明変数のタイプと取扱い

タイプ取扱い
連続身長、 所得そのまま/標準化/対数変換
カテゴリ(名義)性別、 地域OneHotエンコード
順序満足度1-5整数化 or OneHot
日時購入日年/月/曜日に分解、 周期特徴量
テキストレビュー文TF-IDF or 埋め込みでベクトル化

✅ 使う前のチェックリスト

📖 さらに学ぶには

本サイト内

外部リソース

困ったときは

  1. データの可視化(散布図、 ヒストグラム、 箱ひげ図)で異常を確認
  2. サンプルサイズ・欠損・外れ値を確認
  3. 仮定が満たされているか診断(正規性検定、 等分散性検定など)
  4. 類似研究での標準的な手法を確認
  5. 結果を複数手法でクロスチェック(頑健性確認)

✅ 学習チェックリスト