범주형 데이터 분석을 위한 Multinomial Logit과 Ordered Logit

범주형 반응변수의 선택 확률을 추정하는 Multinomial Logit과 Ordered Logit의 가정, 진단, 평가, 운영 방법을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

범주의 성격이 모형 선택을 결정한다

이진 반응변수는 로짓 링크를 이용해 사건 확률을 추정하는 최대우도추정(MLE) 기반의 확률적 변환 모델로 다룬다. 반응 범주가 늘어나면 범주 사이에 순서가 있는지부터 구분해야 한다.

Multinomial Logit(MNL)은 세 개 이상 명목형 범주에서 기준 범주 대비 로그오즈를 모형화하는 확률적 선택모형이다. 이 모형에는 독립적 대안 불변성(IIA) 가정이 적용된다. 반면 Ordered Logit(OL)은 순서형 범주를 잠재연속변수(latent variable)와 절편 임계값(cutpoints)으로 표현하는 비례오즈(Proportional Odds, PO) 모형이다.

추정은 설계행렬 X를 구성하고 로그우도를 최대화하는 흐름으로 진행된다. 이후 파라미터 추정치와 표준오차를 구해 신뢰구간과 가설검정을 수행하고, 적합도와 진단 결과를 함께 확인한다.

설계행렬부터 운영 지표까지

범주형 설명변수에는 원-핫 인코딩을 적용하고, 기준범주와 상호작용항을 설계한다. 고유값 분해는 다중공선성을 진단하는 데 쓸 수 있다. 반응변수는 MNL에서는 명목형이어야 하고, OL에서는 엄격한 순서형이어야 한다. 범주 불균형이 있으면 가중치 또는 샘플링 전략을 병행한다.

MLE 기반의 수치최적화에는 BFGS, L-BFGS, 뉴턴-Raphson을 적용할 수 있다. 완전분리를 완화하려면 L2 페널티나 약한 정규화를 고려한다. 대규모 데이터에서는 미니배치 확률적 경사하강(SGD) 또는 분산추정을 활용하며, 수렴 기준과 최대 반복 횟수를 관리한다.

MNL에서는 HAUSMAN–McFADDEN과 Small–Hsiao를 통해 IIA 가정을 검토한다. 위반 시에는 Nested Logit이나 Mixed Logit이 대안이 될 수 있다. OL에서는 Brant test로 비례오즈 가정을 확인하고, 위반 시 부분비례오즈 모형을 고려한다. 절편 임계값의 순서 제약도 확인 대상이다.

공통적으로 DFBETAs를 통한 영향점, 완전·준분리, 과도한 레버리지, 예측보정(calibration)을 점검한다. 평가는 로그우도, AIC/BIC, 다중클래스 로그손실, 평균정확도, Top-k 정확도, Brier score, AUROC(이진·쌍대비교)를 사용할 수 있다. 교차검증과 시계열 분할(누적학습)을 적용하고, 해석가능성·안정성·추정비용도 운영 기준으로 함께 평가한다.

명목형과 순서형을 가르는 추정 흐름

명목형순서형완전분리IIA 위반PO 위반데이터 입력- 반응: 명목/순서형- 설명: 수치/범주전처리- 결측/이상치- 인코딩/스케일링- 클래스 정의모형 선택MNL 추정- 기준범주 지정- IIA 진단OL 추정- 임계값 추정- PO 진단적합도 평가- LogLoss/AIC/BIC- CV 검증진단/에러 핸들링정규화/특징 축소Nested/Mixed Logit 고려부분비례오즈 모형배포- 스케일링/버전운영 모니터링- 드리프트/PSI- 재학습 트리거

모형별 적용 조건과 제약

구분 Binary Logit Multinomial Logit Ordered Logit
성능(문제적합) 이진 사건 다중 명목 범주 순서형 범주
확장성(파라미터/복잡도) 낮음 높음(범주×특징) 중간(임계값+계수 공유)
일관성(가정) 로짓 링크 IIA 필요 비례오즈 필요
안정성(수렴/분리) 분리 취약 분리/희소범주 취약 임계값 순서 제약 필요
운영 편의(해석/배포) 높음 중간 중간~높음(PO 충족 시)

선택 확률을 정책 판단으로 연결하는 경우

MNL은 신규 고객의 유입 채널 선택 확률을 예측하고 캠페인 예산을 배분하는 데 사용할 수 있다. 프로모션, 가격, 지역 효과를 추정하는 방식이다. 통근자의 자동차, 버스, 지하철, 공유모빌리티 선택을 예측하고 요금·소요시간 탄력성을 도출하는 교통 수단 선택 모형에도 적용된다.

OL은 PD 점수대 기반의 신용등급 밴드나 리스크 티어에 사용할 수 있다. 설명변수 효과의 일관성을 유지하면서 컷오프 정책과 연동한다. 1~5점 고객 만족도나 설문 리커트 응답에서는 상위·하위 카테고리의 누적오즈를 해석할 수 있다. 경증에서 중증까지 이어지는 의료 중증도 분류에서는 단계별 위험도 예측을 통해 병상 배정과 트리아지 정책을 지원한다.

베이스라인 원-대-나머지 로지스틱과 비교하면 데이터 특성에 따라 로그손실/크로스엔트로피가 515% 상대 개선될 수 있다. 범주 수≥4를 가정한 MNL 적용에서는 교차검증 기준 Top-2 정확도가 38%p 향상될 수 있다. 정규화와 비례오즈 제약은 파라미터 분산을 줄여 과적합을 낮추고 재현성을 높인다.

오즈비와 한계효과를 이용하면 정책·운영 의사결정에 연결할 수 있는 해석성을 확보할 수 있다. IIA와 PO 위반은 대안 모형 전환 기준이 되어 오류 원인 추적을 돕고, 데이터 거버넌스 및 모니터링 체계와 결합하면 운영 안정성을 높일 수 있다.

배포 전에 고정해야 할 대상

반응변수가 명목형인지 순서형인지 명확히 하고, 범주 수와 분포를 확인한다. 특징공학 단계에서는 상호작용과 비선형(스플라인/버킷팅)을 설계하며, 특히 경사기반 최적화에서는 스케일링 전략을 정한다.

명목형 모형은 기준범주, 순서형 모형은 임계값 초기화 전략을 정한 뒤 정규화 강도를 튜닝한다. IIA 탈락검정, Brant test, 완전·준분리 검출 결과에 따라 완화 방법이나 대안 모형을 선택한다.

배포 시에는 전처리 파이프라인, 범주 사전, 임계값을 포함한 스코어링 아티팩트를 고정한다. 미등록 범주와 결측 입력을 검증하고, PSI와 WOE 분포 같은 드리프트 지표를 추적하며 재학습 SLA를 정의한다.

Python으로 재현하는 MNL과 OL

전제조건: Python 3.10+, pandas>=1.5, statsmodels>=0.13

# Multinomial Logit 예시
import numpy as np, pandas as pd
import statsmodels.api as sm

np.random.seed(42)
n = 2000
X1 = np.random.normal(size=n)
X2 = np.random.binomial(1, 0.4, size=n)
# 진짜 계수 설정
beta = {
    'B': np.array([0.5,  1.0, -0.5]),   # [intercept, X1, X2]
    'C': np.array([-0.2, -0.8,  0.7]),
}
# 범주 A를 기준으로 생성
X = np.column_stack([np.ones(n), X1, X2])
lin_B = X @ beta['B']
lin_C = X @ beta['C']
# 소프트맥스 확률
expA = np.ones(n)
expB = np.exp(lin_B)
expC = np.exp(lin_C)
probs = np.column_stack([expA, expB, expC]) / (expA + expB + expC)[:, None]
y = np.array(['A','B','C'])[ [np.random.choice(3, p=p) for p in probs] ]

df = pd.DataFrame({'y': y, 'X1': X1, 'X2': X2})
df = pd.get_dummies(df, columns=[], drop_first=False)  # placeholder

y_codes = pd.Categorical(df['y'])
X_design = sm.add_constant(df[['X1','X2']])
model = sm.MNLogit(y_codes, X_design)
res = model.fit(method='newton', maxiter=100, disp=False)
print(res.summary())
print("Pred probs(head):\n", res.predict(X_design.head()))
# Ordered Logit 예시
import numpy as np, pandas as pd
import statsmodels.api as sm
from statsmodels.miscmodels.ordinal_model import OrderedModel

np.random.seed(7)
n = 1500
X1 = np.random.normal(size=n)
X2 = np.random.normal(size=n)
# 잠재변수 생성
z = 0.8*X1 - 0.6*X2 + np.random.logistic(size=n)
# 임계값
cuts = [-0.5, 0.7, 1.6]  # 4개 등급
y = np.digitize(z, cuts)  # 0~3
df = pd.DataFrame({'y': y, 'X1': X1, 'X2': X2})

mod = OrderedModel(df['y'], sm.add_constant(df[['X1','X2']]),
                   distr='logit')
res = mod.fit(method='bfgs', maxiter=200, disp=False)
print(res.summary())

# 누적오즈 비례 가정 점검(간단 검토): 부분모형과의 계수 비교 등
pred = res.get_prediction().predicted_probabilities[:5]
print("Pred probs(head):\n", pred)

완전분리 경고가 발생하면 L2 정규화(패널티 항)를 지원하는 모델을 사용하거나 특징 축소와 범주 병합을 적용한다. IIA 위반이 심각하면 대안군 구조를 반영하는 Nested Logit이나 무작위계수를 쓰는 Mixed Logit을 고려한다. PO 위반 시에는 변수별로 다른 오즈비를 허용하는 부분비례오즈 모형으로 전환한다.

MNL은 명목형, OL은 순서형 문제에 우선 적용한다. 모형 선택 뒤에는 IIA와 PO 검정 결과를 바탕으로 대안을 판단하고, 정규화·고정된 전처리 파이프라인·모니터링 체계를 통해 운영 안정성을 관리한다. 오즈비와 한계효과는 KPI로 변환해 의사결정에 활용할 수 있다.

범주형 데이터 분석다중 로지트순서형 로지트통계 모델링선택 확률