분류가 "맞았나 틀렸나"를 따진다면, 회귀는 "얼마나 빗나갔나"를 잰다. 각 샘플 i에 대해 오차는 다음과 같다.
residual_i = y_i (실제값) - ŷ_i (예측값)
모든 회귀 지표는 이 오차들을 모아 하나의 점수로 압축한다. 차이는 오차를 어떻게 다루느냐 — 제곱하는가, 절댓값을 취하는가, 비율로 보는가 — 에 있다.
MAE = (1/n) Σ |y_i - ŷ_i|
MSE = (1/n) Σ (y_i - ŷ_i)²
RMSE = √[ (1/n) Σ (y_i - ŷ_i)² ]
항목 MAE RMSE 오차 처리 절댓값 제곱 후 제곱근 단위 타깃과 동일(예: 달러) 타깃과 동일 이상치 민감도 낮음(강건) 높음(증폭) 모든 오차 취급 동등 큰 오차에 가중 적합한 상황 이상치가 데이터 품질 문제일 때 한 번의 큰 실수가 치명적일 때 최적화 대상 조건부 중앙값 조건부 평균
오차 [1, 1, 1, 1, 6]
MAE = (1+1+1+1+6)/5 = 2.0
RMSE = √((1+1+1+1+36)/5) = √8 = 2.83 ← 6짜리 오차가 더 부각됨
같은 오차 집합이라도 RMSE ≥ MAE 이며, 둘의 격차가 클수록 큰 오차(이상치)가 존재함을 시사한다.
모든 오차 크기가 같으면 RMSE = MAE가 된다. 즉 격차 자체가 진단 신호다.
RMSE는 SageMaker 빌트인 회귀(XGBoost, Linear Learner 등)의 기본 평가/튜닝 지표로 자주 쓰인다.
RMSE와 MAE의 선택은 "큰 오차를 얼마나 벌줄 것인가"의 문제다. RMSE는 제곱으로 큰 오차를 강하게 벌주므로, 한 번의 큰 실수가 치명적인 문제(수요 과소예측으로 인한 품절 등)에 맞다. MAE는 큰 오차도 비례적으로만 반영하므로 이상치가 데이터 품질 문제(센서 오류 등)일 때 안정적이다.
MAPE = (100%/n) Σ |y_i - ŷ_i| / |y_i|
오차를 실제값 대비 비율(%)로 환산해 평균한다.
스케일 무관 : 서로 다른 단위/규모의 예측 성능을 비교 가능(예: 매출 규모가 다른 여러 지점)
상대 오차 관점: 1000을 1100으로 예측하면 MAPE 10%
함정 : 실제값 y_i가 0이거나 0에 가까우면 분모가 폭발하거나 정의 불가
[같은 절대오차 1.0이 실제값에 따라 어떻게 보이나]
실제값 y = 1000, 예측 1001 → |1|/1000 = 0.1%
실제값 y = 10, 예측 11 → |1|/10 = 10.0%
실제값 y = 1, 예측 2 → |1|/1 = 100.0%
실제값 y = 0.1, 예측 1.1 → |1|/0.1 = 1000.0% ← 한 건이 평균을 지배
실제값 y = 0, 예측 1 → |1|/0 = 정의 불가(∞)
수요예측처럼 규모가 다른 항목을 비교할 때 유용하지만, 0에 가까운 값이 많으면 부적합 하다. 품절·비수기·신규 상품처럼 실제값 0이 흔한 데이터가 대표적이다.
MAPE는 비대칭 이기도 하다. 과소예측은 최대 100%까지지만(0으로 찍는 경우), 과대예측은 상한이 없다. 그래서 MAPE를 최소화하면 모델이 낮게 예측하는 쪽으로 편향될 수 있다.
⚠️ 함정 : "스케일이 다른 지점들을 비교하고 싶다"만 보고 MAPE를 고르면 안 된다. 지문에 "일부 지점 매출이 0에 가깝다", "수요가 없는 날이 있다"가 함께 있으면 MAPE는 오답이고, 스케일 보정이 필요하면 RMSLE나 지점별 정규화를 검토한다.
R² = 1 - (SS_res / SS_tot)
SS_res = Σ (y_i - ŷ_i)² (모델 오차 제곱합)
SS_tot = Σ (y_i - ȳ)² (평균선 대비 분산)
"모델이 타깃 분산의 몇 %를 설명하는가"를 잰다.
R² 값 의미 1.0 완벽한 예측 (SS_res = 0) 0.7 ~ 0.9 상당한 설명력 0 그냥 평균값(ȳ)으로 예측한 것과 같은 수준 음수 평균보다도 못한 모델 — 신호를 전혀 못 잡음
단위가 없어 서로 다른 문제 간 비교에 좋지만, 절대 오차 크기는 알려주지 않는다 . R² 0.9라도 RMSE가 사업상 감당 못 할 크기일 수 있다.
그래서 R²(상대 설명력)와 RMSE/MAE(절대 오차)는 함께 본다.
피처를 추가하면 R²는 의미 없이도 올라간다. 무관한 컬럼이라도 잡음에 맞춰 SS_res를 조금은 줄이기 때문이다.
Adjusted R² = 1 - (1 - R²) × (n - 1) / (n - p - 1)
n = 표본 수, p = 피처(설명변수) 수
항목 R² Adjusted R² 피처 추가 시 절대 감소하지 않음 기여가 없으면 감소 값의 범위 최대 1 (음수 가능) 최대 1, R²보다 항상 작거나 같음 용도 단일 모델의 설명력 피처 수가 다른 모델 간 비교 함정 피처만 늘려도 좋아 보임 표본 수 n이 작고 p가 크면 급격히 나빠짐
R²는 "기준선 대비 얼마나 나은가"를 잰다는 점이 핵심이다. 기준선은 항상 타깃의 평균(ȳ)이다. 그래서 R²가 음수면 모델이 단순 평균보다도 못하다는 뜻이고, 이는 모델이 신호를 전혀 못 잡았다는 강한 경고다. RMSE/MAE가 절대 오차 크기를, R²가 상대적 설명력을 보완적으로 알려준다.
지표 단위 이상치 민감도 언제 쓰나 언제 쓰면 안 되나 MAE 타깃과 동일 낮음 이상치가 노이즈일 때, 해석 쉬운 오차가 필요할 때 큰 오차를 특별히 벌주고 싶을 때 RMSE 타깃과 동일 높음 큰 실수가 치명적일 때, 튜닝 기본 지표 이상치가 센서 오류 등 데이터 품질 문제일 때 MSE 타깃 단위의 제곱 매우 높음 최적화 손실함수로 결과를 사람에게 보고할 때(단위 해석 불가) MAPE % (무단위) 중간 규모가 다른 항목 비교, 상대 오차가 의미 있을 때 실제값이 0이거나 0 근처일 때 R² 무단위 높음(제곱합 기반) 설명력을 비율로 보고할 때 절대 오차 크기가 중요한 의사결정 Adjusted R² 무단위 높음 피처 수가 다른 모델을 비교할 때 표본이 매우 적을 때 RMSLE 로그 스케일 낮음 타깃이 크게 왜곡(skew)되고 상대 오차가 중요할 때 음수 타깃이 있을 때
회귀 지표를 골라야 한다
├─ 데이터에 극단 이상치가 있고 그것이 오류인가?
│ ├─ 예 → MAE (제곱하지 않아 강건)
│ └─ 아니오 ↓
├─ 한 번의 큰 오차가 사업상 치명적인가? (품절·과충전 등)
│ ├─ 예 → RMSE (큰 오차를 제곱으로 벌줌)
│ └─ 아니오 ↓
├─ 규모가 제각각인 항목들을 한 지표로 비교해야 하나?
│ ├─ 실제값이 0 근처가 없다 → MAPE
│ └─ 실제값 0이 흔하다 → MAPE 금지, RMSE/MAE 또는 정규화
└─ "얼마나 설명하는가"를 비율로 보고해야 하나?
├─ 단일 모델 → R²
└─ 피처 수가 다른 모델 비교 → Adjusted R²
지표 하나로 좋다고 판단해도 모델은 체계적 결함을 가질 수 있다. 잔차 플롯 (예측값 vs 잔차)을 그리면 드러난다.
① 이상적 — 등분산·패턴 없음 ② 깔때기 — 이분산성
잔차 잔차
+│ · · · · · +│ · ·
│ · · · · · │ · · · ·
0├──·──·───·──·───·──→ 예측값 0├──·──·───·───·────·──→
│ · · · · · │ · · · ·
-│ · · · · -│ · ·
→ 잔차 0 중심, 폭이 일정 → 예측값이 커질수록 퍼짐
③ U자/곡선 — 비선형성 미포착 ④ 치우침 — 체계적 편향
잔차 잔차
+│ · · +│ · · · · · ·
│ · · │ · · · · · ·
0├────·─────────·────────→ 0├──────────────────────→
│ · · · │
-│ · · · │ (거의 모두 0 위)
→ 선형모델의 한계, 피처 변환 필요 → 일관되게 과소예측
패턴 진단 조치 무작위 산포, 폭 일정 정상 그대로 진행 곡선/U자 비선형성 미포착 피처 변환(제곱·로그), 비선형 모델(트리·부스팅) 깔때기 모양 이분산성(heteroscedasticity) 타깃 로그 변환, 가중 회귀 한쪽으로 치우침 편향(bias), 체계적 과대/과소 예측 절편·피처 재점검, 데이터 시프트 확인 시간축 자기상관 시계열 구조 미반영 시차(lag) 피처, 시계열 모델
import matplotlib.pyplot as plt
residuals = y_true - y_pred
plt.scatter(y_pred, residuals, alpha = 0.3 )
plt.axhline( 0 , color = "red" , linestyle = "--" )
plt.xlabel( "예측값" )
plt.ylabel( "잔차 (실제 - 예측)" )
# 무작위 산포면 양호, 패턴이 보이면 모델 가정 위반
잔차 히스토그램이 0을 중심으로 대칭 이면 정상. 한쪽으로 긴 꼬리면 특정 방향의 큰 실수가 반복된다는 뜻이다.
평균이 0에서 벗어나 있으면 모델 전체가 일관되게 과대/과소 예측하고 있다는 신호다.
잔차 분포가 정규분포에서 크게 벗어나거나 패턴이 있으면, 지표가 좋아 보여도 모델 형태나 피처를 재검토해야 한다.
RMSE가 낮아도 잔차에 패턴이 있으면 모델은 신뢰할 수 없다. 단일 지표는 오차를 한 숫자로 평균해 "어디서, 어떻게" 틀리는지를 지워버리기 때문이다. 잔차 플롯은 그 평균이 숨긴 구조 — 비선형성, 이분산성, 편향 — 를 복원한다. 시험에서 "지표는 좋은데 특정 구간에서 계속 틀린다"는 지문은 잔차 분석/모델 형태 점검으로 답이 향한다.
빌트인 회귀 알고리즘은 RMSE를 기본 검증 지표로 내보낸다. Automatic Model Tuning에서 회귀 목적 지표 예:
tuner = HyperparameterTuner(
estimator = xgb_estimator,
objective_metric_name = "validation:rmse" , # 회귀 기본
objective_type = "Minimize" , # 오차이므로 최소화
hyperparameter_ranges = ranges,
)
⚠️ 함정 : 분류는 보통 Maximize (정확도/F1/AUC), 회귀는 Minimize (RMSE/MAE)다. objective_type을 반대로 잡으면 튜너가 가장 나쁜 모델을 고른다. R²처럼 클수록 좋은 회귀 지표를 쓴다면 그때는 Maximize다.
지문 단서 고를 답 이유 "센서 오류로 인한 극단 이상치가 섞여 있다" MAE 제곱하지 않아 이상치에 강건 "RMSE가 MAE보다 현저히 크다" 소수의 큰 오차(이상치성 잔차) 존재 RMSE만 제곱으로 증폭됨 "품절이 치명적이라 큰 과소예측을 피해야" RMSE 큰 오차를 강하게 벌줌 "매출 규모가 다른 지점들을 비교" MAPE 스케일 무관 상대 오차 "단, 일부 지점 매출이 0에 가깝다" MAPE 부적합 분모 폭발로 왜곡 "R²가 -0.2로 나왔다" 평균으로 예측하는 것보다 나쁨 기준선이 타깃 평균(ȳ) "피처를 추가했더니 R²만 올랐다" Adjusted R²로 비교 피처 수에 페널티 부여 "RMSE는 좋은데 잔차가 U자 곡선" 비선형성 미포착 → 피처 변환/비선형 모델 모델 형태 가정 위반 "예측값이 커질수록 잔차가 퍼진다" 이분산성 → 타깃 로그 변환 검토 깔때기 패턴의 전형 "회귀 튜닝 objective_type은?" Minimize (RMSE/MAE 기준) 오차 지표는 작을수록 좋음
내일은 모델이 왜 틀리는지 들여다보는 도구 — SageMaker Debugger, Clarify(편향 탐지·SHAP 설명가능성), 오류 분석 — 으로 넘어간다.
잔차(residual) : 실제값 − 예측값. 모든 회귀 지표의 재료이며, 부호가 있어 과대/과소를 구분한다.
MAE (평균 절대 오차) : 오차 절댓값의 평균. 타깃과 같은 단위이고 이상치에 강건하다.
RMSE (평균 제곱근 오차) : 오차를 제곱해 평균한 뒤 제곱근. 큰 오차를 크게 벌준다. 항상 MAE 이상이다.
MAPE (평균 절대 백분율 오차) : 오차를 실제값으로 나눈 상대 오차의 평균(%). 실제값이 0 근처면 무너진다.
R² (결정계수) : 타깃 평균으로 예측하는 기준선 대비 얼마나 나은지의 비율. 음수가 될 수 있다.
Adjusted R² : 피처 수에 페널티를 준 R². 설명변수 개수가 다른 모델을 비교할 때 쓴다.
이분산성(heteroscedasticity) : 예측 구간에 따라 오차의 퍼짐 정도가 달라지는 현상. 잔차 플롯의 깔때기 모양.
잔차 플롯 : 가로축 예측값, 세로축 잔차의 산점도. 지표 한 숫자가 지운 구조적 결함을 되살린다.
RMSLE : 실제값과 예측값에 로그를 취한 뒤 RMSE를 계산. 타깃이 크게 왜곡됐고 상대 오차가 중요할 때 쓴다.
objective_type : SageMaker 튜닝에서 목적 지표를 키울지 줄일지 지정하는 값. 오차 지표는 Minimize, 정확도·AUC·R²는 Maximize.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
데이터에 센서 오류로 인한 소수의 극단적 이상치가 섞여 있고, 이들에 과민 반응하지 않는 평가지표를 원한다. 가장 적절한 것은?
동일한 예측 결과에서 RMSE가 MAE보다 현저히 크게 나왔다. 이는 무엇을 시사하는가?
A 모델에 데이터 누수가 있다 B 모든 오차가 동일하다 C 일부 큰 오차(이상치성 큰 잔차)가 존재한다 D 타깃 변수가 범주형이다 매출 규모가 제각각인 여러 지점의 예측 성능을 스케일에 관계없이 비교하려 한다. 단, 일부 지점은 매출이 0에 가깝다. 이 지표의 주의점으로 옳은 것은?
A MAPE는 스케일 무관이지만 실제값이 0에 가까우면 분모가 폭발해 부적합할 수 있다 B MAPE는 실제값이 0이어도 항상 안정적이다 C MAPE는 절대 오차이므로 스케일 비교에 부적합하다 D MAPE는 분류 전용 지표다 어떤 회귀 모델의 R²가 -0.2로 계산되었다. 이것이 의미하는 바는?
A 계산 오류이며 R²는 음수가 될 수 없다 B 모델이 분산의 20%를 설명한다 C 모델이 완벽하다 D 모델이 타깃 평균으로 예측하는 것보다도 성능이 나쁘다 RMSE가 낮아 만족스러운데, 잔차 플롯(예측값 vs 잔차)에서 뚜렷한 U자 곡선이 나타났다. 가장 합리적인 해석과 조치는?
A 지표가 좋으니 그대로 배포한다 B 잔차 플롯은 분류에서만 의미가 있으므로 무시한다 C 모델이 비선형성을 포착하지 못하고 있으므로 피처 변환이나 비선형 모델을 검토한다 D 데이터를 무작위로 섞으면 곡선이 사라진다