파이썬 라이브러리를 활용한 머신러닝 - 일반화, 과대적합, 과소적합


안녕하세요 Jay입니다.
이번 시간은 일반화, 과대적합, 과소적합 개념에 대해 알아보겠습니다.
중간에는 설명+예시가 있으므로 개념에 대한 이해가 쉽고
맨 하단엔 개념에 대한 요약이 있으니 참고바랍니다.


일반화(Generalization)

지도 학습에서 훈련데이터로 학습한 모델이 훈련 데이터와 특성이 같다면 처음 보는 새로운 데이터가 주어져도 정확히 예측할 거라 기대합니다. 모델이 처음보는 데이터에 대해 정확하게 예측할 수 있으면 이를 훈련 세트에서 테스트 세트로 일반화되었다고 합니다. 그래서 모델을 만들때 가능한 한 정확하게 일반화 되도록 해야합니다.

보통 훈련 세트에 대해 정확히 예측하도록 모델을 구축합니다. 훈련 세트와 테스트 세트가 매우 비슷하다면 그 모델이 테스트 세트에서도 정확히 예측하리라 기대할 수 있습니다. 그러나 항상 그런 것은 아닙니다. 예를 들어 아주 복잡한 모델을 만든다면 훈련 세트에만 정확한 모델이 되어버릴 수 있습니다.

가상의 예로 노트북을 구매한 고객과 구매의사가 없는 고객의 데이터를 이용해 누가 노트북을 구매를 할지 예측하려합니다. 그래서 실제 구매할 것 같은 고객에게만 홍보 메일을 보내는 것이 목표입니다.


이 데이터를 자세히 살펴보면 다음과 같은 규칙을 발견 할 수 있습니다. "45세 이상이고 자녀수가 2이상이며 기혼에 보유차량수, PC보유대수가 는 최소 1대이면 노트북을 살 것입니다" 이 규칙은 이 표의 데이터로 국한하면 완벽하게 들어맞습니다. 이렇게 이 데이터를 만족하는 규칙을 많이 만들 수 있지만, 우리가 예측하려는 대상은 이 데이터 셋이 아닙니다. 즉 "새로운 고객이 노트북을 살 것인가"를 예측해야합니다. 그러므로 새로운 고객에도 잘 작동하는 규칙을 찾아야 하며 훈련 세트에서 100% 정확도를 달성하는 것은 크게 도움이 되지 않습니다.

알고리즘이 새로운 데이터도 잘 처리하는지 측정하는 방법은 테스트 세트로 평가해보는 것 밖에 없습니다.
직관적으로 혹은 수학적으로 볼때도 간단한 모델이 새로운 데이터에 더 잘 일반화될 것이라고 예상할 수 있습니다. "45세 이상인 사람은 노트북구매를 하려고 한다"라는 규칙을 만들었다면 이 규칙은 모든 고객 데이터를 만족시킬 뿐 아니라, 나이 외에 자녀 수나 혼인 상태를 추가한 규칙보다 더 신뢰할 수 있습니다. 그렇기 때문에 우리는 언제나 가장 간단한 모델을 찾으려고 합니다. 가진 정보를 모두 사용해서 너무 복잡한 모델을 만드는 것을 과대적합(overfitting)이라고 합니다. 과대적합은 모델이 훈련 세트의 각 샘플에 너무 가깝게 맞춰져서 새로운 데이터에 일반화되기 어려울 때 일어납니다. 반대로 모델이 너무 간단하면, 즉 "주택 보유한 사람들은 모두 노트북을 사려고한다"와 같은 경우에는 데이터의 면면과 다양성을 잡아내지 못할 것이고 훈련 세트에도 잘 맞지 않을 것입니다. 너무 간단한 모델이 선택되는 것을 과소적합(underfitting)이라고 합니다. 

모델을 복잡하게 할수록 훈련 데이터에 대해서는 더 정확히 예측할 수 있습니다. 그러나 너무 복잡해지면 훈련 세트의 각 데이터 포인트에 너무 민감해져 새로운 데이터에 잘 일반화되지 못합니다. 우리가 찾으려는 모델은 일반화 성능이 최대가 되는 최적점에 있는 모델입니다.

모델의 복잡도는 훈련 데이터셋에 담긴 입력 데이터의 다양성과 관련이 깊습니다. 데이터셋에 다양한 데이터 포인터가 많을수록 과대적합 없이 더 복잡한 모델을 만들 수 있습니다.


요약

일반화(generalization)

모델이 처음 보는 데이터에 대해 정확하게 예측할 수 있음을 의미


과대적합(overfitting)

많은 정보들을 가지고 너무 복잡한 모델을 만드는 것, 즉 훈련 데이터세트에만 높은 정확도를 가지지만 일반성이 떨어지는 현상

과소적합(underfitting)

모델이 너무 단순해서 데이터의 면면과 다양성을 잡아내지 못하는 현상

댓글