본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 6. · 14 Views
회귀 모델 평가 완벽 가이드 MSE RMSE R2
머신러닝 회귀 모델의 성능을 평가하는 핵심 지표인 MSE, RMSE, R²에 대해 알아봅니다. 실무에서 어떤 상황에 어떤 지표를 사용해야 하는지 쉽게 설명합니다.
목차
1. MSE 평균제곱오차
김개발 씨는 부동산 가격 예측 모델을 만들었습니다. 모델이 예측한 값과 실제 값이 얼마나 차이 나는지 확인하고 싶었습니다.
선배에게 물었더니 "MSE부터 확인해봐"라는 답이 돌아왔습니다.
**MSE(Mean Squared Error)**는 예측값과 실제값의 차이를 제곱해서 평균 낸 값입니다. 마치 학생들의 시험 점수 오차를 계산하는 것과 같습니다.
제곱을 하기 때문에 큰 오차에 더 민감하게 반응하며, 값이 0에 가까울수록 좋은 모델입니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import mean_squared_error
# 실제 집값 (단위: 억원)
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0])
# 모델이 예측한 집값
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2])
# MSE 계산: 오차를 제곱해서 평균
mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse:.4f}") # 출력: MSE: 0.0560
# 직접 계산하면 이렇습니다
mse_manual = np.mean((y_true - y_pred) ** 2)
print(f"수동 계산 MSE: {mse_manual:.4f}")
김개발 씨는 입사 6개월 차 데이터 분석가입니다. 최근 부동산 가격 예측 프로젝트를 맡게 되었는데, 모델을 만들고 나니 한 가지 고민이 생겼습니다.
과연 이 모델이 잘 예측하고 있는 걸까요? 선배 박시니어 씨가 다가와 물었습니다.
"모델 성능은 어떻게 나왔어요?" 김개발 씨는 당황했습니다. 성능을 어떻게 측정해야 하는지 몰랐기 때문입니다.
그렇다면 MSE란 정확히 무엇일까요? 쉽게 비유하자면, MSE는 마치 양궁 선수가 과녁 중심에서 얼마나 벗어났는지 측정하는 것과 같습니다.
화살이 중심에서 멀어질수록 점수가 낮아지듯이, 예측값이 실제값에서 멀어질수록 MSE는 높아집니다. 여기서 중요한 점은 오차를 제곱한다는 것입니다.
왜 제곱을 할까요? 두 가지 이유가 있습니다.
첫째, 오차에는 양수와 음수가 있습니다. 어떤 예측은 실제보다 크고, 어떤 예측은 실제보다 작습니다.
그냥 더하면 서로 상쇄되어 버립니다. 제곱을 하면 모든 값이 양수가 되어 이 문제가 해결됩니다.
둘째, 제곱은 큰 오차를 더 크게 만듭니다. 1의 오차는 1이 되지만, 3의 오차는 9가 됩니다.
이렇게 하면 큰 실수에 더 많은 페널티를 줄 수 있습니다. 집값을 1억 틀린 것과 10억 틀린 것은 다르게 취급해야 하니까요.
위의 코드를 살펴보겠습니다. 먼저 실제 집값 5개와 모델이 예측한 집값 5개를 준비했습니다.
mean_squared_error 함수를 사용하면 간단히 MSE를 계산할 수 있습니다. 직접 계산하는 과정도 살펴보면, 각 예측값과 실제값의 차이를 구하고, 이를 제곱한 뒤, 평균을 냅니다.
결과는 0.056이 나왔습니다. 실무에서는 MSE를 어떻게 활용할까요?
여러 모델을 비교할 때 MSE가 낮은 모델을 선택합니다. 또한 모델을 튜닝할 때 MSE가 줄어드는 방향으로 파라미터를 조정합니다.
하지만 주의할 점이 있습니다. MSE는 원래 단위의 제곱입니다.
집값이 억원 단위라면 MSE는 억원의 제곱 단위가 됩니다. 직관적으로 해석하기 어렵다는 단점이 있습니다.
다시 김개발 씨의 이야기로 돌아가 봅시다. MSE가 0.056이라는 결과를 보고 박시니어 씨가 말했습니다.
"나쁘지 않네요. 그런데 RMSE로 보면 더 직관적일 거예요."
실전 팁
💡 - MSE는 이상치에 민감합니다. 데이터에 극단적인 값이 있다면 먼저 처리하세요.
- 여러 모델을 비교할 때는 동일한 테스트 데이터셋으로 MSE를 계산해야 합니다.
2. RMSE 평균제곱근오차
MSE를 확인한 김개발 씨는 한 가지 의문이 들었습니다. "0.056이 좋은 건지 나쁜 건지 감이 안 오는데요?" 박시니어 씨가 웃으며 답했습니다.
"그래서 RMSE를 쓰는 거예요."
**RMSE(Root Mean Squared Error)**는 MSE에 루트를 씌운 값입니다. 마치 넓이를 다시 길이로 변환하는 것과 같습니다.
원래 데이터와 같은 단위를 가지기 때문에 해석이 훨씬 직관적입니다. 역시 값이 작을수록 좋은 모델입니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import mean_squared_error
# 실제 집값과 예측 집값 (단위: 억원)
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0])
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2])
# RMSE 계산: MSE에 루트를 씌움
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)
print(f"RMSE: {rmse:.4f}억원") # 출력: RMSE: 0.2366억원
# sklearn 최신 버전에서는 squared=False 옵션 사용
rmse_direct = mean_squared_error(y_true, y_pred, squared=False)
print(f"직접 RMSE: {rmse_direct:.4f}억원")
김개발 씨는 MSE가 0.056이라는 숫자를 보고 고민에 빠졌습니다. 이 숫자가 좋은 건지, 나쁜 건지 도무지 감이 오지 않았습니다.
억원의 제곱이라니, 상상이 되지 않았습니다. 박시니어 씨가 설명을 이어갔습니다.
"MSE는 제곱을 하니까 단위가 이상해져요. 그래서 루트를 씌워서 원래 단위로 돌려놓은 게 RMSE예요." RMSE는 Root Mean Squared Error의 약자입니다.
말 그대로 MSE에 루트(제곱근)를 씌운 것입니다. 비유를 들어보겠습니다.
방의 넓이가 9제곱미터라고 하면 감이 잘 안 옵니다. 하지만 한 변이 3미터라고 하면 바로 이해가 됩니다.
RMSE도 마찬가지입니다. 제곱된 오차를 다시 원래 스케일로 되돌려 놓는 것입니다.
위 코드에서 RMSE는 약 0.237억원, 즉 약 2,370만원이 나왔습니다. 이제 해석이 가능합니다.
우리 모델은 평균적으로 약 2,370만원 정도의 오차로 집값을 예측한다는 뜻입니다. 왜 MSE 대신 RMSE를 더 자주 사용할까요?
첫째, 원래 데이터와 같은 단위를 가집니다. 집값이 억원이면 RMSE도 억원입니다.
보고서에 "평균 오차가 0.237억원입니다"라고 쓸 수 있습니다. 둘째, 직관적인 해석이 가능합니다.
팀장님이나 비개발자에게 설명할 때 "평균적으로 2천만원 정도 차이가 납니다"라고 말하면 바로 이해합니다. 실무에서 RMSE는 매우 널리 사용됩니다.
캐글 같은 데이터 과학 경진대회에서도 회귀 문제의 평가 지표로 RMSE를 많이 채택합니다. sklearn에서는 mean_squared_error 함수에 squared=False 옵션을 주면 바로 RMSE를 얻을 수 있습니다.
굳이 np.sqrt를 따로 호출할 필요가 없어서 편리합니다. 하지만 RMSE도 완벽하지는 않습니다.
MSE와 마찬가지로 이상치에 민감합니다. 또한 절대적인 기준이 없어서 "RMSE가 0.237이면 좋은 모델이다"라고 단정 짓기 어렵습니다.
도메인과 데이터 스케일에 따라 판단해야 합니다. 김개발 씨가 물었습니다.
"그럼 좋은 모델인지 아닌지는 어떻게 판단하죠?" 박시니어 씨가 답했습니다. "그래서 R²라는 지표도 함께 봐야 해요."
실전 팁
💡 - RMSE는 보고서나 발표에서 비전문가에게 설명할 때 유용합니다.
- sklearn 0.22 이상에서는 squared=False 옵션으로 RMSE를 바로 계산할 수 있습니다.
3. MAE 평균절대오차
김개발 씨가 RMSE를 이해하고 나자, 박시니어 씨가 덧붙였습니다. "이상치가 많은 데이터라면 MAE도 확인해보는 게 좋아요." 새로운 용어가 또 등장했습니다.
**MAE(Mean Absolute Error)**는 예측 오차의 절댓값을 평균 낸 값입니다. 마치 집과 회사 사이의 거리를 재는 것처럼 단순합니다.
제곱을 하지 않기 때문에 이상치에 덜 민감하며, RMSE와 함께 사용하면 모델의 특성을 더 잘 파악할 수 있습니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import mean_absolute_error
# 실제 집값과 예측 집값 (단위: 억원)
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0])
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2])
# MAE 계산: 오차의 절댓값 평균
mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae:.4f}억원") # 출력: MAE: 0.2000억원
# 직접 계산
mae_manual = np.mean(np.abs(y_true - y_pred))
print(f"수동 계산 MAE: {mae_manual:.4f}억원")
# RMSE와 비교
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_true, y_pred, squared=False)
print(f"RMSE: {rmse:.4f}억원") # MAE < RMSE 관계 확인
RMSE를 배운 김개발 씨는 한 가지 의문이 생겼습니다. 왜 굳이 제곱을 했다가 다시 루트를 씌우는 걸까요?
그냥 절댓값을 쓰면 안 되나요? 좋은 질문입니다.
실제로 그런 지표가 있습니다. 바로 **MAE(Mean Absolute Error)**입니다.
MAE는 예측값과 실제값의 차이에 절댓값을 취한 뒤 평균을 구합니다. 가장 단순하고 직관적인 오차 측정 방법입니다.
비유를 들어보겠습니다. 집에서 회사까지 거리를 잴 때, 동쪽으로 3km 갔다가 서쪽으로 2km 가면 총 이동 거리는 5km입니다.
방향은 중요하지 않고 절대적인 거리만 중요합니다. MAE도 마찬가지입니다.
양의 오차든 음의 오차든 상관없이 얼마나 차이가 나는지만 봅니다. 위 코드에서 MAE는 0.2억원, 즉 2,000만원이 나왔습니다.
RMSE는 약 2,370만원이었습니다. MAE가 RMSE보다 작은 이유는 무엇일까요?
RMSE는 큰 오차에 더 많은 가중치를 줍니다. 제곱을 하기 때문입니다.
반면 MAE는 모든 오차를 동등하게 취급합니다. 따라서 데이터에 큰 오차가 있다면 RMSE는 MAE보다 더 높아집니다.
이 차이가 중요한 이유가 있습니다. RMSE와 MAE의 차이가 크다면, 데이터에 이상치가 있거나 모델이 특정 케이스에서 큰 오차를 내고 있다는 신호입니다.
실무에서는 언제 MAE를 사용할까요? 이상치가 많고 그것을 크게 신경 쓰고 싶지 않을 때 유용합니다.
예를 들어, 배달 시간 예측에서 교통 체증으로 인한 극단적인 지연은 예외적인 상황입니다. 이런 경우 MAE가 더 적절할 수 있습니다.
반면 큰 오차가 치명적인 상황에서는 RMSE가 더 적합합니다. 의료 진단이나 금융 리스크 예측에서는 큰 실수를 절대 허용하면 안 되기 때문입니다.
박시니어 씨가 정리해줬습니다. "MAE와 RMSE를 함께 보면 모델의 오차 분포를 파악할 수 있어요.
둘 다 사용하는 게 좋습니다."
실전 팁
💡 - MAE와 RMSE의 차이가 크면 이상치나 큰 오차가 존재한다는 신호입니다.
- 비즈니스 요구사항에 따라 MAE와 RMSE 중 적절한 지표를 선택하세요.
4. R2 결정계수
김개발 씨가 물었습니다. "RMSE가 0.237이면 좋은 건가요, 나쁜 건가요?" 박시니어 씨가 답했습니다.
"그건 데이터 스케일에 따라 달라요. 0과 1 사이의 상대적인 지표가 필요하면 R²를 보세요."
**R²(R-squared, 결정계수)**는 모델이 데이터의 변동성을 얼마나 설명하는지 나타내는 지표입니다. 마치 시험에서 100점 만점 중 몇 점을 받았는지 알려주는 것과 같습니다.
1에 가까울수록 좋은 모델이며, 0이면 평균으로 예측하는 것과 다름없습니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import r2_score
# 실제 집값과 예측 집값 (단위: 억원)
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0])
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2])
# R² 계산: 모델이 설명하는 변동성 비율
r2 = r2_score(y_true, y_pred)
print(f"R² Score: {r2:.4f}") # 출력: R² Score: 0.9608
# 직접 계산: 1 - (잔차변동 / 총변동)
ss_res = np.sum((y_true - y_pred) ** 2) # 잔차제곱합
ss_tot = np.sum((y_true - np.mean(y_true)) ** 2) # 총제곱합
r2_manual = 1 - (ss_res / ss_tot)
print(f"수동 계산 R²: {r2_manual:.4f}")
# 해석: 모델이 데이터 변동의 96%를 설명합니다
RMSE가 0.237억원이라는 결과를 본 김개발 씨는 여전히 고민이었습니다. 이 숫자가 좋은 건지 나쁜 건지 판단하기가 어려웠습니다.
평균 집값이 5억인 데이터에서 0.237억 오차는 괜찮아 보이지만, 평균이 50억이라면 어떨까요? 바로 이런 문제를 해결하기 위해 **R²(결정계수)**가 등장합니다.
R²는 0과 1 사이의 값으로, 모델의 성능을 상대적으로 평가합니다. 데이터 스케일에 관계없이 해석할 수 있다는 큰 장점이 있습니다.
비유를 들어보겠습니다. 학교 시험에서 80점을 받았다고 해봅시다.
이 점수가 좋은지 나쁜지는 만점이 100점인지 200점인지에 따라 다릅니다. 하지만 "전체의 80%를 맞췄다"라고 하면 바로 이해가 됩니다.
R²도 마찬가지입니다. R²는 "모델이 데이터의 변동성을 얼마나 설명하는가"를 나타냅니다.
R²가 0.96이라면, 모델이 데이터 변동의 96%를 설명한다는 뜻입니다. 나머지 4%는 모델이 설명하지 못하는 오차입니다.
수식을 살펴보면, R²는 1에서 (잔차변동/총변동)을 뺀 값입니다. 잔차변동은 예측값과 실제값의 차이, 총변동은 실제값과 평균의 차이입니다.
R²의 해석 기준은 다음과 같습니다. 0.9 이상이면 매우 좋은 모델입니다.
0.70.9면 좋은 모델입니다. 0.50.7이면 보통입니다.
0.5 미만이면 개선이 필요합니다. 물론 이 기준은 도메인에 따라 다를 수 있습니다.
흥미로운 점은 R²가 음수가 될 수도 있다는 것입니다. 모델이 단순 평균보다 못한 예측을 하면 R²는 음수가 됩니다.
이런 경우 모델에 심각한 문제가 있다는 신호입니다. 위 코드에서 R²는 0.9608이 나왔습니다.
즉, 우리 모델은 집값 변동의 약 96%를 설명합니다. 상당히 좋은 성능입니다.
김개발 씨가 환하게 웃었습니다. "이제 팀장님께 보고드릴 때 R²가 0.96이라고 말씀드리면 되겠네요!" 박시니어 씨가 고개를 끄덕였습니다.
실전 팁
💡 - R²는 데이터 스케일에 독립적이어서 다른 프로젝트와 비교하기 좋습니다.
- R²가 음수라면 모델에 심각한 문제가 있는 것이니 반드시 점검하세요.
5. Adjusted R2 조정된결정계수
팀 미팅에서 김개발 씨가 R²가 0.96이라고 발표하자, 시니어 개발자가 질문했습니다. "혹시 특성 변수가 너무 많이 들어간 건 아니에요?
Adjusted R²는 확인해봤나요?"
**Adjusted R²(조정된 결정계수)**는 모델에 사용된 특성 변수의 개수를 고려해 R²를 보정한 값입니다. 마치 팀원 수를 고려해 생산성을 평가하는 것과 같습니다.
불필요한 변수를 추가하면 R²는 오르지만 Adjusted R²는 오히려 떨어질 수 있습니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import r2_score
# 예시 데이터
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0, 8.2, 9.1])
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2, 8.0, 9.3])
# R² 계산
r2 = r2_score(y_true, y_pred)
# Adjusted R² 계산
n = len(y_true) # 샘플 수
p = 3 # 특성 변수 개수 (예: 면적, 층수, 역세권 여부)
adjusted_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)
print(f"R²: {r2:.4f}")
print(f"Adjusted R² (변수 {p}개): {adjusted_r2:.4f}")
# 변수가 더 많을 때
p2 = 5
adjusted_r2_more = 1 - (1 - r2) * (n - 1) / (n - p2 - 1)
print(f"Adjusted R² (변수 {p2}개): {adjusted_r2_more:.4f}")
김개발 씨는 모델 성능을 높이기 위해 특성 변수를 계속 추가했습니다. 면적, 층수, 역세권 여부, 건축연도, 학군, 조망권, 주차장 수...
변수를 추가할 때마다 R²가 조금씩 올라갔습니다. "이렇게 계속 변수를 넣으면 R²가 1에 가까워지겠네요!" 박시니어 씨가 웃으며 말했습니다.
"그게 바로 R²의 함정이에요." 일반 R²는 변수를 추가하면 무조건 올라가거나 유지됩니다. 절대 내려가지 않습니다.
심지어 의미 없는 변수를 넣어도 마찬가지입니다. 이것이 **과적합(Overfitting)**으로 이어질 수 있습니다.
Adjusted R²는 이 문제를 해결합니다. 특성 변수의 개수를 고려해서 R²를 조정합니다.
비유를 들어보겠습니다. 회사에서 팀의 생산성을 평가한다고 해봅시다.
10명이 100개의 제품을 만들면 1인당 10개입니다. 20명이 150개를 만들면 총생산량은 늘었지만 1인당 생산량은 7.5개로 줄었습니다.
인원을 고려한 생산성이 더 의미 있는 지표인 것처럼, Adjusted R²도 변수 개수를 고려합니다. 수식을 보면, Adjusted R²는 R²에 (n-1)/(n-p-1) 비율로 페널티를 줍니다.
여기서 n은 샘플 수, p는 특성 변수 개수입니다. 변수가 많아질수록 페널티가 커집니다.
위 코드에서 변수 3개일 때 Adjusted R²와 변수 5개일 때를 비교해봤습니다. 변수가 늘어나면 Adjusted R²가 낮아질 수 있습니다.
이는 추가된 변수가 모델 개선에 충분히 기여하지 못한다는 신호입니다. 실무에서는 Adjusted R²를 통해 최적의 변수 조합을 찾습니다.
R²만 보면 변수를 계속 추가하고 싶은 유혹에 빠지지만, Adjusted R²를 보면 언제 멈춰야 하는지 알 수 있습니다. 김개발 씨가 깨달음을 얻었습니다.
"그래서 무작정 변수를 추가하면 안 되는 거군요!" 박시니어 씨가 고개를 끄덕였습니다. "특성 선택(Feature Selection)이 중요한 이유가 바로 그거예요."
실전 팁
💡 - 변수를 추가할 때마다 R²와 Adjusted R²를 함께 확인하세요.
- Adjusted R²가 떨어지기 시작하면 변수 추가를 멈추는 것이 좋습니다.
6. 지표들의 종합 활용
모든 지표를 배운 김개발 씨가 마지막으로 질문했습니다. "그래서 실무에서는 어떤 지표를 봐야 하나요?" 박시니어 씨가 화이트보드에 그림을 그리며 설명을 시작했습니다.
회귀 모델 평가에서는 하나의 지표만 보면 안 됩니다. MSE/RMSE는 오차의 크기를, MAE는 이상치 영향을 줄인 오차를, R²는 상대적인 설명력을 보여줍니다.
여러 지표를 종합적으로 분석해야 모델의 진짜 성능을 파악할 수 있습니다.
다음 코드를 살펴봅시다.
import numpy as np
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
def evaluate_regression_model(y_true, y_pred, feature_count=None):
"""회귀 모델 종합 평가 함수"""
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_true, y_pred)
r2 = r2_score(y_true, y_pred)
print("=" * 40)
print("회귀 모델 평가 결과")
print("=" * 40)
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"R²: {r2:.4f}")
# Adjusted R² (특성 개수가 주어진 경우)
if feature_count:
n = len(y_true)
adj_r2 = 1 - (1 - r2) * (n - 1) / (n - feature_count - 1)
print(f"Adjusted R²: {adj_r2:.4f}")
# 오차 분석
print("-" * 40)
if rmse > mae * 1.2:
print("주의: RMSE가 MAE보다 크게 높습니다.")
print(" 큰 오차가 존재할 수 있습니다.")
return {"mse": mse, "rmse": rmse, "mae": mae, "r2": r2}
# 사용 예시
y_true = np.array([3.5, 4.2, 5.1, 6.3, 7.0, 8.2])
y_pred = np.array([3.3, 4.5, 4.8, 6.1, 7.2, 8.0])
evaluate_regression_model(y_true, y_pred, feature_count=3)
김개발 씨의 최종 발표 날이 왔습니다. 부동산 가격 예측 모델을 팀 전체에 발표하는 날입니다.
이제 어떤 지표를 어떻게 설명해야 할지 명확히 알고 있었습니다. 박시니어 씨와 함께 정리한 내용을 발표했습니다.
"이 모델의 RMSE는 0.237억원, 즉 약 2,370만원입니다. R²는 0.96으로, 모델이 집값 변동의 96%를 설명합니다." 팀장님이 물었습니다.
"이상치에 대한 분석은요?" 김개발 씨가 자신있게 답했습니다. "MAE는 0.2억원이고, RMSE와의 차이가 크지 않아 극단적인 이상치는 없는 것으로 보입니다." 실무에서 각 지표는 고유한 역할이 있습니다.
RMSE는 실제 비즈니스 관점에서 오차를 해석할 때 사용합니다. "평균적으로 얼마나 틀리는가"를 직관적으로 보여줍니다.
고객이나 비개발자에게 설명하기 좋습니다. MAE는 이상치의 영향을 파악하고 싶을 때 유용합니다.
RMSE와 MAE를 비교하면 오차 분포의 특성을 알 수 있습니다. 둘의 차이가 크면 큰 오차가 존재한다는 신호입니다.
R²는 모델의 상대적 성능을 평가할 때 사용합니다. 다른 모델과 비교하거나, 다른 프로젝트의 결과와 비교할 때 유용합니다.
"이 모델이 얼마나 좋은가"를 한눈에 보여줍니다. Adjusted R²는 특성 선택 과정에서 핵심적입니다.
변수를 추가할 가치가 있는지 판단할 때 확인합니다. 위 코드는 이 모든 지표를 한 번에 계산하는 함수입니다.
실무에서 자주 사용하게 될 유틸리티 함수이니 저장해 두세요. 발표가 끝나고 팀장님이 말했습니다.
"김개발 씨, 이제 모델 평가는 확실히 이해했군요. 다음 프로젝트도 기대합니다." 김개발 씨는 뿌듯한 마음으로 자리로 돌아왔습니다.
6개월 전만 해도 MSE가 뭔지도 몰랐는데, 이제는 자신있게 모델을 평가하고 설명할 수 있게 되었습니다. 여러분도 이 글을 통해 회귀 모델 평가의 기초를 익히셨기를 바랍니다.
다음 프로젝트에서 MSE, RMSE, MAE, R², Adjusted R²를 종합적으로 활용해 보세요. 더 나은 모델을 만드는 첫걸음이 될 것입니다.
실전 팁
💡 - 보고서에는 RMSE와 R²를 함께 제시하면 비개발자도 이해하기 쉽습니다.
- MAE와 RMSE의 비율을 확인하는 습관을 들이세요. 모델의 약점을 발견할 수 있습니다.
- 평가 함수를 만들어두면 모든 프로젝트에서 일관되게 사용할 수 있습니다.
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.