티스토리 뷰

선형회귀에 대한 개념을 알아보고, 회귀분석 실습을 통해 잔차가설을 확인해본다.

 

선형회귀

종속 변수 Y와 한 개 이상의 설명 변수 X와의 선형 상관 관계를 모델링하는 회귀분석 기법으로, 한 개의 설명 변수에 기반한 경우 단순 선형 회귀, 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀라고 한다.

자료출처: https://tableauwiki.com/tableau-linearregression/

 

선형회귀 기본 가정

선형성 (Linearity)

설명변수 X와 반응변수 Y 사이에 존재하는 관련성은 X=x의 값에서 Y의 기댓값을 $E(Y|X = x) = B_{0} + B_{1}x$  해당 선형식 회귀 계수에 대한 선형식 둘의 선형관계가 지속적이어야 한다.

 

독립성 (Independence)

오차항은 다른 값에 영향을 주지 않으며, 오차항은 서로 독립적이어야 한다.

- 시간의 순서에 따라 Durbin-Waston 통계량을 계산하여 오차항 독립성 검사, 0에 가까우면 양의 자기상관, 4에 가까우면 음의 자기상관, 일반적으로 1.5~2.5 사이를 독립이라 한다.

 

등분산성 (Homoscedasticity)

모든 독립변수의 값에 대한 오차의 분산이 일정하며, 독립변수 크기에 상관없이 일관된 변동을 가져야 한다.

- 잔차 대 적합값 플롯을 사용하여 등분산성을 평가하며, 프롯이 패턴을 보이거나 퍼짐 변화가 있으면 가정을 위반했다.

 

정규성 (Noramlity)

오차항은 정규 분포를 따라야 한다. 작은 표본에서 특히 중요하며, 큰 표본에서는 중심극한정리로 완화할 수 있다. 

- Q-Q플롯, 정규성 검정을 사용하여 오차항의 분포가 정규 분포를 따르는지 확인한다.

 

 

최소제곱법

어떤 방정식의 해를 근사적으로 구하는 방법으로, 근사적으로 구하려는 해와 실제 해의 오차의 제곱의 합이 최소가 되는 해를 구하는 방법이다.

$$ \sum_{i=1}^{n} residual^2$$

$$ \sum_{i=1}^{n} (y_i-f(x_i,\beta ))^2$$

$$f(x_i, \beta) = ax_i+b$$

 

$$\frac{\partial }{\partial a}\sum_{i=1}^{n} (y_i-ax_i+b)^2 = 0$$

$$\frac{\partial }{\partial b}\sum_{i=1}^{n} (y_i-ax_i+b)^2 = 0$$

 

$$\begin{bmatrix}
\sum_{i=1}^{n} x_{i}^n & \sum_{i=1}^{n} x_i \\
\sum_{i=1}^{n} 1 & \sum_{i=1}^{n} x_i \\
\end{bmatrix}
\begin{bmatrix}
a\\b
\end{bmatrix} =
\begin{bmatrix}
\sum_{i=1}^{n} x_iy_i \\ \sum_{i=1}^{n} y_i
\end{bmatrix} $$

$$\vdots $$

$$\begin{bmatrix}
a\\b
\end{bmatrix} =
\begin{bmatrix}
\sum_{i=1}^{n} x_{i}^n & \sum_{i=1}^{n} x_i \\
\sum_{i=1}^{n} 1 & \sum_{i=1}^{n} x_i \\
\end{bmatrix}^{-1}
\begin{bmatrix}
\sum_{i=1}^{n} x_iy_i \\ \sum_{i=1}^{n} y_i
\end{bmatrix}$$

 

 

결정계수

선형회귀분석에서 종속변수의 분산 중에서 독립변수로 설명되는 비율로, 통계 모델로 대상을 얼마나 잘 설명할 수 있는가를 나타낸 것이다.

 

$$R^2=\frac{SSE}{SST} = 1-\frac{SSR}{SST}$$

 

SST(Total Sum of Squares)

$$SST = \sum_{i=1}^{n} (y_{i}-\overline{y})^2$$

SST는 관측값에서 관측값의 평균(혹은 추정치의 평균)을 뺀 결과의 총합이다.

 

 

SSE(Explained Sum of Squares)

$$SSE = \sum_{i=1}^{n}(\hat{y}_{i}-\overline{y})^2$$

SSE는 추정값에서 관측값의 평균(혹은 추정치의 평균)을 뺀 결과의 총합이다.

 

 

SSR(Residual Sum of Squares)

$$SSR = \sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^2$$

SSR은 관측값에서 추정값을 뺀 값, 즉 잔차의 총합이다.

 

 

다중공선성

독립 변수들 간에 높은 상관관계가 있을 때 발생하는 현상으로 회귀 모델의 정확성과 신뢰성을 저하할 수 있다.


다중공선성의 문제점

계수 추정의 불안정성 : 다중공선성이 있는 경우, 작은 데이터의 변화에도 회귀 계수가 크게 변동할 수 있다. 이로 인해 모델의 예측력이 불안정해지고, 데이터에 과적합할 위험이 커진다.
계수 해석의 어려움 : 변수들 간의 높은 상관관계로 인해, 각 독립 변수의 영향력을 분리해 해석하기 어렵다. 즉, 어떤 변수가 종속 변수에 영향을 미치는지 명확하게 구분이 어려워진다.
통계적 유의성 감소 : 다중공선성이 있는 변수들은 통계적으로 유의미하지 않을 수 있다. 

 

다중공선성의 진단 방법

상관 행렬(Correlation Matrix) : 독립 변수들 간의 상관계수를 계산하여 높은 상관관계를 보이는 변수 쌍을 확인한다.
분산 팽창 요인(Variance Inflation Factor, VIF) : VIF 값이 5 이상이면, 해당 변수는 다른 독립 변수들과 높은 상관관계를 가지고 있음을 의미한다.

 

다중공선성의 해결 방법

변수 제거 : 높은 다중공선성을 보이는 변수 중 하나를 모델에서 제거한다.
주성분 분석(PCA) : 주성분 분석을 통해 변수들을 변환하고, 변환된 변수들로 회귀 모델을 구축할 수 있다. 이 방법은 원본 변수들의 주요 정보를 요약하여 사용해 다중공선성 문제를 줄인다.
릿지 또는 라쏘 회귀 : 정규화를 통해 계수의 크기를 축소시킨다. 이는 과적합을 방지하고, 다중공선성의 영향을 줄인다.

 

 

회귀분석 실습

import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from sklearn.datasets import fetch_california_housing
from scipy.stats import shapiro
from statsmodels.stats.stattools import durbin_watson
# 데이터 포인트 수
n_points = 100

# 임의의 데이터 생성
np.random.seed(42)
x = np.random.rand(n_points, 1) * 10
true_slope = 2
true_intercept = 5
noise = np.random.randn(n_points, 1)
y = true_slope * x + true_intercept + noise

 

# 선형대수 사용한 최소제곱의 해 
# 1을 추가하여 상수항 처리
A = np.hstack([x, np.ones((n_points,1))])

theta_best, residuals, rank, s= np.linalg.lstsq(A,y,rcond=None)


# 선형회귀 모델 사용한 학습
lin_reg=LinearRegression()
lin_reg.fit(x,y)
intercept = lin_reg.intercept_
slope = lin_reg.coef_
## 결과 시각화

plt.figure(figsize=(10,6))
plt.scatter(x,y , color='blue', label= 'Original points')
line_x = np.array([[0], [10]])
line_y_alg = theta_best[0] * line_x + theta_best[1]
line_y_reg = slope*line_x+intercept
plt.plot(line_x, line_y_alg, color='red', label='Linear Algebra Solution')
plt.plot(line_x, line_y_reg, color='green',linestyle='--', label='Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

선형회귀 실습 예시 그래프

 

## 비선형 데이터들

# 데이터셋 생성
np.random.seed(0)
x =np.linspace(-10,10,100)
y = 1.5* x **2 -2.5 * x +0.5 + np.random.normal(0,20, size=x.shape)
##다항회귀 
##차수 높이는 것 -> 비선형적인 것들은 더 학습을 잘 시킬 수 있게 진행하는 것

#넘파이를 가지고 2차 회귀식을 그려보자!
coeff = np.polyfit(x,y,2)
poly_eqn = np.poly1d(coeff)

plt.scatter(x,y , color='blue', label= 'Original points')
plt.plot(x, poly_eqn(x),'r',label=f'Non- Linear fit: y = {coeff[0]:.2f}x2+{coeff[1]:.2f}x+{coeff[2]:.2f}')

다항회귀 실습 예시 그래프

 

선형회귀의 여러 가정들을 확인해본다.

#데이터셋 생성
import statsmodels.api as sm

#정규분포를 가정하여 데이터셋을 만듦
np.random.seed(0)
x = np.random.normal(0,1,100)
y = 2+2*x+np.random.normal(0,2,100)

# 해당 데이터셋들의 가정들을 비교하자!

#선형회귀 모델 적합
model = sm.OLS(y, sm.add_constant(x)).fit()

#잔차의 플롯
residuals = model.resid # 잔차를 뽑아서
fitted = model.fittedvalues
# scatter로 그래프 확인
plt.scatter(fitted, residuals) # 잔차 그래프
plt.xlabel('Fitted Values')
plt.ylabel('Residual')
plt.axhline(0, color= 'red', linestyle='--')
plt.show()

잔차 그래프 예시

 

데이터 포인트가 무작위로 분포 되어야 하며, 곡선적 패턴이 보이지 않아야 한다.

잔차가 균일하게 분포해야하며, 모든 예측값에 대한 잔차는 동일하게 분포되어야 한다.

# 정규성 검정 : shapiro - Wilk 테스트
stat, p = shapiro(residuals)
print('Shapiro-Wilk Test: Statistics=%.3f, p=%.3f' % (stat, p))

'''
Shapiro-Wilk Test: Statistics=0.979, p=0.114
'''

 

shapiro-wilk 테스트에서 p값이 0.05 이상이면, 잔차가 정균분포를 따른다고 볼 수 있으며, 이는 잔차가 정규성을 만족함을 의미한다.

# 더빈 왓슨 테스트
dw_stat = durbin_watson(residuals)
print('Durbin-Watson Statistics', dw_stat)

'''
Durbin-Watson Statistics 1.994830282178435
'''

 

더빗-왓슨통계량 값이 2에 가까우면 잔차들 사이에서 자기 상관성이 없다고 본다. 0에 가까우면 양의 자기상관을 가지며, 4에 가까우면 음의 자기상관을 갖는다.

# 정규성 검정 Q-Q플롯
fig =sm.qqplot(residuals, line='s')
plt.title('Q-Q plot of Residuals')
plt.show()

Q-Q 플롯 예시

 

데이터 포인트들이 대각선 배열에 가까이 붙어야 하며, 크게 벗어나는 포인트는 잔차의 분포가 정규분포를 따르지 않음을 나타낸다.

# 등분산성 검정 :잔차의 분산 플롯

sns.residplot(x=fitted, y = residuals, lowess= True , line_kws = {'color':'red', 'lw':1})
plt.title('Residual plot with Lowess Line')

 

잔차 분산 플롯 예시

 

등분산성 검정 : 잔차플롯에서 Lowess 수평선을 형성한다. 수평선을 형성하면 잔차의 예측값에 대해 일정하다는 것을 의미한다.

잔차의 분포가 예측값에 따라 변하거나, 경향성이 보이면 등분산성에 대한 가정이 위반된다.

공지사항
최근에 올라온 글
Total
Today
Yesterday