나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-11-09 13:50:19

분류 분석

통계학
Statistics
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px); word-break: keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px"
<colbgcolor=#4d4d4d><colcolor=#fff> 수리통계학 기반 실해석학 (측도론) · 선형대수학 · 이산수학
확률론 사건 · 가능성 · 확률 변수 · 확률 분포 (표본 분포 · 정규 분포 · 이항 분포 · 푸아송 분포 · 카이제곱분포 · t분포 · Z분포 · F-분포 · 결합확률분포) · 확률밀도함수 · 확률질량함수 · 조건부확률 · 조건부기댓값 · 조건부분산 · 전체 확률의 법칙 · 베이즈 정리 · 도박사의 오류 · 도박꾼의 파산 · 몬티 홀 문제 · 뷔퐁의 바늘 · 마르코프 부등식 · 체비쇼프 부등식 · 큰 수의 법칙 (무한 원숭이 정리) · 중심극한정리 · 벤포드의 법칙
통계량 평균 (제곱평균제곱근 · 산술 평균 · 기하 평균 · 조화 평균 · 멱평균 · 대수 평균) · 기댓값 · 편차 (절대 편차 · 표준 편차) · 분산 (공분산) · 결정계수 · 변동계수 · 상관계수 · 대푯값 · 자유도
추론통계학 가설 · 변인 · 추정량 · 점추정 · 신뢰 구간 · 상관관계와 인과관계 · 실험통계학 · p-해킹 · 통계의 함정 · 그레인저 인과관계 · 신뢰도와 타당도
통계적 방법 회귀 분석 · 최소제곱법 · 분산 분석 · 주성분 분석 (요인 분석) · 시계열 분석 · 패널 분석 · 2SLS · 생존 분석 · GARCH · 비모수통계학 · 준모수통계학 · 기계학습 (군집 분석 · 분류 분석) · 위상 데이터분석 · 외삽법 · 메타 분석 · 모델링 (구조방정식)
기술통계학 ·
자료 시각화
도표 (그림그래프 · 막대그래프 · 선 그래프 · 원 그래프 · 상자 수염 그림 · 줄기와 잎 그림 · 산포도 · 산점도 · 히스토그램 · 도수분포표) · 그래프 왜곡 · 이상점 }}}}}}}}}

1. 소개2. 종류
2.1. 의사결정나무2.2. 앙상블분석2.3. 인공신경망2.4. 그 외 분류방법들
3. 같이 보기

1. 소개

分類分析
classification (analysis)

기계학습 분야에서 활용되는 통계분석방법 중 하나로, 통계학의 관점에서는 판별분석(discrimination analysis)으로서 이해될 수 있다. 분류 분석은 분석목적에 따라 두 가지의 의미를 갖는데, 첫째는 사전에 정의된 둘 이상의 집단의 차이를 분류할 수 있는 분류기(classifier)를 찾아내는 훈련의 방법을 말하며, 둘째는 이렇게 훈련을 거쳐 준비된 분류기를 활용하여 데이터 세트의 개별 관측값들이 어느 집단에 속하게 될지를 결정하는 방법을 말한다. 여기서 중요한 것은 각 '집단' 이 이미 분석가에게는 명확히 혹은 잠정적으로 알려져 있다는 것이다. 따라서 분석가는 컴퓨터가 열심히 분류 분석을 해 놓으면 그 결과를 '답안지' 를 통해 채점한다고도 볼 수 있다. 이것을 데이터 마이닝 용어로는 교사학습 또는 지도학습(supervised learning)이라고 한다.

데이터과학에 있어 분류 분석은 정형 데이터(structured data)를 활용한 데이터 마이닝의 대표주자이자 첫 관문이라고도 할 수 있다. 즉, 가장 기초적인 형태의 분류 분석은, 고정된 필드로서 존재하고 데이터끼리 연산이 가능한 성질의 데이터를 분석대상으로 한다. 기존에 훈련된 과거 데이터를 바탕으로 규칙을 만들고, 그 결과물인 분류모델을 활용해서 새로운 데이터의 분류결과를 찾는다는 점에서 예측적 모델링(predictive modelling)으로 보기도 하지만, 이는 주로 군집 분석과 같은 기술적(descriptive)인 모델링이나 구조방정식과 같은 설명적(explanatory)인 모델링에 대비시키기 위함이다. 사실 좁은 의미에서 예측적이라고 하면 데이터가 이산적이지 않고 연속적일 때를 말한다. 즉 "얘 공부하는 데이터를 보니 수학성적이 몇 점이나 될까?" 같은 질문에 답하는 것이 예측적 모델링인데, 분류 분석은 단지 "우등반일까 열등반일까?" 정도의 질문에만 답하는 모델링이다.

이런 류의 데이터 마이닝이 그렇듯이 분류 분석은 먼저 분류기를 훈련(training)시키고 그 후에 검증(validating) 및 테스트(testing)하는 과정을 거쳐서 활용된다. 대체로 데이터의 절반 이상을 떼어내서 훈련용으로 쓰고, 나머지는 검증하고 테스트하는 데 쓴다. 그만큼 훈련용 데이터가 중요하다고 할 수 있는데, 양질의 훈련용 데이터가 있어야 현장에서 테스트를 하더라도 믿을 만한 분류기가 되기 때문이다. 비유하자면, 학교에서 시험을 치를 때 선배들을 통해 얻은 '족보' 를 통해 공부하면 좋은 성적이 나오는 이유도 시험이라는 테스트에 있어서 그 족보가 양질의 훈련용 데이터이기 때문이다. 그러나 족보 위주로 외워서 그 지식을 자기 것으로 만들었다고 보장할 수는 없다. 이는 시험이라는 훈련용 데이터가 실무적 지식 혹은 학문적 사고방식이라는 또 다른 테스트와 괴리되어 있을수록 심해진다. 기껏 훈련을 했는데 문제유형에만 최적화되는 데 그치는 것이다. TOEIC 900점대 중에서도 실전영어는 한 마디도 못 하는 사람들이 수두룩함을 생각해 보자. 의외로 이런 생각거리들은 기계학습이라는 분야에서의 중요한 이슈들을 여럿 건드리고 있다.

현장에서는 훈련용 데이터가 가능한 한 현장의 테스트 데이터에 가까워지도록 여러 방법들을 시도하고 있다. 전체 데이터로부터 훈련용 데이터를 확률적으로 무작위 추출하는 홀드아웃(holdout), 전체 데이터를 10개로 나누고 이로부터 서로 다른 9개의 훈련용 데이터를 취하는 10중 교차검증(10-fold cross validation) 등이 대표적이다. 그 외에도 부트스트랩(bootstrap) 등의 재표집(resampling)도 쓸 수 있고, 능형회귀분석(ridge regression) 등 과도한 학습결과에 대해 자체적으로 페널티를 주는 방법도 있으며, 혹은 단순히 훈련이 지나치게 길어지지 않도록 적당한 기준만 충족하면 잽싸게 훈련을 종료하고 업데이트하는 방법도 자주 쓰인다. 이 모든 것은 분류기가 자신이 훈련받은 내용에 대해서 지나치게 '과몰입' 하지 않도록 유연함을 유지시키는 것을 목적으로 고안된 것이다.

그렇다면 분류 분석을 통해 만들어진 분류기가 훈련용 데이터에만 '과몰입' 한다는 상황은 어떤 상황인가? 다시 인간의 학습에 대충 비유하자면, 수능으로 3년간 성실히 훈련받은 학생들이 명문대에 진학했어도 고등교육에 필요한 사고방식을 체득하기는커녕 '출제자의 의도' 를 찾아내기 위해 오답부터 소거하는 테크닉만 익혀버린 상황인 셈이다. 기계도 종종 비슷한 상황에 처한다. 모든 훈련용 데이터는 그 데이터만이 갖는 특징이 있는데, 훈련을 시키다 보니 그만 '그 데이터만의 아무래도 좋을 특징' 까지 고스란히 학습해 버리는 것이다. 그래서 현장에서의 테스트 데이터가 훈련 데이터와 조금만 달라져도 분류기는 민감하게 반응하게 된다. 이것을 과(대)적합(overfitting) 문제라고 부른다. 과적합이 우려되는 분류기는 그 분류모델의 알고리즘이 쓸데없이 복잡해져 있는 경우가 많다.

과적합과 관련하여 언급할 만한 중요한 현상 중 하나는, 훈련용 데이터를 분류기가 과잉 학습할수록 그 학습의 결과는 점점 훈련용 데이터의 특징을 닮아가지만 그 반대급부로 훈련용 데이터에 따라 변동성이 커지고 불안정해진다는 것이다. 이것을 통계학 용어인 편의(bias)와 분산(variance)의 두 개념으로 설명해 보자. 양궁에 비유하자면 과녁의 중앙으로부터 조준이 비껴나간 상태를 편의라고 할 수 있고, 매번 화살이 꽂힌 자리가 사방으로 넓게 튀는 상태를 분산이라고 할 수 있다. 따라서 편의와 분산에 대해 우리는 어느 하나는 낮고 다른 하나는 크거나, 둘 다 높거나, 둘 다 낮은 상태를 모두 상상할 수 있다. 그런데 기계학습에서는 흥미로운 현상이 발생한다. 훈련용 데이터를 학습함에 따라서 편의는 감소하지만, 그와 동시에 분산은 점점 증가한다. 이를 달리 말하면, 기계학습에서 편의와 분산은 결코 동시에 낮출 수 없으며, 상충되는 관계에 있다. 그래서 웬만큼 훈련하여 편의가 많이 줄었다 싶으면 분산이 너무 커지기 전에 훈련을 종료해야 한다.

편의와 분산의 관점에서 볼 경우, 데이터를 분류하는 방법을 제대로 학습하지 못한 분류기에서의 테스트 결과는 일정하게 나오면서도 영 엉뚱하게 나오게 된다(고편의 저분산). 이는 과소적합(underfitting) 상태로, 아직 훈련용 데이터를 제대로 배우지 못하여 어떻게 분류해야 할지를 모르는 것이다. 그 결과물은 오히려 휴리스틱(heuristic)에 가까워 보이는 모습으로 나타난다. 반면 훈련을 너무 많이 받아버린 분류기는 훈련용 데이터에는 빠삭하지만 테스트 데이터와 어떻게 달라지느냐에 따라 격한 반응을 보이며 심한 변동을 보인다(저편의 고분산). 이것이 바로 과적합 상태인데, 훈련용 데이터 속의 패턴을 너무 많이 학습한 나머지 노이즈마저 함께 학습해 버린 것이다. 그렇기에 그 분류기는 오직 훈련용 데이터 하나만을 위한 분류기가 되었을 뿐, 그 이상의 일반화는 어려워지게 된다.

앞서 언급했듯, 분류 분석은 지도학습이기 때문에 분석가는 기계가 학습한 결과에 대해 '답안지' 를 들고서 '채점' 하는 것이 가능하다. 다시 말하면 과녁의 중앙이 어디인지를 분석가는 이미 알고 있으며, 기계가 쏘아보낸 화살이 어디 꽂혔는지 찾기만 하면 된다. 분류모델의 성과평가를 하는 방법으로는 몇 종류가 있지만, 그 중에서도 가장 흔히 쓰이는 성과평가 방법으로서 혼동행렬(confusion matrix)이 있다. 이는 분류기가 예측한 분류결과를 실제 현실과 함께 교차시킨 행렬을 만들어서 비교하는 방법이다. 혼동행렬과 헷갈리기 쉬운 모델 평가 방법인 리프트차트(lift chart)의 경우, 이쪽은 관측된 개별 데이터가 어떠한 집단에 속할 확률을 계산하는 예측모델이므로 일반적인 분류분석보다는 로짓분석을 활용한 분류결과의 평가에 더 적합하다.

2. 종류

2.1. 의사결정나무

파일:classification_example.jpg
의사결정나무의 간단한 사례.

decision tree

여러분이 어떤 웹 사이트의 운영자라고 가정하자. 여러분의 소중한 사이트를 어지럽히는 매크로를 탐지해 제거하는 것은 여러분의 중요한 임무 중 하나다. 물론 인간은 딱 보면 이게 사람인지 아니면 인지를 판단할 수 있지만, 여러분의 시간은 너무나도 귀하기 때문에 그런 단순반복적인 분류 작업을 하기에는 아까울 수 있다. 그렇다면 그런 귀찮은 일은 기계에게 대신 시켜야 하겠지만, 그러기 위해서는 먼저 기계에게 사람과 봇을 구분하는 기준을 가르치고 연습시킬 필요가 있다. 따져보면 봇은 웹 페이지를 넓고 얕게 방문하며, 검색이력이 부족하고, 세션이 긴 데다, 페이지 요청건수가 많고, 동일 페이지에 대한 반복요청이 심한 등의 패턴을 보인다. 그렇다면 이걸 여러분의 조수 로봇에게 어떻게 학습시켜야 할까?

이와 같은 종류의 분류작업이 필요할 때 쓰일 수 있는 유용한 분석 알고리즘이 바로 의사결정나무다. 상단에 소개된 것처럼, 선량한 '게이' 들로부터 '분탕' 들을 솎아내는 일 또한 똑같은 방식으로 접근할 수 있다. 분류에 도움이 되는 일련의 의사결정 기준들을 정하고, 이를 만족하는 데이터만 반복적으로 솎아내면서 최종적으로 전체 데이터 세트에 대한 분류를 완료하는 것이다. 이를 생김새에 빗대어 비유하자면, 분류를 위한 기준들로부터 아래로 계속해서 새로운 기준들이 뻗어나가는 것은, 마치 '잎새(leaf)를 만들어내며 나뭇가지가 뻗어나가는 것' 처럼 보인다고 할 수 있다.[1] 그래서 이름도 '의사결정나무' 라고 붙은 것.

의사결정나무는 분류함수를 의사결정 규칙들로 이루어진 나무의 형태로 그리는 방법으로, Hunt의 알고리즘이라고도 불린다. 이것은 연속적인 하향식(top-down) 의사결정 문제들을 시각화함으로써 의사결정의 시점과 그 성과를 직관적으로 도해하는 것이다. 의사결정나무의 핵심은 바로 분할기준(splitting criterion) 또는 분할규칙(splitting rule)에 있다. 이것은 '부모 노드' 의 속성을 시험하는 기준으로, 시험 결과에 따라 나뭇가지를 분할하면서 2개 이상의 '자식 노드' 들을 산출하게 된다. 분할기준이 많으면 많을수록, 디테일하면 할수록 그 의사결정나무는 한없이 뻗어나가며 규모가 커지고 복잡해지게 된다.

다른 데이터 마이닝 기법들처럼 의사결정나무도 범주를 분류하거나 미래를 예측하고 데이터의 차원을 축소하는 등의 다양한 목적으로 활용되지만, 중요한 것은 의사결정나무가 데이터를 세분화하는 데 능하다는 점이다. 새로운 상품의 판촉을 앞둔 마케팅 담당자, 대통령 선거를 앞둔 공보실장 등이 고민하는 것은, 전체 대상 집단에서 어떤 소집단을 공략하는 것이 가장 효과적일 것인가이다. 이때 의사결정나무를 활용한다면, '자가주택이 있는가?', '결혼했는가?', '월소득이 ○백만원 이상인가?' 등의 분할기준을 연속으로 적용하면서 이에 부합하는 소집단을 추려낼 수 있다. 대조적으로 군집 분석(cluster analysis)의 경우, 이쪽은 기계도 분석가도 결과를 모르는 비지도적(unsupervised)인 방식인지라 고객유형을 나누거나 유권자층의 이질성을 군집화할 필요가 있을 때 쓰인다.

각 노드들은 그것이 시험하는 속성에 따라서 사뭇 다른 분할 결과들을 내놓을 수 있다. 측정 문서도 함께 참고.

그런데 의사결정나무는 한도끝도없이 뻗어나간다고 해서 무조건 좋은 것이 아니다. 분할기준은 너무 적어도 안 되지만 너무 많아서도 안 된다. 상단에서 설명했던 과적합 문제가 있고, 때로는 뜻밖에도 부적절한 기준이 섞일 수 있기 때문이다. 의사결정나무가 웅장한 규모로 뻗어나가는 상황을 가리켜서 데이터 분석가들은 "모델이 깊게 성장한다" 고 표현하는데, 분석가는 '너무 깊어지지는 않도록' 적당한 선에서 의사결정나무를 다듬을 필요가 있다. 이처럼 일부 분할기준들을 모델에서 제거하는 작업을 가지치기(pruning)라고 부른다. 가지치기는 흔히 비용-복잡도 가지치기(cost-complexity pruning)처럼 여러 조건들을 따져 가면서 신중하게 수행된다.

가지치기를 두 가지로 나누는 방법 중 하나는, 의사결정나무를 조심스럽게 키울 것인지 아니면 조심스럽게 잘라낼 것인지의 문제이다. 먼저 사전 가지치기(pre-pruning)의 경우, 여기서는 의사결정나무를 조금씩 성장시키면서 그 모델이 갖는 오류추정량의 추정치를 일일이 따져보고, 그 값이 일정한 임계값 이하로 떨어지게 되면 그 시점에서 모델의 성장을 종료하는 방법이다. 반면 사후 가지치기(post-pruning)는 정반대다. 여기서는 일단 의사결정나무를 가능한 한 최대 크기로 키워놓고서 가지치기 작업을 시작한다. 즉 전체적인 상황을 보면서 상향식(bottom-up)으로 모델을 다듬어 나간다는 것인데, 가지치기를 통해 모델의 오류추정량 추정치가 개선되는 정도가 어떤 임계값 이하로 떨어질 때 가지치기를 종료한다.

그렇다면 사전 가지치기와 사후 가지치기 중 어느 쪽이 더 좋다고 할 수 있을까? 이 대목을 이해하려면 먼저 의사결정나무의 대표적인 특징, 탐욕적 알고리즘(greedy algorithm)이라는 용어를 이해하는 게 도움이 된다. 알고리즘에 관련하여 "탐욕적이다" 라는 표현은 대개 '눈앞의 것에만 신경쓰느라 큰 그림을 보지 못한다' 는 의미로 통한다. 이것은 매 단계마다 그때그때의 최적의 선택을 반복하는 알고리즘을 의미하며, 의사결정나무는 탐욕적 알고리즘의 대표격으로 통한다. 즉 이런 종류의 분류 알고리즘은 늘 당장의 오차제곱합의 최소화에만 골몰하면서 분류 결과를 내놓는다. 그런데 이런 식으로 하다 보면 안정적이고 계산 속도가 빠르기는 한데, 문제는 크게 봤을 때의 최적에는 도달하지 못할 수 있다는 점. 탐욕적 알고리즘의 분류 결과는 어디까지나 당장 쓰기에나 좋을 근사적 결과일 따름이며, 이는 국지적(local)인 최적달성을 반복한다고 해서 전역적(global)인 최적달성이 보장되지는 않는다는 중요한 시사점을 분석가에게 제공한다.

사전 가지치기와 사후 가지치기도 비슷한 맥락에서 이해할 수 있다. 사전 가지치기는 빠르고 가벼우며 모델의 복잡성을 크게 낮추지만, 최적의 분류모델을 만들어내지 못할 위험이 있다. 특히 현재 단계에서는 분할에 별 이득이 없어도 전체적으로 보면 후속 분할에서 큰 이득이 있다면, 그때는 그 분할을 해야만 한다. 하지만 사전 가지치기에서는 구태여 가지를 더 뻗을 필요를 느끼지 못하기 때문에 섣불리 성장을 종료하게 되는 것이다. 반면 사후 가지치기는 이런 가능성이 없다. 처음부터 큰 그림을 그려놓고 지워갈 부분만 찾아서 지워가는 방식이기에 좀 더 전역적인 최적달성이 가능할 수 있다. 그러면 의사결정나무치고 잘 된 일 아니냐 하겠지만, 그렇게 할 경우에는 컴퓨팅 파워의 낭비가 너무나 심해지니 또 문제.

가지치기를 다른 관점에서 나누어볼 수도 있다. 우선 CART(classification and regression tree)라고 불리는 알고리즘은 의사결정나무의 대표적인 알고리즘 중 하나이며, 모든 분할의 결과를 범주형이든 연속형이든 간에 이진적으로만 한정한다. 이렇게 하면 노드마다 가지는 무조건 2개씩만 분할되는데, 모델이 간명해지기 때문에 '깊은 성장' 을 이루기는 힘들지만 그 반대급부로 대형 모델이 흔히 빠지곤 하는 과적합 문제를 피해갈 수 있다. 여기서 3개 이상의 다지분리(multiple split)를 허용하는 C4.5 혹은 C5.0 같은 변종도 있다. 범주형 입력변인이 많을 때 적합하며, 과적합에 대응하기 위해 이득비율(gain ratio) 등의 지표를 동원한다. 마지막으로 CHAID(Chi-squared automatic interaction detection)는 입력변인이 범주형일 때에만 사용하며, 그 이름답게 카이제곱 통계량만을 사용한다. 여기서는 가지치기를 하지 않으며, 대신 적당한 크기가 되면 알아서 성장을 종료시킨다.

그렇다면 가지치기가 얼마나 잘 되었는지는 어떻게 알 수 있을까? 의사결정나무의 성과평가는 각 가지로 모여든 결과 데이터들이 얼마나 동질적인지를 통해 시행할 수 있다. 매크로를 분류해내는 의사결정나무는 그 분류 결과가 매크로만 야무지게 쏙쏙 뽑아낼 때 가장 효과적이라고 할 수 있고, A후보에 투표할 것으로 예상되는 유권자를 가려내는 의사결정나무는 A후보 지지층 분류 결과에 B후보, C후보 등에다 투표한 유권자가 섞여있으면 안 된다. 이처럼 최종적으로 분류된 각 분류 결과들이 자체적으로는 동질적이면서 서로 간에는 이질적인 상태를 데이터 과학자들은 '각 마디별로 순수하다' 고 하며, 이러한 속성을 불순도(impurity)를 측정함으로써 파악하게 된다.

불순도의 측정은 몇 가지 방법으로 가능하다. 우선 지니지수(Gini index)를 활용하는 방법이 있다. 흔히 경제학지니계수(Gini coefficient)와도 혼동되곤 하는 이 개념은, 마디별 불순도를 0에서 0.5 사이의 값으로 나타내 보여준다. 물론 그 숫자가 클수록 가지치기를 통해 분류된 값이 내적으로 이질적임을 의미한다. 다른 방법은 엔트로피(entropy)를 통해서 무질서의 정도를 측정하는 것이다. 이것은 0에서 1 사이의 값으로 나타나며, 0일 때는 마디 속의 모든 데이터가 동질적임을 의미하고, 1일 때는 데이터 상호간에 같은 점이 하나도 없다는 의미가 된다. 이를 활용한 정보이득(IG; information gain)이라는 지표도 있다. 이것은 상위 노드에서의 엔트로피와 하위 노드에서의 엔트로피를 비교하여, 새로 추가한 하위 분할기준이 엔트로피를 얼마나 추가로 감소시키는지를 본다. 즉 정보이득이 크면 클수록 상위 노드보다 하위 노드가 더 '깨끗하게' 나타나게 되는 것.

의사결정나무는 결측값(missing value)에 대응하기 위한 몇 가지 방법들을 마련해두고 있다. 우선 확률분할법(probabilistic split method)의 경우, 결측값이 각 가지들에 속할 확률들을 계산하는 방법이다. 다음으로 대리분할법(surrogate split method)은 결측값과 가장 유사해 보이는 다른 속성을 따라서 그 결측값이 해당될 것 같은 가지에 배분하는 것이다. 마지막으로 분리등급법(separate class method)은 아예 결측값만 모으는 가지를 따로 추가하는 방식이다. 어떤 방법이 제일 좋을지에 대한 정답은 없다. 의사결정나무는 '모델링을 통해 현실의 데이터를 예측함으로써 의미를 이끌어낼 수 있어야 한다' 는 사용목적에 늘 타당하게 평가되어야 하며, 이는 결측값의 처리에서도 예외가 아니다.

의사결정나무의 중요한 특징으로 빠뜨릴 수 없는 것이 바로, 의사결정나무는 대표적인 적극적 학습자(eager learner)라는 것이다. 기계학습에서 적극적 학습자는 '규칙기반 분류기' 라고도 불리는데, 훈련 데이터를 바탕으로 일반화된 규칙을 찾아낸 후 이를 바탕으로 처음 보는 데이터를 분류하려는 적극적인 분류기를 말한다. 반대로, 별도의 일반화된 규칙 없이 훈련 내역을 저장만 하고 있다가 처음 보는 데이터가 들어오면 훈련결과에 비추어 판단하는 분류기도 있으며, 이들은 게으른 학습자(lazy learner)라고 불린다. 게으른 학습자의 대표주자로는 Rote 분류기가 있는데, 이런 게으른 학습자들을 좀 더 융통성 있게 만든 것이 바로 아래에 간략히 소개할 K-최근접이웃 분류기이다.

아무튼 의사결정나무는 장점이 뚜렷하기 때문에 지금껏 수많은 분석가들(과 심지어는 일반인들)에게 사랑받아 왔다. 의사결정나무는 직관적인 논리를 갖고 있으며 결과를 설명하기에도 용이하다. 그만큼 계산도 단순하고 신속하기 때문에 대용량 데이터에도 쩔쩔매지 않는다. 또한 노이즈에 대한 민감성이 낮고 불필요한 변인에 안정적이며, 변인이 양적이든 질적이든 간에 가리지 않고 처리할 수 있다. 반면 의사결정나무도 방법론인 만큼 단점이 존재할 수밖에 없다. 의사결정나무는 과도하게 성장하여 과적합을 발생시킬 가능성이 높은 (즉 '불안정한') 저편의 고분산 분류기이고, 분류의 경계선에 위치한 데이터에서는 오차가 발생하기 쉬우며, 여러 변인들 간의 중요도의 차이를 고려하지 않고, 중간에 한번 오류가 발생하면 이후의 모든 단계로 그 오류가 지속적으로 전파된다.

2.2. 앙상블분석

ensemble-based classification

위에서 줄곧 설명한 것처럼, 어떤 분류기의 편의를 낮추려고 애쓰다 보면 필연적으로 분산이 증가하는 문제가 발생하는데, 이로 인해 발생하는 과적합 문제는 데이터 분석가들을 괴롭혀 왔다. 특히나 의사결정나무는 강력하고도 디테일한 분류 알고리즘이기 때문에, 그것이 분산으로 인해 바람 속 갈대처럼 '흔들리는' 문제는 의사결정나무를 쓰려는 분석가들을 망설이게 만들곤 했다. 그 와중에 튀어나온 아이디어가 하나 있었는데, 저편의 고분산의 불안정한 분류기를 안정적으로 사용하고자 한다면, 차라리 그런 분류기들을 한꺼번에 여러 개 모아서 쓰는 게 어떻겠냐는 것이었다. 주어진 데이터에서 편의가 낮은 여러 개의 분류 결과들을 얻어내고서 그 분류 결과들을 잘 조합해 쓴다면, 그만큼 분산이 낮아질 것이니 결과적으로는 저편의 저분산의 이상적인 분류에 최대한 가까워질 수 있겠다는 논리였다. 바로 여기서 앙상블분석이 탄생했다.

앙상블분석의 가장 기본적인 통계학적 근거는 바로 부트스트랩(bootstrap)에 있다. 이는 표본으로부터의 재표집(resampling)으로, 예측의 편의에는 영향을 주지 않으나 분산을 감소시키는 효과가 있다. 이는 즉 훈련용 데이터로 어떤 데이터가 뽑히느냐에 따라 분류 결과가 함께 변동하는 불안정성을 상쇄할 수 있다는 의미다. 앙상블분석이 설득력을 갖기 위해서는 몇 가지 전제들이 뒷받침되어야 한다. 우선, 앙상블분석의 논리가 '불안정한 분류기의 저편의성과 부트스트랩의 저분산성을 합치자' 는 데 있는 만큼, 편의가 낮으면서 불안정한 분류기들을 조합할 때 의미가 있다. 또한 단일의 분류기를 사용할 때의 오류율(error rate)이 높아도 0.5 이하여야 한다.

아무튼, 부트스트랩으로 앙상블분석을 하기 위해서는 먼저 데이터 세트로부터 동일크기 무작위 복원재표집을 실시해야 한다. 이렇게 만들어지는 여러 표본들을 바탕으로 분류를 실시하고, 각각의 모델링이 나타내는 분류 결과들을 하나로 결합함으로써 최종적인 분류를 내놓는 것이다. 이때 재표집하는 표본의 크기는 원본 데이터의 약 63% 정도 크기로 할 것이 권고된다. 완전히 무선적인 복원재표집이므로 한 데이터가 여러 차례 표집될 수도 있고, 단 한 번도 표집되지 못하는 경우도 존재할 수 있다. 이상의 절차를 배깅(bagging)이라고 한다. 이때 각 분류기가 불안정할수록 훈련용 데이터의 특성으로 인해 발생하는 분산을 감소시키는 배깅의 효과는 커지며, 애초에 분류기 자체가 안정되어 있다면 배깅은 큰 개선효과가 없어서 앙상블분석을 하는 의미가 없다.

이보다 더 개선된 방법으로 부스팅(boosting)이 있다. 부스팅의 가장 큰 원칙은 예측력이 약한 분류모델들을 결합하여 강한 모델을 형성하는 데 있다. 이쪽에서는 배깅과 마찬가지로 재표집의 논리를 따르지만, 훈련용 데이터를 면밀히 살피면서 잘못된 분류가 발생하는 데이터에 더욱 집중하는 반복적 절차이다. 마치 공부하는 학생이 오답노트를 만들어서 두세 번씩 반복하여 풀어보듯이, 부스팅은 모든 훈련용 데이터에 가중치를 할당하되 처음에는 1/N의 똑같은 가중치를 매기고 라운드를 시작하지만 오분류 데이터에는 가중치를 높이고 정분류 데이터에는 가중치를 줄이게 된다. 결과적으로 라운드가 반복됨에 따라 앞에서 오분류됐던 데이터는 재표집될 가능성이 증가한다. 결과적으로 모든 데이터가 정분류되면 훈련을 종료하고 각 단일분류기들의 가중평균을 산출하는 방식. 딱 봐도 강력한 학습법으로 보이지만 오히려 지나치게 강력해서 오분류에 가중치를 필요 이상으로 과도하게 준다는 지적도 있다. 틀린 문제를 다시 푸는 것도 필요하지만 맞춘 문제도 다시 살펴볼 필요가 있다는 것.

오늘날 앙상블분석에서 큰 인기를 얻고 있는 기법은 이보다 더 발전된 랜덤 포레스트(random forest) 기법이다. 여기서는 재표집의 논리를 따르는 배깅에서 더 나아가, 각각의 의사결정나무들이 상호독립의 관계가 되게 하는 무상관(decorrelated)의 원칙을 채택한다. 이때 의사결정나무들은 가능한 한 최대한으로 깊게 성장시킨 것으로, 저편의 고분산이 극명하게 나타나는 불안정하기 짝이 없는 분류기이다. 랜덤 포레스트 기법은 표본도 재표집할 뿐만 아니라 수많은 의사결정나무들의 '숲' 속에 존재하는 분할기준(노드)들까지도 무선추출한다. 의사결정나무에 존재하는 모든 노드에서 속성들을 무선추출한 후 그 불순도가 최대한 감소되는 속성만을 선택한다면, 약한 예측력을 갖는 다수의 분할기준들 사이에서 강한 예측력을 갖는 소수의 분할기준들이 잘 골라질 수 있다. 이때 일반화 오류를 추정하기 위한 추정량으로는 OOB(out-of-bag)라는 것이 있으며, 이것은 별도로 데이터를 분할할 필요 없이 훈련중에 알아서 추정치가 계산되어 나온다는 장점이 있다.

2.3. 인공신경망

artificial neural network (ANN)

분류 분석과 같은 지도학습에만 쓰이는 것은 아니지만, ANN은 분류 분석의 용도로 쓰일 때에는 단순패턴인식 분야에서 크게 활용되어 왔다. 비명소리와 환호성을 구분하거나, 개와 고양이의 사진을 구분하거나, 오토바이와 자전거를 구분하는 등이 대표적이다. 간혹 머핀치와와(…)처럼 쉽게 구분이 되지 않는 경우에는 인간의 도움을 받아서 정답지를 만들기도 한다. 그래서 분류 분석을 소개하는 많은 자료들에서 ANN을 함께 다루고 있음을 볼 수 있다. 연구의 역사는 의외로 20세기 중반까지 수십 년을 거슬러 올라가지만 한동안 빛을 보지 못하다가 2000년대 이후로 확 떠오르며 미래 첨단과학기술의 블루칩으로 각광을 받고 있는 중. 더 최신의 분류법으로 이미지 학습에 특화된 합성곱 신경망(CNN; convolutional neural network), 사운드 학습에 특화된 재귀신경망(RNN; recursive neural network) 등이 나와 있으며 이 바닥에서는 정말로 큰돈이 굴러다니고 있다.

ANN은 생물학에서 영감을 받은, 흔히 말하는 '자연을 본떠 만든' 기술로서 첫 시작을 알렸다. 동물의 뉴런이 연결되어 작동하는 방식을 학습 네트워크에 적용해 보려는 것이 그 초기 아이디어였다. 여러 입력신호를 받아 하나의 출력신호를 생성하는 기초 단위를 퍼셉트론(perceptron)이라고 부르고, 퍼셉트론들이 서로 연결되어서 입력층(input layer)과 출력층(output layer)을 구성한다. 이 퍼셉트론들이 입력층에서 신호를 받아 출력층에게 전달하는 것을 순전파(feed-forward)라고 부른다. ANN의 핵심은 퍼셉트론들 사이의 연결에서 그 가중치를 조절하는 것으로, 실제 인간 뉴런의 시냅스 강도가 조절되는 것을 모방하는 것과도 같다. 퍼셉트론들 사이의 연결강도는 훈련 데이터에 의해 계속해서 갱신된다.

이때 연결강도의 가중치 초기값은 일반적으로 0 근처에서 무작위로 선택하게 된다. 이 값이 완전히 0일 경우에는 선형모델에 근사하게 되고 반복학습을 한다 해도 값이 불변하며, 그렇다고 너무 커질 경우에는 모델의 예측력이 떨어지는 결과가 발생하기 때문. 퍼셉트론은 입력신호가 N개만큼 있을 때 N차원의 공간을 형성하고, 입력되는 모든 신호들의 가중치를 선형결합하여 그것이 임계값보다 작은지 큰지를 살펴본다. 이때 시그모이드(sigmoid)라는 활성화 함수를 쓰게 되는데, 임계값보다 작을 때는 -1, 클 때는 +1을 출력하게 된다. 퍼셉트론은 출력신호가 정해지는 기준으로 N차원 공간에서 이쪽과 저쪽을 나누는 '선긋기' 를 하게 된다. 이렇게 다차원의 공간을 가르는 '선' 을 초평면(hyperplane)이라고 부르며, 퍼셉트론 하나가 1개의 초평면을 형성할 수 있다. ANN은 그 구체적인 원리를 이해하려면 심도 있는 수학적 지식이 필요하다.

그러나 이런 방식은 금방 한계에 부딪혔다. 이 간단한 구조의 퍼셉트론으로는 배타적 논리합(XOR; exclusive or)과 같은 비선형문제를 풀어낼 수 없었던 것이다. 다행히 과학자들은 금방 답을 찾아냈다. 당시 크게 발전하던 인지과학 분야에서 이미 병렬분산처리(PDP; parallel distributed processing)에 대한 연구가 누적되어 있었기에, 여기서 아이디어를 얻어서 퍼셉트론들을 다층(multi-layer)의 구조로 집단화해서 배열하면 되겠다는 통찰이 떠올랐다. 따라서 과학자들은 기존의 입력층과 출력층 사이에 새롭게 은닉층(hidden layer)을 추가했다. 은닉층의 수는 분석가가 원하는 만큼 만들 수 있는데, 적을수록 과소적합되고 많을수록 과적합되는 문제가 있긴 하지만, 하나만 넣어두어도 이미 어지간한 함수는 근사적으로 표현할 수 있는 범용성이 있다.

이와 같은 다층신경망(multi-layer neural network)에서 퍼셉트론의 노드로 엮여있는 모든 층은 이전 층의 출력을 통해서 사슬처럼 작동한다. 층별 노드의 수는 적절히 큰 수로 하되 연결강도의 가중치를 낮춘다. 그리고 여기서는 전파 중 오류에 대처하는 메커니즘이 추가됐는데, 역전파(backpropagation)라고 이름붙은 이 방법은 순전파 중에 오류가 발생하면 출력층에서 다시 은닉층으로 신호를 역전시켜서 가중치를 조정하는 편미분 계산을 수행한다. 아무튼 이와 같은 원리를 통해서, 다층신경망은 XOR 문제가 있더라도 단 2개의 노드만을 가진 은닉층으로도 대응할 수 있게 되었다. 2개의 노드가 2개의 초평면만 그으면 해결되기 때문이다.

물론 다층신경망도 한계는 있었다. 훈련 시간이 '토나올 만큼' 오래 걸리고 결측값 처리가 어려우며, 특히 역전파는 자칫 연결강도의 가중치 절댓값을 크게 높이기 쉽다는 점이 발목을 잡았다. 이게 무슨 말인고 하니, 역전파의 가치는 가중치를 적절하게 조정해주는 데에 있는데 가중치 절댓값이 높을 때에는 실질적인 조정 효과가 떨어진다는 것. 이 상황을 가리켜 포화(saturation) 상태라고 부른다. 신경망이 포화되는 이유는 활성화 함수인 시그모이드에 있었다. 이 함수의 그래프는 가로축 절댓값이 클수록 그래프 기울기가 거의 '소실' 되는 모습을 보여, 절댓값이 큰 상황에서는 컴퓨팅 파워를 어마어마하게 쓰는데도 정작 파라미터 값이 제대로 수렴되지 않아서 조정이 제대로 이루어지지 않는다. 이것을 시그모이드의 기울기 소실(vanishing gradient) 문제라고 하며, 역전파를 쓰려면 이것보다 더 좋은 함수를 찾아야 한다는 문제의식이 제기되었다.

과학자들은 단순히 출력층에서 함수값이 포화되는 문제라면 교차엔트로피 손실함수로 충분히 대응할 수 있다는 걸 알고 있었다. 그러나 출력층에서 은닉층으로 역전파가 수행될 때 반복적 곱연산이 일어나면서 은닉층의 함수값이 포화되는 문제에는 다른 대응방법이 필요했다. 여러 아이디어들이 나왔지만, 어떤 과학자들은 다시금 생물학으로 눈을 돌렸고, 자연계의 뉴런이 비활성 상태 혹은 입력에 비례하는 출력을 내보내는 활성 상태로 구분된다는 데에 착안했다. 여기서 나온 함수가 바로 ReLU(rectified linear unit)라는 반응형 활성화함수였다. 이것은 입력된 가로축 값이 음수이면 비활성화되어 세로축은 무조건 0이 되고, 입력값이 양수일 때는 활성화되어 세로축이 입력과 동일한 출력을 내보낸다. 이처럼 ReLU는 조건적 선형성을 가지므로 역전파에 특화되어 있어, 기울기를 높이고 학습을 단순화하며 절댓값이 크면 클수록 오히려 더 좋은 반응성을 보인다.

새로운 다층신경망은 가장 간단한 학습 하나를 하는 데 기본 수 일이 소요되는 끔찍한 연산속도로 인해 자칫 좌초될 수 있었지만, 다행히 그 사이에 컴퓨터의 연산 처리속도가 어마어마하게 발전하면서 심지어 빅데이터까지 다룰 수 있는 시대가 되었고 더 이상은 '느린 학습' 취급을 받지 않을 수 있었다. 오히려, 은닉층을 계속해서 늘려 가면서 분할기준을 상세하게 설정하는 디테일한 모델링까지도 가능해질 정도가 되었다. 물론 은닉층을 늘린다는 것은 상기된 의사결정나무의 사례에서처럼 '모델이 깊게 성장' 함으로써 '훈련 데이터에 과적합되는' 문제를 야기할 수 있었기에, 데이터 과학자들은 다수의 은닉층을 보유한 '깊은'(deep) 신경망의 과적합을 해결하는 데 주력했다. 그 대표적인 방안이 바로 드롭아웃(dropout)으로, 이것은 정칙화(regularization)라는 과정을 통해 은닉층 노드의 일부를 적당히 솎아내어, 훈련 데이터에 의해 정교한 모델이 크게 흔들리지 않게 만드는 방법이다. 은닉층을 줄이는 것이 아닌 층별 노드 수를 줄임으로써도 과적합이 해소되는 것이다.

기존의 ANN이 받았던 또 다른 비판은, 그것이 전역적 최적을 달성하지 못하고 국소적 최적에만 이르게 된다는 것이었다. 위에서 소개했던 의사결정나무의 한계를 연상시키는 부분. 하지만 다층신경망은 자신이 학습한 데이터를 재사용함으로써 이 문제를 쉽사리 극복해냈다. 국소적 최적은 파라미터의 초기 가중치 설정값을 잘못 채택했을 때 발생하게 되는데, 이를 막으려면 먼저 간단한 사전학습을 거친 후 결과 파라미터를 훈련 데이터의 초기 파라미터로 선택하면 끝나는 것. 이처럼 부분적으로 간단한 학습을 먼저 거침으로써 본격적인 훈련의 첫 파라미터 값을 정하는 것을 사전훈련(pre-training)이라고 한다. 특히 비지도학습에 신경망을 활용할 경우 사전훈련의 가치는 매우 커진다. 여기서는 입력층에서 특정한 속성 데이터를 매핑했다가 출력층에서 스스로 입력내용과 비슷하게 부호화하게 되며, 이것을 자기부호화(auto-encoding)라고 한다.

이와 같이 신경망을 활용한 분석은 단순히 분류 작업에만 그치지 않고 워낙에 많은 분야에 효과적으로 대응 가능하다는 것이 알려지면서 굉장한 인기를 끌고 있다. 기존에 제기되었던 대표적인 방법론적 약점들도 어지간하면 다 보완되었다 보니, 이제는 누구나 '큰 흐름' 을 따라갈 수밖에 없는 것. 이렇게 보완되고 개선되면서, ANN은 마침내 딥 러닝(deep learning) 또는 심층학습(深層學習)이라는 이름의 21세기 메가 트렌드의 위상에 올라섰다. 변인이 많아도, 비선형적 관계여도, 노이즈가 심하더라도, 의사결정이 아무리 복잡해도, ANN은 늘 거짓말처럼 좋은 학습결과를 보여주는 범용성을 과시했다. 훈련에 도움이 되지 않는 속성이 있으면 스스로 가중치를 0으로 조정해 버리고, 정 안 되겠다 싶으면 드롭아웃을 쓰면 된다. 학습속도가 문제건 국소적 최적이 문제건, ANN은 좋은 컴퓨터로 훈련만 제대로 시키면 된다. 상황이 이러하니, 괜히 과학자들이 딥 러닝에 헥헥거리고 괜히 수많은 투자자들이 돈을 있는 대로 쏟아붓는 게 아닌 것.

물론 신경망을 활용한 분석에도 기본적으로 지켜야 할 전제조건은 존재한다. 우선 모든 연속형 변인들의 범위가 서로 유사하고, 그 분포도 좌우대칭이 성립해야 한다. 다시 말해, 데이터에서 높은 이상점 등의 이유로 인해 좌측편포가 존재하는 경우에는 섣불리 분석하기 전에 먼저 로그를 취하여 데이터를 변환해야 한다. 또 데이터 세트에서 모든 범주형 변인의 범주별 관측빈도가 일정해야 하며, 분석하기 전에 해당 변인들을 가변인(dummy variable)으로 전처리할 필요가 있다. 하지만 이상의 작업들은 어느 정도 데이터를 만져 본 분석가들이라면 이미 익숙할 처리작업이기 때문에, 아직까지 신경망에 기초한 분석에 어떤 중대한 한계가 있다는 의미 있는 합의는 나오지 않고 있다.

2.4. 그 외 분류방법들

3. 같이 보기


[1] 좀 더 정확하게 표현하자면 맨 꼭대기의 분할기준을 '뿌리 노드'(root node), 중간 즈음의 분할기준들을 '내부 노드'(internal node), 그리고 맨 아래에 위치하여 분할이 종료된 마지막 부분을 '잎새 노드'(leaf node)라고 부른다.