2025년 2학기 계량분석 강의 계획

13주차: 로지스틱 회귀분석

1. 로지스틱 회귀분석의 이론적 이해


1. 로지스틱 회귀분석 개요


2. 로짓 변환 및 로지스틱 함수

(1) 로짓 변환 (Logit Transformation)

$$ \text{logit}(p) = \ln\left(\frac{p}{1-p}\right) = a + bX $$

(2) 로지스틱 함수 (Logistic Function)

$$ p = \frac{1}{1 + e^{-(a+bX)}} $$

👉 이를 통해 “공부시간이 늘어날수록 합격할 확률이 어떻게 변하는지” 등을 모델링 가능


3. 회귀계수 해석과 승산비

✅ 수업 정리

  • 로지스틱 회귀는 **범주형 종속변수 예측**에 활용
  • 로짓 변환과 로지스틱 함수로 확률을 모델링
  • 계수 해석은 **승산비(Odds Ratio)**를 통해 직관적으로 이해

2. Python 실습: 로지스틱 회귀 모델 구축 및 결과 해석


1. 문제 설정


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. 결과표 해석

✅ 수업 정리 & 토론

  • **핵심 정리**
    • 로지스틱 회귀는 종속변수가 범주형(0/1)일 때 사용
    • 출력표에서는 p-value로 변수 유의성 판단
    • 해석은 회귀계수 대신 **승산비(Odds Ratio)**를 활용
  • **토론 질문**
    • “근무경력이 유의하게 나타나지만, 나이는 그렇지 않다면 무슨 의미일까?”
    • “승산비가 2라는 건 실제 확률이 2배라는 뜻일까, 아니면 odds(승산)가 2배라는 뜻일까?”
    • 실제 인사 데이터에서 성별, 직무유형 같은 범주형 변수를 포함하려면 어떻게 해야 할까? (→ 더미변수 활용)

3. 모형 적합성 및 예측 평가


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) 혼동 행렬 해석

👉 정확도만 볼 게 아니라, 정밀도와 재현율도 함께 고려해야 함 (특히 불균형 데이터일 때).

✅ 수업 정리

  • 로지스틱 회귀는 **모형 적합성 지표(-2LL, LLR p, Pseudo R²)**로 성능 확인
  • **predict()** → 확률 예측 → 기준값(0.5 등)으로 0/1 변환
  • 혼동 행렬을 통해 정확도, 정밀도, 재현율 평가 가능
  • 실제 연구/실무에서는 ROC 곡선, AUC 값 등 추가 평가 지표도 활용

4. 질의응답 및 요약


1. 최종 정리


2. 질의응답