회귀 성능지표 5가지 — MAE·RMSE와 결정계수 R²까지

회귀식을 하나 만들었다면 다음 질문은 정해져 있다. 이 식이 얼마나 잘 맞히는가? 회귀 성능지표는 바로 이 질문에 숫자로 답하는 잣대다. 그런데 잣대가 하나가 아니다. 보고 자리에서 직관적으로 통하는 지표, 이론과 계산에 쓰기 좋은 지표, 그리고 “그냥 평균으로 찍는 것보다 얼마나 나은가”를 보는 지표가 각각 따로 있다.

이 글은 회귀 성능지표를 네 종류로 나눠 짚는다. 단위가 살아있는 MAE, 비율로 환산한 MAPE, 이론이 사랑하는 MSE와 RMSE, 마지막으로 가장 많이 인용되는 결정계수 R²까지다. 그리고 많은 사람이 오해하는 지점, R²이 어떻게 음수까지 내려가는지도 마지막에 풀어 둔다.

잔차를 요약하는 가장 쉬운 지표 — MAE

가장 직관적인 지표는 MAE(Mean Absolute Error, 평균 절대 오차)다. 이름 그대로다. 각 데이터에서 실제값과 예측값의 차이, 즉 잔차를 구하고, 부호를 없애려 절댓값을 씌운 뒤 평균 낸다.

MAE의 장점은 단위가 그대로 살아있다는 점이다. 랩타임을 초 단위로 예측했다면 MAE도 “평균 0.3초 빗나간다”처럼 초로 나온다. 그 분야를 아는 사람이라면 이 숫자만 보고 모델이 쓸 만한지 바로 감을 잡는다. 보고 자리에서 강력한 이유다.

단위 없이 비율로 — MAPE

문제는 그 분야를 모르는 사람에게 “MAE가 0.3초”라고 말해도 그게 좋은 건지 감이 안 온다는 점이다. 이럴 때 쓰는 게 MAPE(Mean Absolute Percentage Error, 평균 절대 백분율 오차)다. 잔차를 실제값으로 나눠 오차가 실제값의 몇 %인지로 바꾼 다음 평균 낸다.

분자와 분모에 같은 단위가 있어 서로 약분되므로, MAPE는 단위 없는 퍼센트로 나온다. “실제값 대비 평균 2% 빗나간다”는 말은 어떤 분야든 누구에게나 통한다. 보통 0~100% 사이 값으로 이해하기 쉽다.

아래 수치는 개념 설명을 위한 임의의 수치입니다.

실제 랩타임예측값절대 잔차절대 백분율
100.0100.40.40.40%
98.097.40.60.61%
102.0102.20.20.20%

이 시나리오는 개념 설명을 위한 가상의 상황입니다. 실제 F1 팀의 전략과 다를 수 있습니다.

위 세 점의 MAE는 (0.4 + 0.6 + 0.2) ÷ 3 = 0.4초, MAPE는 약 0.40%다. 같은 오차를 초로도, %로도 말할 수 있는 셈이다.

이론이 사랑하는 지표 — MSE와 RMSE

MAE와 MAPE에는 이론적으로 불편한 약점이 하나 있다. 절댓값은 뾰족한 꼭짓점이 생겨 그 지점에서 미분이 안 된다. 단순선형회귀에서 최선의 직선을 찾을 때 잔차제곱합을 미분해 최솟값을 구했던 것을 떠올려 보자. 미분이 안 되면 이 방식을 쓸 수 없다.

그래서 이론에서는 MSE(Mean Squared Error, 평균 제곱 오차)를 쓴다. 잔차를 제곱해서 평균 낸 값, 즉 잔차제곱합(SSE)을 데이터 개수로 나눈 것이다. 제곱은 매끄러워 어디서든 미분이 되므로 최소제곱법과 곧바로 이어진다. 대신 잔차를 제곱한 탓에 단위도 제곱돼 직관적 해석은 어렵다.

이 단위 문제를 풀려고 MSE에 제곱근을 씌운 것이 RMSE(Root Mean Squared Error)다. 제곱했던 것을 되돌려 원래 단위로 복원하므로, 이론적 이점은 살리면서 값도 읽기 쉬워 실무에서 널리 쓰인다.

평균보다 얼마나 나은가 — 결정계수 R²

가장 자주 인용되는 지표가 결정계수 R²다. 핵심은 “무엇과 비교하느냐”에 있다. 비교 대상은 가장 게으른 예측, 즉 아무 고민 없이 y의 평균값으로만 찍는 것이다. 코스가 어떻든 모든 랩을 똑같이 지난 시즌 평균 랩타임으로 찍어버리는 것과 같다.

R²은 이 평균 찍기 대비 회귀선이 오차를 얼마나 더 줄였는지를 비율로 나타낸다. 전체 변동은 두 조각으로 쪼개진다. 회귀선이 설명해 낸 부분과, 회귀선으로도 못 잡은 잔차다. 식으로는 전체 변동(SST) = 회귀가 설명한 부분(SSR) + 잔차(SSE)가 되고, R²은 그중 설명해 낸 비율이다.

R² = SSR / SST = 1 − (SSE / SST)

총변동이 회귀가 설명한 부분과 잔차로 나뉘는 결정계수 R² 분해 개념도
  • R²이 1에 가까움: 회귀선이 평균 찍기보다 오차를 거의 다 줄였다 — 잘 맞는 모델
  • R²이 0에 가까움: 회귀선이 평균 찍기와 별 차이 없다 — 굳이 회귀할 이유가 옅다

학습 데이터에서 R²은 0과 1 사이에 놓인다. 이 표준적인 정의와 계산은 scikit-learn 모델 평가 문서에서 확인할 수 있다.

R²이 음수가 나온다면 — 학습과 테스트 데이터

여기서 많이들 오해한다. “R²은 0~1이라며 왜 음수가 나오죠?”라는 질문이 실제로 자주 나온다. 답은 데이터를 어디서 쟀느냐에 있다.

모델은 보통 데이터를 학습용과 테스트용으로 나눠(예: 7:3) 만든다. 학습 데이터로 회귀식을 만들고, 그 만들기에 쓰지 않은 테스트 데이터로 성능을 잰다. 내가 만든 데이터로 성능까지 재는 건 컨닝에 가깝기 때문이다.

📍 여기가 핵심이다. R²이 0과 1 사이인 것은 어디까지나 학습 데이터에서다. 모델이 학습 데이터에만 지나치게 맞춰지면(과적합), 처음 보는 테스트 데이터에서는 회귀선이 오히려 평균 찍기보다 더 크게 빗나갈 수 있다. 평균보다 나쁘다는 뜻이고, 그러면 R²은 음수로 내려간다. 즉 테스트 데이터의 음수 R²은 버그가 아니라 “이 모델은 새 데이터에서 평균만도 못하다”는 정직한 신호다.

참고로 회귀식의 각 기울기가 통계적으로 의미 있는지는 또 다른 문제다. 회귀계수도 표본마다 값이 흔들리는 통계량이라, 기울기가 0인지 아닌지를 가설검정으로 따진다. 성능지표가 모델 전체의 적합도를 본다면, 이 검정은 개별 변수가 쓸모 있는지를 가린다.

회귀 성능지표 핵심 요약

  • MAE는 절대 잔차의 평균으로 단위가 살아있어 직관적이다 — 그 분야를 아는 사람에게 보고할 때 좋다.
  • MAPE는 잔차를 실제값 대비 %로 바꾼 값이라 단위가 없다 — 분야를 모르는 사람에게 설명할 때 좋다.
  • MSE는 잔차 제곱의 평균(SSE/n)으로 미분이 돼 이론·최적화에 쓰고, RMSE는 거기에 제곱근을 씌워 원 단위로 되돌린 값이다.
  • 결정계수 R²은 평균 찍기 대비 회귀가 오차를 얼마나 줄였는지의 비율(SSR/SST)로, 1에 가까울수록 좋다.
  • 학습 데이터의 R²은 0~1이지만, 과적합된 모델은 테스트 데이터에서 R²이 음수가 될 수 있다.

함께 읽으면 좋은 글

FAQ

목적에 따라 다릅니다. 오차를 실제 단위로 직관적으로 보고할 때는 MAE나 RMSE, 분야를 모르는 사람에게 설명할 때는 MAPE, 모델이 평균 찍기보다 얼마나 나은지를 한눈에 보여줄 때는 R²이 적합합니다. 보통 여러 지표를 함께 놓고 봅니다. 하나만으로 판단하면 놓치는 면이 생깁니다.

MSE는 잔차를 제곱해 미분이 매끄러워 최소제곱법 같은 최적화 이론에 쓰기 좋지만, 단위가 제곱돼 값 자체는 직관적이지 않습니다. RMSE는 MSE에 제곱근을 씌워 원래 단위로 되돌린 값이라 사람이 읽기 쉽습니다. 계산·이론에는 MSE, 보고·해석에는 RMSE가 편해 상황에 맞게 나눠 씁니다.

학습 데이터의 R²만 높은 것은 위험 신호일 수 있습니다. 학습 데이터에 지나치게 맞춰진 과적합 모델은 R²이 1에 가깝게 나오다가도 테스트 데이터에서는 성능이 뚝 떨어지거나 음수로 돌아섭니다. 그래서 학습 데이터의 R²만 보지 말고, 반드시 테스트 데이터의 성능과 함께 비교해야 합니다.

관련 글 보기