統計ストーリー教材「分析助手」UIプロトタイプ・レビュー用

EP5 どちらの群かを予測する

ロジスティック回帰 / 性格分岐なし・固定1パターン版

今日は「予測」の仕事。回帰(EP2)の考えを0/1の世界へ持ち込みます。

先生からの依頼

先生 32車種の仕様データがある。古いカタログはトランスミッション(am: 0=AT, 1=MT)の記載が欠けていることがある。車重(wt, 1000ポンド単位)からMTである確率を推定するモデルを作ってほしい。
> head(mtcars[,c("wt","am")])
wtam
2.621
2.8751
3.2150
3.440

探索: まず直線を当ててみる

EP2と同じ感覚で、まず普通の回帰直線を当ててみます。

> predict(lm(am ~ wt, data=mtcars), newdata=data.frame(wt=c(1.5,5)))
wt=1.5での予測wt=5での予測
1.2-0.2
⚠️ amは0(AT)か1(MT)しかない値のはずなのに、予測値が1.2や-0.2という「0と1の外」の数字になっています。

Q1. これは何が起きているのでしょうか?

分析: ロジスティック回帰を使う

> glm(am ~ wt, data=mtcars, family=binomial)
EstimateStd. ErrorPr(>|z|)
(Intercept)12.044.510.0076
wt-4.021.440.0051

車重ごとの「MTである確率」を曲線にすると、次のようなS字になります。

> curve(predict(glm(am~wt,data=mtcars,family=binomial), data.frame(wt=x), type="response"))
wt(1000lb) P(MT)

実測32台の散布(上=MT、下=AT)と、実際のglm()から計算したS字カーブ()。

Q2. 係数-4.02から即座に読み取ってよいのは?

Q3. wt=2.5(2500lbs)を代入するとpredictが0.88になりました。この0.88の意味は?

確率を0/1の判定に変える境目を(既定0.5)と呼びます。判定の結果をにまとめます。

> table(predict(model,type="response")>0.5, mtcars$am)
実際: AT(0)実際: MT(1)
予測: AT182
予測: MT111

32台中29台が正解(90.6%)。全部「AT」と答えても19/32=59%は当たる基準線があることには注意。

Q4. 的中率90.6%。これで完成と言える?

32台という限られた数で学んだモデルにはの心配があります。

Q5. n=32台のこのモデルを、そのまま実運用してよい?

報告: カタログの空欄への回答

車重から推定したところ、MTである確率は べきである。的中率90.6%は32台での自己採点であり、

「車重から推定したところ、MTである確率は推定値として、確率のまま(出所つき)で示すべきである。的中率90.6%は32台での自己採点であり、新しいデータでの確認を条件とする。」

5話目、完了

直線を無理に当てはめないこと、モデルの出力(確率)と判定を混同しないこと、自己採点の的中率を鵜呑みにしないこと——今日の3つの判断も、この先で繰り返し試されます。