머신러닝에서 앙상블(Ensemble) 은 말 그대로 여러 개의 모델을 결합해서 더 나은 성능을 얻는 방법입니다.
한마디로 말하면 “모델의 집단지성” 이라고 생각하면 됩니다.
왜 앙상블을 쓸까?
- 단일 모델은 한계가 있음
- → 과적합하거나, 특정 데이터에서 성능이 들쑥날쑥할 수 있음.
- 여러 모델의 약점을 보완해서 더 정확하고 안정적인 예측을 하려는 목적.
대표적인 앙상블 방식 3가지
Bagging | 여러 모델을 병렬로 학습 → 예측 결과 평균 or 투표 | 📌 Random Forest |
Boosting | 순차적으로 모델을 학습, 이전 모델의 오차를 보완 | 📌 XGBoost, LightGBM, AdaBoost |
Stacking | 여러 모델의 예측 결과를 또 다른 메타 모델이 학습 | 📌 보통 앙상블 대회에서 많이 씀 |
랜덤 포레스트
랜덤 포레스트를 이해하기 위해선 의사결정 트리에 대한 이해가 있어야 합니다.
1. 의사결정 트리란?
데이터를 기준에 따라 “예/아니오” 질문으로 나누면서, 최종 결정을 내리는 나무 형태의 모델.
비유로 이해해보기:
Q: 오늘 서핑을 해야 할까요?
우리는 여러 가지 조건을 생각해볼 수 있습니다.
(1) 파도가 높나요? → 예
(2) 바람 방향이 바다에서 불어오나요? → 예
→ ✅ 서핑하자
(2) 바람이 육지에서 불어오나요? → 아니오
→ ❌ 하지 말자
(1) 파도가 낮나요? → 아니오
→ ❌ 하지 말자
- 각 질문(조건): 노드(node)
- 각각의 예/아니오 분기: 분기(branch)
- 마지막 결정(서핑 여부): 리프 노드(leaf node)
이처럼 조건을 기준으로 데이터를 점점 좁혀가며 분할 → 최종 결론에 도달하는 게 의사결정 트리입니다.
2. 트리가 똑똑하게 학습하는 방법
트리는 어떻게 좋은 질문을 고를까요?
트리는 최대한 정보가 잘 나뉘는 질문을 선택하려고 합니다.
대표적인 기준들:
🎯 지니 불순도(Gini Impurity) | 데이터가 섞여 있는 정도. 섞임이 적을수록 좋음. |
🎯 정보 이득(Information Gain) | 얼마나 “정보가 깔끔하게” 나뉘었는지 측정. |
📉 평균 제곱 오차(MSE) | 회귀 문제(숫자 예측)에서 오차를 줄이는 기준. |
즉, 가장 "좋은 질문(가장 잘 나누는 조건)"을 찾으면서 트리를 자라나게 함.
3. 의사결정 트리의 한계
- 과적합(Overfitting)
- 너무 훈련 데이터에 맞춰서 복잡한 규칙을 만들다 보면, 새 데이터에는 잘 작동하지 않음.
- 예: 훈련 데이터에서는 “서울에 사는 키 178cm 이상 사람만 YES” 같은 과하게 세세한 규칙이 생김.
- 편향(Bias)
- 데이터에 따라 하나의 트리가 잘못된 패턴을 학습할 수 있음.
어떻게 동작하나?
- 여러 개의 트리 생성
- 각각 다른 데이터 샘플과 다른 피처(속성) 조합으로 트리를 훈련.
- 이렇게 해서 트리 간의 다양성을 확보.
- 예측할 땐?
- 분류 문제: 각 트리의 결과 중 다수결 투표로 결정.
- 회귀 문제: 각 트리의 예측값을 평균해서 결과 도출.
4. 그래서 등장한 랜덤 포레스트(Random Forest)
“나무 한 그루보다는 숲이 낫다!”
→ 여러 개의 트리를 만들어서 투표/평균을 통해 최종 결정을 내리는 방식.
🎯 그럼 무엇을 투표하고 어떤 값을 평균을 내서 결정을 내릴까?
이걸 이해하기 위해선 분류와 회귀에 대한 이해가 필요합니다.
1. “분류”와 “회귀”는 뭐지?
🔷 분류 (Classification)
결과가 카테고리(범주) 중 하나로 나오는 문제.
예:
- 이메일 → 스팸 vs 일반 메일
- 동물 사진 → 고양이 vs 개
- 날씨 → 맑음 / 흐림 / 비
➡️ “A냐 B냐?” 혹은 “A, B, C 중 하나냐?” 같은 문제.
🔷 회귀 (Regression)
결과가 숫자값으로 나오는 문제.
예:
- 내일 기온은 몇 도일까? → 23.5도
- 아파트 가격은 얼마일까? → 5.3억
- 주식 가격은 얼마일까? → 12345.67원
➡️ “숫자를 예측”하는 문제.
2. 랜덤 포레스트가 어떻게 예측하나?
랜덤 포레스트는 여러 개의 결정 트리를 만들어서 예측합니다.
분류 문제의 예측 방식 – “투표!”
예: 개 vs 고양이 분류 문제
- 100개의 트리에게 한 이미지를 보여줌.
- 각각 트리가 스스로 판단함:
트리 1 → 개
트리 2 → 고양이
트리 3 → 고양이
...
트리 100 → 고양이 - 결과: 고양이가 78표, 개가 22표→ 이걸 다수결 투표라고 합니다.
- → ✅ 최종 예측: “고양이”
회귀 문제의 예측 방식 – “평균!”
예: 아파트 가격 예측 문제
- 100개의 트리에게 한 아파트 정보를 줌.
- 각 트리가 숫자 하나씩 예측함:
트리 1 → 4.9억
트리 2 → 5.2억
트리 3 → 5.0억
...
트리 100 → 5.1억 - 결과: 100개의 숫자를 평균 내기→ 이걸 평균 예측값이라고 합니다.
- → ✅ 최종 예측: “5.05억”
결정 트리를 만드는 방법은?
1. Bootstrap Sampling: 데이터 샘플을 랜덤하게 뽑음
모든 트리에 똑같은 데이터를 주는 게 아니라,
원본 데이터를 랜덤하게 복원 추출해서 일부만 줌.
2. Feature Subsampling: 트리가 사용할 피처도 랜덤하게 제한함
트리의 각 노드는 “모든 피처 중 최고”를 고르는 게 아니라,
일부 피처만 보고 그 중에서 나누는 기준을 고름.
※여기서 피처란?
정의:
피처(Feature) 는 머신러닝에서 입력 데이터의 속성(정보)을 말하며,
모델이 뭔가를 예측하기 위해 참고하는 요소들 입니다.
예시:
문제: 집값을 예측해라.
정보(피처) | 설명 |
면적 (㎡) | 크면 클수록 비쌈 |
방 개수 | 많을수록 비쌈 |
층수 | 고층이면 더 비쌈 |
지하철 거리 (m) | 가까울수록 비쌈 |
댓글