STEP 16:ロジスティック回帰入門

🎯 STEP 16: ロジスティック回帰入門

Yes/Noの2値分類問題を解決しよう

📋 このステップで学ぶこと

  • ロジスティック回帰とは何か
  • 2値分類問題の考え方
  • オッズとオッズ比の解釈
  • 実務例(成約確率、チャーン予測)
  • PythonとExcelでの実装

学習時間の目安:3.5時間

🔍 1. ロジスティック回帰とは

2値分類問題

📌 2値分類問題とは

結果が「Yes/No」の2つだけの問題

ビジネスでの例:
・顧客が商品を購入する / しない
・顧客がサービスを継続する / 解約する
・メールを開封する / しない
・ローンを返済する / 延滞する
・広告をクリックする / しない

通常の回帰分析との違い:
・通常の回帰:目的変数が連続値(売上、価格など)
・ロジスティック回帰:目的変数が0か1(Yes=1、No=0)

なぜ通常の回帰ではダメなのか

⚠️ 通常の回帰分析の問題

目的変数が0か1なのに、通常の回帰を使うと…

  • 予測値が0〜1の範囲外になる
    例:予測値 = -0.3 や 1.5
    → 確率は0〜1のはずなのに、範囲外!
  • 誤差の分布が正規分布にならない
    0か1の値なので、誤差は一様に分布しない
    → 回帰分析の前提が崩れる

解決策:ロジスティック回帰を使う!

ロジスティック回帰の仕組み

💡 ロジスティック回帰の考え方

予測するのは「確率(0〜1)」

ステップ:
1. まず、通常の回帰式を作る
 z = b₀ + b₁X₁ + b₂X₂ + …

2. zを「シグモイド関数」に通す
 p = 1 / (1 + e^(-z))

3. pが「Yes(1)になる確率」になる
 p = 0.8 → 80%の確率でYes

シグモイド関数の効果:
・どんなzでも、pは必ず0〜1の範囲になる
・z = -∞ → p = 0
・z = 0 → p = 0.5
・z = +∞ → p = 1

【シグモイド関数のイメージ】 入力(z) 出力(p) ───────────────────────── -5.0 → 0.007 (約0%) -2.0 → 0.119 (約12%) -1.0 → 0.269 (約27%) 0.0 → 0.500 (50%) 1.0 → 0.731 (約73%) 2.0 → 0.881 (約88%) 5.0 → 0.993 (約99%) → どんな値を入れても、必ず0〜1の範囲に収まる! → これが「確率」として解釈できる理由

📊 2. オッズとオッズ比

オッズとは

📌 オッズ(Odds)の概念

「起きる確率」÷「起きない確率」

計算式:
オッズ = p / (1 – p)

例:
・p = 0.8(購入確率80%)→ オッズ = 0.8 / 0.2 = 4
 意味:「購入する可能性が、しない可能性の4倍」

・p = 0.5(購入確率50%)→ オッズ = 0.5 / 0.5 = 1
 意味:「購入する/しないが同じ確率」

・p = 0.2(購入確率20%)→ オッズ = 0.2 / 0.8 = 0.25
 意味:「購入する可能性が、しない可能性の1/4」

確率(p) オッズ 解釈
90% 9.0 Yesの可能性がNoの9倍
80% 4.0 Yesの可能性がNoの4倍
67% 2.0 Yesの可能性がNoの2倍
50% 1.0 Yes/Noが同じ確率
33% 0.5 Yesの可能性がNoの半分
20% 0.25 Yesの可能性がNoの1/4

オッズ比とは

💡 オッズ比(Odds Ratio)

2つのグループのオッズを比較

計算式:
オッズ比 = オッズA / オッズB

例:メール開封率
・件名A:開封率70% → オッズ = 0.7 / 0.3 = 2.33
・件名B:開封率50% → オッズ = 0.5 / 0.5 = 1.00
・オッズ比 = 2.33 / 1.00 = 2.33

解釈:
件名Aは件名Bに比べて、開封されるオッズが2.33倍高い

オッズ比の読み方:
・オッズ比 = 1 → 影響なし
・オッズ比 > 1 → 正の影響(確率が上がる)
・オッズ比 < 1 → 負の影響(確率が下がる)

ロジスティック回帰とオッズ比の関係

💡 係数からオッズ比を計算

オッズ比 = exp(係数)= e^係数

例:
・訪問回数の係数 = 0.5
・オッズ比 = e^0.5 = 1.65
・意味:訪問回数が1回増えると、購入のオッズが1.65倍になる

係数の符号とオッズ比:
・係数 > 0 → オッズ比 > 1 → 確率が上がる
・係数 = 0 → オッズ比 = 1 → 影響なし
・係数 < 0 → オッズ比 < 1 → 確率が下がる

💻 3. Pythonでの実装

基本的な例:顧客の購入予測

# ============================================ # ロジスティック回帰の実装 # ============================================ # ロジスティック回帰とは? # → 「購入するか/しないか」のような二値分類を予測 # → 結果は確率(0〜100%)で出力される # → 線形回帰とは違い、0か1の予測に特化 import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt # ============================================ # サンプルデータ作成 # ============================================ # ビジネスシナリオ: # 「訪問回数と滞在時間から、購入するかを予測」 np.random.seed(42) # 再現性のため data = { ‘訪問回数’: [1, 2, 1, 3, 2, 4, 1, 5, 3, 2, 4, 1, 6, 2, 5, 3, 4, 2, 6, 7], ‘滞在時間’: [5, 10, 3, 15, 8, 20, 2, 25, 12, 7, 18, 4, 30, 9, 22, 14, 19, 6, 28, 35], ‘購入’: [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1] # 0=購入しない, 1=購入 } df = pd.DataFrame(data) print(“【データの概要】”) print(df.head(10)) print(f”\n購入者: {df[‘購入’].sum()}人”) print(f”非購入者: {len(df) – df[‘購入’].sum()}人”) # ============================================ # 説明変数と目的変数の準備 # ============================================ # X: 説明変数(購入を予測するために使う変数) # y: 目的変数(予測したい変数、0か1) X = df[[‘訪問回数’, ‘滞在時間’]] y = df[‘購入’] # ============================================ # ロジスティック回帰モデルの学習 # ============================================ # LogisticRegression(): ロジスティック回帰モデルを作成 # → LinearRegressionと使い方は同じ model = LogisticRegression() # .fit(X, y): データからモデルを学習 # → 各変数がどれだけ購入に影響するかを計算 model.fit(X, y) # ============================================ # 結果の確認 # ============================================ # model.intercept_: 切片 # model.coef_: 各変数の係数 # → 係数が正 → その変数が増えると購入確率が上がる # → 係数が負 → その変数が増えると購入確率が下がる print(“\n【ロジスティック回帰の結果】”) print(f”切片: {model.intercept_[0]:.4f}”) print(f”訪問回数の係数: {model.coef_[0][0]:.4f}(正=購入確率↑)”) print(f”滞在時間の係数: {model.coef_[0][1]:.4f}(正=購入確率↑)”)
# 出力例 【データの概要】 訪問回数 滞在時間 購入 0 1 5 0 1 2 10 0 2 1 3 0 3 3 15 0 4 2 8 0 5 4 20 1 6 1 2 0 7 5 25 1 8 3 12 0 9 2 7 0 購入者: 10人 非購入者: 10人 【ロジスティック回帰の結果】 切片: -5.2345 訪問回数の係数: 0.4567(正=購入確率↑) 滞在時間の係数: 0.1234(正=購入確率↑)

予測の実行

# ============================================ # 新規顧客の購入確率を予測 # ============================================ # ロジスティック回帰の最大のメリット: # → 「買う/買わない」だけでなく「確率」が分かる # → 確率に基づいてアプローチの優先順位を決められる 新規顧客 = pd.DataFrame({ ‘訪問回数’: [3], ‘滞在時間’: [15] }) # ============================================ # model.predict_proba(): 確率を予測 # ============================================ # 戻り値: [[クラス0の確率, クラス1の確率], …] # → [0][0]: 購入しない確率 # → [0][1]: 購入する確率 購入確率 = model.predict_proba(新規顧客)[0][1] print(“【予測】”) print(f”訪問回数: 3回、滞在時間: 15分”) print(f”購入確率: {購入確率:.2%}”) print(f”予測結果: {‘購入する’ if 購入確率 > 0.5 else ‘購入しない’}”) # ============================================ # 複数の顧客を一度に予測 # ============================================ 複数顧客 = pd.DataFrame({ ‘訪問回数’: [1, 3, 5, 7], ‘滞在時間’: [5, 15, 25, 35] }) # [:, 1]で全行のクラス1(購入)の確率を取得 確率一覧 = model.predict_proba(複数顧客)[:, 1] print(“\n【複数顧客の予測】”) for i, (訪問, 滞在, 確率) in enumerate(zip(複数顧客[‘訪問回数’], 複数顧客[‘滞在時間’], 確率一覧)): print(f”顧客{i+1}: 訪問{訪問}回、滞在{滞在}分 → 購入確率 {確率:.1%}”) print(“\n【活用例】”) print(“→ 確率の高い顧客からアプローチする”) print(“→ 確率50%前後の顧客に重点的にマーケティング”)
# 出力例 【予測】 訪問回数: 3回、滞在時間: 15分 購入確率: 43.21% 予測結果: 購入しない 【複数顧客の予測】 顧客1: 訪問1回、滞在5分 → 購入確率 5.2% 顧客2: 訪問3回、滞在15分 → 購入確率 43.2% 顧客3: 訪問5回、滞在25分 → 購入確率 85.6% 顧客4: 訪問7回、滞在35分 → 購入確率 98.1% 【活用例】 → 確率の高い顧客からアプローチする → 確率50%前後の顧客に重点的にマーケティング

オッズ比の計算

# ============================================ # オッズ比を計算 # ============================================ # オッズ比とは? # → 変数が1単位増えた時に、購入の「オッズ」が何倍になるか # → オッズ = 購入確率 / (1 – 購入確率) # # 計算方法: # オッズ比 = exp(係数) = e^係数 # # 解釈: # → オッズ比 > 1: 購入確率が上がる # → オッズ比 = 1: 影響なし # → オッズ比 < 1: 購入確率が下がる # np.exp(): 自然対数の底eのべき乗を計算 オッズ比_訪問回数 = np.exp(model.coef_[0][0]) オッズ比_滞在時間 = np.exp(model.coef_[0][1]) print("【オッズ比の解釈】") print(f"訪問回数: {オッズ比_訪問回数:.4f}") print(f"→ 訪問回数が1回増えると、購入のオッズが{オッズ比_訪問回数:.2f}倍になる") print(f"\n滞在時間: {オッズ比_滞在時間:.4f}") print(f"→ 滞在時間が1分増えると、購入のオッズが{オッズ比_滞在時間:.2f}倍になる") # ============================================ # まとめ表の作成 # ============================================ 結果 = pd.DataFrame({ '変数': ['訪問回数', '滞在時間'], '係数': model.coef_[0], 'オッズ比': [オッズ比_訪問回数, オッズ比_滞在時間], '解釈': [ f'1回増加で{オッズ比_訪問回数:.2f}倍', f'1分増加で{オッズ比_滞在時間:.2f}倍' ] }) print("\n【結果まとめ】") print(結果)
# 出力例 【オッズ比の解釈】 訪問回数: 1.5789 → 訪問回数が1回増えると、購入のオッズが1.58倍になる 滞在時間: 1.1314 → 滞在時間が1分増えると、購入のオッズが1.13倍になる 【結果まとめ】 変数 係数 オッズ比 解釈 0 訪問回数 0.4567 1.5789 1回増加で1.58倍 1 滞在時間 0.1234 1.1314 1分増加で1.13倍

📈 4. モデルの評価

評価指標

📌 ロジスティック回帰の評価指標

1. 正解率(Accuracy)

全予測のうち、正しく予測できた割合
計算式:(正解数)/(全データ数)

2. 適合率(Precision)

Yesと予測したもののうち、実際にYesだった割合
「予測の正確さ」を測る

3. 再現率(Recall)

実際にYesのもののうち、Yesと予測できた割合
「見逃しの少なさ」を測る

4. AUC(Area Under the Curve)

ROC曲線の下の面積(0.5〜1.0)
0.8以上なら良いモデル

# モデルの評価 from sklearn.metrics import accuracy_score, precision_score, recall_score from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score # データを学習用とテスト用に分割 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42 ) # モデルの学習 model = LogisticRegression() model.fit(X_train, y_train) # 予測 y_pred = model.predict(X_test) y_pred_proba = model.predict_proba(X_test)[:, 1] # 評価指標の計算 print(“【モデルの評価】”) print(f”正解率(Accuracy): {accuracy_score(y_test, y_pred):.2%}”) print(f”適合率(Precision): {precision_score(y_test, y_pred):.2%}”) print(f”再現率(Recall): {recall_score(y_test, y_pred):.2%}”) print(f”AUC: {roc_auc_score(y_test, y_pred_proba):.4f}”) # 混同行列 print(“\n【混同行列】”) cm = confusion_matrix(y_test, y_pred) print(f” 予測No 予測Yes”) print(f”実際No {cm[0][0]} {cm[0][1]}”) print(f”実際Yes {cm[1][0]} {cm[1][1]}”)
# 出力例 【モデルの評価】 正解率(Accuracy): 83.33% 適合率(Precision): 80.00% 再現率(Recall): 100.00% AUC: 0.9167 【混同行列】 予測No 予測Yes 実際No 2 1 実際Yes 0 3

混同行列の解釈

💡 混同行列(Confusion Matrix)
予測:No(0) 予測:Yes(1)
実際:No(0) TN(True Negative)
正しくNoと予測
FP(False Positive)
誤ってYesと予測
実際:Yes(1) FN(False Negative)
誤ってNoと予測
TP(True Positive)
正しくYesと予測

計算式:
・正解率 = (TN + TP) / 全体
・適合率 = TP / (TP + FP)
・再現率 = TP / (TP + FN)

🎯 5. 実務での活用例

例1:顧客の解約予測(チャーン予測)

# チャーン予測の例 import pandas as pd import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report # サンプルデータ data = { ‘利用月数’: [3, 12, 6, 24, 1, 18, 9, 36, 2, 15, 5, 30, 4, 20, 8], ‘サポート問合せ回数’: [5, 1, 3, 0, 8, 1, 2, 0, 6, 1, 4, 0, 7, 1, 3], ‘月額料金’: [3000, 5000, 4000, 6000, 2000, 5500, 4500, 7000, 2500, 5200, 3500, 6500, 3000, 6000, 4200], ‘解約’: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1] } df = pd.DataFrame(data) # データ分割 X = df[[‘利用月数’, ‘サポート問合せ回数’, ‘月額料金’]] y = df[‘解約’] # モデル構築 model = LogisticRegression() model.fit(X, y) # オッズ比の計算 print(“【チャーン予測モデル】”) print(“\n【係数とオッズ比】”) for i, col in enumerate(X.columns): 係数 = model.coef_[0][i] オッズ比 = np.exp(係数) print(f”{col}: 係数={係数:.4f}, オッズ比={オッズ比:.4f}”) print(“\n【解釈】”) print(“・利用月数が長いほど、解約しにくい(オッズ比 < 1)") print("・サポート問合せが多いほど、解約しやすい(オッズ比 > 1)”) print(“・月額料金が高いほど、解約しにくい(ロイヤルティが高い)”)

例2:メール開封予測

# メール開封予測 data = { ‘件名の長さ’: [10, 15, 8, 20, 12, 25, 9, 18, 11, 22], ‘送信時刻’: [9, 12, 8, 18, 10, 20, 7, 14, 9, 19], # 時刻(24時間表記) ‘過去開封率’: [0.2, 0.4, 0.1, 0.6, 0.3, 0.7, 0.15, 0.5, 0.25, 0.65], ‘開封’: [0, 1, 0, 1, 1, 1, 0, 1, 0, 1] } df = pd.DataFrame(data) X = df[[‘件名の長さ’, ‘送信時刻’, ‘過去開封率’]] y = df[‘開封’] model = LogisticRegression() model.fit(X, y) # 新しいメールの開封確率を予測 新規メール = pd.DataFrame({ ‘件名の長さ’: [12], ‘送信時刻’: [10], ‘過去開封率’: [0.3] }) 開封確率 = model.predict_proba(新規メール)[0][1] print(“【メール開封予測】”) print(f”件名の長さ: 12文字”) print(f”送信時刻: 10時”) print(f”過去開封率: 30%”) print(f”\n予測される開封確率: {開封確率:.2%}”) # 施策の効果をシミュレーション print(“\n【施策シミュレーション】”) パターン = [ {‘件名の長さ’: [12], ‘送信時刻’: [10], ‘過去開封率’: [0.3]}, # 現状 {‘件名の長さ’: [20], ‘送信時刻’: [10], ‘過去開封率’: [0.3]}, # 件名を長く {‘件名の長さ’: [12], ‘送信時刻’: [8], ‘過去開封率’: [0.3]}, # 朝に送信 ] ラベル = [‘現状’, ‘件名を長く’, ‘朝に送信’] for label, p in zip(ラベル, パターン): df_p = pd.DataFrame(p) prob = model.predict_proba(df_p)[0][1] print(f”{label}: {prob:.1%}”)

Excelでの確率計算

【Excelでロジスティック回帰の予測式を使う】 Pythonで求めた係数: 切片: -5.2345 訪問回数の係数: 0.4567 滞在時間の係数: 0.1234 Excelでの計算(例:A1=訪問回数、B1=滞在時間): 1. z値を計算(C1セル): =(-5.2345) + (0.4567 * A1) + (0.1234 * B1) 2. 確率を計算(D1セル): =1 / (1 + EXP(-C1)) 例:訪問回数=3、滞在時間=15の場合 z = -5.2345 + 0.4567×3 + 0.1234×15 = -2.1134 p = 1 / (1 + e^2.1134) = 0.108 → 約10.8%

📝 STEP 16 のまとめ

✅ このステップで学んだこと

1. ロジスティック回帰の基本

  • Yes/Noの2値分類問題を解決
  • シグモイド関数で0〜1の確率に変換

2. オッズとオッズ比

  • オッズ = 起きる確率 / 起きない確率
  • オッズ比 = exp(係数)
  • オッズ比 > 1 → 正の影響

3. 評価指標

  • 正解率、適合率、再現率
  • AUC(0.8以上で良いモデル)
  • 混同行列での詳細分析

4. 実務応用

  • チャーン予測、開封予測、成約予測
  • 施策効果のシミュレーション
💡 最も大切なポイント

ロジスティック回帰は、ビジネスで最もよく使われる分析手法の1つです!

使えるシーン:
・顧客が購入する/しないを予測
・顧客が解約する/しないを予測
・メールを開封する/しないを予測
・ローンを返済する/しないを予測

係数の解釈:
・係数が正(+)→ その変数が大きいと、Yesになりやすい
・係数が負(-)→ その変数が大きいと、Noになりやすい
・オッズ比 = exp(係数) → 影響の大きさを数値化

次のSTEP 17では、仮説検定の実務での使い方を学びます!

🎯 次のステップの予告

STEP 17では、「仮説検定の実務での使い方」を学びます。統計的な根拠を持ってビジネス判断を行う方法を習得しましょう!

📝 練習問題

問題 1 基礎

ロジスティック回帰と通常の回帰分析の違いを説明してください。

【解答】
通常の回帰分析 ロジスティック回帰
目的変数 連続値(売上、価格など) 2値(0か1)
予測するもの 具体的な数値 確率(0〜1)
予測値の範囲 -∞ 〜 +∞ 0 〜 1
使用例 売上予測、需要予測 解約予測、成約予測

重要なポイント:
ロジスティック回帰は、シグモイド関数を使って、どんな値でも0〜1の範囲の確率に変換します!

問題 2 基礎

購入確率が60%の顧客のオッズを計算してください。また、その意味を説明してください。

【解答】

オッズの計算:

オッズ = p / (1 – p)
   = 0.6 / (1 – 0.6)
   = 0.6 / 0.4
   = 1.5

意味:
この顧客が商品を「購入する可能性」は「購入しない可能性」の1.5倍

別の言い方:
・購入する:購入しない = 3:2
・10人いたら、6人が購入、4人が購入しない

問題 3 応用

ロジスティック回帰で「訪問回数」の係数が0.5でした。オッズ比を計算し、ビジネス的に解釈してください。

【解答】

オッズ比の計算:

オッズ比 = e^係数 = e^0.5 = 1.65

ビジネス的解釈:

訪問回数が1回増えるごとに、購入のオッズが1.65倍になる。

つまり、顧客に何度もサイトを訪問してもらうことで、購入確率が大幅に上がる。

施策への応用:
・リターゲティング広告で再訪問を促す
・メールマガジンでサイトへの誘導を増やす
・アプリのプッシュ通知で訪問を促す

問題 4 応用

混同行列が以下の結果でした。正解率と適合率を計算してください。

予測:No 予測:Yes
実際:No8020
実際:Yes1090

【解答】

正解率(Accuracy):

正解率 = (TN + TP) / 全体
   = (80 + 90) / (80 + 20 + 10 + 90)
   = 170 / 200
   = 85%

適合率(Precision):

適合率 = TP / (TP + FP)
   = 90 / (90 + 20)
   = 90 / 110
   = 81.8%
問題 5 実践

以下のロジスティック回帰の結果を解釈してください。

モデル:メール開封予測
切片: -2.5
件名の長さの係数: 0.1
送信時刻の係数: -0.05

(1) 係数の符号から何がわかりますか?
(2) 件名の長さが10文字の場合と20文字の場合で、オッズはどう変わりますか?

【解答】

(1) 係数の解釈:

件名の長さ(係数 = +0.1):
・係数が正(+)→ 件名が長いほど、開封されやすい
・オッズ比 = exp(0.1) = 1.105
・件名が1文字長くなると、開封のオッズが1.105倍になる

送信時刻(係数 = -0.05):
・係数が負(-)→ 送信時刻が遅いほど、開封されにくい
・オッズ比 = exp(-0.05) = 0.951
・つまり、早朝に送る方が開封されやすい

(2) オッズの変化:

件名10文字の場合:
オッズへの影響 = exp(0.1 × 10) = exp(1) = 2.72

件名20文字の場合:
オッズへの影響 = exp(0.1 × 20) = exp(2) = 7.39

変化:
件名を10文字から20文字にすると、オッズが 7.39 / 2.72 = 2.72倍になる

実務的な意味:
件名を長くする(ただし長すぎない範囲で)と、メール開封率が大幅に改善する可能性がある!

❓ よくある質問

Q1: ロジスティック回帰の予測確率が0.5の場合、Yes/Noどちらと予測すべきですか?
一般的には0.5を閾値にしますが、ビジネス目的で調整できます。

標準的な閾値:
・p ≥ 0.5 → Yes(1)と予測
・p < 0.5 → No(0)と予測

閾値を調整する場合:

例1:メールマーケティング
・閾値 = 0.3(低めに設定)
・理由:誤って送信しても、コストは低い
・多くの顧客にリーチできる

例2:融資審査
・閾値 = 0.7(高めに設定)
・理由:誤って融資すると、大きな損失
・確実な顧客にだけ融資

決め方:
False Positive(誤ってYesと判定)とFalse Negative(誤ってNoと判定)のコストを考慮して設定します。
Q2: ロジスティック回帰のR²はどう解釈すれば良いですか?
ロジスティック回帰では、通常のR²は使いません。

代わりに使う指標:

1. 正解率(Accuracy)
・全予測のうち、正しく予測できた割合
・計算式:(正解数)/(全データ数)

2. AUC(Area Under the Curve)
・ROC曲線の下の面積
・0.5〜1.0 の範囲
・0.8以上なら良いモデル

3. 疑似R²(Pseudo R²)
・McFadden’s R²など
・通常のR²とは異なる計算方法
・0.2〜0.4 でも良いモデルとされる

推奨:
ロジスティック回帰では、正解率とAUCを使うのが一般的です!
Q3: オッズ比が0.5の場合、どう解釈すれば良いですか?
オッズ比 = 0.5 は、「オッズが半分になる」という意味です。

例:利用月数の係数が -0.693
・オッズ比 = exp(-0.693) = 0.5

解釈:
・利用月数が1ヶ月増えると、解約のオッズが半分になる
・つまり、長く使っている顧客ほど、解約しにくい

別の見方:
・オッズ比 = 0.5 = 1/2
・「2倍解約しにくい」とも言える

一般的なルール:
・オッズ比 > 1 → 正の影響(確率が上がる)
・オッズ比 = 1 → 影響なし
・オッズ比 < 1 → 負の影響(確率が下がる)
Q4: ロジスティック回帰で多重共線性は問題になりますか?
はい、通常の回帰分析と同じく、多重共線性は問題になります。

多重共線性の影響:
・係数が不安定になる
・標準誤差が大きくなる
・p値が大きくなる(有意でなくなる)

対処法:
1. VIFをチェック(VIF ≥ 10 なら削除)
2. 相関の高い変数のペアを見つける
3. どちらか1つを削除
4. 必要に応じて、Ridge回帰やLasso回帰を使う

重要:
STEP 15で学んだ多重共線性の対処法は、ロジスティック回帰でもそのまま使えます
Q5: 3つ以上のカテゴリがある場合(例:高/中/低)は、どうすれば良いですか?
多項ロジスティック回帰(Multinomial Logistic Regression)を使います。

ロジスティック回帰の種類:

1. 二項ロジスティック回帰
・2つのカテゴリ(Yes/No)
・このSTEPで学んだ内容

2. 多項ロジスティック回帰
・3つ以上のカテゴリ(高/中/低)
・各カテゴリになる確率を予測

3. 順序ロジスティック回帰
・順序がある場合(満足度:1〜5)
・順序を考慮したモデル

Pythonでの実装:
model = LogisticRegression(multi_class='multinomial')

注意:
多項ロジスティック回帰は、二項より複雑になります。まずは二項ロジスティック回帰をしっかり理解しましょう!
Q6: Excelでロジスティック回帰はできますか?
残念ながら、Excelには標準のロジスティック回帰機能がありません。

代替方法:

1. Pythonで係数を求めて、Excelで予測
・係数だけPythonで求める
・予測式をExcelに貼り付けて使う
・z = 切片 + 係数×変数
・p = 1/(1+EXP(-z))

2. ソルバーを使う(上級者向け)
・最尤推定でパラメータを求める
・設定が複雑なので非推奨

3. 統計ソフトを使う
・SPSS、SAS、Rなどの専門ソフト

推奨:
ロジスティック回帰はPythonを使うのが最も簡単です!Google Colab(無料)なら、すぐに使えます。
📝

学習メモ

ビジネスデータ分析・意思決定 - Step 16

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE