Statistics

[STAT 101] 잔차와 오차, 그리고 결정계수

thebuck104 2024. 7. 16. 21:33

[STAT 101] 단순선형회귀, 공분산과 상관관계 에서 이어지는 포스트입니다.

https://thebuck104.tistory.com/35

 

[STAT 101] 단순선형회귀, 공분산과 상관계

1.     단순선형회귀단순 선형 회귀는 두 변수 사이의 관계를 모델링하는 통계기법이다.이 때, 하나는 독립 변수 X (설명 변수), 나머지 하나는 종속 변수 Y (반응 변수)로 하며, 선형 회귀는 둘

thebuck104.tistory.com

 


 

3.     잔차와 오차

잔차 (Residual)와 오차 (Error)는 데이터 분석 및 회귀 분석에서 중요한 개념으로 모델이 실제 데이터를 얼마나 잘 반영하는지 평가하는 데 사용된다. 잔차와 오차는 실제 관측값과 회귀모델이 추정한 예측값의 차이를 뜻한다.

하지만, 둘은 비슷한 개념이지만 중요한 차이점이 있다.

 

-       잔차: 표본 (Sample)으로부터 추정한 회귀식의 예측값과 실제 관측값의 차이

회귀 모델이 각 데이터 포인트를 얼마나 잘 예측하는지 나타낸다. 잔차가 작을수록 모델이 해당 데이터를 잘 설명한다.

잔차의 합은 0이다. , 데이터의 평균을 중심으로 예측되는 것. 잔차의 제곱합을 최소화하는 것이 회귀 분석의 목표 중 하나다. (최소제곱법)

잔차를 사용해 모델의 적합도를 평가할 수 있다. 잔차의 패턴으로 모델의 가정을 위반했는지를 알 수 있다.

 

-       오차: 모집단 (Population)으로부터 추정한 회귀식의 예측값과 실제 관측값의 차이.

데이터 자체의 변동성을 나타낸다. 모델이 아니라 데이터 생성 과정의 불확실성을 포함한다.

오차는 관측할 수 없는 값이다. 데이터가 주어졌을 때 오차와 잔차는 비슷하지만, 모델의 불완정성 외에도 데이터의 내재적 변동성을 포함한다.

실제값에 대한 불확실성을 이해할 때 사용한다. 오차로 모델의 근본적인 한계를 나타낼 수 있고, 이는 모델만을 통해서 완전히 설명할 수 없는 부분이다.

 

 

잔차는 모델을 평가하고 개선하는 데 직접적으로 사용되는 반면,

오차는 데이터의 본질적인 불확실성을 이해하는데 중요하다.

 

 

먼저 잔차의 개념을 집고 넘어가자면, 다음과 같다.

 

잔차 (residual): 실제 관측값 y_i와 그 회귀 모델이 예측한 추정치 y^_i = a + bx_i 사이의 차이로 아래와 같다.

 

평균-제곱 오차 (MSE): 잔차를 제곱해 더한 잔차제곱합 (SSE)를 자유도로 나눈 것.

제곱근-평균-제곱 오차 (RMSE): MSE에 제곱근을 취한 것

 

 

그림 예시

위와 같이 그림으로 설명하면 더 직관적으로 다가온다.

 

잔차는 표본에서 얻은 적합값 (fitted value)의 적합회귀선과 실제값 (관측값)의 차이

(이 차이의 최소제곱합이 가장 작게끔 회귀선이 만들어진다.)

오차는 모집단에서 얻은 참회귀선과 실제값의 차이이다.

 

다음의 예시 파이썬 코드로 잔차를 구할 수 있다.

# Example data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
Y = np.array([2, 3, 5, 6, 8])

# Create and train the model
model = LinearRegression()
model.fit(X, Y)

# Predicted values
Y_pred = model.predict(X)

# Calculate residuals
residuals = Y - Y_pred

# Display residuals
print("Residuals:", residuals)

# Visualize residuals
plt.scatter(X, residuals, color='blue', label='Residuals')
plt.axhline(y=0, color='red', linestyle='--')
plt.xlabel('Independent Variable (X)')
plt.ylabel('Residuals')
plt.title('Residuals Plot')
plt.legend()
plt.show()

 


 

4.     결정 계수

결정 계수 (Coefficient of determination, R^2)는 모델의 적합정도를 수치적으로 제안한다. 결정계수는 종속 변수의 변동성이 얼마만큼의 비율로 독립 변수로 설명이 될 수 있는지를 보여준다.

 

a.     결정 계수 = 1: 모델이 모든 데이터를 완벽하게 설명한다. 예측값이 실제값과 완벽히 일치한다.

b.     결정 계수 = 0: 모델이 데이터를 전혀 설명하지 못한다. 예측값이 단순히 종속 변수의 평균과 같다.

c.     0 < 결정 계수 < 1: 모델이 어느정도 데이터를 설명하지만 완벽하지 않다. 값이 클수록 모델의 설명력이 높다.

d.     결정계수 < 0: 모델이 데이터를 잘못 설명한다. 예측 값이 종속 변수의 평균보다 나쁘다.

 

하지만 결정 계수가 높다고 항상 좋은 모델은 아니다. 데이터의 특성이나 모델의 과적합 (Overfitting) 등을 함께 고려해야 한다.

 

 

결정 계수는 다음과 같이 구할 있다.

 

 

여기서,

SSR (Residual Sum of Squares): 관측값에서 추정값을 뺀 값, 잔차의 총합

SST (Total Sum of Squares): 관측값에서 관측값의 평균을 뺀 결과의 총합

SSE (Explained Sum of Squares): 추정값에서 관측값의 평균을 뺀 결과의총합

 

 

다음의 파이썬 예시 코드로 결정 계수를 구할 수 있다.

 

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

# Example data
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
Y = np.array([2, 3, 5, 6, 8])

# Create and train the model
model = LinearRegression()
model.fit(X, Y)

# Predicted values
Y_pred = model.predict(X)

# Calculate R²
r2 = r2_score(Y, Y_pred)

print(f"R²: {r2}")

# Visualization
plt.scatter(X, Y, color='blue', label='Actual data')
plt.plot(X, Y_pred, color='red', label='Regression line')
plt.xlabel('Independent Variable (X)')
plt.ylabel('Dependent Variable (Y)')
plt.title(f'Regression Line (R² = {r2:.2f})')
plt.legend()
plt.show()