개요
R²(R-squared, 결정계수)는 통계학 및 기계학습에서 회귀 모델의 성능을가하는 대표 지표 중 하나입니다. R² 모델이 종속 변수(dependent variable)의 분산 중 얼마나 많은 부분을 설명할 수 있는지를 나타내는 값으로, 일반적으로 0에서 1 사이의 값을 가집니다. 이 값이 1에 가까울수록 모델이 데이터의 변동성을 잘 설명하고 있음을 의미하며, 0에 가까울수록 설명력이 낮음을 나타냅니다.
R²는 특히 선형 회귀(Linear Regression) 모델의 평가에서 널리 사용되며, 모델의 예측 정확도를 직관적으로 해석할 수 있게 해줍니다. 그러나 R²만으로 모델의 전반적인 성능을 판단하기에는 한계가 있으므로, 다른 평가 지표와 함께 종합적으로 활용하는 것이 바람직합니다.
R²의 정의와 계산 방식
수학적 정의
R²는 다음과 같은 공식으로 계산됩니다:
[
R^2 = 1 - \frac{\text{잔차제곱합 (RSS)}}{\text{총제곱합 (TSS)}}
]
여기서:
- RSS(Residual Sum of Squares):
[
\text{RSS} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
]
실제 관측값 (y_i)와 모델의 예측값 (\hat{y}_i)의 차이(잔차)를 제곱한 후 모두 더한 값입니다.
- TSS(Total Sum of Squares):
[
\text{TSS} = \sum_{i=1}^{n} (y_i - \bar{y})^2
]
각 관측값과 종속 변수의 평균 (\bar{y})의 차이를 제곱한 후 모두 더한 값입니다.
해석
- (R^2 = 1): 모델이 모든 변동성을 완벽히 설명함 (잔차 없음).
- (R^2 = 0): 모델이 평균값 기준으로 더 나은 설명력을 제공하지 않음.
- (R^2 < 0): 모델의 성능이 평균값 예측보다 나쁨 (과적합 또는 잘못된 모델일 수 있음).
R²의 특성과 장단점
장점
- 직관적 해석: "모델이 데이터의 몇 %를 설명한다"는 식으로 쉽게 이해할 수 있음.
- 모델 비교 용이: 동일한 데이터셋에서 서로 다른 회귀 모델을 비교할 때 유용함.
- 스케일 불변성: 종속 변수의 단위에 영향을 받지 않음.
단점
- 항상 증가하는 경향: 독립 변수를 추가할수록 R²는 감소하지 않고 항상 같거나 증가함 (과적합 유도 가능).
- 비선형 모델에 대한 제한: 비선형 회귀 모델에 적용할 경우 해석이 왜곡될 수 있음.
- 이상치에 민감: 데이터에 이상치(outlier)가 많을 경우 R² 값이 왜곡될 수 있음.
R²의 단점을 보완하기 위해 고안된 지표로, 수정된 R²(Adjusted R²)가 있습니다. 이는 변수의 수를 고려하여 패널티를 부여함으로써 모델의 복잡성을 반영합니다.
[
\text{Adjusted } R^2 = 1 - \left( \frac{(1 - R^2)(n - 1)}{n - k - 1} \right)
]
여기서:
- (n): 샘플 수
- (k): 독립 변수의 수
수정된 R²는 변수를 추가해도 모델의 설명력 향상이 충분하지 않으면 감소할 수 있으므로, 변수 선택(feature selection) 시 유용합니다.
R²와 다른 평가 지표의 비교
지표 |
설명 |
장점 |
단점 |
R² |
설명된 분산의 비율 |
해석 쉬움, 표준화됨 |
변수 추가 시 증가, 비음수 보장 안 됨 |
RMSE |
예측 오차의 제곱근 |
절대 오차 크기 제공 |
스케일에 의존 |
MAE |
절대 오차의 평균 |
이상치에 강함 |
비선형 반영 부족 |
Adjusted R² |
변수 수 보정된 R² |
과적합 방지 |
여전히 회귀 전용 |
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
import numpy as np
# 샘플 데이터 생성
X = np.random.rand(100, 3)
y = 3 * X[:, 0] + 2 * X[:, 1] - X[:, 2] + np.random.randn(100) * 0.1
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
print(f"R² 점수: {r2:.4f}")
참고 자료 및 관련 문서
- Scikit-learn:
r2_score
문서
- James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). An Introduction to Statistical Learning. Springer.
- Kutner, M. H., et al. (2005). Applied Linear Statistical Models. McGraw-Hill.
관련 개념
- 회귀 분석(Regression Analysis)
- 잔차 분석(Residual Analysis)
- 과적합(Overfitting)
- 교차 검증(Cross-Validation)
R²는 단독으로 사용하기보다는, 모델의 전반적인 성능을 평가하기 위해 다양한 지표와 함께 종합적으로 활용되어야 합니다. 특히 실제 응용에서는 도메인 지식과 데이터의 특성을 고려한 평가가 중요합니다.
# R²
## 개요
**R²**(R-squared, 결정계수)는 통계학 및 기계학습에서 회귀 모델의 성능을가하는 대표 지표 중 하나입니다. R² 모델이 종속 변수(dependent variable)의 분산 중 얼마나 많은 부분을 설명할 수 있는지를 나타내는 값으로, 일반적으로 0에서 1 사이의 값을 가집니다. 이 값이 1에 가까울수록 모델이 데이터의 변동성을 잘 설명하고 있음을 의미하며, 0에 가까울수록 설명력이 낮음을 나타냅니다.
R²는 특히 **선형 회귀**(Linear Regression) 모델의 평가에서 널리 사용되며, 모델의 예측 정확도를 직관적으로 해석할 수 있게 해줍니다. 그러나 R²만으로 모델의 전반적인 성능을 판단하기에는 한계가 있으므로, 다른 평가 지표와 함께 종합적으로 활용하는 것이 바람직합니다.
---
## R²의 정의와 계산 방식
### 수학적 정의
R²는 다음과 같은 공식으로 계산됩니다:
\[
R^2 = 1 - \frac{\text{잔차제곱합 (RSS)}}{\text{총제곱합 (TSS)}}
\]
여기서:
- **RSS**(Residual Sum of Squares):
\[
\text{RSS} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
\]
실제 관측값 \(y_i\)와 모델의 예측값 \(\hat{y}_i\)의 차이(잔차)를 제곱한 후 모두 더한 값입니다.
- **TSS**(Total Sum of Squares):
\[
\text{TSS} = \sum_{i=1}^{n} (y_i - \bar{y})^2
\]
각 관측값과 종속 변수의 평균 \(\bar{y}\)의 차이를 제곱한 후 모두 더한 값입니다.
### 해석
- \(R^2 = 1\): 모델이 모든 변동성을 완벽히 설명함 (잔차 없음).
- \(R^2 = 0\): 모델이 평균값 기준으로 더 나은 설명력을 제공하지 않음.
- \(R^2 < 0\): 모델의 성능이 평균값 예측보다 나쁨 (과적합 또는 잘못된 모델일 수 있음).
---
## R²의 특성과 장단점
### 장점
- **직관적 해석**: "모델이 데이터의 몇 %를 설명한다"는 식으로 쉽게 이해할 수 있음.
- **모델 비교 용이**: 동일한 데이터셋에서 서로 다른 회귀 모델을 비교할 때 유용함.
- **스케일 불변성**: 종속 변수의 단위에 영향을 받지 않음.
### 단점
- **항상 증가하는 경향**: 독립 변수를 추가할수록 R²는 감소하지 않고 항상 같거나 증가함 (과적합 유도 가능).
- **비선형 모델에 대한 제한**: 비선형 회귀 모델에 적용할 경우 해석이 왜곡될 수 있음.
- **이상치에 민감**: 데이터에 이상치(outlier)가 많을 경우 R² 값이 왜곡될 수 있음.
---
## 수정된 R² (Adjusted R²)
R²의 단점을 보완하기 위해 고안된 지표로, **수정된 R²**(Adjusted R²)가 있습니다. 이는 변수의 수를 고려하여 패널티를 부여함으로써 모델의 복잡성을 반영합니다.
\[
\text{Adjusted } R^2 = 1 - \left( \frac{(1 - R^2)(n - 1)}{n - k - 1} \right)
\]
여기서:
- \(n\): 샘플 수
- \(k\): 독립 변수의 수
수정된 R²는 변수를 추가해도 모델의 설명력 향상이 충분하지 않으면 감소할 수 있으므로, **변수 선택**(feature selection) 시 유용합니다.
---
## R²와 다른 평가 지표의 비교
| 지표 | 설명 | 장점 | 단점 |
|------|------|------|------|
| **R²** | 설명된 분산의 비율 | 해석 쉬움, 표준화됨 | 변수 추가 시 증가, 비음수 보장 안 됨 |
| **RMSE** | 예측 오차의 제곱근 | 절대 오차 크기 제공 | 스케일에 의존 |
| **MAE** | 절대 오차의 평균 | 이상치에 강함 | 비선형 반영 부족 |
| **Adjusted R²** | 변수 수 보정된 R² | 과적합 방지 | 여전히 회귀 전용 |
---
## 활용 예시 (Python 코드)
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
import numpy as np
# 샘플 데이터 생성
X = np.random.rand(100, 3)
y = 3 * X[:, 0] + 2 * X[:, 1] - X[:, 2] + np.random.randn(100) * 0.1
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
r2 = r2_score(y_test, y_pred)
print(f"R² 점수: {r2:.4f}")
```
---
## 참고 자료 및 관련 문서
- [Scikit-learn: `r2_score` 문서](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html)
- James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). *An Introduction to Statistical Learning*. Springer.
- Kutner, M. H., et al. (2005). *Applied Linear Statistical Models*. McGraw-Hill.
---
## 관련 개념
- **회귀 분석**(Regression Analysis)
- **잔차 분석**(Residual Analysis)
- **과적합**(Overfitting)
- **교차 검증**(Cross-Validation)
R²는 단독으로 사용하기보다는, 모델의 전반적인 성능을 평가하기 위해 다양한 지표와 함께 종합적으로 활용되어야 합니다. 특히 실제 응용에서는 도메인 지식과 데이터의 특성을 고려한 평가가 중요합니다.