반응형

1. 선형회귀와 데이터 분포의 관계
선형회귀 모델은 기본적으로 피처(독립변수)와 타겟값(종속변수) 사이에 선형 관계가 존재한다는 가정을 전제로 합니다.
또한 모델이 안정적으로 학습되기 위해서는 피처와 타겟값의 분포 형태가 매우 중요합니다.
일반적으로 선형회귀 모델은 다음과 같은 데이터 특성을 선호합니다.
- 타겟값이 정규분포(또는 정규분포에 가까운 형태)
- 피처 값들이 스케일이 유사하고 왜도가 크지 않은 상태
- 극단적으로 큰 값이나 심한 치우침(Skewness)이 없는 데이터
이러한 조건을 만족시키기 위해 **데이터 변환(Data Transformation)**을 수행합니다.
2. 선형회귀에서 자주 사용되는 데이터 변환 유형
2.1 타겟 값 변환 (Target Transformation)
- 타겟값은 정규분포 형태를 가장 선호
- 분포가 한쪽으로 치우쳐 있는 경우(오른쪽 꼬리가 긴 경우)
→ 로그 변환(Log Transformation) 적용 - 예: 주택 가격, 매출, 거래 금액 등
2.2 피처 값 변환 – 스케일링(Scaling)
피처들의 단위와 범위가 제각각이면 회귀계수 학습이 불안정해질 수 있습니다.
대표적인 스케일링 기법
- StandardScaler
- 평균 0, 표준편차 1인 표준 정규분포로 변환
- MinMaxScaler
- 최소값 0, 최대값 1로 변환
2.3 피처 값 변환 – 다항 특성 변환 (Polynomial Features)
- 기존 단항 피처를 2차, 3차 항으로 확장
- 비선형 관계를 선형회귀로 표현 가능
- 피처 수가 급격히 증가 → 과적합 위험
2.4 피처 값 변환 – 로그 변환 (Log Transformation)
- 왜도(Skewness)가 심한 피처에 적용
- 값의 분포를 완만하게 만들어 모델 안정성 향상
- 실무에서 가장 자주 사용되는 변환 방식 중 하나
3. 데이터 변환 함수 구현
아래 함수는 스케일링 + 다항 특성 변환을 하나의 함수로 처리하기 위한 유틸리티 함수입니다.
from sklearn.preprocessing import StandardScaler, MinMaxScaler, PolynomialFeatures
import numpy as np
def get_scaled_data(method='None', p_degree=None, input_data=None):
"""
[목적]
- 다양한 데이터 변환 방식을 하나의 함수로 통합
- 스케일링, 로그 변환, 다항 특성 변환을 유연하게 적용
[파라미터]
- method : 변환 방식 ('Standard', 'MinMax', 'Log', None)
- p_degree : 다항 특성 차수 (None이면 적용 안 함)
- input_data : 변환할 원본 피처 데이터
"""
# 1️⃣ 스케일링 또는 로그 변환
if method == 'Standard':
# 평균 0, 표준편차 1로 변환
scaled_data = StandardScaler().fit_transform(input_data)
elif method == 'MinMax':
# 최소값 0, 최대값 1로 변환
scaled_data = MinMaxScaler().fit_transform(input_data)
elif method == 'Log':
# 로그 변환 (0 값 처리를 위해 log1p 사용)
scaled_data = np.log1p(input_data)
else:
# 변환하지 않고 원본 데이터 그대로 사용
scaled_data = input_data
# 2️⃣ 다항 특성 변환 (선택 사항)
if p_degree is not None:
scaled_data = PolynomialFeatures(
degree=p_degree,
include_bias=False
).fit_transform(scaled_data)
return scaled_data
4. 데이터 변환 방식별 Ridge 회귀 성능 비교 실험
이제 다양한 데이터 변환 방식에 대해
**Ridge 회귀(alpha 변화)**가 성능(RMSE)에 어떤 영향을 미치는지 비교합니다.
4.1 실험 설정
# Ridge 규제 강도(alpha) 후보
alphas = [0.1, 1, 10, 100]
# (스케일링 방식, 다항 차수)
scale_methods = [
(None, None), # 원본 데이터
('Standard', None), # 표준 정규화
('Standard', 2), # 표준 정규화 + 다항식
('MinMax', None), # MinMax 정규화
('MinMax', 2), # MinMax 정규화 + 다항식
('Log', None) # 로그 변환
]
# 각 변환 방식별 Ridge 회귀 성능 평가
for scale_method in scale_methods:
X_data_scaled = get_scaled_data(
method=scale_method[0],
p_degree=scale_method[1],
input_data=X_data
)
print('\n## 변환 유형:{0}, Polynomial Degree:{1}'.format(
scale_method[0], scale_method[1])
)
get_linear_reg_eval(
'Ridge',
params=alphas,
X_data_n=X_data_scaled,
y_target_n=y_target,
verbose=False,
return_coeff=False
)
5. 실험 결과 해석

5.1 주요 결과 요약
- 원본 데이터
- alpha 증가 → RMSE 감소
- 기본적인 Ridge 효과 확인
- StandardScaler 단독
- 성능 큰 개선 없음
- StandardScaler + 다항식
- alpha가 충분히 클 때 성능 개선
- 규제 없으면 과적합 위험
- MinMaxScaler + 다항식
- 특정 alpha(≈1)에서 매우 우수한 성능
- 스케일 + 비선형 관계 반영 효과
- 로그 변환
- 전반적으로 가장 안정적이고 낮은 RMSE
- 왜도 제거 효과가 큼
📌 로그 변환이 가장 일관되게 좋은 성능을 보임
6. 실무 관점 정리
- 선형회귀 성능은 모델보다 데이터 변환의 영향이 더 클 수 있음
- 무조건 다항식을 쓰는 것은 위험
- 로그 변환 + 규제(Ridge/Lasso) 조합은 실무에서 매우 강력
- 항상 교차검증 기반 평가(RMSE, R²) 필수
반응형
'Programming' 카테고리의 다른 글
| Bike Demand 예측 프로젝트 : 회귀 기반 수요 예측 실전 프로젝트 정리 (0) | 2026.01.09 |
|---|---|
| 로지스틱 회귀와 회귀 트리 기반 모델 이해 (0) | 2026.01.05 |
| Lasso 회귀와 ElasticNet 회귀 이해 및 실습 (1) | 2026.01.05 |
| 규제 선형회귀(Regularized Linear Regression)와 Ridge 회귀 실습 (1) | 2026.01.05 |
| 다항 회귀를 이용한 과소적합과 과적합 이해 (0) | 2026.01.05 |