Appendix A — 応用: 予測

母平均のモデルの有力な応用例として、\(Y\)の予測問題への活用があります。 予測を目的とする研究では、観察できる変数 \(X\) から意思決定に必要だが欠損している情報 \(Y\) を予測するモデル(予測モデル)の推定を目指します。

実例は、以下があげられます。

統計学や機械学習においては、もし\(Y,X\) が共に観察できるデータを活用できるのであれば、予測モデルの推定方法がある程度確立されています。

A.1 推定目標

本章では、データと同じ母集団から新たに抽出された事例を、予測するモデルの推定を目指します。 予測能力は、母集団における平均二乗誤差で測定します \[母集団における平均二乗誤差 = (Y - 予測値)^2 の母集団における平均\] 母集団における平均二乗誤差は、直接観察することは不可能です。 ただし本章で紹介する通り、推定することは可能です。 ただし有力な理論的含意を得ることができます。

A.1.1 完璧な予測は不可能

予測研究における究極的な目標の一つは、 \(Y\) を完璧に予測するモデルの推定です。 しかしながら多くの応用で、この目標には到達することができません。 予測モデルは、ある\(X\)の組み合わせについて、一つの予測値のみを出力します。 このため母集団において、同じ\(X\) 内で\(Y\) の値にばらつきがあれば、予測が外れる事例は必ず存在します。

完璧な予測には、\(Y\)の全ての決定要因を\(X\)として観察し、\(X\)内での個人差をなくす必要があります。 しかしながら人間行動や社会的な事象などの社会的変数の決定要因は無数に存在し、その多くは観察が難しいと考えられます。 結果、社会的変数について、完璧な予測は不可能と考えられます。

A.1.2 理想の予測モデル

最も高い予測性能 (母集団における平均二乗誤差が最小化)を達成する予測モデルは、母平均であることが証明できます。 このため予測研究においては、データから推定した予測モデルを理想の予想モデルである母平均に極力近づけることが、実質的な目標となります。 具体的には以下の予測誤差を極力削減することを目指します \[(\underbrace{X内でのYの母平均}_{理想の予測モデル}-予測モデル)^2の母平均\]

OLSやLASSOは、母平均のモデルを指定しており、理想の予測モデル推定を目指すための有力な方法です。

A.2 予測性能の測定

予測を目指す分析では、推定された予測モデルの性能を評価することが重要となります。 OLSやLASSOにより推定されたモデルの性質について、多くの理論研究が蓄積されています。 しかしながら現状、幅広いデータや状況において、一貫して高い予測性能を生み出す方法は存在しません。 また実際の予測力を理論のみに基づいて、算出することは困難です。 このため複数の予測モデルを”試作”し、データを用いてその性能を比較することが求められます。

最もシンプルな評価方法は、サンプル分割です。

サンプル分割法の定義
  1. データをランダムに訓練データとテストデータに分割する
  • 訓練/テスト間での事例数の比率については、8対2や95対5が(経験則として)推奨されることが多い。
  1. 訓練データのみでモデルを試作する

  2. テストデータへの当てはまりを(平均二乗誤差などで)評価する

実際の取引データに適用した結果は以下です。 6378事例のうち、ランダムに選んだ半分を訓練、残り半分をテストに用いました。 テストした推定方法は以下です。

  • OLS: 取引価格 ~ 部屋の広さ + 立地 + 取引年

  • OLS (含む交差項 + 高次項): 取引価格 ~ 部屋の広さ + 立地 + 取引年 + 交差項 + 高次項(6次まで)

  • LASSO (含む交差項 + 高次項): 取引価格 ~ 部屋の広さ + 立地 + 取引年 + 交差項 + 高次項(6次まで)

推定された予測モデルの評価結果は以下となりました。

OLS OLS| 交差項 + 高次項 LASSO
369 316 303

LASSOが最も予測性能が高く、単純なOLSと比較し、0.179 パーセントほど平均二乗誤差を削減しています。 対して、交差項と高次項を追加したOLSとLASSOを比較した場合、0.041 パーセントほどの改善にとどまります。 これはモデルの複雑さに比べて、事例数が多く、LASSOによるモデル単純化の恩恵が限定的であることを示しています。

A.3 Rによる実践例

  • 以下のパッケージを使用

    • readr (tidyverseに同梱): データの読み込み

    • gamlr: LASSO

A.3.1 準備

データとその事例数を取得し、データをランダムに分割します。

set.seed(111)

Data = readr::read_csv("Public.csv") # データ読み込み

X = model.matrix(
  ~ 0  +
    (Size + Tenure + StationDistance + District)**2 + # 交差項
    I(Size^2) + I(Tenure^2) + I(StationDistance^2), # 二乗項
  Data
) # X の作成

X = scale(X) # 標準化

N = nrow(Data) # 事例数の取得

Group = sample(
  1:2,
  N, # 事例数
  replace = TRUE, # 復元抽出を指定
  prob = c(0.8,0.2) # "1"が8割、"2"が2割
) # サンプル分割のために1または2をランダムに発生

lm関数を用いてOLS, gamlr関数を用いてLASSO推定をします。 またLASSO推定は、複雑なモデルを推定に利点を持つため、交差項と二乗項までを導入したモデルも推定しています。

LASSO = gamlr::gamlr(
  y = Data$Price[Group == 1],
  x = X[Group == 1,]) # LASSO

OLS = lm(
  Price ~ Size + Tenure + StationDistance + District,
  Data,
  subset = Group == 1
)

OLS_Long = lm(
  Price ~ +
    (Size + Tenure + StationDistance + District)**2 +
    I(Size^2) + I(Tenure^2) + I(StationDistance^2),
  Data,
  subset = Group == 1
)

HatLASSO = predict(LASSO,X)
HatOLS = predict(OLS,Data)
HatOLS_Long = predict(OLS_Long,Data)

mean((Data$Price - HatLASSO)[Group == 2]^2)
[1] 154.7488
mean((Data$Price - HatOLS)[Group == 2]^2)
[1] 265.1663
mean((Data$Price - HatOLS_Long)[Group == 2]^2)
[1] 149.513

A.4 まとめ

典型的な予測問題においては、データを用いた予測モデルの推定と評価、という二つの作業が求められます。 一般にこの作業を同じデータで行うと多くの問題が発生します。 本章では、データをランダムに2分割し、片方のデータで予測を、残りのデータで評価を行う方法を紹介しました。

評価値としては平均二乗誤差を用いました。 現在、他の評価方法も盛んに研究されています (Angelopoulos, Bates, et al. (2023) などを参照してください)。