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