티스토리 뷰
지난 글에서는 머신러닝 모델링의 전체적인 과정을 살펴봤다. 이번 글에서는 그 중에서도 데이터가 어떤 영향을 주는지에 초점을 맞춰, 머신러닝 모델링 과정에서 무엇을 고려해야 좋은 예측 모델을 만들 수 있을지 이야기해보겠다.

모델링의 기본 구조
머신러닝 모델링 과정은 일반적으로 학습 → 예측 → 평가로 나눌 수 있다. 이 구조는 단순해 보이지만, 실제로는 고려해야할 요소들이 많다. '어떤 데이터를 학습에 사용할 것인지?', '테스트 데이터는 어떻게 구성해야 하는지?', '어떤 평가 기준을 써야 좋은 예측이라고 판단할 수 있는지?' 이러한 질문들에 대한 답이 필요하다.
데이터를 어떻게 사용할까?
머신러닝의 궁극적인 목표는 어떤 상황에서도 잘 작동하는 일반화된 모델을 만드는 것이다. 하지만 현실에서 사용할 수 있는 데이터는 제한적이며, 그 데이터가 세상의 모든 패턴을 충분히 반영하지 못할 수도 있다. 그래서 머신러닝은 데이터 싸움이다라는 표현이 있듯이, 머신러닝은 데이터의 질과 양이 항상 중요하다는 전제를 깔고 생각한다. 우리는 데이터를 잘 활용해, 가능한 일반화 성능이 높은 모델을 만들어야 한다.
머신러닝에서는 학습에 사용한 데이터를 기준으로 평가한 성능을 학습 성능(Training Performance)이라 하고, 학습에 사용하지 않은 새로운 데이터로 평가한 성능을 일반화 성능(Generalization Performance) 또는 테스트 성능(Test Performance)이라 한다.
학습 성능이 높다고 해서 항상 좋은 모델이라고 할 수는 없다. 모델이 훈련 데이터에만 과도하게 맞춰져 있다면, 새로운 데이터에는 제대로 작동하지 않을 수 있기 때문이다. 이런 현상을 과적합(overfitting)이라고 한다. 그래서 우리는 실제 시험처럼, 모델이 처음 보는 데이터에 얼마나 잘 작동하는지 확인하기 위해 테스트 데이터를 따로 떼어두고 평가를 진행한다. 즉, 테스트 성능은 모델의 일반화 능력을 가늠하는 중요한 지표가 된다.
그렇다면 여기서"전체 데이터 중 어떤 것을 테스트 데이터로 써야 할까?"라는 질문이 생긴다. 분할 방식에 따라 평가 결과는 조금, 혹은 상당히 다르게 나올 수도 있다. 특히 클래스 불균형이 심한 분류 문제에서는, 테스트셋에만 있는 희소 클래스가 학습 과정에서는 아예 등장하지 않을 수도 있다. 그 경우, 모델은 해당 클래스를 전혀 학습하지 못한 채 평가되기 때문에 성능이 왜곡될 수 있다.
가장 간단한 분할 방식은 데이터를 무작위로 섞어서(shuffle) 나누는 것이고, 또는 데이터 순서대로 일정 비율로 나누는 방법, 혹은 클래스 비율을 유지하며 나누는 방법(stratified split)도 있다.

여기서, 훈련데이터와 테스트 데이터로만 나누는 것이 아니라 훈련, 검증, 테스트 데이터로 나누는 방식도 있다. 이 경우, 테스트 데이터는 그대로 나두고 훈련 데이터를 다시 훈련용과 검증용으로 나눠, 다양한 모델이나 하이퍼파라미터 튜닝 결과를 검증 데이터로 평가하며 개선해 나간다. 검증 성능은 마치 모델이 '최종 시험'보기 전, 실력을 키우기 위해 치르는 쪽지 시험처럼 볼 수 있다. 이렇게 하면 테스트 데이터는 학습과 개선에 사용되지 않고, 순수하게 모의고사 용도로만 사용할 수 할 수 있다. 단, 검증 데이터는 역전파(gradient 계산)에는 사용되지 않는다.
일반적으로 모델의 일반화 성능을 높이기 위해 전체 데이터를 훈련, 검증, 테스트로 나눠 학습, 개선, 평가하는 것이 권장된다. 또한, 모델 학습 횟수(총 Epoch 수)를 정하거나, 여러 모델 중 어떤 것을 선택할 지 결정할 때도 검증 데이터를 적극 활용한다.

데이터 양이 충분한다면 훈련, 검증, 테스트 데이터로 나누는 방식이 효과적이다. 하지만, 데이터가 부족하거나, 데이터가 충분해도 성능을 안정적으로 평가하고 싶을 때 교차검증(cross validation)이라는 방법을 사용한다. 이때, 테스트 데이터는 그냥 나두고 훈련 데이터를 k개의 그룹으로 나눠 각 그룹을 한 번씩 훈련용과 검정용으로 사용하고 나머지는 훈련용으로 활용해 모델 성능을 평균내어 평가하는 방식이다.

여기서 중요한 것은 검증 데이터나 테스트 데이터가 원본 데이터를 잘 반영해야한다. 잘 반영하지 못할 경우, 학습 데이터에서는 좋은 성능을 보이더라도 실제 환경에서는 성능이 크게 저하될 수도 있다. 특히 검증 데이터와 테스트 데이터 간에 분포 차이가 크거나 서로 다른 패턴을 가질 경우, 모델은 학습 데이터에만 최적화되어 일반화 성능이 떨어질 수 있다. 따라서 검증용과 평가용 데이터를 원본의 특성을 충분히 반영하도록 신중하게 분할하는 것이 중요하다.
'AI > Machine learning' 카테고리의 다른 글
| [ML] 좋은 모델을 만들려면 어떻게 해야 할까? (3) (0) | 2025.08.06 |
|---|---|
| [ML] 좋은 모델을 만들려면 어떻게 해야 할까? (2) (2) | 2025.08.04 |
| [ML] 머신러닝 모델링(Modeling), 도대체 뭘 하는 걸까? (0) | 2025.07.24 |
| [ML] 머신러닝은 어떻게 학습할까? (3) | 2025.07.23 |
| [ML] 인공지능(AI), 머신러닝(ML), 딥러닝(DL) 개요 (1) | 2025.07.23 |
- Total
- Today
- Yesterday
- 클래스 총 정리
- **kwargs
- ML Process
- 머신러닝
- 손실함수
- 앤드류응
- ML
- 강화학습
- *args
- python
- 로지스틱 회귀
- ndarray
- Andrew Ng
- 경사하강법
- Sort
- NumPy
- baekjoon
- *
- sorted
- Action spaces
- ML 프로세스
- cnn
- 숏코딩
- ML 종류
- **
- 비용함수
- 강의노트 정리
- 딥러닝
- 백준
- 파이썬
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
