개요
지난 글에서 학습 = 데이터 + 가설 공간 + 손실 함수로 가장 덜 틀리는 함수를 찾는 것이라고 정리했다. 그런데 거기서 슬쩍 넘어간 게 하나 있다.
“덜 틀렸다”를 대체 무엇으로 재는가?
이번 글의 주제가 정확히 그거다. 지도학습이 뭔지 짚고, “얼마나 잘 맞췄나”를 숫자로 재는 방법들을 정리한다. 그리고 마지막에 머신러닝에서 가장 유명한 병인 오버피팅이 나온다.
1. 지도학습이란
한 줄로 정리하면 이렇다.
지도학습(Supervised Learning) = 입력(Feature) + 정답(Label)이 짝지어진 데이터로 예측 규칙을 배우는 방법
이름이 “지도”인 이유는 정답을 알려주는 선생님이 있기 때문이다. 고양이 사진에 “고양이”, 강아지 사진에 “강아지”라고 미리 적어둔 자료를 잔뜩 보여주고 배우게 하는 방식이다.
여기서 진짜 중요한 건 목표다.
훈련에 쓴 데이터뿐 아니라, 처음 보는 데이터에서도 예측을 잘하는 것
이 문장이 이번 글 전체를 관통한다. 지도학습의 목표는 “본 문제를 잘 푸는 것”이 아니라 “처음 보는 문제도 잘 푸는 AI 만들기”다.
더 쉬운 비유로. 문제집을 100번 풀어서 답 순서를 외운 아이와, 풀이법을 이해한 아이가 있다. 문제집 점수는 둘 다 100점이지만, 시험지가 바뀌면 결과가 완전히 갈린다. 우리가 만들고 싶은 건 두 번째 아이다.
2. 회귀와 분류 — 정답의 생김새로 갈린다
지도학습은 딱 두 종류로 나뉜다. 기준은 아주 단순하다. 맞춰야 할 정답이 숫자인가, 이름표인가.
| 회귀 (Regression) | 분류 (Classification) | |
|---|---|---|
| 정답의 형태 | 연속적인 숫자 | 범주(카테고리) |
| 예시 | 집값, 매출액, 온도, 시험 점수 | 스팸/정상, 질병 유무, 고양이/강아지 |
| 답의 예 | “87.3점” | “스팸” |
| 답이 몇 개? | 무한히 많음 | 미리 정해진 몇 개 중 하나 |
헷갈리기 쉬운 게 하나 있다. 학점(A/B/C) 예측은 분류다. 성적처럼 숫자가 얽혀 있어도, 최종 답이 정해진 몇 개 중 하나라면 분류다.
분류 그림에서 두 무리를 가르는 점선을 결정 경계(Decision Boundary)라고 부른다. 분류 모델이 하는 일은 결국 이 선을 잘 긋는 것이다.
3. 용어 정리 — 여기서 한 번 크게 헷갈렸다
앞으로 계속 나올 단어들을 먼저 못 박아둔다.
| 용어 | 기호 | 뜻 |
|---|---|---|
| 특성 (Feature) | x | 예측에 쓰는 입력 |
| 라벨 (Label) | y | 맞춰야 하는 실제 정답 |
| 예측값 | ŷ (“와이 햇”) | 모델이 내놓은 답 |
| 오류 (Error) | ŷ − y | 예측값과 실제값의 차이 |
ŷ 위의 모자(hat)는 “추정한 값”이라는 표시다. 원래 값에 모자를 씌우면 “이건 진짜 값이 아니라 내가 추측한 값이야”라는 뜻이 된다.
오류(Error) ≠ 측정 오차(ε)
이게 지난 글부터 이어지는 가장 헷갈리는 지점이었다. 둘 다 “오차”라고 부르는데 완전히 다른 개념이다.
| 측정 오차 (ε) | 오류 (ŷ − y) | |
|---|---|---|
| 정체 | 데이터 자체에 섞인 흔들림 | 내 예측이 정답에서 벗어난 정도 |
| 볼 수 있나? | 못 본다 (참 함수를 모르니까) | 볼 수 있다 (정답이 있으니까) |
| 줄일 수 있나? | 절대 못 줄인다 | 학습으로 줄이는 게 목표 |
지도학습의 목표는 오류(ŷ − y)를 줄이는 것이지, 측정 오차를 없애는 게 아니다. 애초에 후자는 불가능하다.
4. 손실 함수 — 틀린 정도를 숫자 하나로
손실 함수(Loss Function) = 모델의 예측이 정답에서 얼마나 벗어났는지를 숫자 하나로 나타내는 함수
그리고 학습이란 이 숫자가 작아지는 방향으로 모델을 조금씩 고쳐 나가는 과정이다.
중요한 건 문제 유형에 따라 쓰는 손실이 다르다는 것.
| 문제 | 대표 손실 함수 | 한 줄 설명 |
|---|---|---|
| 회귀 | 평균제곱오차 (MSE) | 정답과 예측의 차이를 제곱해서 평균 |
| 분류 | 교차 엔트로피 (Cross Entropy) | 정답 쪽에 얼마나 높은 확률을 줬는지 측정 |
왜 다르냐면, 정답이 숫자일 때와 이름표일 때 “틀렸다”의 의미 자체가 다르기 때문이다. 87점을 85점으로 예측한 건 “2점 틀린 것”이지만, 고양이를 강아지로 예측한 걸 “1마리 틀렸다”고 셀 수는 없다.
5. 회귀의 평가 ① MSE
가장 기본이 되는 지표다.
MSE = (정답 − 예측)²의 평균
말로 옮기면 “각 데이터에서 얼마나 빗나갔는지를 재고, 제곱해서, 전부 평균 낸 값”이다.
왜 굳이 제곱을 하나
두 가지 이유가 있다.
- 부호를 없애기 위해 — +5만큼 빗나간 것과 −5만큼 빗나간 것은 똑같이 5만큼 틀린 거다. 그냥 더하면 서로 상쇄돼서 “오차 0”이라는 엉터리 결과가 나온다.
- 크게 틀린 걸 더 크게 벌주기 위해 — 2만큼 틀리면 4, 10만큼 틀리면 100이다. 크게 빗나간 사례에 훨씬 무거운 벌점이 매겨진다.
두 번째가 특히 중요하다. MSE를 쓴다는 건 “조금씩 여러 번 틀리는 것보다, 크게 한 번 틀리는 걸 더 싫어하겠다”고 선언하는 것과 같다.
단위가 이상해지는 문제
MSE는 제곱한 값이라 단위도 제곱이 된다. 집값을 원 단위로 예측했다면 MSE의 단위는 “원²”이다. 원의 제곱이 대체 뭔가? 해석이 안 된다.
그래서 RMSE를 같이 본다. MSE에 루트를 씌운 값이다.
RMSE = √MSE
제곱했던 걸 되돌리는 거라 단위가 원래 데이터와 같아진다. “평균적으로 1000만원쯤 빗나간다”처럼 바로 읽히는 문장을 만들 수 있다.
6. 회귀의 평가 ② R² (결정계수)
MSE만으로는 답할 수 없는 질문이 있다.
“MSE가 1000만원²이면 좋은 건가, 나쁜 건가?”
모른다. 집값 예측이면 훌륭한 걸 수도 있고, 커피값 예측이면 재앙이다. 비교 기준이 없기 때문이다.
R²는 그 기준을 아주 영리하게 잡는다.
R² = 아무 생각 없이 “항상 평균값으로 찍는” 예측과 비교했을 때, 내 모델이 얼마나 더 나은가
위 그림의 오른쪽이 그 비교다. 회색 가로 점선이 “무조건 평균으로 찍기”고, 파란 선이 내 모델이다.
| R² 값 | 의미 |
|---|---|
| 1에 가까움 | 데이터의 변동을 거의 다 설명함. 아주 좋음 |
| 0.8 | 평균만 찍을 때 생기는 오차의 80%를 줄였다 |
| 0 | 평균으로 찍는 것과 똑같다 (모델이 있으나 마나) |
| 음수 | 평균으로 찍느니만 못하다 |
R²가 음수가 나올 수 있다는 게 처음엔 이상했는데, 생각해보면 당연하다. 평균보다 못 맞추는 모델을 만드는 건 얼마든지 가능하니까. R²가 음수라면 그건 모델이 아니라 재앙이다.
MSE vs R² — 언제 뭘 보나
| 항목 | MSE | R² |
|---|---|---|
| 값 범위 | 0 ~ 무한대 | 보통 0 ~ 1 (음수 가능) |
| 단위 | 데이터 단위의 제곱 | 없음 |
| 알려주는 것 | 구체적인 오차 크기 | 상대적인 성능 |
| 좋은 값 | 0에 가까울수록 | 1에 가까울수록 |
| 약점 | 좋은지 나쁜지 감이 안 옴 | 실제로 얼마나 틀리는지 모름 |
정리하면 이렇다.
- “평균 1000만원쯤 틀립니다” → MSE·RMSE가 답한다
- “데이터 변동의 80%를 설명합니다” → R²가 답한다
둘은 경쟁 관계가 아니라 보완 관계다. 실무에서 손해 비용을 계산해야 하면 MSE, 여러 모델 중 뭐가 나은지 고를 땐 R²를 본다.
7. 분류의 평가 ① 정확도와 그 함정
분류는 정답이 범주라서 MSE를 쓸 수 없다. “고양이 − 강아지”를 뺄 수가 없으니까. 그래서 제일 먼저 나오는 게 정확도(Accuracy)다.
정확도 = 맞춘 개수 ÷ 전체 개수
단순하고 직관적이다. 그리고 이 단순함이 정확히 함정이다.
99% 정확도짜리 쓰레기 모델
강의에서 든 예시가 강렬했다. 1000명을 검사하는 질병 진단 모델을 만든다고 하자.
- 실제 환자: 10명 (1%)
- 건강한 사람: 990명 (99%)
여기서 이런 모델을 만든다.
“누가 오든 무조건 건강하다고 답하기”
이 모델의 정확도는? 990 ÷ 1000 = 99%다. 진단 로직이 단 한 줄도 없는데 99점짜리 모델이 나왔다.
그런데 이 모델은 환자 10명을 전부 놓쳤다. 우리가 이 모델을 만든 유일한 이유가 환자를 찾는 건데, 그 일만 완벽하게 실패했다.
이걸 불균형 데이터(imbalanced data) 문제라고 부른다. 정답 중 한쪽이 압도적으로 많으면, 정확도는 아무 의미가 없어진다.
이게 이번 강의에서 가장 무섭게 다가온 부분이었다. 숫자가 높다고 좋은 게 아니다. 오히려 “정확도 99%”라는 숫자는 문제를 덮어버린다. 아무도 의심하지 않게 되니까.
시각화를 정리하면서 “에러보다 조용한 무시가 더 무섭다”고 썼던 적이 있다. 히스토그램에 결측치가 있어도 에러 없이 그냥 빼고 그려주는 바람에, 화면에는 멀쩡한 그래프가 나오고 아무도 눈치를 못 챈다는 얘기였다. 정확도 99%가 정확히 같은 종류다. 에러는 나를 멈춰 세우지만, 그럴듯한 숫자는 나를 틀린 채로 계속 가게 만든다.
8. 분류의 평가 ② 혼동행렬
그래서 정확도 하나만 보면 안 되고, 틀린 방식까지 쪼개서 봐야 한다. 그게 혼동행렬(Confusion Matrix)이다.
이름 붙이는 규칙만 알면 외울 게 없다.
- 앞글자 T/F = 예측이 맞았나(True) 틀렸나(False)
- 뒷글자 P/N = 모델이 양성(Positive)이라 했나 음성(Negative)이라 했나
| 약자 | 상황 | 별명 |
|---|---|---|
| TP | 진짜 환자를 환자라고 함 | 잘 잡음 |
| TN | 건강한 사람을 건강하다고 함 | 잘 넘어감 |
| FP | 건강한데 환자라고 함 | 오탐 (헛다리) |
| FN | 환자인데 건강하다고 함 | 누락 (놓침) |
두 종류의 틀림은 무게가 다르다
여기가 핵심이다. FP와 FN은 둘 다 “틀림”이지만 대가가 전혀 다르다.
- 암 진단에서 FN — 환자를 집에 돌려보낸다. 사람이 죽을 수 있다.
- 암 진단에서 FP — 건강한 사람이 정밀검사를 한 번 더 받는다. 번거롭고 비용이 들지만 되돌릴 수 있다.
반대인 경우도 있다. 스팸 필터에서 FP(정상 메일을 스팸함으로)는 중요한 메일을 놓치게 만들지만, FN(스팸이 받은편지함에 오는 것)은 그냥 짜증날 뿐이다.
어느 쪽 실수가 더 아픈지는 문제마다 다르다. 그래서 “정확도”라는 하나의 숫자로 뭉개면 안 된다. 이건 기술 문제가 아니라 도메인 판단이다.
정밀도, 재현율, F1
혼동행렬에서 두 지표가 나온다.
| 지표 | 계산 | 답하는 질문 |
|---|---|---|
| 정밀도 (Precision) | TP ÷ (TP + FP) | “양성이라고 외친 것 중 진짜는 몇 %?” |
| 재현율 (Recall) | TP ÷ (TP + FN) | “진짜 양성 중 몇 %나 잡아냈나?” |
앞서 나온 “무조건 건강하다고 답하는” 모델을 여기에 넣어보면 바로 드러난다. 양성이라 외친 적이 없으니 TP = 0, 결국 재현율 0%다. 정확도 99%와 재현율 0%가 같은 모델에서 나온다.
두 지표는 서로 밀고 당기는 관계다. 의심스러우면 전부 양성이라 외치면 재현율은 100%가 되지만 정밀도가 바닥나고, 확실할 때만 외치면 정밀도는 높지만 재현율이 떨어진다. 그래서 둘을 합친 F1-score를 쓴다.
F1 = 정밀도와 재현율의 조화평균
조화평균은 한쪽이 심하게 낮으면 전체 값도 확 낮아지는 평균이다. 그냥 평균이면 (100% + 0%) ÷ 2 = 50%라는 그럴듯한 숫자가 나오지만, 조화평균은 이런 경우 0에 가까운 값을 뱉는다. 한쪽만 잘하는 걸 인정해주지 않는 평균이라고 보면 된다.
9. 분류의 평가 ③ 교차 엔트로피
혼동행렬까지 봤으면 평가는 충분한 것 같은데, 학습에는 하나가 더 필요하다. 이유가 재밌다.
정확도와 혼동행렬은 맞음/틀림만 센다. 그런데 다음 두 모델을 생각해보자.
| 스팸일 확률로 답한 값 | 최종 판정 | 정확도 | |
|---|---|---|---|
| 모델 A | 0.51 | 스팸 | 맞음 |
| 모델 B | 0.95 | 스팸 | 맞음 |
정확도로는 완전히 똑같다. 하지만 B가 훨씬 좋은 모델이다. 확신을 가지고 맞췄으니까. A는 아슬아슬하게 넘긴 거라 조금만 데이터가 흔들려도 틀리게 된다.
정확도는 이 차이를 못 본다. 그래서 학습 중에는 “정답을 얼마나 확신했는지”까지 반영하는 손실이 필요하고, 그게 교차 엔트로피다.
손실 = − log(정답 범주에 준 확률)
로그가 나와서 겁먹기 쉬운데, 하는 일은 딱 하나다. 정답에 높은 확률을 줬으면 벌점이 작고, 낮은 확률을 줬으면 벌점이 급격히 커진다.
| 정답에 준 확률 | 벌점 | 느낌 |
|---|---|---|
| 0.9 | 0.11 | 잘 맞췄네, 조금만 |
| 0.6 | 0.51 | 애매했네 |
| 0.1 | 2.30 | 자신 있게 틀렸네, 크게 벌준다 |
여기서 성격이 드러난다. 확률이 0에 가까워질수록 벌점은 끝없이 커진다. 즉 교차 엔트로피는 “확신을 갖고 틀리는 것”을 가장 심하게 처벌하는 손실이다. 개인적으로 이 성질이 굉장히 웃겻다. 모르면서 확신하는 게 제일 위험하다..!
정리 — 정확도·정밀도·재현율은 학습이 끝난 뒤 결과를 평가하는 지표, 교차 엔트로피는 학습 도중에 줄여 나가는 손실이다. 역할이 다르다.
10. 학습의 진짜 목적과 오버피팅
이제 시작에서 던진 문장으로 돌아온다.
학습의 목적은 훈련 데이터를 잘 맞추는 게 아니라, 처음 보는 데이터를 잘 맞추는 것이다.
그래서 성능 평가는 반드시 학습에 쓰지 않은 데이터로 해야 한다. 훈련 데이터로 평가하는 건 문제집으로 시험 보는 것과 같아서 아무 의미가 없다. 이 능력을 일반화(Generalization)라고 부른다.
그리고 일반화를 방해하는 대표적인 병이 오버피팅이다.
| 언더피팅 (과소적합) | 오버피팅 (과대적합) | |
|---|---|---|
| 원인 | 모델이 너무 단순하거나 학습 부족 | 모델이 너무 복잡 |
| 증상 | 중요한 패턴조차 못 잡음 | 잡음까지 통째로 외움 |
| 훈련 성능 | 나쁨 | 아주 좋음 |
| 시험 성능 | 나쁨 | 나쁨 |
오버피팅이 무서운 이유는 훈련 성적표가 아주 좋아 보인다는 데 있다. 언더피팅은 훈련 점수부터 낮으니 바로 알아채지만, 오버피팅은 “우리 모델 정확도 99%!”라고 자랑하다가 실전에서 무너진다.
왜 나쁜가
- 표본에 의존한다 — 훈련 데이터는 세상 전체의 일부일 뿐이고, 거기엔 우연한 잡음이 섞여 있다. 그 잡음까지 외우면 데이터 몇 개만 바뀌어도 예측이 크게 흔들린다.
- 일반화에 실패한다 — 못 본 데이터에서 오류가 커진다. 결국 실전에서 못 쓴다.
더 쉬운 비유로. 문제집의 답 순서를 외운 아이다. “3번 문제는 ②번”까지 외웠으니 문제집 점수는 만점인데, 시험지 순서가 바뀌면 아무것도 못 한다.
오버피팅과 헷갈리기 쉬운 것
강의에서 짚어준 것 중 유용했던 구분이 있다.
오버피팅 ≠ 분포 변화(distribution shift)로 인한 성능 저하
훈련할 때 본 데이터와 실제 들어오는 데이터의 성격 자체가 달라져서 성능이 떨어지는 경우가 있다. 실사진으로만 학습했는데 만화 그림이 들어온다든지, 여름 데이터로 배웠는데 겨울이 온다든지, 센서를 새 걸로 바꿨다든지.
이건 모델이 과하게 학습해서 생긴 문제가 아니다. 모델이 아무리 적당히 학습했어도 발생한다. 원인이 다르니 해결책도 다르다. 오버피팅은 모델을 단순화해서 잡지만, 분포 변화는 데이터를 다시 모아야 한다.
그래서 어떻게 잡나
균형점을 찾아야 하는데, 실마리는 이렇다.
- 데이터를 더 많이 모은다
- 학습에 쓰지 않은 데이터로 성능을 확인하면서 모델을 고른다
- 교차 검증을 쓴다
마지막 두 개가 다음 글의 주제다.
정리
- 지도학습 = 입력 + 정답 쌍으로 배우고, 처음 보는 데이터에서 잘하는 게 목표
- 정답이 숫자면 회귀, 범주면 분류
- 오류(ŷ − y)는 줄이는 것, 측정 오차(ε)는 못 줄이는 것 — 다른 개념이다
- 회귀 평가: MSE(구체적 오차 크기), R²(평균 찍기 대비 상대 성능). 둘은 보완 관계
- 분류 평가: 정확도는 불균형 데이터에서 무력해진다 → 혼동행렬로 쪼개 봐야 한다
- FP와 FN의 대가는 다르다. 어느 쪽이 더 아픈지는 도메인이 정한다
- 교차 엔트로피는 확신도까지 반영하는 손실. 자신 있게 틀리면 크게 벌준다
- 오버피팅은 훈련 점수가 좋아서 더 위험하다. 분포 변화와는 다른 문제다
다음 글에서
다음 글에서는 “처음 보는 데이터에서의 성능을 어떻게 미리 알아내는가”를 다룬다. 검증셋과 K-겹 교차검증, 그리고 정답이 아예 없는 비지도학습까지 정리한다.
한줄 평
- AI 학습에 관하여 사용하는 여러 기법, 그리고 왜 이런 공식을 사용하게 되었는지에 대해 배울수록 세상엔 천재들이 많고 그 생각들을 공유받는 과정이 너무 고맙다고 느껴졌다. ( 그리고 나름 재밌다! )