HOME
home
About
home

선형회귀분석(단순/다중)

선형회귀분석은 **연속형 종속변수(Y)**와 한 개 이상의 독립변수(X) 사이의 관계를 모델링하는 가장 기본적이고 널리 쓰이는 통계·머신러닝 기법입니다.

1. 개요

1.
기본 개념
선형회귀는 독립변수(예측변수)종속변수(결과변수) 에 미치는 영향을 직선(또는 초평면) 형태로 모델링하는 기법입니다.
X1,X2,…,XkX_1, X_2, \dots, X_k
YY
예: “공부 시간(X)이 시험 점수(Y)에 미치는 영향,” “광고비(X)가 판매량(Y)에 미치는 영향” 등.
2.
단순회귀 vs 다중회귀
단순회귀(Simple Regression): 독립변수가 1개 →
Y=β0+β1X1+εY = \beta_0 + \beta_1 X_1 + \varepsilon
다중회귀(Multiple Regression): 독립변수가 2개 이상 →
Y=β0+β1X1+β2X2+⋯+βkXk+εY = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_k X_k + \varepsilon
3.
결과 해석
βi\beta_i는 독립변수 가 1 단위 증가할 때, 종속변수 YY가 평균적으로 얼마나 변하는지를 나타냄(다른 변수 일정할 때).
XiX_i
β0\beta_0는 X=0일 때 Y의 예상값(절편).

2. 주요 가정(전제조건)

선형회귀분석은 **최소제곱법(OLS)**을 사용할 때, 다음과 같은 가정이 충족된다는 전제를 둡니다:
1.
선형성(Lineaity)
독립변수(X)와 종속변수(Y) 사이가 선형적 관계를 가져야 함(잔차플롯으로 확인).
2.
독립성(Independence)
오차(잔차)들은 서로 독립적(자기상관이 없어야 함; 시계열 데이터인 경우 Durbin-Watson 검사 등).
3.
등분산성(Homoscedasticity)
모든 X에 대해 잔차의 분산이 동일해야 함(잔차도표에서 패턴이 없어야 함).
4.
정규성(Normality)
잔차(오차항)가 정규분포를 따른다고 가정(잔차 히스토그램, Q-Q plot 등 확인).
5.
다중공선성(Multicollinearity) 최소
독립변수들 간 상관관계가 매우 높으면(이 크면) 계수 추정 불안정 → VIF(Variance Inflation Factor)로 점검.
∣r∣|r|
만약 이 가정들이 크게 위배되면, 회귀 계수의 추정·해석에 문제가 발생할 수 있습니다. 필요에 따라 변환(로그 변환 등), 다른 모형 선택, 이상치 제거, 강건회귀(Robust regression) 등을 고려합니다.

3. 수학적 배경

3.1 최소제곱법(Ordinary Least Squares, OLS)

목표: 실제 종속변수 와 예측값 간 오차제곱합(Sum of Squared Errors, SSE)을 최소화하는 계수를 찾음
yiy_i
y^i\hat{y}_i
β\beta
SSE=∑i=1n(yi−y^i)2,y^i=β0+β1xi1+⋯+βkxik\text{SSE} = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 \quad,\quad \hat{y}_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_k x_{ik}
미분을 통해 해를 구하면, 행렬식으로는
β\beta
=(XTX)−1XTy\boldsymbol{\hat{\beta}} = (X^T X)^{-1} X^T y
(X는 독립변수 행렬, y는 종속변수 벡터)

3.2 결정계수(R2R^2)와 분산분석(ANOVA)

결정계수(R2R^2): 모델이 종속변수의 변동을 얼마나 설명하는지(0~1 사이)
R2=1−SSESST,SST=∑(yi−yˉ)2R^2 = 1 - \frac{\text{SSE}}{\text{SST}} \quad,\quad \text{SST} = \sum (y_i - \bar{y})^2
F-검정: 전체 회귀모형 유의성 검정
F=SSR/kSSE/(n−k−1),SSR=∑(y^i−yˉ)2F = \frac{\text{SSR}/k}{\text{SSE}/(n-k-1)} \quad,\quad \text{SSR} = \sum (\hat{y}_i - \bar{y})^2
SSR(회귀제곱합) / SSE(잔차제곱합) / SST(총제곱합)의 관계

4. 실행 절차

1.
데이터 준비
종속변수(Y)와 독립변수(X) 정리
범주형 변수(명목형)는 더미변수(One-hot Encoding) 처리 필요
2.
데이터 탐색/시각화
X-Y 산점도, 상관분석, 이상치 탐색
3.
모형 적합(회귀분석 수행)
최소제곱법(OLS)으로 추정
β\beta
4.
가정검토
잔차도표(등분산성, 선형성), 잔차정규성(Q-Q plot), Durbin-Watson(독립성), VIF(다중공선성) 등
5.
모델 평가
결정계수(), 수정된 , 유의성 검정(F-test, t-test), AIC/BIC 등
R2R^2
R2R^2
6.
해석 & 보고
β\beta 계수의 크기, 방향(+, -), 유의성, 신뢰구간 제시
예측 모델로도 활용 시, RMSE, MAE, 교차검증 등 성능평가 가능

5. Python 예시 코드

아래 예시는 단순 선형회귀다중 선형회귀를 각각 실행하는 간단한 데모입니다.
statsmodels → **통계적 해석(t-값, p-값, 신뢰구간, ANOVA표 등)**에 유리
sklearn예측 성능, 머신러닝 파이프라인에 편리

5.1 단순선형회귀 예시

import numpy as np import pandas as pd import statsmodels.api as sm import statsmodels.formula.api as smf import matplotlib.pyplot as plt # ------------------------------------------------- # 1) 예시 데이터 생성 # ------------------------------------------------- np.random.seed(42) N = 50 X = np.linspace(0, 10, N) # 0부터 10까지 고르게 분포 true_beta0 = 5.0 # 실제 절편 true_beta1 = 2.0 # 실제 기울기 noise = np.random.normal(0, 2, N) # 평균=0, 표준편차=2인 오차 Y = true_beta0 + true_beta1 * X + noise df = pd.DataFrame({'X': X, 'Y': Y}) # ------------------------------------------------- # 2) 단순선형회귀 (StatsModels) # ------------------------------------------------- model = smf.ols('Y ~ X', data=df).fit() # Y=β0 + β1*X print(model.summary()) # ------------------------------------------------- # 3) 예측 결과 시각화 # ------------------------------------------------- df['Y_pred'] = model.predict(df[['X']]) plt.scatter(df['X'], df['Y'], label='Observed', color='blue') plt.plot(df['X'], df['Y_pred'], label='Fitted line', color='red') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show()
Python
복사
결과 해석
1.
회귀계수(Intercept, X)
coef 테이블에서 Intercept가 절편 , X가 기울기 .
β0\beta_0
β1\beta_1
t-검정 및 p-value로 유의성 확인.
2.
결정계수(R-squared)
모델이 Y의 변동을 얼마나 설명하는지 지표.

5.2 다중선형회귀 예시

import numpy as np import pandas as pd import statsmodels.formula.api as smf from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error # ------------------------------------------------- # 1) 예시 데이터 생성 (X1, X2 -> Y) # ------------------------------------------------- np.random.seed(123) N = 100 X1 = np.random.normal(10, 5, N) # 평균=10, 표준편차=5 X2 = np.random.normal(50, 10, N) # 평균=50, 표준편차=10 true_beta0 = 3.0 true_beta1 = 1.5 true_beta2 = 0.5 noise = np.random.normal(0, 5, N) # 오차 Y = true_beta0 + true_beta1 * X1 + true_beta2 * X2 + noise df_multi = pd.DataFrame({'X1': X1, 'X2': X2, 'Y': Y}) # ------------------------------------------------- # 2) StatsModels를 이용한 다중회귀 # ------------------------------------------------- model_multi = smf.ols('Y ~ X1 + X2', data=df_multi).fit() print(model_multi.summary()) # ------------------------------------------------- # 3) Scikit-Learn을 이용한 다중회귀 # ------------------------------------------------- X_features = df_multi[['X1', 'X2']] y_target = df_multi['Y'] lin_reg = LinearRegression() lin_reg.fit(X_features, y_target) y_pred = lin_reg.predict(X_features) mse = mean_squared_error(y_target, y_pred) rmse = np.sqrt(mse) print("\n[Scikit-Learn 결과]") print(f"Intercept: {lin_reg.intercept_:.3f}") print(f"Coef X1, X2: {lin_reg.coef_}") print(f"RMSE: {rmse:.3f}")
Python
복사
결과 해석
1.
StatsModels
summary()에서 각 계수 , t-검정, p-값, 결정계수(R-squared), 수정된 R-squared, F-검정, AIC/BIC 등을 확인.
βi\beta_i
2.
Scikit-Learn
회귀계수는 .coef_ , 절편은 .intercept_로 접근
MSE, RMSE 등 예측 성능 평가 지표를 쉽게 계산
추가적으로 교차검증, 파이프라인, 하이퍼파라미터 튜닝 등에 확장하기 편리

6. 결과 해석 및 보고

1.
회귀계수
βi\beta_i가 양(+)이면 X가 증가할수록 Y도 증가(양의 상관), 음(-)이면 반대.
p-value가 유의수준(예: 0.05)보다 작으면, 해당 변수 효과가 통계적으로 유의.
2.
F-검정(모형 유의성)
전체 모델이 유의미한지 확인. p < 0.05 → “X들이 Y를 유의하게 설명한다”
3.
결정계수(R^2), 수정된 R^2
모델 설명력. 다중회귀에서는 수정된 R^2(Adjusted R^2)를 주로 봄(변수 개수에 대한 보정).
4.
잔차분석
잔차 vs 적합값(혹은 vs 독립변수) 플롯에서 패턴이 없어야 등분산성·선형성 확인
잔차 정규성(히스토그램, Q-Q plot)
Durbin-Watson(독립성), VIF(공선성) 등
5.
해석 예
“X1이 1 단위 증가하면 Y가 평균적으로 만큼 증가한다(유의수준 0.05에서 통계적으로 유의).”
β1\beta_1
“R^2 = 0.85로, 이 모델은 Y 변동의 약 85%를 설명한다.”

7. 한계 및 주의사항

1.
가정 위배 시 해석 문제
이상치가 많거나, 비선형 관계가 강하면 OLS 추정 왜곡
변환(로그, 제곱 등)이나 다른 모델(비선형회귀, GAM, 랜덤포레스트 등) 고려
2.
설명 vs 예측
통계 분석(설명) 목적인지, 머신러닝(예측) 목적인지에 따라 평가 지표, 교차검증, 정규화 등이 달라짐
3.
인과관계 한계
회귀분석이 상관관계를 잘 보여주지만, 인과관계는 연구설계(실험 등)가 보강되어야 확실히 주장 가능
4.
다중공선성
독립변수들 간 상관이 높으면 계수 해석 불안정(회귀계수 방향이 뒤집히거나 p-value가 이상해질 수 있음)

8. 요약

*선형회귀분석(Linear Regression)**은 연속형 종속변수독립변수의 선형 조합으로 설명·예측하는 가장 기초적인 통계/머신러닝 기법입니다.
기본 전제(선형성·독립성·등분산성·정규성)가 어느 정도 충족되어야 모델 추정값()과 해석이 유효합니다.
β\beta
결과 해석 시에는 회귀계수(크기·방향·유의성), 결정계수(R^2), 잔차분석 등을 종합적으로 확인해야 합니다.
Python에서는 statsmodels 라이브러리를 통해 통계적 해석(검정, 신뢰구간, ANOVA table)까지 상세히 볼 수 있고, **scikit-learn*을 사용하면 예측 성능 평가와 확장(교차검증, 파이프라인)에 용이합니다.
이러한 내용을 종합적으로 숙지하면, 실무나 연구에서 **“X변수가 Y를 얼마나 잘 설명하고, 예측 가능한지”**를 파악하기 위해 선형회귀분석을 효과적으로 적용할 수 있습니다.