質問:
ロジスティック回帰の完全な分離はAUCにどのように影響しますか?
steve zissou
2017-12-15 16:19:31 UTC
view on stackexchange narkive permalink

私はロジスティック回帰で完全な分離に取り組んでおり、AUC統計を使用してモデルを評価しています。完全な分離がAUCにどのような影響を与えるのか疑問に思いました。私自身の理解では、膨らんだ係数による完全な分離は、真陽性率の低下をもたらすため、AUCを低下させますが、偽陽性率は影響を受けませんが、何かを誤解した可能性があります。誰かが2つの関係を説明できますか?

二 答え:
gung - Reinstate Monica
2017-12-22 00:02:47 UTC
view on stackexchange narkive permalink

簡単なシミュレーションを試して、それを理解してみませんか?これがRでコード化されたものです:

  library(ROCR)#このパッケージをROC &AUCに使用します
set.seed(8365)#これにより、例が正確に再現可能になります
x = c(runif(50、min = 0、max = 4)、#xデータには4から6のギャップがあります
      runif(50、最小= 6、最大= 10))
y = ifelse(x<5、0、1)#低い値はすべて0です。より高い値1
m = glm(y〜x、family = binomial)
要約(m)
#..。
#逸脱度残差:
#最小1Q中央値3Q最大
#-2.961e-05 -2.110e-08 0.000e + 00 2.110e-08 2.674e-05#残差すべて〜0
#
#係数:
#標準を推定します。エラーz値Pr(> | z |)
#(切片)-98.42 75721.51 -0.001 0.999#巨大な係数& SE
#x 19.42 14525.40 0.001 0.999
#..。
#
#ヌル逸脱度:99自由度で1.3863e + 02
#残差逸脱度:98自由度で2.6504e-09#残差逸脱度〜0
#AIC:4
#
#フィッシャースコアリングの反復回数:25#非常に多くの反復
pred = Forecast(predict(m、type = "response")、y)#これらはROCを作成します
perf = performance(pred、 "tpr"、 "fpr")
performance(pred、 "auc")@ y.values [[1]]#これはAUCです
#[1] 1
窓(幅= 7、高さ= 4)
  layout(matrix(1:2、nrow = 1))
  plot(x、y、main = "データと適合モデル")
  xs = seq(0,10、by = .1)
  lines(xs、predict(m、data.frame(x = xs)、 "response")、col = "red")
  plot(perf、main = "ROCcurve")
 

enter image description here

出力と図に表示されているのは、AUCが$ 1 $であるということです。 AUCは、ROC曲線の下の領域です。 ROC曲線は、それを超えるとクラス$ 1 $を予測するしきい値を変更することによって計算されます。次に、各ポイントで、実際のクラスに対して予測されたクラスを調べ、真陽性率と偽陽性率を決定します。 ROC曲線は、これら2つのレートのプロットにすぎません。ただし、使用するしきい値に関係なく、完全な精度が得られることに注意してください。したがって、ROCの「曲線」は必然的に単位正方形の左側と上面になり、その下の面積は$ 100 \%$になります。


@Clif ABは、$ AUC = 1 $がなくても分離できるという良い点を示しています。これがその場合の実例です。それでも、分離がない場合とほぼ同じ場合よりも、分離がある場合の方がAUCが高くなることがわかります。理由は基本的に同じです。しきい値をどこに設定しても、分離可能なデータからの真陽性率と偽陽性率は、そうでない場合よりも優れています。

  x = rep(0:1、each = 10)
y1 = c(0,0,0,0,0,1,1,1,1,1、
       0,1,1,1,1,1,1,1,1,1)#x = 1の場合は0。分離なし
y2 = c(0,0,0,0,0,1,1,1,1,1、
       1,1,1,1,1,1,1,1,1,1)#x = 1の場合は0なし。分離
m1 = glm(y1〜x、family = binomial)
m2 = glm(y2〜x、family = binomial)
summary(m1)#出力を省略
summary(m2)#出力を省略
pred1 =予測(predict(m1、type = "response")、y1)
perf1 = performance(pred1、 "tpr"、 "fpr")
performance(pred1、 "auc")@ y.values [[1]]#これはAUCです
#[1] 0.7380952
pred2 =予測(predict(m2、type = "response")、y2)
perf2 = performance(pred2、 "tpr"、 "fpr")
performance(pred2、 "auc")@ y.values [[1]]#これはAUCです
#[1] 0.8333333
ウィンドウズ()
  plot(perf1、col = "blue"、main = "ROCs")
  plot(perf2、col = "red"、add = T)
  legend( "bottomright"、legend = c( "Separation"、 "分離なし")、
         lty = 1、col = c( "red"、 "blue"))
 

enter image description here

(+1)AUC = 1でなくても、「完全な分離」の問題が発生する可能性があることに注意してください。特に、$ X_1 = 1 $の場合、常に$が発生するようなダミー変数があったとします。Y = 1 $ ...ただし、$ X_1 = 0 $の場合、$ Y $は0または1のいずれかになります。$ \ hat \ beta_1 = \ infty $ですが、AUC <1である可能性もあります。
Haitao Du
2017-12-22 00:21:03 UTC
view on stackexchange narkive permalink

@gungは素晴らしい答えを出しました。 が「どのしきい値を使用しても、完全な精度が得られる」理由について、さらに説明を追加したいと思います。 "

@gungのコードにもう1行追加して予測確率を確認すると、次のことがわかります。基本的に、すべてのデータポイントで、予測確率が0または1であるため、しきい値は重要ではなく、1が得られます。 AUCで。

  >predict(m、data.frame(x = x)、type = "response")
           1 2 3 4 5 6 7 8 9 10 11 12 13 14
2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 4.384945e-10 2.220446e-16 5.245702e-12 2.220446e-16 2.220446e-16 2.220446e -16 2.220446e-16
          15 16 17 18 19 20 21 22 23 24 25 26 27 28
2.220446e-16 2.220446e-16 2.220446e-16 4.719935e-11 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.669394e-13 2.220446e-16 1.365883e-10 2.220446e -16 6.992038e-13
          29 30 31 32 33 34 35 36 37 38 39 40 41 42
2.220446e-16 5.435395e-12 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 5.922012e-12 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e-16 2.220446e -16 2.220446e-16
          43 44 45 46 47 48 49 50 51 52 53 54 55 56
2.220446e-16 2.220446e-16 2.912038e-12 2.220446e-16 2.220446e-16 1.258165e-11 2.220446e-16 2.220446e-16 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e +00 1.000000e + 00
57 58 59 60 61 62 63 64 65 66 67 68 69 70
1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e +00 1.000000e + 00
          71 72 73 74 75 76 77 78 79 80 81 82 83 84
1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e +00 1.000000e + 00
          85 86 87 88 89 90 91 92 93 94 95 96 97 98
1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e + 00 1.000000e +00 1.000000e + 00
          99100
1.000000e + 00 1.000000e + 00
 

出力には、100個のデータポイントで100個の確率予測があります。最初の50個のデータポイントの確率は0で、後半は1です。これらの100個の数値すべての中に、0と1の2つの一意の値があります。0から1の間のしきい値を選択すると、常に完全にカットされ、グラウンドトゥルースとまったく同じラベルになります。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...