스무고개처럼 예측하는 모델
로지스틱 회귀는 데이터를 하나의 계산식에 넣고, 그 결과를 확률로 바꾼 뒤, 임계값을 기준으로 분류를 결정했다. 앞 장에서 우리는 "이 사람이 생존했을 확률은 0.73이므로 생존으로 분류하자" 같은 식의 판단을 살펴보았다.
이번 장에서 만날 결정트리는 조금 다르다. 결정트리는 복잡한 수식보다 질문에 가깝다.
"나이가 30세 이상인가?"
"월 이용 시간이 10시간 미만인가?"
"메일 제목에 '무료'라는 단어가 들어 있는가?"
"집의 면적이 80㎡보다 큰가?"
결정트리는 이런 질문을 하나씩 던지며 데이터를 나눈다. 마치 스무고개를 하듯이 말이다. 상대가 생각한 동물을 맞히기 위해 "날 수 있나요?", "물에 사나요?", "다리가 네 개인가요?"라고 묻는 장면을 떠올려 보자. 처음에는 가능한 후보가 아주 많지만, 질문을 거듭할수록 후보는 점점 좁아진다. 결국 마지막에는 "아, 돌고래군요!"처럼 답에 도달한다.
결정트리도 비슷하다. 처음에는 모든 데이터가 한 덩어리로 모여 있다. 모델은 그 덩어리를 가장 잘 나눌 수 있는 질문을 찾는다. 그리고 나뉜 작은 그룹마다 다시 질문을 던진다. 이 과정을 반복하다 보면, 마지막에는 예측하기 쉬운 작은 그룹들이 생긴다. 어떤 잎에는 생존자가 많이 모여 있고, 어떤 잎에는 사망자가 많이 모여 있다. 어떤 잎에는 비싼 집들이 모여 있고, 어떤 잎에는 저렴한 집들이 모여 있다.
이것이 결정트리의 핵심이다. 결정트리는 데이터를 질문으로 나누고, 마지막에 도착한 그룹의 성격을 보고 예측한다.

트리는 거꾸로 자라는 질문 지도다
우리가 흔히 보는 나무는 뿌리가 아래에 있고 가지가 위로 뻗는다. 하지만 머신러닝에서 말하는 트리는 보통 위에서 아래로 그린다. 맨 위에 첫 질문이 있고, 아래로 갈수록 질문이 이어진다. 그래서 결정트리를 처음 보면 "나무라기보다는 조직도나 순서도에 가깝다"고 느낄 수 있다.
결정트리에는 몇 가지 기본 용어가 있다. 어렵지는 않다. 질문이 놓인 지점을 노드라고 부른다. 맨 위의 첫 질문은 루트 노드다. 질문에 대한 답에 따라 갈라지는 선은 가지다. 더 이상 질문하지 않고 최종 예측을 내리는 마지막 지점은 리프 노드, 즉 잎 노드라고 한다.
예를 들어 고객이 서비스를 해지할지 예측하는 모델을 생각해 보자. 결정트리는 이런 식으로 판단할 수 있다.
월 이용 시간이 5시간 미만인가?
├─ 예: 최근 불만 접수 이력이 있는가?
│ ├─ 예: 해지 가능성 높음
│ └─ 아니오: 해지 가능성 중간
└─ 아니오: 가입 기간이 1년 이상인가?
├─ 예: 해지 가능성 낮음
└─ 아니오: 해지 가능성 중간이 구조는 사람이 읽기 쉽다. "모델이 왜 그렇게 판단했지?"라는 질문에 어느 정도 대답할 수 있다. 월 이용 시간이 적고, 최근 불만도 접수했다면 해지 가능성이 높다고 판단했다는 식으로 설명할 수 있기 때문이다.
선형회귀나 로지스틱 회귀도 해석할 수 있는 모델이지만, 계수와 확률의 언어로 해석해야 한다. 반면 결정트리는 조건문의 언어로 해석된다. 개발자라면 if, else 문을 떠올리면 된다. 결정트리는 거대한 조건문 묶음처럼 작동한다.
물론 실제 결정트리는 사람이 직접 조건을 하나하나 써서 만드는 것이 아니다. 모델이 데이터를 보면서 "어떤 질문을 먼저 던지는 것이 좋을까?", "다음에는 어떤 기준으로 나누면 좋을까?"를 스스로 고른다. 즉, 결정트리도 엄연한 머신러닝 모델이다. 사람이 규칙을 직접 작성하는 대신, 데이터에서 규칙 후보를 찾아내는 것이다.
데이터를 나눈다는 것은 무엇일까
결정트리를 이해하려면 "데이터를 나눈다"는 말을 조금 더 구체적으로 잡아야 한다. 예를 들어 타이타닉 생존 예측 문제를 생각해 보자. 입력 데이터에는 승객의 성별, 나이, 객실 등급, 요금 같은 특징이 들어 있고, 라벨에는 생존 여부가 들어 있다.
처음에는 모든 승객 데이터가 한곳에 섞여 있다. 생존한 사람도 있고, 생존하지 못한 사람도 있다. 이 상태에서는 예측이 어렵다. 어떤 승객을 보더라도 "전체 승객 중 생존자가 어느 정도였으니 그 정도 확률로 생존했겠지"라고 말하는 수준에 머문다.
그런데 첫 질문으로 "성별이 여성인가?"를 던졌다고 해 보자. 그러면 데이터는 두 그룹으로 나뉜다. 한쪽에는 여성 승객들이 모이고, 다른 한쪽에는 남성 승객들이 모인다. 만약 여성 승객 그룹에는 생존자가 많고, 남성 승객 그룹에는 생존하지 못한 사람이 많다면 이 질문은 꽤 좋은 질문이다. 원래 뒤섞여 있던 데이터를 라벨이 더 비슷한 그룹으로 나누었기 때문이다.
다른 질문도 가능하다. "나이가 10세 미만인가?", "객실 등급이 1등급인가?", "요금이 50 이상인가?" 같은 질문을 던질 수 있다. 결정트리는 여러 후보 질문을 비교하며, 데이터를 가장 잘 구분하는 질문을 고르려고 한다.
여기서 중요한 점은 결정트리가 질문을 하나만 던지고 끝나지 않는다는 것이다. 첫 질문으로 데이터를 둘로 나눈 뒤, 각 그룹 안에서 다시 질문을 찾는다. 여성 승객 그룹 안에서는 객실 등급이 중요한 기준일 수 있고, 남성 승객 그룹 안에서는 나이나 동반 가족 수가 더 중요한 기준일 수 있다. 결정트리는 전체 데이터에 하나의 규칙을 억지로 적용하지 않는다. 구역을 나눈 뒤, 구역마다 다른 질문을 이어 붙인다.
이 점이 결정트리의 큰 매력이다. 현실의 패턴은 종종 한 줄짜리 규칙으로 설명되지 않는다. "나이가 많을수록 무조건 생존 확률이 낮다"처럼 단순하게 말하기 어려운 경우가 많다. 특정 조건에서는 나이가 중요하지만, 다른 조건에서는 객실 등급이 더 중요할 수 있다. 결정트리는 이런 식의 조건부 관계를 자연스럽게 표현한다.
좋은 질문은 좋은 분리를 만든다
결정트리가 스스로 질문을 고른다고 했지만, 아무 질문이나 고르는 것은 아니다. 모델은 "이 질문을 던졌을 때 데이터가 얼마나 깔끔하게 나뉘는가?"를 따진다.
분류 문제부터 생각해 보자. 분류에서는 정답의 종류가 있다. 생존 또는 사망, 스팸 또는 정상, 이탈 또는 유지처럼 말이다. 좋은 질문은 나뉜 그룹 안에 같은 정답끼리 많이 모이게 만든다.
예를 들어 어떤 그룹에 스팸 메일과 정상 메일이 반반 섞여 있다면, 그 그룹은 아직 혼란스럽다. 그 그룹에 도착한 새 메일을 보고 스팸인지 정상인지 말하기 어렵다. 반대로 어떤 그룹에 스팸 메일이 95% 모여 있다면, 그 그룹은 훨씬 깔끔하다. 새 메일이 그 그룹에 들어오면 "스팸일 가능성이 높다"고 말할 수 있다.
결정트리는 질문을 고를 때 이런 혼란스러움이 얼마나 줄어드는지 본다. 전문 용어로는 불순도라는 말을 쓴다. 불순도는 한 그룹 안에 여러 종류의 라벨이 얼마나 섞여 있는지를 나타내는 감각적인 표현이다. 한 그룹 안에 스팸과 정상이 뒤죽박죽 섞여 있으면 불순도가 높다. 한쪽 라벨이 대부분이면 불순도가 낮다.
분류 트리에서는 이 불순도를 계산하는 대표적인 방법으로 지니 불순도나 엔트로피를 사용한다. 이름은 조금 낯설지만 지금 당장은 수식보다 느낌이 중요하다. 둘 다 "그룹이 얼마나 섞여 있는가?"를 재는 방법이다. 결정트리는 어떤 질문을 던졌을 때 나뉜 그룹들의 섞임이 많이 줄어드는지 비교한다.
예를 들어 고객 이탈 예측에서 두 질문 후보가 있다고 해 보자.
질문 A: 최근 30일 이용 시간이 3시간 미만인가?
질문 B: 고객 ID가 50000보다 큰가?질문 A는 꽤 의미 있을 수 있다. 서비스를 거의 사용하지 않는 고객은 이탈할 가능성이 높을 수 있기 때문이다. 이 질문으로 나누면 한쪽에는 이탈 고객이 많이 모이고, 다른 한쪽에는 유지 고객이 많이 모일 수 있다.
질문 B는 대체로 의미가 없다. 고객 ID는 단순한 번호일 가능성이 크다. 번호가 크다고 해서 이탈 가능성이 높아지지는 않는다. 이 질문으로 데이터를 나누면 양쪽 그룹 모두 이탈 고객과 유지 고객이 비슷하게 섞여 있을 것이다.
결정트리는 이런 차이를 본다. 좋은 질문은 라벨의 섞임을 줄인다. 나쁜 질문은 데이터를 둘로 자르기는 하지만, 예측에는 별 도움이 되지 않는다.
숫자를 기준으로도 질문할 수 있다
결정트리의 질문은 꼭 "예/아니오"처럼 보이지만, 그 안에는 다양한 특징이 들어갈 수 있다. 범주형 특징이라면 "성별이 여성인가?", "요금제가 프리미엄인가?", "지역이 서울인가?"처럼 물을 수 있다. 숫자형 특징이라면 기준값을 정해서 "나이가 30보다 큰가?", "월 결제 금액이 5만 원 이상인가?", "집 면적이 80㎡ 이상인가?"처럼 물을 수 있다.
숫자형 특징에서 중요한 것은 기준값이다. 나이를 기준으로 나누더라도 20세를 기준으로 나눌지, 30세를 기준으로 나눌지, 65세를 기준으로 나눌지에 따라 결과가 달라진다. 결정트리는 가능한 기준값들을 살펴보며 어느 지점에서 자르는 것이 가장 좋은지 찾는다.
집값 예측 문제를 떠올려 보자. 면적이라는 특징이 있을 때 다음과 같은 질문 후보가 생길 수 있다.
면적이 50㎡ 이하인가?
면적이 80㎡ 이하인가?
면적이 110㎡ 이하인가?만약 80㎡를 기준으로 나누었을 때 작은 집과 큰 집의 가격 차이가 뚜렷해진다면, 그 기준은 좋은 분할이 된다. 반대로 50㎡를 기준으로 나누어도 양쪽의 가격 분포가 크게 달라지지 않는다면, 그 기준은 덜 유용하다.
결정트리는 이런 후보들을 끈질기게 비교한다. 사람이 보기에는 "그냥 적당히 자르면 되는 것 아닌가?" 싶지만, 모델 입장에서는 어디서 자르느냐가 성능을 크게 바꾼다. 질문 하나가 트리 전체의 첫 갈림길이 되기 때문이다. 첫 질문이 좋으면 뒤의 질문들도 훨씬 쉬워진다. 첫 질문이 엉뚱하면 뒤에서 아무리 애써도 복잡한 트리가 되기 쉽다.
분류 트리: 잎에서 다수결로 답한다
분류 트리는 정답의 종류를 고르는 결정트리다. 타이타닉 생존 여부, 스팸 여부, 고객 이탈 여부처럼 라벨이 범주일 때 사용한다.
분류 트리의 예측 과정은 단순하다. 새 데이터 하나가 들어오면 루트 노드의 질문부터 시작한다. 질문에 답하면서 가지를 따라 내려간다. 마지막으로 어떤 잎 노드에 도착한다. 그 잎 노드에 훈련 데이터 중 어떤 라벨이 가장 많이 모여 있었는지를 보고 예측한다.
예를 들어 어떤 잎 노드에 훈련 데이터 100개가 모여 있었다고 하자. 그중 82개가 스팸이고 18개가 정상 메일이었다면, 이 잎은 스팸 성향이 강한 잎이다. 새 메일이 이 잎에 도착하면 모델은 스팸으로 예측한다. 동시에 "이 잎에서는 스팸 비율이 82% 정도였다"는 식으로 확률처럼 해석할 수도 있다.
여기서 중요한 것은 분류 트리가 단지 최종 라벨만 말하는 것이 아니라, 잎 안의 비율을 통해 어느 정도의 확신도 함께 줄 수 있다는 점이다. 물론 이 확률은 로지스틱 회귀의 확률과 똑같은 의미로 항상 잘 보정되어 있다고 보기는 어렵다. 하지만 실무에서는 "이 잎에 들어온 고객 중 과거에 이탈한 비율이 높았다"는 정보가 꽤 유용하다.
스팸 메일 분류기를 예로 들면 결정트리는 이런 질문을 할 수 있다.
제목에 '무료'가 포함되어 있는가?
├─ 예: 발신자가 주소록에 없는가?
│ ├─ 예: 스팸
│ └─ 아니오: 정상
└─ 아니오: 본문에 링크가 5개 이상인가?
├─ 예: 스팸
└─ 아니오: 정상물론 실제 스팸 분류기는 이보다 훨씬 많은 특징과 복잡한 패턴을 사용한다. 하지만 결정트리의 판단 방식은 이 예시와 크게 다르지 않다. 질문을 따라 내려가고, 마지막 잎에서 다수결로 답한다.
회귀 트리: 잎에서 평균값으로 답한다
결정트리는 분류에만 쓰이지 않는다. 숫자를 예측하는 회귀 문제에도 사용할 수 있다. 이를 회귀 트리라고 부른다. 집값, 매출, 배송 시간, 온도처럼 연속적인 숫자를 예측할 때 사용할 수 있다.
회귀 트리도 질문을 던지며 데이터를 나누는 방식은 같다. 다만 마지막 잎에서 예측값을 만드는 방식이 다르다. 분류 트리는 잎 안에서 가장 많이 등장한 라벨을 고른다. 회귀 트리는 잎 안에 모인 훈련 데이터의 실제값 평균을 예측값으로 사용한다.
집값 예측을 생각해 보자. 어떤 잎 노드에 비슷한 조건의 집 10채가 모였고, 그 집들의 실제 거래가 평균이 5억 원이었다고 하자. 그러면 새 집이 같은 잎에 도착했을 때 회귀 트리는 그 집값을 5억 원으로 예측한다.
이 방식은 꽤 직관적이다. "당신의 집은 면적이 80㎡ 이상이고, 지하철역까지 거리가 500m 이내이며, 준공 10년 이하인 그룹에 속합니다. 과거에 이 그룹의 집들은 평균적으로 7억 2천만 원에 거래되었습니다. 따라서 이 집도 7억 2천만 원 정도로 예측합니다."
이런 설명은 사람이 이해하기 쉽다. 특히 표 형태의 데이터에서는 결정트리가 강력한 이유가 여기에 있다. 숫자와 범주가 섞인 데이터에서 조건을 만들고, 조건에 따라 비슷한 사례를 묶은 뒤, 그 그룹의 평균이나 다수결로 답을 내기 때문이다.
회귀 트리에서 좋은 질문은 무엇일까? 분류에서는 같은 라벨끼리 모이게 하는 질문이 좋았다. 회귀에서는 비슷한 숫자끼리 모이게 하는 질문이 좋다. 집값 예측이라면 한 잎 안에 3억짜리 집과 15억짜리 집이 뒤섞여 있는 것보다, 3억에서 4억 사이의 집들이 모여 있는 편이 좋다. 그래야 평균값으로 예측했을 때 오차가 작아진다.
그래서 회귀 트리는 질문을 고를 때 나뉜 그룹 안의 값들이 얼마나 흩어져 있는지 본다. 흩어짐이 줄어들수록 좋은 분할이다. 앞에서 배운 손실의 언어로 말하면, 회귀 트리는 보통 평균제곱오차처럼 예측값과 실제값의 차이를 줄이는 방향으로 질문을 선택한다.
결정트리는 직선을 고집하지 않는다
선형회귀와 로지스틱 회귀는 기본적으로 선형적인 관계를 바탕으로 한다. 특징에 가중치를 곱해 더하고, 그 결과를 이용해 숫자를 예측하거나 확률로 바꾼다. 그래서 데이터의 패턴이 비교적 곧게 뻗어 있을 때 잘 맞는다.
결정트리는 다르게 움직인다. 결정트리는 데이터를 여러 구역으로 자른다. 각 구역마다 다른 예측을 한다. 그래서 하나의 직선으로 설명하기 어려운 패턴도 비교적 자연스럽게 다룰 수 있다.
예를 들어 온라인 쇼핑몰에서 고객의 구매 가능성을 예측한다고 해 보자. 단순히 방문 횟수가 많을수록 구매 가능성이 높아지는 관계라면 선형 모델도 잘 작동할 수 있다. 하지만 실제로는 조금 복잡할 수 있다. 방문 횟수가 적어도 최근에 장바구니에 상품을 담았다면 구매 가능성이 높을 수 있다. 방문 횟수가 많아도 이미 구매를 마친 고객이라면 당장 추가 구매 가능성이 낮을 수 있다. 쿠폰을 받은 고객과 받지 않은 고객의 패턴도 다를 수 있다.
결정트리는 이런 조건 조합을 표현하기 쉽다.
장바구니에 상품이 있는가?
├─ 예: 최근 7일 안에 방문했는가?
│ ├─ 예: 구매 가능성 높음
│ └─ 아니오: 구매 가능성 중간
└─ 아니오: 쿠폰을 받았는가?
├─ 예: 구매 가능성 중간
└─ 아니오: 구매 가능성 낮음이처럼 결정트리는 특징들 사이의 상호작용을 자연스럽게 담을 수 있다. 상호작용이란 어떤 특징의 의미가 다른 특징의 값에 따라 달라지는 상황을 말한다. "월 이용 시간이 짧다"는 사실은 신규 고객에게는 자연스러울 수 있지만, 오래된 고객에게는 이탈 신호일 수 있다. 결정트리는 먼저 가입 기간을 나누고, 그 안에서 월 이용 시간을 다시 보는 방식으로 이런 차이를 표현할 수 있다.
트리가 깊어진다는 것의 의미
결정트리는 질문을 반복한다. 그런데 질문을 계속 던지면 어떻게 될까? 처음에는 데이터가 잘 정리된다. 뒤섞여 있던 데이터가 점점 비슷한 그룹으로 나뉜다. 하지만 어느 순간부터는 문제가 생긴다.
질문을 너무 많이 던지면 트리는 훈련 데이터를 지나치게 세밀하게 나누기 시작한다. 결국 잎 하나에 데이터가 한두 개만 남을 수도 있다. 이때 모델은 훈련 데이터를 거의 외운 것처럼 행동한다.
예를 들어 학생의 시험 합격 여부를 예측하는 결정트리를 만든다고 해 보자. 중요한 특징은 공부 시간, 이전 성적, 출석률 정도일 수 있다. 그런데 트리가 너무 깊어지면 이상한 질문까지 사용하기 시작할 수 있다.
"학생 번호가 1732보다 큰가?"
"가입 날짜가 3월 14일 이전인가?"
"마지막 로그인 시간이 22시 17분 이후인가?"
이런 질문들이 훈련 데이터에서는 우연히 정답을 잘 나누는 것처럼 보일 수 있다. 하지만 새로운 학생에게는 별 의미가 없다. 이것이 과적합이다. 과적합은 모델이 진짜 규칙을 배운 것이 아니라, 훈련 데이터에만 있는 우연한 흔적까지 외워 버린 상태를 말한다.
결정트리는 특히 과적합되기 쉬운 모델이다. 왜냐하면 충분히 깊게 자라면 훈련 데이터를 매우 잘게 쪼갤 수 있기 때문이다. 극단적으로는 각 훈련 데이터가 자기만의 잎에 들어가도록 만들 수도 있다. 그러면 훈련 데이터에 대한 예측은 거의 완벽해진다. 하지만 새 데이터에는 약해진다.
이 장면은 시험 문제집을 통째로 외운 학생과 비슷하다. 문제집에 나온 문제는 완벽하게 맞히지만, 숫자만 조금 바뀐 응용문제가 나오면 흔들린다. 머신러닝에서 우리가 원하는 것은 문제집 암기가 아니라 원리 이해다. 결정트리도 마찬가지다. 훈련 데이터를 완벽히 맞히는 트리가 아니라, 새로운 데이터에서도 잘 맞히는 트리가 좋은 트리다.
가지치기: 나무를 일부러 덜 자라게 하기
과적합을 막으려면 트리가 너무 깊어지지 않게 해야 한다. 이를 위해 여러 가지 제한을 둔다. 나무를 마음껏 자라게 두지 않고, 적당한 높이에서 멈추게 하는 것이다. 이런 생각을 가지치기라고 부른다.
실제로는 다음과 같은 방법을 사용한다.
트리의 최대 깊이를 제한한다.
잎 노드에 들어갈 최소 데이터 개수를 정한다.
분할로 얻는 이득이 작으면 더 이상 나누지 않는다.
먼저 크게 키운 뒤, 불필요한 가지를 잘라낸다.
트리의 최대 깊이를 제한하면 질문을 너무 많이 던지지 못한다. 예를 들어 최대 깊이를 3으로 정하면, 루트에서 잎까지 갈 때 질문을 몇 번만 할 수 있다. 이렇게 하면 모델이 단순해진다. 단순한 모델은 훈련 데이터에 대한 성능은 조금 낮을 수 있지만, 새 데이터에 더 안정적으로 작동할 때가 많다.
잎 노드에 들어갈 최소 데이터 개수를 정하는 것도 중요하다. 잎 하나에 데이터가 1개만 있으면 그 잎의 예측은 매우 불안정하다. 그 데이터 하나가 우연한 예외일 수도 있기 때문이다. 반면 잎 하나에 최소 20개 이상 들어가야 한다고 정하면, 모델은 너무 세밀한 분할을 피하게 된다.
분할 이득을 보는 방식도 있다. 어떤 질문을 던졌는데 불순도나 오차가 거의 줄어들지 않는다면 굳이 나눌 필요가 없다. 질문은 많다고 좋은 것이 아니다. 예측에 도움 되는 질문이어야 한다.
좋은 결정트리는 너무 단순하지도, 너무 복잡하지도 않다. 질문이 너무 적으면 중요한 차이를 놓친다. 질문이 너무 많으면 훈련 데이터의 잡음까지 외운다. 머신러닝에서 자주 만나는 균형이 여기에도 등장한다. 바로 과소적합과 과적합 사이의 균형이다.
결정트리의 장점과 약점
결정트리는 머신러닝을 처음 배우는 사람에게 매우 좋은 모델이다. 이유는 분명하다. 작동 방식이 눈에 보이기 때문이다. 질문을 따라가면 모델의 판단 경로를 읽을 수 있다. 그래서 "모델이 무엇을 보고 이런 예측을 했는가?"를 설명하기 쉽다.
결정트리는 숫자형 특징과 범주형 특징을 함께 다루기에도 좋다. 또한 특징의 스케일에 덜 민감하다. 선형회귀나 로지스틱 회귀에서는 어떤 특징은 0에서 1 사이이고, 어떤 특징은 수만 단위라면 스케일 조정이 중요해질 때가 있다. 결정트리는 주로 "이 값이 기준보다 큰가?"를 보므로 스케일 차이에 상대적으로 덜 흔들린다.
하지만 약점도 있다. 결정트리는 데이터가 조금만 달라져도 구조가 크게 바뀔 수 있다. 첫 번째 질문이 달라지면 그 아래 가지 전체가 달라질 수 있기 때문이다. 그래서 단일 결정트리는 불안정할 때가 있다. 또한 깊게 자라면 과적합되기 쉽다. 앞에서 본 것처럼 훈련 데이터를 너무 잘게 나누면 새 데이터에 약해진다.
결정트리의 성격을 간단히 정리하면 이렇다.
사람이 이해하기 쉬운 조건문 구조로 예측 과정을 설명할 수 있다.
숫자 예측과 분류 문제에 모두 사용할 수 있다.
복잡한 조건 조합을 표현할 수 있지만, 너무 깊어지면 과적합되기 쉽다.
이 장점과 약점은 다음 장에서 매우 중요한 출발점이 된다. 결정트리 하나는 이해하기 쉽지만 불안정할 수 있다. 그렇다면 트리를 여러 개 만들면 어떨까? 한 사람의 판단보다 여러 사람의 판단을 모으면 더 안정적일 수 있듯이, 여러 결정트리를 모아 예측하면 더 강한 모델을 만들 수 있다.
바로 그 아이디어가 랜덤포레스트다. 이름 그대로, 결정트리 하나가 아니라 숲을 만드는 방법이다.
결정트리를 머릿속에 남기는 법
결정트리를 배웠다고 해서 지니 불순도나 엔트로피 공식을 당장 외울 필요는 없다. 지금 단계에서 더 중요한 것은 결정트리의 감각이다.
결정트리는 데이터를 한 번에 맞히려 하지 않는다. 먼저 좋은 질문을 찾는다. 그 질문으로 데이터를 나눈다. 나뉜 그룹 안에서 다시 좋은 질문을 찾는다. 이 과정을 반복해 마지막 잎에 도착하면, 그 잎에 모여 있던 훈련 데이터의 성격으로 예측한다.
분류 트리라면 잎에서 다수결로 라벨을 고른다. 회귀 트리라면 잎에서 평균값으로 숫자를 예측한다. 좋은 질문은 분류에서는 라벨이 덜 섞이게 만들고, 회귀에서는 숫자들이 덜 흩어지게 만든다. 하지만 질문을 너무 많이 하면 훈련 데이터를 외우게 되어 과적합이 생길 수 있다.
이제 머신러닝의 핵심 구조를 결정트리 언어로 다시 써 보자.
데이터를 준비한다. 특징을 만든다. 모델은 특징을 기준으로 질문을 고른다. 질문을 따라 데이터를 나눈다. 마지막 잎에서 예측한다. 실제값과 비교한다. 더 좋은 질문 구조를 찾아 오차를 줄인다. 그리고 새로운 데이터가 들어오면 같은 질문 경로를 따라 예측한다.
이렇게 보면 결정트리는 머신러닝을 아주 눈에 보이는 방식으로 보여 주는 모델이다. 모델이 학습한다는 말이 추상적으로 느껴졌다면, 결정트리를 떠올려 보자. 학습이란 결국 좋은 질문을 찾아가는 과정일 수 있다. 그리고 좋은 질문은 데이터를 더 잘 이해하게 만든다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.