1. 로지스틱 회귀분석의 이론적 이해
1. 로지스틱 회귀분석 개요
- 정의: 종속변수가 **범주형(특히 이항 변수, 0/1)**일 때 사용하는 회귀분석 기법
- 필요성
- 선형회귀는 연속형 Y만 설명 가능 → 확률(0~1) 예측에 한계
- 로지스틱 회귀는 결과를 “성공/실패, 만족/불만족” 등 **범주형 확률**로 모델링 가능
- 활용 예시
- 시험 합격(1)/불합격(0) 예측
- 고객 구매 여부(구매=1, 미구매=0)
- 질병 유무(있음=1, 없음=0)
2. 로짓 변환 및 로지스틱 함수
(1) 로짓 변환 (Logit Transformation)
- 선형 예측식을 확률로 변환하기 위해 **로그 오즈(log-odds)** 사용
$$ \text{logit}(p) = \ln\left(\frac{p}{1-p}\right) = a + bX $$
- $p$: 성공 확률 (0~1)
- $p/(1-p)$: 성공 대 실패의 **승산(odds)**
(2) 로지스틱 함수 (Logistic Function)
- 확률 $p$를 직접 계산:
$$ p = \frac{1}{1 + e^{-(a+bX)}} $$
- 특징:
- X가 -∞ ~ +∞로 변해도 p는 0~1 사이 값
- S자형 곡선(Sigmoid curve)
👉 이를 통해 “공부시간이 늘어날수록 합격할 확률이 어떻게 변하는지” 등을 모델링 가능
3. 회귀계수 해석과 승산비
- 회귀계수($B$)
- 선형회귀와 달리 $B$ 자체는 확률로 직접 해석이 어려움
- 승산비(Odds Ratio)
- $OR = e^B$
- 해석: 독립변수가 1 단위 증가할 때, 성공할 **승산(odds)**이 몇 배 변하는가
- 해석 예시
- $B = 0.7$ → $e^{0.7} \approx 2.01$
→ 독립변수가 1 증가할 때 성공할 승산이 약 **2배** 증가 - $B = -0.5$ → $e^{-0.5} \approx 0.61$
→ 독립변수가 1 증가할 때 성공할 승산이 약 **39% 감소**
- $B = 0.7$ → $e^{0.7} \approx 2.01$
✅ 수업 정리
- 로지스틱 회귀는 **범주형 종속변수 예측**에 활용
- 로짓 변환과 로지스틱 함수로 확률을 모델링
- 계수 해석은 **승산비(Odds Ratio)**를 통해 직관적으로 이해
2. Python 실습: 로지스틱 회귀 모델 구축 및 결과 해석
1. 문제 설정
- 연구 질문: **“나이와 근무경력이 직무 만족도(만족=1, 불만족=0)에 영향을 주는가?”**
- 종속변수(Y): 직무만족 (범주형, 0/1)
- 독립변수(X): 나이, 근무경력
2. Python 실습
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 1. 데이터 생성 (가상 데이터)
data = {
'나이': [25, 30, 35, 40, 45, 50, 28, 33, 38, 42],
'근무경력': [1, 5, 8, 12, 18, 20, 3, 6, 10, 15],
'직무만족': [0, 0, 1, 1, 1, 1, 0, 1, 1, 1] # 1=만족, 0=불만족
}
df = pd.DataFrame(data)
# 2. 로지스틱 회귀분석 모델 구축
X = sm.add_constant(df[['나이', '근무경력']]) # 상수항 추가
y = df['직무만족']
# --- 오류 해결을 위한 코드 변경 부분 ---
# sm.Logit은 'l1' 정규화만 지원합니다.
# L1 정규화 (Lasso)를 적용하여 모델 적합
# alpha=0.1은 정규화 강도입니다. (필요에 따라 0.01~1.0 사이에서 조정 가능)
# LinAlgError: Singular matrix 문제를 해결할 수 있습니다.
logit_model = sm.Logit(y, X).fit_regularized(method='l1', alpha=0.1, disp=False)
# 결과 요약 출력
print("--- 정규화 Logit Regression Results (L1) ---")
print(logit_model.summary())
# 3. 승산비(Odds Ratio) 계산
odds_ratios = np.exp(logit_model.params)
print("\n--- 승산비 (Odds Ratio) ---")
print(odds_ratios)
3. 결과표 해석
- `coef` (회귀계수)
- 나이, 근무경력의 회귀계수 값
- 값이 양수면 해당 변수가 증가할수록 직무만족 “승산”이 증가
- `P>|z|` (p-value)
- Wald 검정 결과
- p < 0.05 → 해당 변수가 **통계적으로 유의**
- `Odds Ratio (승산비)`
- 해석 방법: `OR = e^B`
- 예: 근무경력 OR = 1.57 → 근무경력이 1년 증가할 때, **직무만족 odds가 약 1.57배 증가**
- 나이 OR < 1이라면 → 나이가 많아질수록 직무만족 odds가 감소
✅ 수업 정리 & 토론
- **핵심 정리**
- 로지스틱 회귀는 종속변수가 범주형(0/1)일 때 사용
- 출력표에서는 p-value로 변수 유의성 판단
- 해석은 회귀계수 대신 **승산비(Odds Ratio)**를 활용
- **토론 질문**
- “근무경력이 유의하게 나타나지만, 나이는 그렇지 않다면 무슨 의미일까?”
- “승산비가 2라는 건 실제 확률이 2배라는 뜻일까, 아니면 odds(승산)가 2배라는 뜻일까?”
- 실제 인사 데이터에서 성별, 직무유형 같은 범주형 변수를 포함하려면 어떻게 해야 할까? (→ 더미변수 활용)
3. 모형 적합성 및 예측 평가
1. 모형 적합성 평가
- -2 Log-Likelihood (-2LL)
- 값이 작을수록 모형이 데이터에 잘 맞음
- L.L.R. p-value (Likelihood Ratio Test)
- 모형 전체의 통계적 유의성 검정
- p < 0.05 → 모형이 통계적으로 유의
- Pseudo R-squared (Nagelkerke 등)
- 선형 회귀의 $R^2$와 유사한 개념
- 0~1 사이 값, 클수록 설명력이 좋음
- 절대적 기준은 없고 비교 목적으로 활용
👉 이 지표들을 통해 **모형이 데이터에 적합한지** 먼저 확인합니다.
2. 예측 성능 평가
(1) Python 실습 코드
from sklearn.metrics import confusion_matrix, accuracy_score
# 예측 확률 계산
predictions = logit_model.predict(X)
# 확률을 이진 분류(0 또는 1)로 변환
threshold = 0.5 # 기준 확률
predicted_classes = (predictions > threshold).astype(int)
# 혼동 행렬 생성
cm = confusion_matrix(y, predicted_classes)
print("\n--- 혼동 행렬 (Confusion Matrix) ---")
print(cm)
# 정확도 계산
accuracy = accuracy_score(y, predicted_classes)
print(f"\n모델의 예측 정확도: {accuracy:.2f}")
(2) 혼동 행렬 해석
- 혼동 행렬 형태:
실제 만족=1 실제 불만족=0 예측 만족=1 TP (정답) FP (오분류) 예측 불만족=0 FN (오분류) TN (정답) - **정확도(Accuracy)**: 전체 중 맞게 예측한 비율
- **정밀도(Precision)**: 예측을 만족(1)이라 한 것 중 실제 만족 비율
- **재현율(Recall, Sensitivity)**: 실제 만족(1) 중 예측도 만족이라 맞춘 비율
👉 정확도만 볼 게 아니라, 정밀도와 재현율도 함께 고려해야 함 (특히 불균형 데이터일 때).
✅ 수업 정리
- 로지스틱 회귀는 **모형 적합성 지표(-2LL, LLR p, Pseudo R²)**로 성능 확인
- **predict()** → 확률 예측 → 기준값(0.5 등)으로 0/1 변환
- 혼동 행렬을 통해 정확도, 정밀도, 재현율 평가 가능
- 실제 연구/실무에서는 ROC 곡선, AUC 값 등 추가 평가 지표도 활용
4. 질의응답 및 요약
1. 최종 정리
- 로지스틱 회귀분석 개요
- 종속변수가 **범주형(특히 이항형)**일 때 사용하는 분석 기법
- 확률(0~1)로 결과를 해석 가능
- 핵심 개념 복습
- 로짓 변환 & 로지스틱 함수
→ 선형 결합 → 0~1 사이 확률로 변환 - 계수(Coefficient) 해석
→ 직접 해석 어려움 → **승산비(Odds Ratio = e^B)**로 해석
→ OR > 1 → 성공(1) 확률 증가, OR < 1 → 성공 확률 감소 - 모형 적합성 평가
→ -2 Log-Likelihood, LLR p-value, Pseudo R² - 예측 성능 평가
→ `predict()` 확률 → 기준값(0.5)으로 분류
→ **혼동 행렬**로 정확도·정밀도·재현율 확인
- 로짓 변환 & 로지스틱 함수
- 실무적 의의
→ 고객 구매 여부 예측, 합격/불합격 판별, 질병 진단 등에서 폭넓게 활용됨
2. 질의응답
- 예상 질문 예시
- “승산비가 2라면 확률이 2배라는 뜻인가요?”
→ 아님, **odds(승산)**이 2배라는 뜻 (확률과는 다름). - “cut-off(0.5) 기준은 항상 고정인가요?”
→ 아니요, 상황에 따라 0.4, 0.6 등 조정 가능 (민감도·특이도 균형 고려). - “Pseudo R² 값이 낮으면 무조건 나쁜 모델인가요?”
→ 절대 기준 없음, 다른 모델과 비교하는 지표로 활용.
- “승산비가 2라면 확률이 2배라는 뜻인가요?”