Courses
ロジスティック回帰モデルを学習したあと、係数をどこまで信頼できると言えるでしょうか?
ロジスティック回帰はシンプルで知られています。scikit-learn なら .fit() を呼んで、オッズ比を読み取ればおしまい――そんなイメージです。しかし初学者の多くが知らないのは、このモデルにも固有の前提があり、それに従わないと係数に誤解を招く偏りが生じ、予測も評価指標では気づけない形でズレてしまうという点です。
実のところ、ロジスティック回帰の前提は線形回帰より少なく、しかも確認は容易です。出力を解釈する前に適切な診断を走らせ、モデルのどの部分を信頼できるかを把握すればよいのです。
本記事では、ロジスティック回帰が前提とする事項をひとつずつ取り上げ、Python と R での確認方法、前提が破られたときに何が起きるか、そして前提に従えない場合に選ぶべき代替手法を解説します。
データサイエンスや機械学習が初めての場合は、まず単回帰分析に関するブログ記事を読み、その前提と診断を理解してください。
ロジスティック回帰とは?
ロジスティック回帰は、カテゴリカルな結果の確率を予測する分類モデルです。説明変数を与えると、0〜1 の数値を返し、特定クラスに属する確率として解釈できます。
多くの場合、チャーンする/しない、スパム/非スパムといった二値分類に使われます。多クラス(多項)や順序ロジスティック回帰といった亜種もありますが、一般に「ロジスティック回帰」と言うと二値のケースを指すことがほとんどです。
内部では、説明変数の線形結合を当てはめ、その結果をロジスティック関数に通します。出力は確率であり、係数は各説明変数が対数オッズをどのようにシフトさせるかを示します。
なお、ロジスティック回帰は線形回帰とは異なります。後者には残差の正規性、等分散性、説明変数と目的変数の線形性といったおなじみの前提がありますが、ロジスティック回帰はそれらを仮定しません。独自の前提があり、線形回帰の前提を流用すると誤った結果につながります。
ロジスティック回帰の詳細は、Python による実装を紹介したブログ記事をご覧ください。
ロジスティック回帰の前提が重要な理由
前提は、モデルの使い方に直結するから重要です。
前提を守れば、係数は意図どおりの意味を持ちます。読み取ったオッズ比は妥当で、モデルの確率は実際の結果とよく対応します。前提が守られないと、混同行列などの指標では見抜けない形で、これらが揺らぎます。
ただし、違反は白黒ではありません。たとえばロジットの線形性から少し外れても、モデルが全く役に立たなくなるわけではありません。オッズ比がややズレ、予測が本来より悪くなる程度です。実運用の多くのモデルは、完璧ではない前提チェックのまま動いており、それでも問題ありません。
避けたいのは、チェック自体を省くことです。診断なしでは、問題の大小を、予測が外れるまで見分けられません。
ロジスティック回帰の前提の概要
個々の前提に入る前に、確認すべき全体像を示します。
| 前提 | 要件 | 一般的な診断 |
|---|---|---|
| 観測の独立性 | あるレコードが他のレコードに影響しない | 研究デザイン、クラス内相関 |
| 適切な目的変数 | 二値、または適切な亜種でモデル化 | 目的変数の確認 |
| ロジットの線形性 | 対数オッズに対して説明変数が線形 | Box–Tidwell 検定、スプライン |
| 重大な多重共線性がない | 説明変数同士が強く相関していない | VIF、相関行列 |
| 十分なサンプルサイズ | 変数あたりの事象数が十分 | EPV の経験則 |
| 影響度の高い外れ値がない | 単一レコードが当てはめを歪めない | Cook の距離、レバレッジ |
ロジスティック回帰の前提一覧
これが全チェックリストです。以降では、各前提について Python と R での診断方法、違反時の兆候、問題発生時の対処を解説します。
主要なロジスティック回帰の前提
前提1:目的変数は二値(または適切にモデル化)
標準的なロジスティック回帰は二値の結果に対応します。目的変数はちょうど 2 つのカテゴリを持ち、そのケースを前提に設計されています。
典型例は、チャーンの有無、疾患の有無などです。はい/いいえで表現できる問題は適合します。
目的変数が 3 クラス以上なら別の亜種が必要です。多項ロジスティック回帰は、顧客セグメントや製品タイプのような順序のないカテゴリを扱います。順序ロジスティック回帰は、1〜5 の満足度のように順序に意味のあるカテゴリを扱います。
多クラスの結果を無理に二値モデルに当てはめると、本来まとめるべきでないカテゴリを統合してしまいがちです。満足度 5 段階を「満足/不満」に切り詰めれば、モデルに有用な情報を失います。目的変数の形に合った亜種を選びましょう。
前提2:観測は独立である
データセットの各行は、他の行がすでに提供していない新たな情報をモデルに与えるべきです。2 つのレコードがこの前提に反する形で結びついていると、標準誤差や p 値の意味が変わってしまいます。
この前提は、モデル化していない共通構造を観測が共有しているときに破綻します。よくある例は、同一患者に対する反復測定(その患者の生物学的特徴を共有)や、同じ教室に属する生徒(教師や教室という共通要因を共有)です。
これを無視して通常のロジスティック回帰を当てはめると、モデルは各行を新しい情報とみなし、標準誤差を必要以上に小さくします。係数は表面上は問題なく見えても、p 値や信頼区間は過度に自信過剰になります。
標準的な代替は、混合効果ロジスティック回帰と GEE です。混合効果モデルはグループ(患者、教室)にランダム効果を追加し、グループ内相関を考慮します。GEE(一般化推定方程式)は、ランダム効果を使わずに、補正された標準誤差を伴う母集団平均効果を与えます。
グループ内の変動に関心があるなら混合効果を、母集団全体での限界効果が欲しいなら GEE を選んでください。
前提3:ロジットの線形性
これは多くの人がロジスティック回帰について誤解している前提です。
モデルは、説明変数が目的変数と線形な関係にあるとは仮定しません。説明変数が結果の対数オッズと線形な関係にあると仮定します。これは別の主張であり、確認すべき点が変わります。
ロジットとは
ロジットはオッズの自然対数です。確率 p に対し、オッズは p / (1 - p)、ロジットはその比の対数です。

ロジット
ロジスティック回帰は、このスケールで線形方程式を当てはめます。

ロジスティック回帰の式
右辺は説明変数に関して線形です。左辺は確率ではなく対数オッズです。実際に関心のある確率は、この線形結合を非線形なロジスティック関数に通すことで得られます。
したがって、各説明変数と確率の関係は非線形です。各説明変数と対数オッズの関係が線形であることが重要です。
実務でなぜ重要か
ロジットの線形性がある説明変数で成り立たない場合、その係数は実際には曲線的な関係を直線で要約しているだけです。モデルは数値を返し、その数値が統計的に有意であることもありますが、データ中の真の関係を表していません。
たとえば age が疾病の対数オッズに U 字型の効果を持ち、両端で高リスク、中間で低リスクだとします。age を線形項 1 本で入れると、係数は 0 に近くなり、年齢は重要でないと結論してしまうかもしれません。重要なのに、指定が誤っているのです。
ロジットの線形性の確認
この前提を確認する方法はいくつかあります。
最速は視覚的な確認です。各連続説明変数をデシルにビニングし、各ビン内の経験的な対数オッズを計算して、説明変数に対してプロットします。概ね直線なら前提は成り立ち、明確な曲線なら成り立ちません。非公式ではありますが、各ビンに十分なデータがある場合に有効です。
Box–Tidwell 検定は、各連続説明変数とその自然対数との相互作用項を追加します。この相互作用が統計的に有意なら、その説明変数についてロジットの線形性が破られています。0 以下に対して対数が取れないため、正の値に限定される変数でのみ機能し、他の有意差検定同様にサンプルサイズに敏感です。
スプラインも選択肢です。確認の代わりに、線形項を制限付き三次スプラインのような柔軟な基底関数で置き換え、必要な形状をモデルに当てはめます。尤度比や AIC でスプラインが線形項より大幅に良ければ、線形指定が厳しすぎた証拠です。スプラインはそのまま修正にもなります。線形性が破れる場合、最終モデルにスプラインを残すのが最善なことも多いです。
線形性が成り立たないときの対処
前提がある変数で破れた場合、次のような選択肢があります。
- 変数を変換する(対数変換や平方根変換でロジット上の関係が線形に近づくことが多い)
- スプラインを使い、やや複雑なモデルを受け入れる
いずれもロジスティック回帰の枠内にとどまる修正であり、本来有益な説明変数を除外するよりはるかに良い対処です。
前提4:重大な多重共線性がない
ロジスティック回帰は、ある程度の相関は扱えます。しかし閾値を超えると、評価指標では気づきにくい形で挙動が不安定になります。
多重共線性は、2 つ以上の説明変数が同じ(あるいは非常に似た)情報を持つときに起きます。たとえばインチとセンチの両方の身長を入れていたり、総売上と顧客数と一緒に顧客あたり売上を入れていたりするケースです。
多重共線性があると 2 つの問題が生じます。
- 係数が不安定になる: 1 行追加・削除しただけで、共線な変数の係数が大きく振れたり符号が反転したりします。モデルは動いても、個々の係数は意味を持ちにくくなります。
- 標準誤差が膨らむ: 変数ごとの独立した情報が減るため、各係数に対する不確実性が増します。p 値が上がり、実在する効果が有意でないと判定されることがあります。
予測自体はたいてい大丈夫です。予測確率だけが関心なら、軽度〜中程度の多重共線性が問題を起こすことは稀です。「被害」は主に係数と、それに基づく推論に集中します。
確認には、相関行列と分散拡大係数(VIF)を使います。相関行列はまず見るべき指標で、特に絶対値で 0.8 や 0.9 を超えるペアに注意します。ただし相関行列はペアの相関しか捉えられず、3 つ以上の変数がまとめて冗長な場合は検出できません。
VIF は多方向のケースに有効です。各説明変数について、他の変数との共線性により係数の分散がどれだけ膨らむかを測ります。VIF が 1 は共線性なし、5 までは通常問題なし、10 を超えるとモデル内の他の変数と冗長である強いシグナルです。
VIF が警告を出したら、最も簡単なのは共線な変数のどちらかを落とすか、合計や比率など 1 つの特徴量にまとめることです。すべて残したい場合は、正則化(リッジやエラスティックネット)で、選択せずに係数を安定化できます。
前提5:十分なサンプルサイズ
ロジスティック回帰は小標本でも動きますが、やや不安定です。係数が過度に振れ、希少クラスの効果は推定がほぼ不可能になります。
ロジスティック回帰で重要なのは総行数ではなく、事象数(少数派クラスの観測数)です。10 万行に不正が 50 件なら、学習すべき事象が 50 しかないため小標本の問題です。
そこで変数あたりの事象数(EPV)が登場します。EPV は、少数派クラスの観測数をモデルの説明変数の数で割ったものです。不正が 50 件で説明変数が 10 個なら、EPV は 5 です。
昔の経験則は EPV 10 以上でした。近年のシミュレーションでは、適切な値はデータの効果量や正則化の強さに依存することが示されています。状況によっては EPV 5 程度でも問題ない一方、20 以上が必要な場合もあります。
要点は、EPV を警戒指標として扱うことです。10 未満なら推定の不安定さを想定し、Firth のロジスティック回帰やリッジなどのペナルティ付き手法を検討します。5 未満なら、各係数を信頼する前にデータを増やすかモデルを単純化してください。
クラス不均衡は関連するが別の問題です。
99% が同一クラスでも、絶対的な EPV が十分な場合はあります。変わるのはアウトカムのベースレートであって、EPV ではありません。不均衡データでは確率推定が保守的になり、正解率は有用な指標でなくなります。回避するには、正解率ではなく対数損失や Brier スコアで評価し、意思決定のバランスが必要ならクラス重みや閾値調整を検討してください。
前提6:影響度の高い外れ値がない
ロジスティック回帰は説明変数の正規性を仮定しません。歪んだ分布やカウント変数もそのままで問題ありません。モデルが気にするのは、単一の観測が当てはめた係数に過大な影響を持つかどうかです。
影響度の高い観測とは、それを除外するとモデルが有意に変わるものです。残差外れ値とは同じではありません。残差が大きくても影響度が低い点もあれば、残差は大きくなくても影響度が高い点もあります。
異なる側面を見る診断をいくつか使いましょう。
- レバレッジ は、ある観測の説明変数の値が他と比べてどれだけ異例かを測ります。レバレッジ単体は影響度の高さを意味しません。予測される結果と合わない場合に、影響度が高くなり得る「可能性」を示します。
- Cook の距離 はレバレッジと残差を 1 つの数値にまとめ、その観測を除いたとき係数がどれだけ変わるかを見積もります。大きな値は調査対象です。通例は 4/n(n はサンプルサイズ)を超える値、あるいは単にデータ中で上位の値に注目します。
- 残差診断 はレバレッジや Cook の距離で拾えないケースに有効です。逸脱度残差やピアソン残差は、モデルが当てはめに苦労している観測を示します。レバレッジが中程度でも、残差が大きい点は要確認です。モデルが「他の説明変数では説明できない」と教えてくれているからです。
影響度の高い点を見つけたら、それが「誤り」か「実在」かを判断します。入力ミスなら修正または除外します。実在するが珍しいケースなら残しますが、結論がその点に依存していることに留意します。影響度が高いというだけで除外しないでください。そうすると学習データにしか合わないモデルになります。
ロジスティック回帰の前提に関するよくある誤解
混乱の多くは、線形回帰のチェックリストを流用することから来ます。線形回帰の前提は広く知られ、いたるところで教えられており、ロジスティック回帰にも不適切に持ち込まれます。よくある誤解を 4 つ挙げて整理しましょう。
ロジスティック回帰は正規分布の変数を要する
誤りです。ロジスティック回帰は、どの変数についても正規性を仮定しません。
目的変数は正規ではなく二値であるべきで、これは前提1で述べました。説明変数も正規性を仮定しません。重要なのは、各説明変数と対数オッズの関係であって、単一変数の周辺分布ではありません。
ロジスティック回帰は等分散性を要する
これも誤りです。等分散性(予測範囲にわたって残差分散が一定)は線形回帰の前提であり、ロジスティック回帰には当てはまりません。
ロジスティック回帰の結果の分散は、予測確率自体に依存します。ベルヌーイの分散は p(1 - p) で、p = 0.5 付近で最大、0 や 1 に近いと最小です。分散は一定ではなく、モデルは最尤法の枠組みでそれを織り込んでいます。
したがって、予測確率に応じて分散が変わっても違反ではありません。モデルの仕様どおりです。
説明変数は正規分布でなければならない
これも誤りです。ロジスティック回帰は説明変数の分布形に仮定を置きません。
連続、二値、カウント、カテゴリカルを混在させても構いません。歪みや裾の重い分布でも問題ありません。モデルが気にするのは周辺分布ではなく、ロジットの線形性(前提3)という「関係の形」です。
説明変数の歪みが問題を生むとすれば、それはロジットの線形性や影響度の高い外れ値に起因することが多いです。
残差は正規分布でなければならない
誤りです。ロジスティック回帰の残差に正規性の前提はありません。
線形回帰は推論の仕組み上、残差が 0 を中心に正規分布することを仮定します。ロジスティック回帰は二項尤度に対する最尤推定を使うため、残差の分布は 0/1 の結果と当てはめた確率により決まります。正規ではありませんし、そうである必要もありません。
したがってロジスティック回帰で残差診断(前提6)を行う際に見るのは、影響度の高い観測やモデルで説明できない点であって、ベル型の分布ではありません。
Python でロジスティック回帰の前提を確認する方法
診断には statsmodels を使います。scikit-learn でもロジスティック回帰は学習できますが、VIF、影響度統計、残差診断は標準では提供していません。
例のセットアップ
合成のチャーンデータセットを作ります。説明変数は 3 つ(年齢、収入、消費スコア)で、年齢と収入に意図的に相関を持たせ、多重共線性が検出できるようにします。
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
np.random.seed(42)
n = 1000
age = np.random.normal(40, 12, n).clip(18, 80)
income = 30000 + 1500 * age + np.random.normal(0, 8000, n)
spending_score = np.random.uniform(1, 100, n)
logit_p = -3 + 0.04 * age + 0.02 * spending_score
p = 1 / (1 + np.exp(-logit_p))
y = np.random.binomial(1, p)
df = pd.DataFrame({
"churned": y,
"age": age,
"income": income,
"spending_score": spending_score,
})
model = smf.glm(
"churned ~ age + income + spending_score",
data=df, family=sm.families.Binomial()
).fit()
print(model.summary())

モデルサマリー
サマリーには係数、標準誤差、z 統計量、p 値が表示されます。age と spending_score は意味のある予測因子として出てきます。income の係数が小さいのは、目的変数が収入に直接依存していないためで、その見かけの効果は age に吸収されます。
VIF による多重共線性
statsmodels なら計算は非常に簡単です。
from statsmodels.stats.outliers_influence import variance_inflation_factor
X = sm.add_constant(df[["age", "income", "spending_score"]])
vif = pd.DataFrame({
"feature": X.columns,
"VIF": [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
print(vif[vif["feature"] != "const"])

VIF の出力
age と income の VIF は約 5.5 と、軽度の多重共線性を示します。spending_score は 1 付近で理想的です。他の変数との共線性で分散が膨らんでいません。VIF が 5 超は軽い警告、10 超は直ちに対処が必要な深刻な問題です。ここでの対応は、age か income のどちらかを落とすか、1 つの特徴にまとめることです。
Box–Tidwell によるロジットの線形性
Box–Tidwell 検定は、各連続説明変数とその自然対数との相互作用項を追加します。有意な相互作用は、その変数についてロジットの非線形関係を示唆します。
df_bt = df.copy()
for col in ["age", "income", "spending_score"]:
df_bt[f"{col}_logx"] = df_bt[col] * np.log(df_bt[col])
bt_formula = (
"churned ~ age + income + spending_score + "
"age_logx + income_logx + spending_score_logx"
)
bt_model = smf.glm(
bt_formula, data=df_bt, family=sm.families.Binomial()
).fit()
interactions = ["age_logx", "income_logx", "spending_score_logx"]
print(bt_model.pvalues[interactions])

Box–Tidwell の出力
これらの p 値のいずれかが 0.05 未満なら、その変数に対してロジットの線形性が疑わしいということです。ここではロジットを線形に生成しているため、有意にはならないはずです。実データでは、有意ならその変数について経験的な対数オッズのプロットで確認し、変換かスプラインのどちらが適切か判断してください。
影響度診断
statsmodels では get_influence() を通じて Cook の距離やレバレッジにアクセスできます。
influence = model.get_influence()
cooks_d = influence.cooks_distance[0]
leverage = influence.hat_matrix_diag
flagged = pd.DataFrame({
"cooks_d": cooks_d,
"leverage": leverage,
}).sort_values("cooks_d", ascending=False).head(10)
print(flagged)

影響度診断の出力
Cook の距離の目安は 4/n 程度です。n=1000 なら 0.004。これを大きく上回る点は要調査です。このデータでは最大の Cook の距離も絶対値で小さく、望ましい(退屈な)結果です。
分布を見やすくするため、可視化も作成します。

影響度診断の可視化
破線のしきい値を大きく上回る点が調査対象です。多少はありますが、多すぎるほどではありません。
残差診断
逸脱度残差は、モデルが当てはめに苦労している観測を示します。
deviance_resid = model.resid_deviance
fitted = model.fittedvalues
resid_df = pd.DataFrame({
"fitted": fitted,
"deviance": deviance_resid,
}).sort_values("deviance", key=abs, ascending=False).head(10)
print(resid_df)

残差診断の出力
大きな正の逸脱度残差は、低い確率を割り当てたのに実際は陽性だったケースです。大きな負はその逆です。上位の残差観測を、上の影響度診断とクロスチェックしてください。予測が悪く、かつ影響度が高いケースが最優先の調査対象です。
R でロジスティック回帰の前提を確認する方法
R はこれらの診断をより手厚くサポートしています。必要なものの多くは、ベース R の glm() と car パッケージにあります。
例のセットアップ
Python の例と同様の合成データセットを生成します。年齢と収入に意図的に相関を持たせます。
set.seed(42)
n <- 1000
age <- pmin(pmax(rnorm(n, mean = 40, sd = 12), 18), 80)
income <- 30000 + 1500 * age + rnorm(n, sd = 8000)
spending_score <- runif(n, min = 1, max = 100)
logit_p <- -3 + 0.04 * age + 0.02 * spending_score
p <- 1 / (1 + exp(-logit_p))
churned <- rbinom(n, size = 1, prob = p)
df <- data.frame(churned, age, income, spending_score)
model <- glm(churned ~ age + income + spending_score,
data = df, family = binomial)
summary(model)

モデルサマリーの出力
summary(model) は係数、標準誤差、z 統計量、p 値を返します。age と spending_score は意味があり、income の効果は age に吸収されます。
VIF による多重共線性
car パッケージの vif() は任意の glm に対して使えます。
library(car)
vif(model)

R における VIF の出力
age と income はともに約 5.7 と、データに仕込んだ多重共線性を示します。spending_score は 1 付近です。Python 同様、5 超は要注意、10 超は明確な問題です。
Box–Tidwell によるロジットの線形性
car::boxTidwell は線形回帰向けの関数のため、ロジスティック回帰では相互作用項を手動で追加して再推定するのが最善です。
df_bt <- df
df_bt$age_logx <- df_bt$age * log(df_bt$age)
df_bt$income_logx <- df_bt$income * log(df_bt$income)
df_bt$spending_score_logx <- df_bt$spending_score * log(df_bt$spending_score)
bt_model <- glm(
churned ~ age + income + spending_score +
age_logx + income_logx + spending_score_logx,
data = df_bt, family = binomial
)
interactions <- c("age_logx", "income_logx", "spending_score_logx")
summary(bt_model)$coefficients[interactions, ]

R における Box–Tidwell の出力
出力には各相互作用項の係数と p 値が表示されます。有意な p 値は、その変数でロジットの線形性が破れていることを示します。ここでは合成データのため、検定は棄却しないはずです。実データでは、経験的な対数オッズのプロットで追確認するか、splines パッケージでスプラインを用いたモデルを当ててください。
影響度診断
R には cooks.distance() と hatvalues() が標準で用意されており、外部パッケージは不要です。
cooks_d <- cooks.distance(model)
leverage <- hatvalues(model)
influence_df <- data.frame(
index = seq_along(cooks_d),
cooks_d = cooks_d,
leverage = leverage
)
head(influence_df[order(-influence_df$cooks_d), ], 10)

R における影響度診断
Cook の距離のしきい値は Python と同じで 4/n(n=1000 なら 0.004)です。これを大きく上回る点は調査対象です。手早い可視化には、ベース R の plot(model, which = 4) が 1 行で Cook の距離のプロットを出します。

R における影響度診断の可視化
残差診断
R の residuals() は glm の逸脱度残差を返します。
deviance_resid <- residuals(model, type = "deviance")
fitted_vals <- fitted(model)
resid_df <- data.frame(
fitted = fitted_vals,
deviance = deviance_resid
)
head(resid_df[order(-abs(resid_df$deviance)), ], 10)

R における残差診断
絶対値が大きい逸脱度残差は、モデルの予測が外れた観測です。Cook の距離のフラグと突き合わせ、当てはまりが悪く、かつ影響度が高い観測を特定してください。
すべてを一望するには、influence.measures(model) が Cook の距離、レバレッジ、DFBETAs などをまとめた表を返します。glm の標準診断を一気に確認する最速の方法です。
前提が破られたとき何が起きるか
多くの前提違反は、モデルを「動かなくする」わけではありません。気づかなければ見過ごすような微妙な不具合を引き起こします。
主な帰結は 4 つです。
- 係数の不安定化: データの小さな変化(数行の増減や軽微な特徴量エンジニアリング)で、係数が大きく変化・符号反転します。多重共線性や、説明変数数に比べて標本が小さいときに起きます。
- キャリブレーションの悪化: 予測確率が実際の発生率と合わなくなります。30% のチャーンと予測しても実測は 15% といった状態です。正解率は良く見えても確率はズレています。ロジットの線形性違反や影響度の高い外れ値が寄与します。
- 誤解を招く推論: 最も気づきにくい問題です。モデルは見た目上もっともらしい標準誤差や p 値を出しますが、相関した観測は標準誤差を不当に小さくし、誤ったモデル指定は逆に膨らませます。いずれにせよ、p 値は想定どおりの意味を持ちません。
- 予測性能の劣化: 実務で最も目につきやすい症状ですが、影響は小さいことも多いです。予測は係数より持ちこたえるため、正解率だけを見ていると警告サインを見逃しがちです。
とはいえ、違反でモデルが無用になることは稀です。信頼できない部分が生じ、その範囲はどの前提が破れたかに依存します。だからこそ診断が重要なのです。
ロジスティック回帰の前提が満たせないときの代替
ロジスティック回帰の枠内で修正できない問題を診断が示すなら、次はその前提を置かないモデルに移りましょう。
まず検討すべきは一般化加法モデル(GAM)です。GAM はロジスティックのリンク関数と解釈しやすい加法構造を保ちつつ、線形項を各説明変数の滑らかな関数に置き換えます。単一の数値ではなく「形を持つ係数」を得られるため、ロジットの線形性の問題を解決します。依然として十分にパラメトリックで検証・解釈しやすく、線形性が満たせないときの次善策として適しています。
より柔軟なのは木ベースのモデルです。ランダムフォレストや勾配ブースティングは、説明変数の分布や関係の形に仮定を置きません。多重共線性を扱え、非線形も捉えられます。ロジスティック回帰のような係数の解釈性はありませんが、データに非線形構造や明示していない相互作用がある場合、予測指標では優れる傾向にあります。
GAM と木ベースの選択は、モデルに何を求めるかで決まります。
- 解釈性を重視し、各説明変数が対数オッズにどう効くかを可視化したいなら GAM
- 予測性能を最優先し、透明性の低下を許容できるなら勾配ブースティング木
なお、ロジスティック回帰の前提は、無視するより確認するほうが簡単です。変換、スプライン、正則化、より良いサンプルといった手当で修正できるなら、解釈性や推論の出力という点で、より柔軟なモデルに切り替えるより有利なことが多いです。
つまり、最先端ではないからという理由ではなく、診断が「本当に」前提が成り立たないと示したときに、GAM や木モデルへ移行してください。
ロジスティック回帰モデリングのベストプラクティス
最後に、信頼できるモデルを常に得るための短いチェックリストです。
- 解釈の前に前提を確認する: 係数を読む前に、VIF、Box–Tidwell、影響度診断を実行してください。先に解釈して後から確認すると、裏取りのない数値を弁護する羽目になります。会議でそうなりたくはないはずです。
- サンプルが小さいときは正則化を使う: EPV が低い、あるいは説明変数が相関している場合、リッジやエラスティックネットは係数を安定化します。小さなバイアスと大きな分散削減のトレードオフは、たいてい有利です。
- 未観測データで検証する: テストセットのホールドアウトや交差検証を行いましょう。説明変数が多い、事象が稀といった状況では、ロジスティック回帰にも過学習の余地があり、学習時の指標は性能を過大評価します。
- キャリブレーションを評価する: 正解率は、予測確率が実際の発生率に対応しているかを隠します。評価には対数損失や Brier スコアを使い、確率が意思決定に重要なときはキャリブレーションプロットも確認してください。
まとめ
率直に言って、ロジスティック回帰は当てはめやすいモデルのひとつです。
歪んだ説明変数や不均衡なアウトカムにも寛容で、残差の形は問いません。ただし、対数オッズとの関係のミス指定や、同じ情報を持つ説明変数群は許容しません。
だからこそ、ロジットの線形性と多重共線性は必ずチェックすべき 2 大前提です。これらは評価指標では捉えきれない形でモデルを歪めます。他の 4 つの前提も重要ですが、まず注力すべきはこの 2 つです。
安全策として、評価と並行して診断を走らせてください。よく予測し、かつ前提チェックを通過したモデルこそ、自信を持って提示できます。それ未満は、学習はしたが本当の意味で検証していないモデルです。
複雑に聞こえるなら、それは事実です。優れた機械学習エンジニアになるには多くが求められます。Machine Learning Scientist in Python トラックへの参加をおすすめします。85 時間の教材で、2026 年に通用するスキルを身につけられます。
FAQs
ロジスティック回帰に前提条件はありますか?
はい。ロジスティック回帰は線形回帰より前提は少ないものの、前提がないわけではありません。主な前提は、目的変数の形、観測の独立性、対数オッズの線形性、強い多重共線性や影響度の高い点がないこと、の 4 つです。
ロジスティック回帰で最も重要な前提は何ですか?
特に重要なのは、ロジットの線形性と強い多重共線性の不在です。ロジスティック回帰は説明変数と結果の線形関係を仮定せず、説明変数と対数オッズの線形関係を仮定する点が誤解されがちです。多重共線性は精度に影響せずに係数を歪め、標準誤差を膨らませるため、予測性能だけを見ても見逃されます。
ロジスティック回帰の前提が破られるとどうなりますか?
どの前提が破れたかによります。ロジットの線形性の違反や強い多重共線性は、精度に影響せずに係数を静かに損なうため見落としやすいです。独立性の破れは標準誤差を過小/過大評価し、p 値を当てにならなくします。多くの違反はモデルを無用にはしませんが、正解率だけでは見えない形で一部を信頼できなくします。
ロジスティック回帰では説明変数が正規分布している必要がありますか?
いいえ。ロジスティック回帰は説明変数の分布に仮定を置きません。連続・カテゴリカル・歪み・裾の重い分布を混在させても問題ありません。重要なのは各説明変数と対数オッズの関係であり、説明変数の周辺分布の形ではありません。
ロジスティック回帰における妥当な VIF のしきい値は?
一般には VIF が 5 以下なら概ね問題なく、5〜10 は調査に値する中程度の共線性、10 超は説明変数が冗長であるサインです。しきい値は絶対ではなく慣例で、サンプルサイズや必要な精度によって解釈は変わります。ある変数の VIF が高く、データのサブセット間で標準誤差が不安定なら、共線性が悪影響を与えている根拠になります。