SSブログ

ロジスティック回帰モデルのCalibration(キャリブレーション) [データサイエンス、統計モデル]

統計の講師をしていて、なるほど!と思う質問を受けることがあります。
せっかくなので、その中からピックアップして紹介できればと思います。

【質問】
モデルの比較する際にAICなりAUCなりの検証方法があります。
ロジスティック回帰モデルのCalibration(キャリブレーション)をするにはどうすれば良いか?

【回答】
Calibration(キャリブレーション)とは・・・
モデルの予測値と実際の値をプロットしてどれだけ一致しているかを検証する方法のことです。

予測値と実際の予測値といってもロジスティック回帰モデルの場合、
モデルの予測値 → 0から1の間の確率
実際の値 → 0 or 1のバイナリ
となっていて、そのままプロットしてもよくわかりません。

では、具体的にはどうすれば良いか?といえば、予測した確率を小さい順から大きい順に並べます。
並べ方は大きい順から小さい順でも問題ありません。
次に、10等分なり20等分します。
何等分すれば良いかは、サンプルサイズとの兼ね合いなので、一概には言えませんが、仮に10等分するとします。

そして、各区分ごとに平均値を集計していきます。
モデルの予測値 → 「0から1の間の確率」の平均値
実際の値 → 「0 or 1のバイナリ」の平均値

仮にモデルの精度が良い場合、モデルの予測値の平均が0.3となっていた場合
そこに100人集まると、100人中30人が1となることを意味しています。

このようにビン(10等分)に区切って予測値や実測値を集計することで、
「モデルの予測値と実際の値をプロットしてどれだけ一致しているかを検証する」
ことができました。

# 統計ソフトRを使う場合
# 通常のロジスティック回帰モデルの場合
model1 <- glm(y~x1+x2+x3, family=binomial, data=df)
summary(m.x123)

# キャリブレーションプロットを書く場合
library(rms)
model2 <- lrm(y~x1+x2+x3, data=df, x=TRUE, y=TRUE)
cali <- calibrate(model2, method="boot", B=300, predy=seq(.01,.99,length=100))
plot(cali)

nice!(0)  コメント(0) 
共通テーマ:学問