예측은 끝이 아니라 시작이다
지난 장에서 우리는 데이터, 특징, 라벨, 예측이 무엇인지 살펴보았습니다. 모델은 데이터를 입력받고, 그 안의 특징을 바탕으로 어떤 값을 예측합니다. 집값 예측 모델이라면 면적, 위치, 방 개수 같은 정보를 보고 가격을 예측합니다. 스팸 메일 분류 모델이라면 메일 제목과 본문을 보고 "스팸일 가능성이 높다"거나 "정상 메일일 가능성이 높다"고 판단합니다.
그런데 여기서 중요한 질문이 하나 남습니다.
모델이 예측을 했다고 해서 곧바로 학습이 된 것일까요?
아닙니다. 예측은 학습의 끝이 아니라 출발점입니다. 모델이 진짜로 배우려면 자신이 얼마나 틀렸는지 알아야 합니다. 틀렸다는 사실을 알아야 고칠 수 있고, 고쳐야 다음에는 조금 더 나은 예측을 할 수 있습니다.
마치 처음 자전거를 배우는 아이와 같습니다. 아이는 페달을 밟고 앞으로 나아가려 하지만 자꾸 한쪽으로 기웁니다. 이때 몸이 오른쪽으로 기울면 왼쪽으로 균형을 잡아야 한다는 피드백을 몸으로 배웁니다. 한 번에 완벽해지지는 않습니다. 넘어지고, 다시 타고, 조금 덜 흔들리고, 다시 고칩니다. 머신러닝의 학습도 이와 비슷합니다.
모델은 예측하고, 실제값과 비교하고, 얼마나 틀렸는지 계산하고, 그 틀림을 줄이는 방향으로 자기 안의 규칙을 조금씩 고칩니다.

오차는 모델에게 주는 피드백이다
오차는 간단히 말해 예측값과 실제값의 차이입니다.
예를 들어 어떤 집의 실제 거래 가격이 5억 원이라고 해봅시다. 모델이 이 집의 가격을 4억 8천만 원으로 예측했다면 2천만 원만큼 낮게 예측한 것입니다. 반대로 5억 3천만 원으로 예측했다면 3천만 원만큼 높게 예측한 것입니다.
이 차이가 바로 오차입니다.
여기서 중요한 점은 오차가 단순히 "틀렸다"라는 감정적인 평가가 아니라는 것입니다. 오차는 모델을 고치기 위한 숫자 신호입니다. 사람에게 "틀렸어"라고만 말하면 무엇을 어떻게 고쳐야 할지 알기 어렵습니다. 하지만 "정답보다 2천만 원 낮게 예측했어"라고 말하면 방향이 보입니다. 다음에는 가격을 조금 더 높게 예측하도록 모델을 조정할 수 있습니다.
분류 문제에서도 비슷한 일이 일어납니다. 타이타닉 생존 예측 모델이 어떤 승객에 대해 생존 확률을 80%라고 예측했는데 실제로는 생존하지 못했다면, 모델은 자신이 너무 자신 있게 틀렸다는 사실을 알게 됩니다. 단순히 맞고 틀렸는지만 보는 것이 아니라, 얼마나 강하게 잘못 믿었는지도 중요합니다.
그래서 머신러닝에서 오차는 꾸중이 아닙니다. 오차는 모델이 다음에 더 잘하기 위해 받는 피드백입니다.
많은 오차를 하나로 요약하는 손실 함수
현실의 데이터는 한 개가 아닙니다. 집값 예측 모델을 만들 때 집 한 채만 보고 학습하지 않습니다. 수천 채, 수만 채의 데이터를 볼 수 있습니다. 스팸 메일 분류기도 메일 한 통만 보고 배우지 않습니다. 정상 메일과 스팸 메일을 많이 보면서 패턴을 익힙니다.
그러면 문제가 생깁니다. 데이터가 많으면 오차도 많아집니다.
첫 번째 집은 2천만 원 틀렸고, 두 번째 집은 5백만 원 틀렸고, 세 번째 집은 4천만 원 틀렸다고 해봅시다. 어떤 메일은 정확히 분류했고, 어떤 메일은 애매하게 맞혔고, 어떤 메일은 자신 있게 틀렸습니다. 이 많은 실수를 모델에게 어떻게 전달해야 할까요?
이때 사용하는 것이 손실 함수입니다.
손실 함수는 여러 예측의 틀림 정도를 하나의 숫자로 요약하는 장치입니다. 쉽게 말하면 모델의 현재 실력을 점수로 매기는 방법입니다. 단, 일반적인 시험 점수와는 방향이 반대입니다. 손실은 낮을수록 좋습니다. 손실이 크다는 것은 많이 틀렸다는 뜻이고, 손실이 작다는 것은 덜 틀렸다는 뜻입니다.
집값 예측처럼 숫자를 맞히는 문제에서는 예측값과 실제값의 차이를 이용해 손실을 계산합니다. 차이를 그대로 더하면 어떤 오차는 양수이고 어떤 오차는 음수라 서로 상쇄될 수 있기 때문에, 보통은 절댓값을 쓰거나 제곱을 해서 오차의 크기를 봅니다. 여기서 제곱이라는 말이 나왔다고 겁먹을 필요는 없습니다. 핵심은 단순합니다. 크게 틀린 예측에는 더 큰 벌점을 주겠다는 뜻입니다.
분류 문제에서는 조금 다른 방식으로 손실을 계산합니다. 예를 들어 모델이 어떤 메일을 99% 확신으로 정상 메일이라고 예측했는데 실제로 스팸이었다면, 이는 크게 틀린 것입니다. 반대로 55% 정도로 정상 메일이라고 예측했는데 실제로 스팸이었다면, 틀리긴 했지만 확신이 강하지는 않았습니다. 분류에서의 손실 함수는 이런 확신의 정도까지 반영합니다.
손실 함수의 이름은 여러 가지가 있습니다. 평균제곱오차, 평균절대오차, 교차 엔트로피 같은 용어를 앞으로 만나게 될 것입니다. 지금은 이름을 모두 외울 필요가 없습니다. 이 장에서 꼭 붙잡아야 할 감각은 하나입니다.
손실 함수는 모델이 얼마나 틀렸는지를 하나의 숫자로 알려주는 장치입니다.
모델은 무엇을 고치는가
모델이 손실을 확인했다면 이제 무엇을 해야 할까요? 당연히 손실을 줄여야 합니다. 그런데 모델은 자기 안의 무엇을 고칠 수 있을까요?
모델 안에는 예측을 만드는 내부 규칙이 있습니다. 이 내부 규칙을 이루는 조절 가능한 숫자를 파라미터라고 부릅니다. 파라미터는 모델이 학습을 통해 바꾸는 값입니다.
집값 예측 모델을 아주 단순하게 상상해봅시다. 이 모델은 집값을 예측할 때 면적을 중요하게 볼 수도 있고, 지하철역과의 거리를 중요하게 볼 수도 있고, 건물 연식을 중요하게 볼 수도 있습니다. 처음에는 무엇이 얼마나 중요한지 모릅니다. 그래서 대충 시작합니다.
처음 모델은 이렇게 생각할 수 있습니다.
"면적이 조금 중요하고, 지하철역 거리는 별로 중요하지 않고, 방 개수는 꽤 중요해 보인다."
그런데 실제 데이터를 비교해보니 역세권 집값을 계속 낮게 예측하고 있었다고 해봅시다. 그러면 모델은 지하철역과의 거리에 더 큰 중요도를 주도록 내부 숫자를 조정할 수 있습니다. 반대로 방 개수를 지나치게 중요하게 봐서 자꾸 가격을 높게 예측한다면, 방 개수의 중요도를 줄일 수 있습니다.
이처럼 학습이란 모델이 자기 안의 조절 가능한 숫자들을 바꾸면서 손실을 줄여가는 과정입니다.
처음부터 정답에 가까운 규칙을 알고 시작하는 모델은 거의 없습니다. 모델은 데이터를 보며 "이 방향으로 고치면 조금 나아지는구나", "저 방향으로 고치면 더 나빠지는구나"를 반복해서 경험합니다. 이 반복 속에서 내부 규칙이 조금씩 다듬어집니다.
학습은 한 번에 끝나지 않는다
머신러닝 학습은 보통 한 번의 비교로 끝나지 않습니다. 모델은 많은 데이터를 여러 번 보면서 점점 나아집니다. 처음에는 엉성하게 예측합니다. 오차가 큽니다. 손실도 큽니다. 하지만 손실을 줄이는 방향으로 파라미터를 조정하면 다음 예측은 조금 나아질 수 있습니다.
물론 매번 극적으로 좋아지는 것은 아닙니다. 때로는 아주 조금만 나아집니다. 어떤 때는 거의 변화가 없어 보이기도 합니다. 하지만 머신러닝은 이 작은 개선을 계속 쌓아갑니다.
학습 과정을 한 줄로 쓰면 다음과 같습니다.
데이터를 넣는다 → 모델이 예측한다 → 실제값과 비교한다 → 오차를 계산한다 → 손실을 구한다 → 손실이 줄어드는 방향으로 모델을 고친다 → 다시 예측한다
이 흐름이 바로 머신러닝의 심장입니다.
복잡한 알고리즘 이름을 만나도 겁먹지 않아도 됩니다. 선형회귀, 로지스틱 회귀, 결정트리, 랜덤포레스트, 그래디언트 부스팅, 신경망은 겉모습은 서로 다릅니다. 어떤 모델은 직선을 조정하고, 어떤 모델은 질문을 나누고, 어떤 모델은 수많은 계산 층을 통과합니다. 하지만 큰 관점에서 보면 모두 같은 질문을 품고 있습니다.
"어떻게 하면 이전보다 덜 틀릴 수 있을까?"
이 질문을 붙잡으면 머신러닝은 훨씬 덜 무섭게 보입니다. 알고리즘은 마법 주문이 아니라, 손실을 줄이기 위한 여러 가지 방법입니다.
손실을 줄인다고 항상 좋은 모델은 아니다
여기서 조심해야 할 점이 있습니다. 손실을 줄이는 것이 중요하다고 해서, 학습 데이터에서 손실이 0에 가까운 모델이 언제나 좋은 모델은 아닙니다.
조금 이상하게 들릴 수 있습니다. 많이 맞히면 좋은 것 아닌가요? 학습 데이터에서 오차가 작으면 훌륭한 모델 아닌가요?
반드시 그렇지는 않습니다.
학교 시험을 떠올려봅시다. 어떤 학생이 기출문제 100개의 답을 통째로 외웠습니다. 시험에 기출문제가 똑같이 나오면 이 학생은 만점을 받을 수 있습니다. 하지만 숫자만 조금 바뀌거나 상황이 조금 달라지면 갑자기 문제를 풀지 못합니다. 이 학생은 개념을 이해한 것이 아니라 답안을 외운 것입니다.
머신러닝 모델도 비슷합니다. 학습 데이터만 지나치게 완벽하게 맞히도록 훈련하면, 그 데이터에만 특화된 모델이 될 수 있습니다. 학습 데이터의 우연한 잡음, 예외적인 사례, 실수까지 외워버리는 것입니다. 그러면 새 데이터가 들어왔을 때 성능이 떨어집니다.
우리가 원하는 모델은 학습 데이터를 통째로 외우는 모델이 아닙니다. 우리가 원하는 모델은 새로운 데이터에서도 그럴듯하게 맞히는 모델입니다.
이 능력을 일반화라고 부릅니다. 일반화는 모델이 처음 보는 데이터에 대해서도 잘 작동하는 능력입니다. 머신러닝에서 진짜 목표는 학습 데이터의 손실을 무조건 0으로 만드는 것이 아니라, 새로운 데이터에서도 낮은 오차를 내는 규칙을 배우는 것입니다.
이 관점은 앞으로 매우 중요해집니다. 나중에 과적합과 일반화, 학습 데이터와 테스트 데이터, 검증 데이터와 교차검증을 배울 때 이 생각이 다시 등장합니다. 모델이 잘 배웠는지 판단하려면 "봤던 문제를 잘 맞히는가"뿐 아니라 "처음 보는 문제도 잘 맞히는가"를 함께 봐야 합니다.
좋은 학습은 적당한 규칙을 찾는 일이다
머신러닝 학습을 처음 접하면 모델이 데이터에서 정답을 정확히 찾아내는 것처럼 느껴질 수 있습니다. 하지만 실제로는 조금 다릅니다. 모델은 완벽한 진리를 발견한다기보다, 지금 가진 데이터 안에서 쓸 만한 규칙을 찾아갑니다.
집값 예측 모델은 모든 집의 가격을 완벽하게 설명할 수 없습니다. 같은 면적, 같은 동네, 같은 연식의 집이라도 층수, 전망, 내부 상태, 거래 시점, 매수자의 사정에 따라 가격이 달라질 수 있습니다. 데이터에는 언제나 설명되지 않는 부분이 있습니다.
스팸 메일 분류도 마찬가지입니다. 어떤 메일은 정상 메일처럼 보이지만 스팸이고, 어떤 광고 메일은 사용자가 실제로 원해서 받은 정상 메일일 수 있습니다. 현실의 데이터는 깔끔한 교과서 예제보다 훨씬 지저분합니다.
그래서 좋은 모델은 모든 예외를 억지로 외우는 모델이 아닙니다. 좋은 모델은 중요한 패턴을 붙잡고, 덜 중요한 흔들림은 적당히 흘려보낼 줄 아는 모델입니다.
이것은 사람의 판단과도 닮아 있습니다. 경험 많은 부동산 중개인은 집값을 볼 때 모든 사소한 요소에 똑같이 휘둘리지 않습니다. 중요한 조건을 먼저 봅니다. 위치, 면적, 주변 시세, 건물 상태처럼 가격을 크게 움직이는 요소를 중심으로 판단합니다. 가끔 예외는 있지만, 큰 흐름을 잘 잡기 때문에 처음 보는 집도 꽤 그럴듯하게 평가할 수 있습니다.
머신러닝 모델도 데이터를 통해 이런 큰 흐름을 배우려 합니다. 손실을 줄인다는 것은 단순히 숫자를 낮추는 일이 아닙니다. 데이터 속에서 다음에도 통할 만한 규칙을 찾아가는 일입니다.
손실을 줄이는 방향이라는 말의 의미
"손실을 줄이는 방향으로 모델을 고친다"는 표현은 앞으로 자주 등장할 것입니다. 이 말을 조금 더 직관적으로 이해해봅시다.
눈을 가리고 언덕 위에 서 있다고 상상해보세요. 목표는 가장 낮은 골짜기로 내려가는 것입니다. 눈을 뜰 수는 없지만 발밑의 기울기는 느낄 수 있습니다. 오른쪽으로 한 발 내디뎠더니 조금 더 낮아졌습니다. 그러면 오른쪽 방향은 괜찮은 선택입니다. 왼쪽으로 갔더니 더 높아졌습니다. 그러면 그 방향은 피해야 합니다.
모델의 학습도 이와 비슷합니다. 현재 파라미터에서 손실이 어느 방향으로 움직이면 줄어드는지 확인하고, 그 방향으로 조금씩 조정합니다. 한 번에 크게 뛰면 골짜기를 지나쳐버릴 수 있고, 너무 작게 움직이면 시간이 오래 걸립니다. 그래서 모델은 적절한 크기로 조금씩 이동하며 손실이 낮은 지점을 찾아갑니다.
이 비유는 완벽하지는 않지만 중요한 감각을 줍니다. 모델은 정답을 한 번에 맞히는 것이 아니라, 틀림의 정도를 보며 더 나은 위치를 찾아갑니다. 이 과정을 수학적으로 다루면 기울기, 최적화, 경사하강법 같은 용어가 등장합니다. 지금은 용어보다 그림을 먼저 떠올리면 됩니다.
모델은 손실이라는 산을 내려가고 있습니다. 목표는 가장 낮아 보이는 곳, 즉 덜 틀리는 지점입니다.
이번 장에서 붙잡아야 할 한 문장
이번 장의 핵심은 단순합니다.
머신러닝에서 학습한다는 것은 예측값과 실제값의 차이를 측정하고, 그 차이가 줄어들도록 모델의 내부 규칙을 반복해서 고치는 일입니다.
이 문장을 이해하면 앞으로 만날 많은 개념이 한결 쉬워집니다. 회귀는 숫자를 덜 틀리게 예측하는 방법이고, 분류는 정답 종류를 덜 틀리게 고르는 방법입니다. 결정트리도, 랜덤포레스트도, 신경망도 결국 더 좋은 예측을 만들기 위해 모델을 고치는 방식입니다.
물론 여기서 끝이 아닙니다. 어떤 문제는 숫자를 예측해야 하고, 어떤 문제는 종류를 골라야 하며, 어떤 문제는 정답 없이 데이터 안의 무리를 찾아야 합니다. 머신러닝에는 여러 문제 유형이 있고, 문제 유형에 따라 오차를 바라보는 방식과 모델을 고치는 방식도 조금씩 달라집니다.
다음 장에서는 머신러닝 문제가 어떤 종류로 나뉘는지 큰 지도를 펼쳐보겠습니다. 회귀, 분류, 군집화, 추천 같은 단어들이 어디에 놓이는지 이해하면, 이제 머신러닝이라는 숲의 길이 조금씩 보이기 시작할 것입니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.