対数変換 ── 右に裾を引く分布を対数で圧縮し、 正規分布に近づける前処理。
log(x+1) や符号付き対数で対処所得、 人口、 売上、 株価変動、 ファイルサイズ――身のまわりの「桁が違う」量はほぼすべて対数変換の対象。 統計モデリングの標準前処理です。
SSDSEで「人口」分布を見ると:
SSDSEで「人口」と「教育費」の関係:
これが「log-log プロット」のご利益。 数桁にまたがる量の比較で必須。
最小限のスニペットで動作確認できる例。 公的データ(SSDSE 等)を想定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import numpy as np import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) # 単純な対数変換 df['log_人口'] = np.log1p(df['人口']) df['log_教育費'] = np.log1p(df['教育費']) # Box-Cox(正の値のみ) from scipy.stats import boxcox boxcoxed, lam = boxcox(df['人口']) print(f"最適 λ = {lam:.3f}") # 約0なら自然対数が最適 |
正規性検定(Shapiro-Wilk)や Q-Qプロットで事後評価。
| モデル | 係数の意味 |
|---|---|
| y = β₀ + β₁ x | xが1単位増 → yが β₁ 増 |
| log(y) = β₀ + β₁ x | xが1単位増 → yが (e^β₁-1) × 100% 増 |
| y = β₀ + β₁ log(x) | xが1%増 → yが β₁/100 増 |
| log(y) = β₀ + β₁ log(x) | 弾力性:xが1%増 → yが β₁% 増 |
正規性検定(Shapiro-Wilk)や Q-Qプロットで事後評価。
| モデル | 係数の意味 |
|---|---|
| y = β₀ + β₁ x | xが1単位増 → yが β₁ 増 |
| log(y) = β₀ + β₁ x | xが1単位増 → yが (e^β₁-1) × 100% 増 |
| y = β₀ + β₁ log(x) | xが1%増 → yが β₁/100 増 |
| log(y) = β₀ + β₁ log(x) | 弾力性:xが1%増 → yが β₁% 増 |