2015年6月29日月曜日

ロジスティック回帰分析

以下のグラフは、Foster Provost, Tom Fawcett著「Data Science for Business」の第 4 章「Fitting a Model to Data」の Logistic regression’s estimate of class probability as a function of f(x) 、いわゆる「ロジスティック回帰分析」チャート。

本書を元に「ロジスティック回帰分析」について整理する。 3 同様に非常に興味深い内容だった。ここでは、実践例も書くつもりだが、未だ満足いくレベルの理解ではないので、本当の意味で実践的なものは、今後の課題とした。

本書のロジスティック回帰分析で、興味深いのは上記図の英文にある次の一節。

(i.e., the distance from the separating boundary)


この the separating boundary(境界線)とは、左図では右下がりの線で、黒点と+点を分離する線となっている。Margin と表記されているのが、境界線からの距離で、これを the distance from the separating boundary と表している。

この距離が長いほど、黒点、もしくは+点のグループに属する可能性が高いと言える。冒頭のチャートでいえば、縦軸は確率であり、(xの値が大きくなるほど 100%  に近づき、逆に小さくなるほど 0% に近づく。つまり、ロジスティック回帰分析は「回帰分析」という名前に反して「クラス分け」の分析方法。そのことは本書でも

It is estimating the log-odds or, more loosely, the probability of class membership (a numeric quantity) over a categorical class. So we consider it to be a class probability estimation model and not a regression model, despite its name.

要するに、regression model(回帰分析)では、y = ax + b のようにモデル化して y の数値を求めるが、ロジスティック回帰分析では「どちらかに属する確率を求めるクラス分け」と言える。ちなみに、軸の (x) とは y = ax + b などの回帰式を表す。

ロジスティック回帰分析チャートは、特徴的な sigmoid(S字カーブ)となるが、これが何を意味すのだろうか。

ある出来事が「起こる」「起こらない」、つまり「0 か 1 か」の予測を確率と共に表している。

上記の境界線のチャート図(Figure 4-8)の例では、年齢と債務バランスのデータを元に、黒点のグループとブラス点のグループをプロットしている。つまり、年齢と債務バランスの情報(数値データ)から、どちらのグループに何パーセントの確率で属するかをモデル化した(予測する)のがロジスティック回帰分析。

S字カーブが表すのは、ある値(ある境界線)を境に、どちらかのグループに入る確率の急激な変化。S字カーブの例は、細菌の繁殖具合、薬の効用など多くの事象に見られる。マーケティングでいえば、商品Aと商品Bを買った人は商品Cを買うグループに属する可能性は何パーセントか、つまり購買履歴からオススメ商品の特定もS字カーブの確率から抽出可能になる。


数学的背景

ロジスティック回帰分析の数学的背景といっても、大まかなイメージを述べる。この分析で「やろうとしていること」を理解するのが大切。

まず、以下の等式 4-3p+(x) はベクター x があるクラスに属する確率。
この等式の (xは、線形回帰分析の ax + b と同様。等式に Log-odds linear function とあるのは、左辺の log(...) の「...」部分がオッズだから。

オッズ と Log-odds の関係は、左の表が分かりやすい。

本来オッズは「0 から 無限大」の値だが、その自然対数は「マイナス無限大からプラス無限大」をとる。

等式4-3 を p+(x) について解く式に変形したのが、次の等式 4-4


ロジスティック回帰分析チャートでは 軸が左辺の確率、軸が右辺の (x) となる。

統計学的にロジスティック回帰分析を説明すると

量を予測(被説明変数)する場合は、ax + b のような線形回帰モデルで表されるが、クラス分類では質を予測することになる。上記のように、線形回帰モデルを拡張したものを general linear model, GML(一般化線形モデル)と呼び、ロジスティック回帰分析はGMLに含まれる。

平たくやっていることを言い表すと、線形回帰モデルの数値結果を、予測値として欲しい 0 から 1 の確率値に変形しているだけ。なので、先に書いたように「やっていることに反して回帰分析と名付けられている」のはそのため。


ロジスティック回帰分析をやってみる

R に付属のデータを使ってロジスティック回帰分析をやってみる。

このデータは生体検査で、malignant(悪性)か benign(悪性でない)が被説明変数、V1からV9までが説明変数。つまり、これらの説明変数から、悪性か否かを予測するモデルをロジスティック回帰分析で行う。

以下では、V1 変数だけで分析した。

> library(MASS)
> b <- biopsy
> b$classn[b$class=="benign"]    <- 0 # 分類化
> b$classn[b$class=="malignant"] <- 1 # 分類化
> head(b)
       ID V1 V2 V3 V4 V5 V6 V7 V8 V9     class classn
1 1000025  5  1  1  1  2  1  3  1  1    benign      0
2 1002945  5  4  4  5  7 10  3  2  1    benign      0
3 1015425  3  1  1  1  2  2  3  1  1    benign      0
4 1016277  6  8  8  1  3  4  3  7  1    benign      0
5 1017023  4  1  1  3  2  1  3  1  1    benign      0
6 1017122  8 10 10  8  7 10  9  7  1 malignant      1
> nrow(b) #レコード数
[1] 699
> ans_v1 <- glm(classn ~
              V1, family=binomial(link="logit"), data=b)

以下の、linear.predictors, fitted.values から、等式 4-4 を確認する。

> head(ans_v1$linear.predictors,4) 
         1          2          3          4
-0.4828711 -0.4828711 -2.3537897  0.4525882
> head(ans_v1$fitted.values,4)
         1          2          3          4
0.38157438 0.38157438 0.08676502 0.61125443


以下のように、左の等式 4-4(x)linear.predictors 値を代入した結果が fitted.values の値と一致することを確認。

> 1/(1+exp(-1*-0.4828711)) #1 番目の値
[1] 0.3815744
> 1/(1+exp(-1*0.4525882)) # 4番目の値
[1] 0.6112544


最後にこの分析結果をプロットする。病気の原因と考える変数値が大きいほど「悪性」と判断されがちで、小さいほど「悪性でない」と判断されがち、ということをこのS字カーブは確率と共に表している。

> dev.new() # V1用グラフ
> ggplot(b, aes(x=V1, y=classn)) +
   geom_point(position=position_jitter(width=0.3, height=0.06), alpha=0.4, shape=21, size=1.5) +
   stat_smooth(method=glm, family=binomial)
ロジスティック回帰分析:分析例」に続く。

0 件のコメント:

コメントを投稿