ロジスティック回帰:確率とオッズを予測する

0または1の二値データを予測するロジスティック回帰を学びます。線形回帰では扱えない理由、オッズ・対数オッズ(ロジット)への変換、シグモイド関数、回帰係数のオッズ比としての解釈を扱います。

難易度 Lv 4 / 10想定時間:約25

できるようになること


0か1かのデータに直線を当てはめてはいけない

Webサービスの運営チームが、無料会員が有料プランに登録するかどうかを予測したいと考えたとします。登録したユーザーを 11、登録しなかったユーザーを 00 と記録し、過去の「サービス訪問日数 xx」から登録の有無 yy を予測するモデルを作ろうとしています。

ここで、よく知られている「単回帰と予測」の手法を使って、確率を直接直線でモデル化する線形確率モデル(linear probability model)を当てはめるとどうなるでしょうか。

P(y=1x)=β0+β1xP(y = 1 \mid x) = \beta_0 + \beta_1 x

仮に、データから β0=0.15\beta_0 = -0.15β1=0.135\beta_1 = 0.135 という回帰直線が得られたとします。この直線にさまざまな訪問日数を代入してみます。

訪問日数 xx回帰直線の予測値 P^(y=1x)\hat{P}(y = 1 \mid x)予測値の解釈
0日0.15-0.15確率が負の値(15%-15\%)になってしまう(破綻)
3日0.2550.255確率 25.5%25.5\%(妥当な範囲)
7日0.7950.795確率 79.5%79.5\%(妥当な範囲)
10日1.2001.200確率が 100%100\% を超えて 120%120\% になってしまう(破綻)

この計算結果からわかるように、通常の線形回帰を二値データにそのまま適用すると、予測値が 00 未満や 11 を超えてしまいます。確率 pp は必ず 0p10 \leq p \leq 1 の範囲に収まらなければならないため、どこまでも直線的に増減するモデルは確率の公理に反してしまいます。

さらに、統計的な前提にも深刻な問題が生じます。「単回帰と予測」や「重回帰モデルの基礎」で用いる最小二乗法は、誤差の分散がどの xx に対しても一定であるという「等分散性」を前提としています。しかし、yy0011 しか取らない二値データの場合、ある xx における確率を pp とすると、ベルヌーイ分布の性質から yy の条件付き分散は Var(yx)=p(1p)\text{Var}(y \mid x) = p(1 - p) となります。確率 ppxx によって変われば分散も自動的に変化するため、等分散性の前提が構造的に崩れてしまいます。

0または1の二値データを適切に予測するには、直線ではなく「どれだけ xx が小さくても 00 を下回らず、どれだけ xx が大きくても 11 を超えない」滑らかなS字型の曲線を当てはめる仕組みが必要です。


確率を実数全体へ拡張する:オッズとロジット変換

予測したい確率を p=P(y=1x)p = P(y = 1 \mid x)0<p<10 < p < 1)とします。確率 pp00 から 11 の間に閉じ込められているため、実数全体(-\infty から ++\infty)を自由に動く線形結合 β0+β1x\beta_0 + \beta_1 x と直接イコールで結ぶことができません。

そこで、確率 pp を実数直線全体に対応づけるために、2つの数学的ステップを踏みます。

ステップ1:確率からオッズへの変換

まず、事象が起きる確率 pp と起きない確率 1p1 - p の比をとります。「オッズ比とは:リスク比が使えない前提とその理由」で学んだオッズ(odds)です。

Odds=p1p\text{Odds} = \frac{p}{1 - p}

確率 pp00 に近づくとオッズは 00 に近づき、pp11 に近づくとオッズは無限大(++\infty)へ向かいます。これにより、変数の定義域が (0,1)(0, 1) から (0,)(0, \infty) へと広がります。

ステップ2:オッズの自然対数をとる(ロジット変換)

オッズの定義域は (0,)(0, \infty) に広がりましたが、依然として負の値をとれず、実数全体には対応していません。そこで、オッズの自然対数をとります。これを対数オッズ(log-odds)、またはロジット(logit)と呼びます。

logit(p)=ln(p1p)\text{logit}(p) = \ln\left(\frac{p}{1 - p}\right)

対数をとることで、オッズが 00 に近づくときは -\infty へ、オッズが 11(確率 0.50.5)のときは ln(1)=0\ln(1) = 0 へ、オッズが無限大に向かうときは ++\infty へと変換されます。

確率 ppオッズ p1p\frac{p}{1-p}対数オッズ(ロジット) ln(p1p)\ln\left(\frac{p}{1-p}\right)
0.010.010.0101\approx 0.01014.595\approx -4.595
0.100.100.1111\approx 0.11112.197\approx -2.197
0.500.501.00001.00000.0000.000
0.900.909.00009.0000+2.197\approx +2.197
0.990.9999.000099.0000+4.595\approx +4.595

この対数オッズであれば、実数全体(-\infty から ++\infty)をとることができるため、説明変数の線形結合とイコールで結ぶことが可能になります。

ln(p1p)=β0+β1x\ln\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 x

このように、目的変数の対数オッズを説明変数の線形結合で表現する回帰モデルをロジスティック回帰(logistic regression)と呼びます。


シグモイド関数の導出と確率の予測

対数オッズのモデルから、私たちが本来知りたい「確率 pp」を逆算してみましょう。

ln(p1p)=β0+β1x\ln\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 x

まず、両辺の指数(ネイピア数 ee の累乗)をとって対数を外します。

p1p=exp(β0+β1x)\frac{p}{1 - p} = \exp(\beta_0 + \beta_1 x)

両辺に 1p1 - p を掛けます。

p=(1p)exp(β0+β1x)p = (1 - p)\exp(\beta_0 + \beta_1 x)

右辺を展開します。

p=exp(β0+β1x)pexp(β0+β1x)p = \exp(\beta_0 + \beta_1 x) - p\exp(\beta_0 + \beta_1 x)

pp を含む項を左辺に移項します。

p+pexp(β0+β1x)=exp(β0+β1x)p + p\exp(\beta_0 + \beta_1 x) = \exp(\beta_0 + \beta_1 x)

左辺を pp でくくります。

p(1+exp(β0+β1x))=exp(β0+β1x)p(1 + \exp(\beta_0 + \beta_1 x)) = \exp(\beta_0 + \beta_1 x)

両辺を 1+exp(β0+β1x)1 + \exp(\beta_0 + \beta_1 x) で割ります。

p=exp(β0+β1x)1+exp(β0+β1x)p = \frac{\exp(\beta_0 + \beta_1 x)}{1 + \exp(\beta_0 + \beta_1 x)}

さらに、分母と分子を exp(β0+β1x)\exp(\beta_0 + \beta_1 x) で割ると、次の形に変形できます。

p=11+exp((β0+β1x))p = \frac{1}{1 + \exp(-(\beta_0 + \beta_1 x))}

ここで、z=β0+β1xz = \beta_0 + \beta_1 x と置くと、関数は次のように表されます。

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

この関数を標準シグモイド関数(standard sigmoid function)、あるいはロジスティック関数(logistic function)と呼びます。

ポイント

シグモイド関数 σ(z)\sigma(z) には以下の重要な性質があります。 zz \to -\infty のとき、eze^{-z} \to \infty となるため p0p \to 0 に収束します。 z=0z = 0 のとき、e0=1e^0 = 1 となるため p=11+1=0.5p = \frac{1}{1 + 1} = 0.5 となります。 z+z \to +\infty のとき、ez0e^{-z} \to 0 となるため p1p \to 1 に収束します。 どのような実数 zz を入力しても、出力される確率 pp は必ず 0<p<10 < p < 1 の範囲に収まります。

複数の説明変数 x1,x2,,xkx_1, x_2, \dots, x_k を同時に扱う重ロジスティック回帰の場合も同様で、z=β0+β1x1+β2x2++βkxkz = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_k x_k としてシグモイド関数に入力するだけで確率を計算できます。


回帰係数の意味:オッズ比としての解釈

ロジスティック回帰で推定された係数 β1\beta_1 は、どのように解釈すればよいでしょうか。

線形回帰では「xx11 単位増えると yyβ1\beta_1 増える」という直感的な解釈が可能でした。しかし、ロジスティック回帰の左辺は確率そのものではなく「対数オッズ」です。

ここで、「ある状態におけるオッズ」と「状態間のオッズの比(オッズ比)」の対比を整理しておきましょう。

概念定義式値の範囲意味
オッズ(Odds)p1p\frac{p}{1-p}(0,)(0, \infty)ある1つの状態において「起きる確率」が「起きない確率」の何倍か
オッズ比(Odds Ratio)Oddsx+1Oddsx\frac{\text{Odds}_{x+1}}{\text{Odds}_x}(0,)(0, \infty)条件が1単位変化したとき、オッズが何倍に変化したか

説明変数が xx のときのオッズを Oddsx\text{Odds}_xxx11 だけ増えて x+1x + 1 になったときのオッズを Oddsx+1\text{Odds}_{x+1} とします。それぞれの対数オッズの式を並べてみます。

ln(Oddsx)=β0+β1x\ln(\text{Odds}_x) = \beta_0 + \beta_1 x

ln(Oddsx+1)=β0+β1(x+1)=β0+β1x+β1\ln(\text{Odds}_{x+1}) = \beta_0 + \beta_1 (x + 1) = \beta_0 + \beta_1 x + \beta_1

2つの式の差をとります。

ln(Oddsx+1)ln(Oddsx)=(β0+β1x+β1)(β0+β1x)=β1\ln(\text{Odds}_{x+1}) - \ln(\text{Odds}_x) = (\beta_0 + \beta_1 x + \beta_1) - (\beta_0 + \beta_1 x) = \beta_1

対数の引き算は、真数の割り算にまとめることができます。

ln(Oddsx+1Oddsx)=β1\ln\left(\frac{\text{Odds}_{x+1}}{\text{Odds}_x}\right) = \beta_1

両辺の指数をとります。

Oddsx+1Oddsx=exp(β1)=eβ1\frac{\text{Odds}_{x+1}}{\text{Odds}_x} = \exp(\beta_1) = e^{\beta_1}

この左辺は「xx11 単位増加した後のオッズ」と「増加する前のオッズ」の比、すなわちオッズ比(odds ratio)そのものです。

ヒント

ロジスティック回帰の回帰係数 β1\beta_1 は、指数変換 exp(β1)\exp(\beta_1) を行うことで「説明変数が 11 単位増加したときに、オッズが何倍になるか(オッズ比)」として解釈します。 β1>0\beta_1 > 0exp(β1)>1\exp(\beta_1) > 1):xx の増加に伴いオッズ(および確率)が上昇する。 β1=0\beta_1 = 0exp(β1)=1\exp(\beta_1) = 1):xx はオッズに影響を与えない。 β1<0\beta_1 < 0exp(β1)<1\exp(\beta_1) < 1):xx の増加に伴いオッズ(および確率)が低下する。 なお、複数の説明変数を含む重ロジスティック回帰における偏回帰係数 β1\beta_1 の指数 exp(β1)\exp(\beta_1) は、「他のすべての説明変数の値を一定に固定したままx1x_1 のみを 11 単位増やしたときのオッズ比(調整オッズ比)」を表します。


実務データでの具体例:有料会員登録の予測

冒頭のWeb会員登録の例に戻り、実際の分析結果を解釈してみましょう。

会員データをロジスティック回帰で分析した結果、次の推定モデルが得られたとします。

ln(p1p)=2.197+0.693x\ln\left(\frac{p}{1 - p}\right) = -2.197 + 0.693 x

ここで、xx は過去のサービス訪問日数です。

1. 係数 β1=0.693\beta_1 = 0.693 の解釈

係数 0.6930.693 の指数をとると、次のようになります。

exp(0.693)=e0.6932.0\exp(0.693) = e^{0.693} \approx 2.0

これは、「サービスの訪問日数が 1 日増えるごとに、有料会員への登録オッズが約 2.0 倍になる」ことを意味します。

2. 切片 β0=2.197\beta_0 = -2.197 の解釈

訪問日数 x=0x = 0 のときの対数オッズは 2.197-2.197 です。このときのオッズは exp(2.197)0.111\exp(-2.197) \approx 0.111 となり、確率は次のように計算されます。

p=11+exp((2.197))=11+9.0=0.10p = \frac{1}{1 + \exp(-(-2.197))} = \frac{1}{1 + 9.0} = 0.10

すなわち、訪問日数が 00 日のユーザーの登録確率は 10%10\% であることがわかります。

3. 各訪問日数におけるオッズと確率の推移

訪問日数が 11 日増えるごとに、オッズは 22 倍ずつ増えていきますが、確率 pp の増え方はどうなるでしょうか。

訪問日数 xx対数オッズ z=2.197+0.693xz = -2.197 + 0.693xオッズ p1p\frac{p}{1-p}予測確率 p=11+ezp = \frac{1}{1 + e^{-z}}確率の前回からの増分
0日2.197-2.1970.1110.11110.0%10.0\%
1日1.504-1.5040.2220.222(2倍)18.2%18.2\%+8.2%+8.2\% pt
2日0.811-0.8110.4440.444(2倍)30.8%30.8\%+12.6%+12.6\% pt
3日0.118-0.1180.8890.889(2倍)47.1%47.1\%+16.3%+16.3\% pt
4日+0.575+0.5751.7781.778(2倍)64.0%64.0\%+16.9%+16.9\% pt
5日+1.268+1.2683.5563.556(2倍)78.1%78.1\%+14.1%+14.1\% pt
6日+1.961+1.9617.1117.111(2倍)87.7%87.7\%+9.6%+9.6\% pt

オッズは常に 22 倍ずつ一定の倍率で増えていますが、確率の増分(ポイント差)は一定ではありません。確率が 50%50\% 前後(x=34x = 3 \sim 4 日)のときに最も急激に確率が上昇し、0%0\%100%100\% に近い両端では確率の変化が緩やかになっていることが確認できます。

実務では、このモデルから出力された予測確率をもとに、ある基準(閾値)と比較して「有料化の可能性が高いユーザー」を判定(分類)する施策に活用されることが多くあります。


パラメータはどうやって推定するか:最尤推定法

「単回帰と予測」では、残差平方和を最小にするパラメータを閉じた式(正規方程式)で解析的に求めることができました。しかし、ロジスティック回帰ではそのような解析解が存在しません。対数尤度関数をパラメータで偏微分して 00 と置いた方程式が β\beta に関して非線形となり、代数的に解くことができないためです。

そこで、ロジスティック回帰のパラメータ推定には、「最尤推定法」という枠組みを用います。

各観測データ iii=1,2,,ni = 1, 2, \dots, n)において、xix_i が与えられたときの予測確率 pip_i はパラメータ β0,β1\beta_0, \beta_1 の関数として次のように表されます。

pi=σ(β0+β1xi)=11+exp((β0+β1xi))p_i = \sigma(\beta_0 + \beta_1 x_i) = \frac{1}{1 + \exp(-(\beta_0 + \beta_1 x_i))}

観測値 yiy_i11 または 00)が起きる確率は、この pip_i を用いて次のように 11 つの式で表せます。

P(Yi=yixi)=piyi(1pi)1yiP(Y_i = y_i \mid x_i) = p_i^{y_i} (1 - p_i)^{1 - y_i}

yi=1y_i = 1 のときは pi1(1pi)0=pip_i^1 (1 - p_i)^0 = p_i となり、yi=0y_i = 0 のときは pi0(1pi)1=1pip_i^0 (1 - p_i)^1 = 1 - p_i となるため、二値の確率を統一して表現できます。

nn 件の観測データが互いに独立に得られたとすると、データ全体が得られる同時確率は、各データの確率の積になります。これを尤度(likelihood)と呼びます。

L(β0,β1)=i=1npiyi(1pi)1yiL(\beta_0, \beta_1) = \prod_{i=1}^n p_i^{y_i} (1 - p_i)^{1 - y_i}

積の計算は扱いにくいため、両辺の自然対数をとった対数尤度(log-likelihood)を最大化する問題を考えます。

lnL(β0,β1)=i=1n[yilnpi+(1yi)ln(1pi)]\ln L(\beta_0, \beta_1) = \sum_{i=1}^n \left[ y_i \ln p_i + (1 - y_i) \ln(1 - p_i) \right]

ロジスティック回帰では、この「観測データが得られる対数尤度を最大にする β0,β1\beta_0, \beta_1」をコンピュータによる反復計算(ニュートン・ラフソン法など)によって数値的に求めます。

モデル全体の当てはまりの良さは、対数尤度をベースにした指標(AICなど)や、通常の回帰の決定係数 R2R^2 に似せて作られた疑似決定係数(pseudo R2R^2、例えばマクファデンのものなど)を用いて評価します。


よくある誤解

1. 回帰係数を「確率の変化量」と混同してしまう

最も頻繁に見られる誤解は、係数 β1=0.693\beta_1 = 0.693 を見て「訪問日数が1日増えると、登録確率が約 69.3%69.3\%(あるいは 0.6930.693)上がる」と解釈してしまうことです。

ロジスティック回帰の係数は「対数オッズの増加量」であり、指数をとった exp(β1)\exp(\beta_1) が「オッズの変化倍率(オッズ比)」です。前述の表で確認した通り、確率そのものの変化量は現在の確率水準(xx の値)によって常に変化します。係数をそのまま確率の増分として説明しないよう注意が必要です。

2. 分類閾値を常に「0.5」に固定してしまう

ロジスティック回帰で出力された確率から「成約する/しない」の2値判定を下す際、特に検討せず確率 0.50.550%50\%)を閾値とするのが自然に思えるかもしれません。

数学的には、p=0.5p = 0.5(対数オッズ z=0z = 0)を基準とすることは、β0+β1x=0    x=β0β1\beta_0 + \beta_1 x = 0 \iff x = -\frac{\beta_0}{\beta_1} という境界線(決定境界)で分けることを意味します。

しかし、実際のビジネスや医療データでは、「病気の発症率が 1%1\%」「不正アクセスが 0.1%0.1\%」のように陽性データが極端に少ない不均衡データが日常的です。このようなデータに対して一律に閾値を 0.50.5 に設定すると、ほぼすべてが陰性と予測され、陽性の検出という本来の目的を果たせなくなります。

「見逃し(偽陰性)を絶対に防ぎたいのか」「誤検知(偽陽性)を減らしたいのか」という実務上のコストやリスクに応じて、適切な閾値(例えば 0.10.10.20.2 など)を選定することが不可欠です。

3. データが完全に分かれている方が「良いモデル」だと誤解してしまう

説明変数 xx のある値を境にして、データが 0011 に綺麗に二分されている状態を完全分離(perfect separation)と呼びます。また、境界上にのみわずかにデータが残る準完全分離でも同様の問題が生じます。

一見すると完璧に予測できているように思えますが、最尤推定法の計算上、完全分離が起きると対数尤度を最大化するために回帰係数の推定値が無限大(β1\beta_1 \to \infty)に発散してしまいます。その結果、標準誤差が異常に巨大化し、統計的な推定や検定が破綻してしまいます。極端にデータ数が少ないカテゴリカル変数を投入した際などに発生しやすいため、変数の統合や正則化(ペナルティ付き回帰)などの対処が必要になります。


まとめ

ロジスティック回帰は、成約や発症といった0または1の二値データをモデル化するための標準的な回帰手法です。通常の線形回帰を二値データに適用すると、予測値が0から1の範囲を逸脱し、等分散性の前提も崩れてしまいます。ロジスティック回帰では、確率をオッズ、さらに対数オッズへと変換(ロジット変換)して線形結合と結びつけ、その逆変換であるシグモイド関数を通じて常に0から1の間に収まる予測確率を導出します。

得られた回帰係数 β\beta は、指数変換 exp(β)\exp(\beta) を行うことで「説明変数が1単位増えたときのオッズ比」として明確に解釈できます。重ロジスティック回帰では、他の変数を固定した上での調整オッズ比を表します。確率の変化量は元の水準によって非線形に変化するため、係数を確率の増分と直読しないことが肝要です。パラメータは最尤推定法によって反復計算で求められ、不均衡データにおける閾値設計や完全分離への配慮など、二値データ特有の性質を正しく理解した上で活用することが求められます。