move84

머신러닝 기초 - 로지스틱 회귀를 이용한 이진 분류 본문

머신러닝

머신러닝 기초 - 로지스틱 회귀를 이용한 이진 분류

move84 2025. 2. 20. 22:11
반응형

📚 로지스틱 회귀의 기본 개념
로지스틱 회귀는 이진 분류 문제를 해결하기 위한 대표적인 통계 및 머신러닝 기법이다. 선형 회귀와는 달리, 결과값이 확률로 해석되는 시그모이드 함수를 사용해 0과 1 사이의 값을 출력한다. 이 확률값을 임계치(threshold)와 비교하여 두 개의 클래스 중 하나로 분류하는 방식이다. 로지스틱 회귀는 해석이 용이하고 계산 효율성이 높아, 의료 진단, 금융 리스크 평가, 스팸 메일 분류 등 다양한 분야에서 활용된다.


📈 수학적 배경과 모델의 원리
로지스틱 회귀는 선형 회귀와 유사하게 독립 변수와 가중치의 선형 결합을 기반으로 하되, 이를 시그모이드 함수에 통과시켜 확률 값을 얻는다. 모델 식은 다음과 같다.

[ p = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_n x_n)}} ]

여기서 ( p )는 클래스 1에 속할 확률을 의미한다. 예측 값 ( p )가 0.5 이상이면 클래스 1, 미만이면 클래스 0으로 분류하는 방식이다. 이 모델은 로그 오즈(log-odds)를 선형 함수로 변환하여 확률로 해석하는 특징을 가지고 있다. 손실 함수로는 주로 로지스틱 손실(logistic loss) 혹은 크로스 엔트로피(cross entropy)를 사용하며, 이를 최소화하는 방향으로 가중치를 업데이트한다.


🚀 로지스틱 회귀의 특징과 장단점
로지스틱 회귀의 가장 큰 장점은 모델의 결과를 확률로 해석할 수 있어 예측의 신뢰도를 판단하기 쉽다는 점이다. 또한, 변수 간의 관계가 선형이라고 가정하지만, 변수 변환이나 상호작용(term) 추가를 통해 보다 복잡한 패턴도 어느 정도 포착할 수 있다. 구현이 간단하고, 학습 과정이 비교적 빠르며, 해석이 명확해 실무에서 자주 사용된다.
반면, 로지스틱 회귀는 데이터가 선형적으로 구분되지 않을 경우 성능이 떨어질 수 있다. 또한, 이상치나 다중공선성(multicollinearity)에 취약할 수 있어, 사전에 데이터 전처리와 변수 선택이 중요하다.


💻 파이썬 코드 예제: 유방암 데이터셋을 활용한 이진 분류
다음 코드는 사이킷런(scikit-learn)에서 제공하는 유방암 데이터셋을 이용해 로지스틱 회귀 모델을 학습하고 평가하는 예제다. 이 데이터셋은 두 개의 클래스로 구성되어 있으며, 로지스틱 회귀를 통해 종양이 악성인지 양성인지를 분류한다.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, roc_curve, auc

# 유방암 데이터셋 불러오기
data = load_breast_cancer()
X = data.data
y = data.target

# 데이터셋 분할 (훈련 70%, 테스트 30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 로지스틱 회귀 모델 생성 및 학습
model = LogisticRegression(max_iter=10000, solver='lbfgs')
model.fit(X_train, y_train)

# 테스트 데이터에 대한 예측
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("정확도:", accuracy)

# 혼동 행렬 출력
cm = confusion_matrix(y_test, y_pred)
print("혼동 행렬:\n", cm)

# ROC 곡선 및 AUC 계산
y_prob = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_prob)
roc_auc = auc(fpr, tpr)
print("AUC:", roc_auc)

# ROC 곡선 시각화
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (AUC = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC 곡선')
plt.legend(loc="lower right")
plt.show()

이 코드는 데이터셋을 학습과 테스트로 분할한 후, 로지스틱 회귀 모델을 사용해 이진 분류 문제를 해결하는 과정을 보여준다. 정확도, 혼동 행렬, ROC 곡선, AUC 값 등을 통해 모델의 성능을 평가하며, ROC 곡선을 시각화하여 임계치에 따른 분류 성능을 한눈에 확인할 수 있다.


🔍 모델 평가와 성능 개선
로지스틱 회귀 모델의 평가 지표로는 정확도(accuracy)뿐만 아니라, 혼동 행렬, 정밀도(precision), 재현율(recall), F1 스코어 등이 있다. 특히 데이터의 클래스 불균형이 심할 경우에는 단순 정확도 외에도 정밀도와 재현율을 함께 고려해야 한다.
성능 개선을 위해 변수 선택, 정규화(regularization) 기법, 다중 공선성 문제 해결 등을 수행할 수 있다. L1 정규화(Lasso)나 L2 정규화(Ridge)를 적용하면 과적합을 줄이고, 모델의 일반화 성능을 높일 수 있다. 또한, 데이터 전처리 과정에서 이상치 제거나 특성 스케일링(Standardization)도 중요한 역할을 한다.


📊 실제 응용 사례와 전망
로지스틱 회귀는 의료 분야에서 질병 진단, 금융 분야에서 신용 평가, 스팸 필터링, 마케팅 분야에서 고객 이탈 예측 등 다양한 실생활 문제에 적용된다. 간단한 구조와 빠른 학습 속도 덕분에, 초기 모델 구축 및 베이스라인 성능 평가에 자주 활용된다.
향후 머신러닝 기법이 발전함에 따라 딥러닝과의 결합, 앙상블 기법과의 결합 등을 통해 보다 정교한 이진 분류 모델을 만들 수 있을 것으로 기대된다. 그럼에도 불구하고, 로지스틱 회귀는 그 간결성과 해석 용이성 덕분에 여전히 중요한 기법으로 자리잡고 있다.


📌 결론 및 향후 연구 방향
로지스틱 회귀는 이진 분류 문제를 해결하는 데 가장 기본적이고 강력한 모델 중 하나다. 모델의 출력이 확률로 해석되어 신뢰도 판단에 용이하며, 다양한 평가 지표를 통해 모델의 성능을 체계적으로 개선할 수 있다. 데이터 전처리와 정규화, 변수 선택 등의 보완 작업을 통해 성능을 한층 높일 수 있으며, 실무에서 여러 응용 사례로 그 효과가 입증되고 있다.
앞으로 로지스틱 회귀는 딥러닝 및 앙상블 기법과의 융합을 통해 더욱 발전할 것으로 예상되며, 특히 해석 가능한 모델을 선호하는 분야에서 계속해서 중요한 역할을 할 것이다.

#로지스틱회귀 #이진분류 #파이썬코드 #머신러닝기초

반응형