ロジスティック回帰による確率予測

R による Supervised Learning:回帰

Nina Zumel and John Mount

Win-Vector LLC

確率の予測

  • イベント発生の有無(yes/no)を予測: 分類
  • イベントの発生確率を予測: 回帰
  • 線形回帰: [$-\infty$, $\infty$] の値を予測
  • 確率: [0,1] に限定
    • そのため非線形と呼ぶ
R による Supervised Learning:回帰

例: デュシェンヌ型筋ジストロフィー(DMD)の予測

  • 目的変数: has_dmd    入力変数: CK, H
R による Supervised Learning:回帰

線形回帰モデル

model <- lm(has_dmd ~ CK + H, 
            data = train)

test$pred <- predict(
    model, 
    newdata = test
)

目的変数: has_dmd $\in$ {0,1}

  • 0: FALSE
  • 1: TRUE

モデルが [0:1] の範囲外の値を予測している

R による Supervised Learning:回帰

ロジスティック回帰

$$ log(\frac{p}{1-p}) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... $$

glm(formula, data, family = binomial)
  • 一般化線形モデル
  • 入力変数は対数オッズで加法的・線形と仮定: $log( p/(1-p) )$
  • family: モデルの誤差分布を指定
    • ロジスティック回帰: family = binomial
R による Supervised Learning:回帰

DMDモデル

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • 目的変数: 2クラス(例:$a$ と $b$)
  • モデルは $Prob(b)$ を返す
    • 推奨: 0/1 または FALSE/TRUE
R による Supervised Learning:回帰

ロジスティック回帰モデルの解釈

model
Call:  glm(formula = has_dmd ~ CK + H, family = binomial, data = train)

Coefficients:
(Intercept)           CK            H  
  -16.22046      0.07128      0.12552  

Degrees of Freedom: 86 Total (i.e. Null);  84 Residual
Null Deviance:       110.8 
Residual Deviance: 45.16     AIC: 51.16
R による Supervised Learning:回帰

glm()モデルによる予測

predict(model, newdata, type = "response")
  • newdata: デフォルトは訓練データ
  • 確率を取得するには type = "response" を使用
    • デフォルト: 対数オッズを返す
R による Supervised Learning:回帰

DMDモデル

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
test$pred <- predict(model, newdata = test, type = "response")

R による Supervised Learning:回帰

ロジスティック回帰の評価: 疑似$R^2$

$$ R^2 = 1 - \frac{RSS}{SS_{Tot}} $$

$$ pseudo R^2 = 1 - \frac{deviance}{null.deviance} $$

  • 逸脱度: 分散(RSS)に相当
  • ヌル逸脱度: $SS_{Tot}$ に相当
  • 疑似 R^2: 説明された逸脱度
R による Supervised Learning:回帰

訓練データの疑似$R^2$

broom::glance() を使用

glance(model) %>% 
  summarize(pR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.5922402

sigr::wrapChiSqTest() を使用

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
R による Supervised Learning:回帰

テストデータの疑似$R^2$

# Test data
test %>% 
  mutate(pred = predict(model, newdata = test, type = "response")) %>%
  wrapChiSqTest("pred", "has_dmd", TRUE)

引数:

  • データフレーム
  • 予測列名
  • 目的変数列名
  • ターゲット値(対象イベント)
R による Supervised Learning:回帰

ゲインカーブプロット

GainCurvePlot(test, "pred","has_dmd", "DMD model on test")

R による Supervised Learning:回帰

練習しましょう!

R による Supervised Learning:回帰

Preparing Video For Download...