본문으로 건너뛰기

041 회귀 문제의 이해

키워드: 회귀, 개념

개요

회귀(Regression)는 연속적인 수치를 예측하는 지도 학습 문제입니다. 분류가 카테고리를 예측한다면, 회귀는 숫자를 예측합니다.

실습 환경

  • Python 버전: 3.11 권장
  • 필요 패키지: pycaret[full]>=3.0

회귀 vs 분류

구분회귀분류
타겟 유형연속형 (수치)범주형 (카테고리)
출력 예시25.5, 1000000, 3.14"스팸", 0, 1
평가 지표MAE, RMSE, R²Accuracy, F1, AUC
예시가격 예측, 매출 예측이탈 예측, 질병 진단

회귀 문제 예시

from pycaret.regression import *
from pycaret.datasets import get_data

# 041 보스턴 주택 가격 데이터
data = get_data('boston')
print(f"타겟 변수: medv (주택 가격)")
print(f"타겟 통계:\n{data['medv'].describe()}")

회귀 문제 유형

1. 단순 회귀

하나의 특성으로 예측:

y = ax + b

2. 다중 회귀

여러 특성으로 예측:

y = a₁x₁ + a₂x₂ + ... + aₙxₙ + b

3. 다항 회귀

비선형 관계 모델링:

y = ax² + bx + c

PyCaret 회귀 모듈

from pycaret.regression import *
from pycaret.datasets import get_data

# 041 데이터 로드
data = get_data('boston')

# 041 환경 설정
reg = setup(data, target='medv', session_id=42)

# 041 모델 비교
best = compare_models()

# 041 모델 생성
model = create_model('rf')

# 041 예측
predictions = predict_model(model)

분류 vs 회귀 워크플로우 비교

# 041 분류
from pycaret.classification import *
clf = setup(data, target='class')
model = create_model('rf')

# 041 회귀
from pycaret.regression import *
reg = setup(data, target='price')
model = create_model('rf')

# 041 함수 이름은 동일, 내부 동작만 다름!

회귀에서 주의할 점

1. 이상치 (Outliers)

import matplotlib.pyplot as plt

# 041 타겟 변수 분포 확인
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1)
data['medv'].hist(bins=30)
plt.title('Target Distribution')

plt.subplot(1, 2, 2)
data.boxplot(column='medv')
plt.title('Target Boxplot')

plt.tight_layout()
plt.savefig('target_distribution.png', dpi=150)

2. 타겟 분포

# 041 정규 분포에서 벗어나면 변환 고려
from scipy import stats

# 041 왜도 확인
skewness = stats.skew(data['medv'])
print(f"왜도: {skewness:.2f}")

# 041 왜도가 크면 로그 변환 고려
# 041 setup(data, target='medv', transform_target=True)

3. 다중공선성

특성 간 높은 상관관계:

import seaborn as sns
import matplotlib.pyplot as plt

# 041 상관관계 매트릭스
plt.figure(figsize=(12, 10))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm', center=0)
plt.title('Feature Correlation Matrix')
plt.tight_layout()
plt.savefig('correlation_matrix.png', dpi=150)

언제 회귀를 사용하나?

  • 가격 예측: 주택, 자동차, 상품 가격
  • 수요 예측: 판매량, 방문자 수
  • 시간 예측: 배송 시간, 대기 시간
  • 측정값 예측: 온도, 습도, 에너지 소비
  • 금융 예측: 매출, 비용, 수익

PyCaret 회귀 지원 알고리즘

from pycaret.regression import *

# 041 주요 알고리즘 약어
algorithms = {
'lr': 'Linear Regression',
'lasso': 'Lasso Regression',
'ridge': 'Ridge Regression',
'en': 'Elastic Net',
'br': 'Bayesian Ridge',
'dt': 'Decision Tree',
'rf': 'Random Forest',
'et': 'Extra Trees',
'gbr': 'Gradient Boosting',
'xgboost': 'XGBoost',
'lightgbm': 'LightGBM',
'catboost': 'CatBoost',
'knn': 'K Neighbors',
'svm': 'Support Vector',
'mlp': 'MLP Regressor'
}

for abbr, name in algorithms.items():
print(f"{abbr:10}{name}")

회귀 기본 예제

from pycaret.regression import *
from pycaret.datasets import get_data

# 1. 데이터 로드
data = get_data('boston')

# 2. 환경 설정
reg = setup(data, target='medv', session_id=42, verbose=False)

# 3. 모델 비교
print("=== 모델 비교 ===")
best = compare_models(n_select=3)

# 4. 최고 모델 튜닝
print("\n=== 모델 튜닝 ===")
tuned = tune_model(best[0])

# 5. 최종화 및 저장
final = finalize_model(tuned)
save_model(final, 'boston_model')

정리

  • 회귀는 연속적인 수치를 예측하는 문제
  • 분류와 동일한 워크플로우 (setup → compare → tune → finalize)
  • 평가 지표가 다름 (MAE, RMSE, R²)
  • 이상치, 타겟 분포, 다중공선성 주의
  • PyCaret은 15개 이상의 회귀 알고리즘 지원

다음 글 예고

다음 글에서는 회귀 첫 번째 예제 - 주택 가격 예측을 다룹니다.


PyCaret 머신러닝 마스터 시리즈 #041