데이터를 너무 잘 맞추면 오히려 틀리는 문제
모델을 만들 때 가장 흔한 실수 중 하나가, 훈련 데이터에 대한 성능을 최대한 높이는 데만 집중하는 것이다. 훈련셋에서 정확도가 98%가 나오면 기분이 좋다. 그런데 새로운 데이터를 넣는 순간 정확도가 62%로 추락하면, 그 모델은 쓸모가 없다. 이걸 오버피팅이라고 부른다. 시험 범위를 달달 외워서 시험은 만점 받았는데 실전에서는 아무것도 풀 수 없는 상태와 같다.
오버피팅은 모델이 데이터 안의 진짜 패턴뿐 아니라 노이즈까지 통째로 학습해버릴 때 발생한다. 예를 들어 주가 예측 모델을 만들면서 과거 5년간의 일별 종가 데이터를 집어넣었다고 하자. 모델의 파라미터를 충분히 늘리면 과거 5년의 주가 움직임을 거의 완벽하게 재현할 수 있다. 하지만 그 모델이 학습한 건 주가의 근본적 패턴이 아니라 2019년 3월 둘째 주에 특정 종목이 올랐다 내렸다 하는 우연적 변동까지 포함한 잡음이다. 미래 데이터에 이런 우연적 패턴이 반복될 리 없으므로 예측력은 바닥을 친다.
왜 사람은 복잡한 모델에 끌리는가
흥미로운 점은, 오버피팅된 모델이 사람 눈에는 더 그럴듯해 보인다는 것이다. 그래프 위에 데이터 포인트를 죽 찍고, 모델 예측선을 그려보면, 오버피팅된 모델은 모든 점을 촘촘히 지나가면서 우아한 곡선을 만들어낸다. 반면 적절하게 일반화된 모델의 예측선은 데이터 포인트에서 조금씩 벗어나 있어서 “부정확해 보인다.” 사람은 시각적으로 더 잘 맞는 쪽을 더 좋은 모델이라고 판단하는 경향이 있다.
이 경향은 복잡성에 대한 인간의 편향과 연결된다. 설명이 복잡할수록, 변수가 많을수록 더 정교하고 더 정확한 모델이라고 느끼는 것이다. 실제로는 정반대인 경우가 많다. IBM의 오버피팅 기술 문서에서도 모델 복잡도와 예측 성능 사이의 트레이드오프를 명확히 설명하고 있다. 파라미터 수가 일정 지점을 넘으면 훈련 성능은 계속 올라가지만 검증 성능은 오히려 떨어지기 시작하는 U자형 곡선이 나타난다.
소프트웨어가 오버피팅을 감지하는 방법
소프트웨어는 이 문제를 구조적으로 다룬다. 가장 기본적인 방법이 교차 검증(Cross-Validation)이다. 데이터를 여러 조각으로 나누고, 한 조각을 빼놓은 채 나머지로 모델을 훈련한 다음, 빼놓은 조각으로 성능을 측정한다. 이 과정을 조각을 바꿔가며 반복하면, 훈련 데이터에만 최적화된 모델은 검증 단계에서 성능이 뚝 떨어지는 게 드러난다. 사람이 직접 이 과정을 수동으로 할 수는 있지만, 실제로 매번 하는 사람은 드물다. 코드로 자동화해 놓으면 모델을 만들 때마다 빠짐없이 검증이 돌아간다.
플랫폼 최적화의 내부 구조를 보면, 사용자 행동 예측 모델도 같은 원리로 작동한다. 과거 데이터에 과적합된 추천 알고리즘은 기존 사용자에게는 잘 맞지만 신규 사용자에게는 엉뚱한 결과를 내놓는다. 이 차이를 실시간으로 모니터링하는 시스템이 없으면 모델의 성능 저하를 알아채는 데 몇 주에서 몇 달이 걸린다.
단순한 모델이 이기는 경우
머신러닝 대회에서는 복잡한 앙상블 모델이 우승하는 경우가 많지만, 실제 프로덕션 환경에서는 단순한 모델이 더 오래 살아남는다. 복잡한 모델은 데이터 분포가 조금만 바뀌어도 성능이 급변하는 반면, 단순한 모델은 변화에 둔감하다. 둔감함이 장점인 환경이 실전이다. 오컴의 면도날이 머신러닝에서도 유효한 셈이다. 모델을 만들 때 “더 복잡하게”가 아니라 “얼마나 단순하게 만들 수 있는가”를 먼저 물어야 한다.
정규화와 드롭아웃, 오버피팅의 실전 방어선
오버피팅을 억제하는 기법은 여러 가지가 있지만, 실무에서 가장 많이 쓰이는 두 가지를 꼽으면 정규화와 드롭아웃이다. 정규화(Regularization)는 모델의 파라미터가 지나치게 커지는 것을 벌점으로 억제하는 방식이다. L2 정규화의 경우 파라미터 값의 제곱합을 손실 함수에 더하는데, 이러면 모델이 특정 변수에 과도하게 의존하는 것을 수학적으로 막아준다. 드롭아웃은 훈련 과정에서 뉴런의 일부를 무작위로 비활성화시키는 방법으로, 특정 뉴런 조합에 과의존하는 것을 물리적으로 차단한다. 두 기법 모두 “모델이 훈련 데이터의 세세한 잡음까지 외우지 못하게 하는” 장치다. 사람이 판단할 때 이런 자기 제어 장치를 내장하기는 어렵지만, 코드에서는 매개변수 하나로 켜고 끌 수 있다.
결국 오버피팅 문제는 “데이터를 잘 설명하는 것”과 “미래를 잘 예측하는 것” 사이의 긴장 관계다. 이 둘이 같은 방향이라고 느끼는 것이 사람의 직관이고, 실은 일정 지점을 넘으면 반대 방향이 된다는 것이 수학의 답이다.