일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- Machine Learning
- 신경망
- 머신 러닝
- 교차 검증
- 지도 학습
- 최적화
- AI
- 활성화 함수
- 인공 신경망
- reinforcement learning
- q-러닝
- 인공지능
- Deep learning
- 정규화
- 차원 축소
- 자연어 처리
- rnn
- Q-Learning
- 손실 함수
- 회귀
- 데이터 전처리
- 강화 학습
- GRU
- 딥러닝
- 강화학습
- CNN
- LSTM
- 머신러닝
- python
- 과적합
- Today
- Total
move84
머신러닝 모델 선택 기법 이해하기 본문
머신러닝 모델을 개발할 때 어떤 모델을 선택할지 결정하는 것은 매우 중요합니다. 모델 선택(Model Selection)은 말 그대로 여러 후보 모델 중에서 최적의 모델을 고르는 과정입니다. 좋은 모델은 훈련 데이터에만 잘 맞는 것이 아니라 새로운 데이터에도 좋은 성능을 내야 합니다. 이번 포스트에서는 초보자도 이해하기 쉽게 대표적인 모델 선택 기법들에 대해 알아보겠습니다. 📚
🤖 교차 검증 (Cross Validation)으로 안정적인 평가
모델의 성능을 제대로 평가하려면 훈련에 사용되지 않은 데이터로 검증해야 합니다. 가장 간단한 방법은 데이터를 훈련 세트와 테스트 세트로 한 번 나누는 것입니다. 그러나 이렇게 한 번의 나눔으로는 모델이 새로운 데이터에 얼마나 일반화되는지 신뢰하기 어려울 수 있습니다. 이를 보완하기 위한 방법이 바로 교차 검증, 그 중에서도 흔히 사용하는 K-폴드 교차 검증(K-fold cross validation)입니다.
교차 검증이란? 전체 데이터를 K개의 폴드(fold)로 나눈 뒤, 각 폴드를 한 번씩 검증용으로 번갈아 사용하여 K번 모델을 훈련하고 평가하는 방법입니다. 예를 들어, 5-폴드 교차 검증이라면 데이터를 5등분하여 그 중 1등분은 검증(Validation)에, 나머지 4등분은 훈련(Training)에 사용합니다. 이 과정을 5번 반복하면서 매번 다른 폴드를 검증에 사용하게 되고, 최종 성능은 5번의 평가 결과를 평균내어 얻습니다. 이렇게 하면 데이터의 각 부분이 한 번씩 검증에 사용되므로, 한 번의 훈련-테스트 분할보다 모델의 일반화 성능에 대한 더 안정적인 추정을 얻을 수 있습니다.
교차 검증의 개념을 시각화한 그림입니다. 왼쪽처럼 하나의 테스트 세트만 사용하는 경우와 달리, 오른쪽처럼 K-폴드 교차 검증은 여러 번의 훈련-테스트 과정을 거칩니다. 각 반복마다 다른 폴드가 테스트 세트(주황색)로 사용되고, 나머지 폴드들은 훈련 세트(녹색)로 사용됩니다. 이러한 방식을 통해 모든 데이터 포인트가 한 번씩 테스트에 활용되며, 과적합(Overfitting)을 확인하고 방지하는 데 도움이 됩니다. 실제 모델 개발에서는 보통 K=5나 K=10을 많이 사용하며, 데이터가 적을수록 K를 크게 (극단적으로는 하나 빼고 전부 훈련에 사용하는 LOOCV, Leave-One-Out Cross Validation) 설정해 최대한 많은 데이터를 훈련에 활용합니다.
교차 검증은 모델 선택과 하이퍼파라미터 튜닝에도 널리 활용됩니다. 예를 들어, 분류기의 종류나 하이퍼파라미터 값을 바꿔가며 교차 검증 점수를 비교하면 어떤 설정이 가장 좋은 일반화 성능을 내는지 알 수 있습니다. 교차 검증 결과의 분산이 크다면 모델이 데이터에 따라 불안정하다는 신호일 수 있고, 각 폴드에서 일관되게 성능이 높다면 안정적인 모델이라고 판단할 수 있습니다.
🔄 간단한 교차 검증 실습 예제
아래 파이썬 코드 예시는 사이킷런(scikit-learn)을 사용하여 K-최근접 이웃 분류기(K-Nearest Neighbors)를 5-폴드 교차 검증으로 평가하는 과정입니다. 아이리스(Iris) 데이터셋을 불러와서 교차 검증을 수행한 후 각 폴드의 정확도와 평균 정확도를 출력합니다.
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
# 데이터 로드
X, y = load_iris(return_X_y=True)
model = KNeighborsClassifier(n_neighbors=3)
# 5-폴드 교차 검증
scores = cross_val_score(model, X, y, cv=5)
print("개별 Fold 정확도:", scores)
print("평균 정확도:", scores.mean())
예시 코드를 실행하면 대략 다음과 같은 결과가 나옵니다.
개별 Fold 정확도: [0.9667 1. 0.9333 0.9667 1. ]
평균 정확도: 0.9733
위 결과에서 볼 수 있듯이, 5개의 폴드에 대해 각각 정확도가 계산되었고, 평균적으로 약 97.33%의 정확도를 보입니다. 이처럼 교차 검증을 통해 모델의 성능을 보다 안정적으로 평가하고, 다른 모델이나 설정과 비교하여 최적의 모델을 선택할 수 있습니다. 🎯
⚖️ 정보 기준 (AIC & BIC)을 활용한 모델 평가
통계적 모델링에서는 정보 기준(Information Criterion)이라는 지표를 통해 여러 모델 중 최적의 모델을 선택하기도 합니다. 대표적인 정보 기준으로는 AIC(Akaike Information Criterion, 아카이케 정보 기준)와 BIC(Bayesian Information Criterion, 베이즈 정보 기준)가 있습니다. 이 둘은 모델의 적합도(데이터를 얼마나 잘 설명하는지)와 복잡도(모델 파라미터 수)에 대한 균형을 평가하는 지표입니다.
- AIC(아카이케 정보 기준): 통계 모델의 적합도를 평가하는 지표로, 모델의 우도(likelihood)와 모델 복잡도를 모두 고려합니다. 수식으로 표현하면 AIC = 2 * k - 2 * ln(L) 입니다. 여기서 k는 모델 파라미터의 개수, L은 모델의 최대 우도(maximum likelihood)입니다. AIC 값이 낮을수록 데이터에 비해 불필요한 복잡성이 적고, 데이터 적합도가 우수한 더 나은 모델로 간주됩니다. AIC는 여러 후보 모델 중 가장 낮은 AIC를 갖는 모델을 선택하는 데 사용됩니다.
- BIC(베이즈 정보 기준): AIC와 개념은 비슷하지만, 복잡도에 대한 패널티가 데이터 수에 따라 가중되는 지표입니다. 수식은 BIC = k * ln(N) - 2 * ln(L)로 나타납니다. 여기서 N은 데이터 샘플 수입니다. BIC 역시 작을수록 좋은 모델이며, 불필요하게 복잡한 모델에 더 큰 패널티를 부과합니다. 특히 데이터 샘플 수 N이 클수록 ln(N) 항 때문에 복잡도에 대한 벌점이 커지므로, BIC는 AIC보다 복잡한 모델에 더 보수적입니다. 그래서 변수 개수가 많은 모델 비교에서는 BIC가 더 간단한 모델을 선호하는 경향이 있습니다.
예를 들어, 서로 다른 파라미터를 가진 두 모델의 성능이 비슷하다면 AIC나 BIC 값을 계산해 더 낮은 쪽의 모델을 선택할 수 있습니다. 이런 정보 기준은 주로 통계학적인 모델(선형 회귀, 로지스틱 회귀 등)에서 모형의 적합도 비교에 활용됩니다. 다만, AIC나 BIC를 사용하려면 각 모델의 우도를 계산할 수 있어야 하므로, 딥러닝이나 비확률적 모델에서는 직접 적용하기 어렵습니다. 그런 경우에는 교차 검증이나 별도의 검증 데이터 성능 등 다른 방법을 사용합니다.
📈 ROC 곡선 (ROC Curve)으로 분류 모델 비교
분류 문제(binary classification)에서 모델의 성능을 평가하고 비교할 때 ROC 곡선도 자주 활용되는 도구입니다. ROC는 Receiver Operating Characteristic curve의 약자로, 분류기의 민감도(재현율, True Positive Rate)와 특이도(1 - 거짓 양성율, False Positive Rate) 사이의 트레이드오프를 시각화한 곡선입니다. 간단히 말해, 분류 임계값(threshold)을 변화시켜가며 얻는 TPR과 FPR의 조합을 그래프로 그린 것이 ROC 곡선입니다.
위 그림은 ROC 곡선의 예시입니다. 가로축은 False Positive Rate(거짓 양성 비율), 세로축은 True Positive Rate(진짜 양성 비율)입니다. 빨간색 점선은 무작위 분류기의 성능(대각선)이며, 파란색과 초록색, 주황색 곡선은 모델의 성능 곡선을 나타냅니다. 파란색 곡선이 초록색보다 위로 올라가 있는데, 이는 파란색 모델이 전 범위에 걸쳐 더 높은 TPR을 달성하면서도 낮은 FPR을 유지하여 더 우수한 성능을 보임을 의미합니다. ROC 곡선에서 좌측 상단 모서리에 가까울수록 (TPR은 높고 FPR은 낮은) 더 좋은 모델입니다. 만약 두 모델의 ROC 곡선이 겹치지 않고 한 모델이 다른 모델의 곡선 전체보다 위에 있다면, 그 모델이 전반적으로 더 뛰어난 것입니다.
또한 ROC 곡선 아래 면적을 계산한 AUC (Area Under the Curve) 값은 하나의 숫자로 모델 성능을 표현해줍니다. AUC 값은 0.5에서 1 사이의 값을 가지며, 1에 가까울수록 완벽한 분류기, 0.5 정도라면 무작위 분류기와 비슷한 성능을 의미합니다. 예를 들어 AUC가 0.85라면, 두 클래스를 구분하는 분류기의 성능이 비교적 우수한 편이라고 볼 수 있습니다. 여러 후보 분류 모델이 있다면 AUC 값을 비교하여 어떤 모델이 전반적으로 분류를 잘 하는지 판단할 수 있습니다.
초보자의 관점에서 ROC 곡선은 다소 추상적으로 느껴질 수 있지만, 임곗값 조정에 따른 모델의 민감도와 정확도의 변화를 한눈에 보여주는 도구라는 점이 중요합니다. 예를 들어 암 진단 모델에서는 민감도를 높이기 위해 임곗값을 낮추면 거짓 양성도 늘어나게 되는데, 이러한 관계를 ROC 곡선을 통해 파악할 수 있습니다. 여러 모델의 ROC를 그려보면 어떤 모델이 특정 범위에서 더 우수한지도 확인할 수 있어, 모델 선택에 유용한 정보를 제공합니다.
🔑 주요 용어 정리
- 교차 검증 (Cross Validation): 주어진 데이터를 여러 번 나누어 모델을 반복 평가함으로써, 모델의 일반화 성능을 안정적으로 추정하는 기법. 과적합을 방지하고 모델 선택에 활용됨. (예: K-폴드 교차 검증)
- 과적합 (Overfitting): 모델이 훈련 데이터에 지나치게 맞춰져서 새로운 데이터에서는 성능이 떨어지는 현상. 교차 검증이나 정규화 등을 통해 완화할 수 있음.
- AIC (Akaike Information Criterion): 통계 모델의 적합도와 복잡도를 고려하는 정보 기준 지표. 값이 낮을수록 좋은 모델로 간주되며, 여러 모델 중 최적 모델 선택에 사용.
- BIC (Bayesian Information Criterion): AIC와 유사하지만 데이터 수를 고려하여 복잡도에 더 강한 패널티를 주는 정보 기준 지표. 값이 낮을수록 좋으며, 단순한 모델 선호 경향이 있음.
- ROC 곡선 (Receiver Operating Characteristic Curve): 분류 모델의 성능을 평가하는 그래프. 민감도(TPR)와 거짓 양성율(FPR)의 관계를 나타내며, 곡선이 좌상단에 가까울수록 성능이 우수. AUC 값으로 한눈에 비교 가능.
키워드: 모델 선택, 교차 검증, AIC, ROC 곡선
'머신러닝' 카테고리의 다른 글
머신러닝 기본: 머신러닝에서 스태킹 모델 사용하기 (0) | 2025.03.02 |
---|---|
앙상블 학습(Ensemble Methods) 개요 (0) | 2025.03.02 |
머신러닝 베이지안 최적화: ML 모델을 위한 Bayesian Optimization 이해 (0) | 2025.02.25 |
머신러닝 하이퍼파라미터 튜닝: 랜덤 서치(Random Search)의 이해 (0) | 2025.02.25 |
머신러닝 기초 – 하이퍼파라미터 튜닝과 그리드 서치(Grid Search) (0) | 2025.02.25 |