Code › ai-engineering-study
[AI] 위클리페이퍼 #3 - 결정 트리, 부스팅, 차원축소
결정 트리와 주요 부스팅 모델, PCA와 요인 분석의 차이를 정리한 세 번째 위클리 페이퍼
위클리 페이퍼 3주차에는 결정 트리와 부스팅, 차원 축소를 정리했다. 결정 트리의 장단점에서 시작해 여러 트리를 순서대로 학습하는 부스팅으로 이어지고, 마지막에는 차원 축소의 방법에 대해서도 알아보고 비교해 보았다.
1. 결정 트리의 장점과 단점은 무엇인가요?
결정 트리(Decision Tree)는 데이터의 특성에 조건을 걸어 영역을 나누고, 마지막 리프 노드에서 분류 결과나 예측값을 내는 지도학습 모델이다. 말이 어려운데 예를 들어 대출 심사 데이터를 다룬다면 소득이 일정 금액 이상인지, 연체 이력이 있는지 같은 질문을 순서대로 만들 수 있다.
가장 큰 장점은 결과를 해석하기 쉽다는 점이다. 어떤 조건을 거쳐 예측이 나왔는지 트리의 경로를 따라가며 확인할 수 있고, 시각화도 가능하다. 특성 사이의 비선형 관계와 상호작용을 별도로 식으로 만들지 않아도 학습할 수 있으며, 특성의 크기에 따라 거리를 계산하는 모델이 아니므로 일반적으로 표준화나 정규화가 필요하지 않다.
반면 트리를 깊게 만들면 훈련 데이터의 작은 차이와 잡음까지 조건으로 나누면서 과적합되기 쉽다. 학습 데이터가 조금만 달라져도 선택되는 분기와 트리 구조가 크게 바뀔 수 있어서 분산도 높다. 이를 줄이려면 최대 깊이, 리프 노드의 최소 샘플 수, 가지치기 같은 제한이 필요하다.
또한 결정 트리는 매 단계에서 불순도나 손실을 가장 많이 줄이는 분기를 선택하는 탐욕적 방식으로 학습한다. 앞에서 선택한 분기를 되돌아가 전체 트리의 최적 구조를 다시 찾지는 않으므로, 만들어진 트리가 항상 가능한 모든 트리 중 최적이라고 할 수는 없다.
2. 부스팅은 어떤 특징을 가진 앙상블 기법인가요?
앙상블(Ensemble)이란 말은 프랑스어로 ‘함께’, ‘동시에’ 라는 뜻이다. 그래서 말 그대로 여러 모델의 예측을 결합하는 방법이다. 그중 부스팅(Boosting)은 예측력이 낮은 모델인 약한 학습기(weak learner)를 순서대로 추가하면서, 앞 모델이 틀린 부분을 다음 모델이 보완하게 만든다.
여러 모델을 독립적으로 학습한 뒤 평균이나 투표를 사용하는 배깅(Bagging)과 달리, 부스팅에서는 앞 단계의 결과가 다음 단계 학습에 영향을 준다. 그래서 각 트리를 동시에 완전히 독립적으로 만들 수는 없지만, 얕은 트리 여러 개를 합쳐 복잡한 비선형 관계를 학습할 수 있다.
부스팅은 정형 데이터에서 높은 예측 성능을 내는 경우가 많다. 다만 트리를 순차적으로 추가하므로 학습 시간이 길어질 수 있고, 학습률과 트리 수, 트리 깊이 같은 값을 함께 조정해야 한다. 모델을 지나치게 복잡하게 만들면 잡음까지 학습할 수 있다는 점도 확인해야 한다.
Gradient Boosting
Gradient Boosting은 현재 모델의 손실을 줄이는 방향을 계산하고, 그 방향을 따라 오차를 보정하는 새로운 약한 학습기를 추가한다. 회귀에서는 앞 모델이 남긴 잔차를 다음 트리가 학습한다고 설명할 수 있고, 더 일반적으로는 손실 함수의 음의 그래디언트를 근사하도록 트리를 학습한다.
이 과정을 간단히 식으로 쓰면 다음과 같다.
여기서 는 지금까지 만든 모델, 는 이전 모델의 오차를 보완하는 새로운 약한 학습기이며, 는 새 학습기의 반영 정도를 조절하는 학습률이다.
미분 가능한 여러 손실 함수를 사용할 수 있고 비선형 관계를 잘 학습한다는 장점이 있다. 반면 트리를 순차적으로 만들기 때문에 학습 속도가 느릴 수 있으며, 트리 수가 너무 많거나 각 트리가 깊으면 과적합될 수 있다. 학습률을 낮추면 한 번의 수정 폭은 작아지지만 일반적으로 더 많은 트리가 필요하다.
XGBoost
XGBoost는 Gradient Boosting을 확장한 모델이다. 손실 함수의 1차 미분뿐 아니라 2차 미분 정보도 활용하고, 목적 함수에 트리의 복잡도를 제한하는 규제 항을 포함한다. 결측값과 희소 데이터를 처리하는 기능, 가지치기, 효율적인 메모리 사용과 병렬 계산도 제공한다. 다만 부스팅의 트리 순서 자체가 사라지는 것은 아니며, 주로 각 트리 안에서 분기 후보를 계산하는 작업 등을 병렬화한다.
정형 데이터에서 성능이 좋고 과적합을 제어할 선택지가 많다는 점이 장점이다. 그만큼 조정할 하이퍼파라미터도 많아서 처음 설정하기가 단순하지 않고, 데이터가 크면 학습 시간과 메모리 사용량을 함께 고려해야 한다.
AdaBoost
AdaBoost는 처음에는 모든 학습 데이터에 같은 가중치를 주고, 잘못 예측한 데이터의 가중치를 높여 다음 약한 학습기가 그 데이터를 더 중요하게 보도록 한다. 마지막에는 각 학습기의 성능에 따라 가중치를 둔 투표나 합으로 결과를 만든다.
작은 결정 트리와 결합해 원리를 비교적 쉽게 이해할 수 있고, 단순한 약한 학습기 여러 개로 하나의 모델보다 나은 결과를 만들 수 있다. 하지만 오분류된 데이터에 계속 높은 가중치를 주므로 이상치나 잘못된 라벨에도 집중할 수 있다. 잡음이 많은 데이터에서는 이 특성이 단점이 된다.
LightGBM
LightGBM은 연속적인 특성값을 여러 구간으로 묶은 히스토그램을 이용해 분기 후보를 빠르게 계산한다. 트리를 같은 깊이의 노드별로 확장하기보다, 현재 손실을 가장 많이 줄일 수 있는 리프를 먼저 나누는 leaf-wise 방식을 사용한다.
대용량 데이터에서 학습 속도가 빠르고 메모리 사용량을 줄일 수 있으며, 범주형 특성도 별도의 원-핫 인코딩 없이 다룰 수 있다. 반면 leaf-wise 성장은 한쪽 가지를 빠르게 깊게 만들 수 있어서 데이터가 작을 때 과적합되기 쉽다. 이 경우 리프 수, 리프의 최소 데이터 수, 최대 깊이를 함께 제한해야 한다.
CatBoost
CatBoost는 범주형 특성을 많이 포함한 데이터에 초점을 맞춘 Gradient Boosting 모델이다. 범주형 값을 학습 전에 모두 원-핫 인코딩하지 않고 내부에서 통계값으로 변환하며, 이 과정에서 현재 행의 정답을 그대로 참조해 정보가 새는 문제를 줄이기 위해 데이터 순서를 이용한다. Ordered Boosting에서는 임의로 정한 데이터 순서에서 각 샘플보다 앞에 있는 데이터만 사용해 해당 샘플의 학습 신호를 계산함으로써, 현재 샘플의 정답이 학습 과정에 미리 섞이는 것을 막는다.
범주형 데이터가 많은 문제에서 전처리 부담이 적다는 장점이 있다. 반면 범주형 특성 통계와 Ordered Boosting을 계산하는 과정이 추가되므로 데이터와 설정에 따라 학습 시간이 길어질 수 있다. GPU 학습에서는 부동소수점 합산 순서 때문에 같은 설정에서도 결과가 완전히 동일하지 않을 수 있다.
정리하면 AdaBoost는 틀린 샘플의 가중치를 높이고, Gradient Boosting 계열은 손실이 감소하는 방향으로 다음 트리를 추가한다. XGBoost는 규제와 시스템 최적화를 확장했고, LightGBM은 히스토그램과 leaf-wise 성장으로 속도를 높였으며, CatBoost는 범주형 특성을 처리하는 과정에 강점이 있다.
3. 주성분 분석과 요인 분석의 차이는 무엇인가요?
이 주제는 아직 배우지 않았지만 찾아서 한번 정리해 보았다.
주성분 분석(Principal Component Analysis, PCA)과 요인 분석(Factor Analysis, FA)은 여러 특성을 더 적은 수의 변수로 표현할 때 사용한다. 하지만 두 방법이 줄이려는 대상과 결과를 해석하는 기준은 다르다.
PCA는 원래 특성들의 선형 결합으로 새로운 축인 주성분을 만든다. 첫 번째 주성분은 데이터의 분산을 가장 많이 담는 방향이고, 다음 주성분은 앞의 주성분과 직교하면서 남은 분산을 가장 많이 담는 방향이다. 따라서 PCA의 주된 목적은 전체 데이터의 정보를 가능한 한 많이 유지하면서 특성 수를 줄이는 것이다.
예를 들어 고객마다 구매 금액, 구매 횟수, 방문 횟수, 체류 시간, 할인 사용 횟수처럼 서로 연관된 특성이 많다면, PCA는 이 값들의 분산을 최대한 보존하는 몇 개의 주성분으로 압축한다. 다만 각 주성분은 관측된 특성들의 수학적인 조합이므로, 그 축이 반드시 구매 성향이나 충성도처럼 현실에 존재하는 하나의 개념을 뜻하는 것은 아니다.
요인 분석은 관측된 여러 특성의 상관관계가 직접 보이지 않는 소수의 잠재 요인에서 비롯되었다고 가정한다. 고객 데이터에서 구매 금액과 구매 횟수가 함께 움직이고, 방문 횟수와 체류 시간이 함께 움직인다면 이 관계를 구매 성향이나 서비스 참여도 같은 잠재 요인으로 설명할 수 있는지 살펴보는 식이다.
이때 각 관측값의 변동은 여러 변수에 공통으로 영향을 주는 공통 요인과, 해당 변수에만 있는 고유한 변동 및 오차로 나뉜다. PCA가 데이터에 포함된 전체 분산을 보존하는 축을 찾는다면, 요인 분석은 변수들의 공통된 변동을 설명하는 숨은 요인을 찾는다.
| 구분 | PCA | 요인 분석 |
|---|---|---|
| 주된 목적 | 분산을 보존하며 특성 수 축소 | 변수 사이의 상관관계를 만드는 잠재 요인 설명 |
| 결과 | 관측 특성의 선형 결합인 주성분 | 관측 특성에 영향을 주는 잠재 요인 |
| 분산 처리 | 데이터의 전체 분산을 사용 | 공통 분산과 변수별 고유 분산 및 오차를 구분 |
| 주된 활용 | 압축, 시각화, 노이즈 감소, 전처리 | 설문 문항이나 행동 지표의 숨은 구성 개념 탐색 |
따라서 예측 모델에 넣을 특성 수를 줄이거나 고차원 데이터를 시각화하려면 PCA가 먼저 떠오르고, 여러 설문 문항이나 행동 지표 뒤에 어떤 공통된 개념이 있는지 설명하려면 요인 분석이 목적에 더 맞다.