정의
다항식 회귀(Polynomial Regression)는 독립 변수와 종속 변수 사이의 관계를 다항식 형태의 함수로 모델링하는 회귀 분석 방법이다. 선형 회귀가 입력 변수와 출력 변수 사이의 관계를 일차식으로 가정하는 반면, 다항식 회귀는 2차, 3차 등 고차 다항식을 사용해 비선형 패턴을 포착한다. 모델 자체는 선형(선형 가중치) 형태이지만, 입력 변수의 차수를 늘려 비선형 특성을 반영한다.
수학적 형태
$ \mathbf{x} = (x_1, x_2, \dots, x_p) $ 를 p 차원 입력이라 할 때, 차수 d(≥1) 의 다항식 회귀 모델은 다음과 같이 표현된다.
$$ \hat{y} = \beta_0 + \sum_{i=1}^{p}\sum_{k=1}^{d} \beta_{i,k} , x_i^{k} + \sum_{1\le i<j\le p}\sum_{k=1}^{d}\sum_{l=1}^{d} \beta_{i,j,k,l}, x_i^{k}x_j^{l} + \dots $$
실제 구현에서는 차수 d 를 정한 뒤, 원본 변수들을 다항식 특징(예: $x, x^2, x^3, \dots$) 으로 변환한 뒤 일반 선형 회귀(최소제곱법, Lasso, Ridge 등)를 적용한다. 이렇게 하면 최적화 문제는 여전히 선형이며, 고차 다항식이 제공하는 비선형성을 학습할 수 있다.
알고리즘 흐름
- 데이터 전처리
- 결측값 처리, 정규화/표준화(특히 고차항이 큰 값으로 폭발하는 것을 방지).
- 특징 변환
PolynomialFeatures(예: scikit-learn) 등으로 입력을 차수 d 로 확장.
- 모델 선택
- 최소제곱법(Ordinary Least Squares) → 과적합 방지를 위해 Ridge, Lasso 등 정규화 기법 적용.
- 학습
- 확장된 특징 행렬 $X_{\text{poly}}$와 타깃 $y$에 대해 가중치 $\beta$를 최적화.
- 평가
- 교차 검증, 학습/검증 곡선, AIC/BIC 등 모델 복잡도 지표 활용.
- 예측 및 해석
- 학습된 다항식 형태를 이용해 새로운 입력에 대한 예측값 산출.
장점
- 비선형 관계 포착 : 복잡한 곡선 형태를 간단히 모델링 가능.
- 선형 최적화 이용 : 학습이 비교적 빠르고 구현이 직관적.
- 해석 가능성 : 각 항의 계수를 직접 확인해 변수 간 상호작용을 해석할 수 있음.
단점
- 차수 선택의 어려움 : 차수가 높을수록 과적합 위험이 급증함.
- 특징 차원의 폭발 : 다변량 데이터에 고차 다항식을 적용하면 특징 수가 기하급수적으로 증가, 메모리와 계산량이 크게 늘어남.
- 외삽 성능 저하 : 학습 범위 밖의 입력에 대해 예측이 불안정할 수 있음.
적용 사례
| 분야 | 구체적 예시 |
|---|---|
| 환경 과학 | 온도·습도·풍속 등 기상 변수와 대기 오염 물질 농도의 비선형 관계 모델링 |
| 경제학 | GDP 성장률과 소비자 지출 사이의 곡선 형태 분석 |
| 공학 | 재료의 응력–변형률 곡선, 전력 소비와 부하의 비선형 관계 |
| 의료 | 연령·혈압·콜레스테롤 등과 질병 발생 위험도의 비선형 연관성 |
| 컴퓨터 비전 | 이미지 밝기와 색 공간 변환 시 보정 곡선 피팅 |
관련 기법
- 다항 커널 지원 벡터 회귀(SVR) : 커널 트릭을 이용해 다항식 특징을 암묵적으로 적용.
- Generalized Additive Models (GAM) : 각 변수에 개별 스플라인/다항식을 적용해 비선형성을 표현.
- 다항 로지스틱 회귀 : 분류 문제에 다항식 변환을 적용한 로지스틱 회귀.
구현 예시 (Python / scikit-learn)
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import cross_val_score
# 1. 데이터 준비
X = np.linspace(-3, 3, 100).reshape(-1, 1)
y = 0.5 * X3 - X2 + 2 * X + np.random.randn(*X.shape) * 3
# 2. 파이프라인: 다항식 변환 + Ridge 회귀
degree = 3
model = make_pipeline(PolynomialFeatures(degree, include_bias=False),
Ridge(alpha=1.0))
# 3. 교차 검증
scores = cross_val_score(model, X, y, cv=5, scoring='neg_mean_squared_error')
print("MSE:", -scores.mean())
학습 시 주의점
- 정규화: 입력 변수의 스케일을 맞추지 않으면 고차항이 매우 큰 값이 되어 수치 불안정이 발생한다.
- 차수 선택: 교차 검증이나 정보 기준(AIC, BIC)을 활용해 최적 차수를 선택한다.
- 특징 선택: 불필요한 고차 상호작용을 제거하기 위해 L1 정규화(Lasso) 또는 단계별 회귀(stepwise) 기법을 적용한다.
참고문헌
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning. 2nd ed. Springer. – 다항식 회귀와 정규화 기법에 대한 상세 설명.
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. – 비선형 회귀와 커널 방법.
- Friedman, J. H. (1991). Multivariate Adaptive Regression Splines. Annals of Statistics. – 다항식과 스플라인을 결합한 GAM과의 비교.
- scikit-learn developers. (2023). scikit-learn: Machine Learning in Python. URL: https://scikit-learn.org
다항식 회귀는 선형 회귀의 확장 형태로, 적절한 차수 선택과 정규화를 통해 비선형 데이터를 효과적으로 모델링할 수 있는 기본적이면서도 실용적인 통계·기계 학습 기법이다.