Skip to Content

선형회귀

1. 선형 회귀 분석 개념

(1) 단순 선형 회귀(Simple Linear Regression)

  • *선형 회귀(Linear Regression)**는 연속형 종속변수를 예측하기 위한 가장 기본적이고 널리 알려진 통계/머신러닝 기법입니다. 단순 선형 회귀는 하나의 독립변수 가 결과 변수 에 미치는 영향을 직선의 형태로 모델링합니다. xx yy
y=β0+β1x+ϵy = \beta_0 + \beta_1 x + \epsilon
  • β0\beta_0: 절편(intercept)
  • β1\beta_1: 회귀계수(독립변수 가 1 증가할 때 결과 가 얼마나 변하는지) xx yy
  • ϵ\epsilon: 오차항(모형으로 설명되지 않는 부분) 데이터 (xi,yi)(x_i, y_i)가 주어졌을 때, **최소제곱법(OLS, Ordinary Least Squares)**으로 β0,β1\beta_0, \beta_1를 추정합니다. 즉, 예측값(y^i\hat{y}_i)과 실제값(yiy_i)의 **제곱오차합(SSE)**를 최소화하는 β\beta를 찾습니다.
minβ0,β1i=1n(yiy^i)2wherey^i=β0+β1xi\min_{\beta_0, \beta_1} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \quad \text{where} \quad \hat{y}_i = \beta_0 + \beta_1 x_i

(2) 다중 선형 회귀(Multiple Linear Regression)

현실적인 비즈니스 문제에서는 결과 변수가 단 하나의 독립변수에만 영향을 받는 경우는 드뭅니다. 다중 선형 회귀는 여러 개의 독립변수를 선형 결합 형태로 모형화합니다.

y=β0+β1x1+β2x2++βkxk+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_k x_k + \epsilon
  • x1,x2,…,xkx_1, x_2, \ldots, x_k는 여러 특성(Feature)을 나타냅니다.
  • β1,β2,…,βk\beta_1, \beta_2, \ldots, \beta_k는 각 특성이 에 미치는 영향을 나타내는 회귀계수입니다. yy 이 역시 최소제곱법이나 최대우도추정(MLE) 등을 통해 계수를 추정합니다. 여러 특성이 있을 때는 단순 선형 회귀보다 해석이 복잡해질 수 있지만, 실제 예측 정확도는 일반적으로 더 높아집니다.

(3) 선형 회귀의 주요 가정

선형 회귀 모델이 제대로 작동하려면 몇 가지 통계적 가정을 어느 정도 충족해야 합니다.

  1. 선형성(Linearity): 독립변수와 종속변수 사이의 관계가 선형적이라고 가정합니다.
  2. 독립성(Independence): 관측치(표본) 간 오차항은 서로 독립이어야 합니다.
  3. 등분산성(Homoscedasticity): 오차항의 분산이 독립변수의 값과 무관하게 일정해야 합니다.
  4. 정규성(Normality): 오차항이 정규분포를 따른다고 가정합니다. (표본 크기가 충분히 크면 중심극한정리에 의해 크게 문제되지 않을 수 있음)
  5. 다중공선성(Multicollinearity): 독립변수 간 상관관계가 너무 높으면 안 됩니다. 실무에서는 이 가정들을 완벽히 충족하기 어렵습니다. 그러나 선형성/등분산성/다중공선성 등을 사전에 점검하고, 필요할 경우 변환(로그 변환 등)이나 변수 선택으로 개선할 수 있습니다.

2. 비즈니스 활용 사례

선형 회귀는 숫자형 결과를 예측해야 할 때 매우 유용합니다. 예를 들어:

  1. 매출 예측(Sales Forecast)
  • 마케팅 지출, 광고 노출, 계절성, 경기지표 등을 독립변수로 두고, 향후 매출(연속형)을 예측합니다.
  • 경영진은 예측 결과를 바탕으로 마케팅 예산, 재고 등을 계획할 수 있습니다.
  1. 주택 가격 예측(House Price Prediction)
  • 주택 면적, 방 개수, 위치(지역), 건축 연도 등 특성을 독립변수로 하고, 실제 거래가를 종속변수로 하여 모델을 구축합니다.
  • 부동산 분야에서 시세 추정이나 매물 가격 평가에 널리 쓰입니다.
  1. 비용 분석(Cost Analysis)
  • 제조 공정에서 원자재 비용, 인건비, 생산량 등과 최종 제품의 단가를 회귀 모델로 연결해보면, 어떤 요인으로 비용이 많이 오르는지 파악하고 프로세스 개선에 활용할 수 있습니다.
  1. 성능 지표 예측
  • 인사관리(HR)에서 직원 근무시간, 교육 횟수, 만족도 등을 독립변수로 두고, 성과지표(연간 실적 등)를 예측하여 인력 계획과 보상 정책 수립에 참고하기도 합니다.

3. Python 실습 코드 (Kaggle 데이터셋 활용)

실습에서는 Kaggle의 주택 가격 예측(House Prices: Advanced Regression Techniques) 데이터를 사용해보겠습니다. 이 데이터셋에는 약 1,460건의 주택 거래 정보와 각 주택의 판매가격(SalePrice)이 포함되어 있습니다. 독립변수로는 OverallQual(건물 전반적 상태), GrLivArea(거주 면적), GarageCars(차고 수용 차량대수), 위치 정보 등 다수가 있습니다.

데이터 다운로드: House Prices: Advanced Regression Techniques에서 train.csv를 다운로드 받은 뒤, 작업 디렉토리에 둡니다.

아래 코드는 핵심적인 단계만 간략히 소개합니다.

import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 1. 데이터 불러오기 df = pd.read_csv('train.csv') print(df.shape) # (1460, 81) print(df.columns) # 80개 특성 + 1개 종속변수 print(df[['OverallQual', 'GrLivArea', 'SalePrice']].head(5)) # 2. EDA(탐색적 데이터 분석) & 결측값 처리 # 결측값이 있는 컬럼 찾기 missing_count = df.isnull().sum().sort_values(ascending=False) missing_cols = missing_count[missing_count > 0] print("결측값이 있는 컬럼:", missing_cols) # 여기서는 예시로, 결측이 많은 컬럼은 제외하거나, 임의값으로 대체 df = df.drop(['PoolQC','MiscFeature','Alley'], axis=1) # 결측 지나치게 많다고 가정 df.fillna(df.mean(), inplace=True) # 간단히 수치형 결측은 평균 대체 (예시) # 3. 범주형 변수 인코딩 # 예: 'Neighborhood' 등 범주형 컬럼 -> 원핫인코딩 df = pd.get_dummies(df, drop_first=True) # 4. 독립변수(X), 종속변수(y) 나누기 y = df['SalePrice'] # 주택 판매가 X = df.drop('SalePrice', axis=1) # 5. 학습/테스트 세트 분할 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 6. 선형회귀 모델 학습 from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train) # 7. 예측 및 평가 y_pred = model.predict(X_test) # MSE(평균제곱오차), RMSE(평균제곱근오차), MAE(평균절댓값오차), R2(결정계수) 등 from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) mae = mean_absolute_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"MSE: {mse:.2f}") print(f"RMSE: {rmse:.2f}") print(f"MAE: {mae:.2f}") print(f"R^2 (결정계수): {r2:.3f}")

(1) 전처리 & EDA

  • 결측값이 많거나 의미가 모호한 컬럼을 제거하거나 적절히 대체(imputation)합니다.
  • 범주형 변수는 원-핫 인코딩(pd.get_dummies) 등으로 변환해야 선형 회귀 모델이 다룰 수 있습니다.
  • 이상값(Outlier) 체크, 스케일링(표준화) 여부 검토 등을 통해 예측 성능을 높일 수 있습니다.

(2) 모델 학습과 평가

  • LinearRegression은 OLS(최소제곱법)으로 계수를 추정합니다.
  • 예측 정확도 평가는 분류와 달리 오차 기반 지표(MSE, RMSE, MAE 등)를 주로 사용하며, 모델의 설명력은 **결정계수 *로 측정합니다. R2R^2
  • 예시 출력 예)

이는 RMSE가 약 $38,000 수준이고, 모델이 약 82% 정도의 분산을 설명한다는 의미(해석 예시)입니다.

MSE: 1.48e+09 RMSE: 38475.12 MAE: 21456.78 R^2: 0.823

(3) 계수 해석

선형 회귀 모델은 회귀계수를 통해 각 독립변수가 종속변수에 미치는 영향을 직관적으로 파악할 수 있습니다.

# 회귀계수 확인 coefs = pd.Series(model.coef_, index=X_train.columns).sort_values(key=abs, ascending=False) print("회귀계수 (절댓값 기준 상위):\n", coefs.head(10))
  • 예컨대 OverallQual(건물 전반 품질)이 양의 큰 계수를 가진다면, 건물 품질이 좋아질수록 주택 가격이 크게 상승한다는 의미입니다.
  • 음수 계수를 가진 변수는 값이 커질수록 주택 가격을 낮추는 방향으로 영향을 주게 됩니다 (예: 어떤 노후 관련 특성).
  • 다만, 다중공선성이 있거나 단위가 다른 변수들이 섞여 있으면 계수 해석이 까다로울 수 있습니다.

4. 실전 응용 및 개선 방법

(1) 정규화(Regularization): Ridge, Lasso

선형 회귀는 종종 오버피팅 문제에 직면하기도 합니다. 많은 특성이 있을 때, 일부 계수가 지나치게 커져서 일반화 성능이 떨어질 수 있습니다. 이를 완화하기 위해 정규화(Regularization)를 사용합니다.

  1. Ridge(릿지 회귀): L2 페널티 를 추가해, 모든 계수를 적당히 작게 만듦
λβj2\lambda \sum \beta_j^2
  1. Lasso(라소 회귀): L1 페널티 를 추가해, 일부 계수를 0으로 만들어 특성 선택 효과도 있음
λβj\lambda \sum |\beta_j|

예시:

from sklearn.linear_model import Ridge, Lasso ridge = Ridge(alpha=10.0) ridge.fit(X_train, y_train) lasso = Lasso(alpha=0.001) lasso.fit(X_train, y_train)

alpha가 클수록 규제가 세집니다. 적절한 alpha를 찾기 위해 GridSearchCV교차검증을 함께 사용하는 것이 좋습니다.

(2) 변수 변환(Feature Engineering) & 다항 회귀

  • 로그 변환: 종속변수 또는 특정 독립변수가 오른쪽으로 크게 꼬리가 긴 분포(오른쪽 스키유)를 가질 때 로그 변환하면 분산 안정화선형성 향상에 도움이 됩니다. 예: SalePrice를 로 변환하여 예측하면 더 좋은 성능을 낼 수 있음.
log(SalePrice)\log(\text{SalePrice})
  • 다항 특성(Polynomial Features): 비선형적 관계가 있을 수 있으므로, 등 다항 항을 추가해 선형 모델로도 곡선 형태를 어느 정도 표현할 수 있습니다.
x,x2,x3x, x^2, x^3
  • 상호작용 항(Interaction): 두 변수 간 곱을 추가해 상호작용 효과를 모델링할 수 있습니다.
x1×x2x_1 \times x_2

(3) 다중 공선성(Multicollinearity) 해결

  • 독립변수 간 상관관계가 매우 높으면 **VIF(Variance Inflation Factor)**를 계산해보고, 문제가 되는 변수를 제거하거나 **차원 축소(PCA)**를 고려할 수 있습니다.
  • Lasso나 Ridge처럼 정규화를 통해 계수를 작게 만들어 공선성의 부정적 영향을 줄일 수도 있습니다.

(4) 모형 해석과 잔차 분석

  • *잔차(Residuals)**를 플롯으로 그려 등분산성선형성 가정을 시각적으로 확인할 수 있습니다. (잔차가 랜덤하게 분포해야 함)
  • QQ-Plot을 통해 잔차의 정규성도 대략 확인합니다.
  • 큰 잔차(outlier)의 존재 여부, 특정 패턴이 있는지 등을 살펴 모형 진단에 활용합니다.

5. 주의사항 및 한계

  1. 가정 위배: 선형 회귀가 절대적으로 지켜야 할 통계 가정(선형성, 등분산성 등)을 지나치게 어기면, 계수 해석추정의 신뢰성이 크게 떨어집니다.
  2. 이상값(Outlier) 민감도: 극단값이 있으면 회귀직선이 크게 흔들릴 수 있습니다(계수가 왜곡). 이상값이 많을 경우 robust regression 등을 고려합니다.
  3. 다중공선성: 독립변수 간 상관관계가 높은 경우, 회귀계수가 불안정해집니다. 정규화나 변수 선택으로 해결해야 합니다.
  4. 비선형 관계 한계: 선형 회귀 모델은 기본적으로 독립변수와 종속변수의 직선적 관계를 가정합니다. 데이터에 비선형 구조가 뚜렷하면 다른 기법(트리 기반 모델 등)을 고려하거나, 다항특성/상호작용으로 대응해야 합니다.
  5. 해석의 정확성: 계수가 양의라고 해서 반드시 인과관계가 있다고 단정할 수는 없습니다(상관관계 vs 인과관계). 외생 변수나 모델에 포함되지 않은 요인이 있을 수 있습니다.

마무리

  • *선형 회귀(Linear Regression)**는 통계와 머신러닝 모두에서 가장 기본적이면서도 강력한 예측 기법 중 하나입니다.
  • 장점:
    • 해석 용이 (회귀계수를 보고 각 변수의 영향 해석)
    • 구현 간단, 계산 효율적
    • 중소규모 데이터에서 빠르고 안정적
  • 단점:
    • 복잡한 비선형 패턴을 충분히 학습하지 못함
    • 이상값, 다중공선성 등에 취약
    • 가정(선형성, 등분산성 등)이 크게 어긋나면 성능 저하와 해석 어려움 그럼에도 불구하고 실무에서 회귀 모델을 처음 시도해볼 때 가장 손쉽고, 예측 결과를 비즈니스 의사결정에 바로 연결하기에도 좋습니다. 특히 매출 예측, 가격 추정, 비용 분석 등 수치 예측 문제에 광범위하게 적용할 수 있습니다.
  • 전처리 → 모델 구성 → 예측 및 검증 → 결과 해석 및 개선 의 단계를 숙지하시고, 필요하다면 정규화(Ridge, Lasso), 다항 변환 등을 활용해 성능과 안정성을 높이세요.
  • 궁극적으로 선형 회귀 모델의 장단점을 이해하고, **모델 진단(잔차 분석)**을 통해 모델의 적합성을 판단하는 습관을 들이면 더욱 견고한 분석 능력을 키울 수 있습니다. 선형 회귀 모델 구축 과정을 마스터하고 나면, 그다음에는 회귀 트리, 랜덤 포레스트 회귀, XGBoost 등 다양한 모델로 확장해볼 수 있습니다. 하지만 기초가 되는 선형 회귀를 제대로 이해하는 것은 데이터 분석가, 머신러닝 엔지니어로서 매우 중요한 기본기입니다. 이 포스팅을 토대로, 실제 Kaggle 데이터나 회사 내부 데이터를 직접 다뤄보며 실습해보시길 권장합니다.
  • Happy Analyzing & Modeling!