[Python] R2 결정 계수 란? 파이썬 실습 코드 통계 데이터 분석

1. 통계에서 R² (결정 계수)의 중요성

통계학, 데이터 과학 분야에서는 예측 모델의 정확성과 신뢰성을 평가하기 위해 다양한 방법과 기술을 사용합니다. 이러한 방법 중 하나가 바로 ‘결정 계수’, 즉 R²입니다. R²는 모델의 설명력을 나타내는 지표로, 예측 모델이 얼마나 데이터에 잘 부합하는지를 수치적으로 보여주는 지표입니다. 특히 선형 회귀 분석에서 R² 지표의 역할은 매우 중요합니다. 여기서는 R²의 기본 정의와 개념을 소개해드리고, 이를 통계학 및 데이터 과학에서 어떻게 활용하는지, 파이썬 코드를 통해 설명하고자 합니다.

2. 기본 개념: R² (결정 계수)란 무엇인가?

R² (결정 계수)는 통계학에서 주로 사용되는 중요한 지표 중 하나입니다. 이 지표는 기본적으로 회귀 모델의 설명력을 의미하며, 모델이 관측된 데이터를 얼마나 잘 설명하는지를 수치적으로 표현합니다. R² 결정계수는 0에서 1 사이의 숫자를 가지며, 값이 높을수록 모델의 설명력이 높다는 것을 의미합니다. R²는 모델의 성능을 평가하는 것 뿐만아니라, 모델의 예측력과 실제 데이터 사이의 관계를 이해하는 데 중요한 역할을 합니다.

1. R²의 정의

R²는 총 변동(total variation) 중에서 모델에 의해 설명되는 변동의 비율을 나타냅니다. 수학적으로, R²의 수식은 다음과 같이 정의 할 수 있습니다 :

 $$ R² = 1 – \frac{SS_{\text{res}}}{SS_{\text{tot}}} $$

여기서 $SS_{\text{res}}$는 잔차 제곱합(residual sum of squares)이며, $SS_{\text{tot}}$는 총 제곱합(total sum of squares)입니다. 잔차 제곱합은 실제 값과 모델에 의한 예측 값 사이의 차이를 나타내며, 총 제곱합은 관측된 데이터와 그 평균과의 차이를 나타냅니다.

2. R²의 수학적 배경 및 원리

R²를 이해하기 위해서는 선형 회귀 모델의 기본 원리를 알아야 합니다. 선형 회귀 모델은 독립 변수(예측 변수)와 종속 변수(반응 변수) 사이의 선형 관계를 모델링합니다. 이 모델은 데이터에서 발견된 패턴을 기반으로 예측을 수행하며, R²는 이러한 예측이 얼마나 잘 이루어졌는지를 평가합니다.

3. R²의 해석 방법

  • R² = 1: 모델이 데이터를 완벽하게 예측합니다.
  • R² = 0: 모델이 데이터의 변동성을 전혀 설명하지 못합니다.
  • 0 < R² < 1: 모델이 데이터의 일부 변동성을 설명합니다. R²가 높을수록 더 좋은 모델입니다.

R²의 해석은 직관적이지만, 항상 주의해야 할 점이 있습니다. R² 값이 높다고 해서 모델이 반드시 좋은 것은 아닙니다. 때로는 과적합(overfitting)이나 변수의 선택, 데이터의 특성 등 다른 요소들도 고려해야 합니다.

3. R² (결정 계수)의 중요성 및 주의할 점

1. R² 의 중요성

R² (결정계수)는 모델의 성능을 평가하는 데 있어 중요한 단서를 제공하는 지표입니다. 특히, 회귀 분석에서 R²는 모델이 데이터를 얼마나 잘 설명하는지를 보여주는 척도로 사용됩니다. 예를 들어, R² 값이 0.8인 경우, 모델이 데이터의 80%를 설명한다고 해석할 수 있습니다. 이는 독립 변수가 종속 변수의 변동성을 상당 부분 설명한다는 것을 의미하며, 이러한 정보는 예측 모델의 유용성 및 실용성을 판단하는 데 매우 중요합니다.

2. R² 의 주의할 점

R² 결정계수를 평가지표로 활용하는 과정에서 몇 가지 주의할 점이 있습니다. 아래 3가지 주의점은 R² 를 적절하게 사용하여 모델의 성능을 평가하기 위해 꼭 숙지해야합니다.

  1. 과적합의 위험: R² 한개 만으로 예측 모델을 평가하는 성능 지표로 사용할 경우, 예측 모델이 과적합될 위험성이 있습니다. 과적합된 모델은 훈련 데이터는 잘 예측하지만, 새로운 데이터에 대해서는 잘 작동하지 않을 수 있습니다.
  2. 독립 변수의 수: R² 지표의 수치는 독립 변수의 수가 증가함에 따라 자연스럽게 증가하는 경향이 있습니다. 이는 더 많은 독립 변수가 모델 학습에 추가될 때마다 설명력이 증가한다는 것을 의미합니다. 하지만 이러한 설명력 증가가 반드시 모델의 성능이 향상 되었다는 것을 의미하지는 않습니다. 그러므로, 독립 변수가 많은 경우 다음 파트에서 소개하는 조정된 결정계수를 사용할 필요가 있습니다.
  3. 데이터의 복잡성: R²는 데이터의 복잡성이나 구조를 완전히 반영하지 못할 수 있습니다. 특히 비선형 관계나 복잡한 데이터 구조에서는 R²만으로 모델의 성능을 평가하기는 어려울 수 있습니다.

3. 적절한 해석

이러한 한계들에도 불구하고, R²는 여전히 유용한 지표입니다. 중요한 것은 R²를 비판적으로 해석하고, 다른 성능 지표와 함께 고려하는 것입니다. 예를 들어, 조정된 R², 교차 검증 점수, 오차 지표 등을 함께 고려하면 모델의 성능을 더 정확하게 평가할 수 있습니다.

4. 조정된 R² 결정 계수

1. 조정된 R²의 정의

위에서 언급했듯이, 기존의 결정계수는 모델에 학습 변수가 추가될 때마다 성능과는 무관하게 R² 지표의 수치가 자동적으로 증가하는 경향이 있습니다. 즉, 모델의 예측 성능에 불필요한 변수가 추가됬음에도 불구하고, 모델의 설명력이 향상된 것처럼 보일 수 있다는 것을 의미합니다. 이러한 문제를 해결하기 위해 ‘조정된 R²’라는 지표가 사용됩니다.

조정된 R² 지표는 R²의 이러한 한계를 보완합니다. 조정된 R²는 독립 변수의 수가 모델의 성능에 미치는 영향을 감안하여 최종 수치가 계산됩니다. 조정된 R² 지표를 수식으로 나타내면 아래와 같이 정의할 수 있습니다.

Adjusted $$ \text{Adjusted } R² = 1 – \left(1 – R²\right) \frac{n – 1}{n – p – 1} $$

여기서 n은 관측값의 수, p는 독립 변수의 수입니다.

2. 조정된 R²의 중요성

조정된 R² 결정계수는 학습 변수가 많은 다변량 회귀 모델을 평가할때, 기존의 R²보다 더 신뢰할 수 있는 성능 지표입니다. 조정된 R²는 불필요한 변수가 모델에 포함될 때 페널티를 주게되어, 모델의 복잡성에 비례하여 수치가 감소하게 됩니다. 이는 모델을 단순화하고, 실제 데이터에 더 적합한 모델을 선택하는 데 도움을 줍니다.

5. 파이썬을 이용한 R² 계산

1. 파이썬 예제 코드

파이썬의 scikit-learn 라이브러리를 사용하여, 선형 회귀 모델을 구축하고 성능을 평가를 쉽게 진행할 수 있습니다.

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

# 샘플 데이터 생성
X = np.array([10, 20, 30, 40, 50])  # 독립 변수 (예: 연령)
y = np.array([15, 25, 35, 45, 55])  # 종속 변수 (예: 소득)

# 선형 회귀 모델 생성 및 훈련
model = LinearRegression()
model.fit(X.reshape(-1, 1), y)

# 모델을 사용한 예측
predictions = model.predict(X.reshape(-1, 1))

# R² 값 계산
r2 = r2_score(y, predictions)
print(f"R² 값: {r2:.2f}")
  1. 데이터 준비: 독립 변수 X와 종속 변수 y로 구성된 간단한 샘플 데이터를 생성합니다. 여기서는 간단히 연령에 따른 소득 변화를 예측한다고 가정하겠습니다.
  2. 모델 생성 및 훈련: LinearRegression 클래스를 사용하여 선형 회귀 모델을 생성하고, fit 메소드로 생성한 선형 회귀 모델을 학습시킵니다. 학습 과정에서 모델은 데이터의 선형 관계를 학습합니다.
  3. 예측 수행: predict 함수를 사용하여 독립 변수에 대한 종속 변수의 결과를 예측값을 계산합니다.
  4. R² 값 계산: r2_score 함수를 사용하여 학습된 선형 회귀 모델의 R² 지표 값을 계산합니다. 이 수치는 모델이 데이터를 얼마나 잘 설명하는지를 나타냅니다.

2. R² 결정계수 수식 직접 구하기

위 코드처럼 사이킥런의 r2_score 함수를 사용하면 쉽게 학습한 모델의 결정계수를 구할 수 있지만, 아래와 같이 직접 수식으로 구할수도 있습니다.

from sklearn.linear_model import LinearRegression
import numpy as np

# 예시 데이터셋
X = np.array([50, 60, 70, 80, 90])  # 집의 크기 (제곱미터)
y = np.array([300, 350, 500, 450, 500])  # 판매 가격 (만 달러)

# 선형 회귀 모델 생성 및 훈련
model = LinearRegression()
model.fit(X.reshape(-1, 1), y)

# 예측
predictions = model.predict(X.reshape(-1, 1))

# R² 계산을 위한 직접적인 파이썬 코드
# 총 제곱합(Total Sum of Squares)
SS_tot = sum((y - np.mean(y))**2)
# 잔차 제곱합(Residual Sum of Squares)
SS_res = sum((y - predictions)**2)
# R² 계산
r2_manual = 1 - (SS_res/SS_tot)

r2_manual

6. 마무리

1. R²에 대한 중요 포인트 요약

  1. 모델의 설명력 평가: R²는 모델이 데이터의 변동성을 얼마나 잘 설명하는지를 나타냅니다. 높은 R² 값은 모델이 데이터에 잘 부합한다는 것을 의미합니다.
  2. 과적합 주의: R² 값이 높더라도 모델이 과적합되었을 수 있으므로, 교차 검증과 같은 다른 방법들을 사용하여 모델의 일반화 능력을 평가해야 합니다.
  3. 다른 지표와의 비교: R²만으로 모델의 성능을 전적으로 판단하지 말고, 다른 성능 지표와 함께 고려해야 합니다. 예를 들어, 조정된 R², 평균 제곱 오차(MSE) 등을 참고하는 것이 좋습니다.

R²는 유용하고 강력한 모델 평가 방법이지만, 이것만으로 모델 성능의 모든 것을 판단할 수는 없습니다. 데이터 분석가로서의 여정에서 R²를 비롯한 다양한 평가 지표와 도구들을 이해하고 적절히 활용하는 것이 중요합니다.

답글 남기기