brunch

You can make anything
by writing

C.S.Lewis

by 권순목 Jul 28. 2021

3.3 비지도 학습 모델

데이터 과학 미니북 - 3. 데이터 분석

3.3 비지도 학습 모델


지도 학습은 예측을 목적으로 하는 모델을 피쳐와 레이블 변수들을 이용해서 만들어 내는 것을 말합니다. 이에 반해 비지도 학습은 레이블 없이 피쳐 변수들 만으로 모델을 만들어내며, 모델의 목적은 예측에 국한되지 않습니다. 비지도 학습 기법들은 기초 통계 분석과 같이 특별한 목적 없이 데이터의 내용을 설명하는 데에 초점을 두는 측면이 강합니다.


본 단원에서는 대표적인 비지도 학습 모델로, 주성분을 활용한 차원 축소 기법과 군집 분석에 대해서 살펴보겠습니다.


3.3.1 주성분분석 (Principal Component Analysis, PCA)


데이터에 따라 피쳐 변수가 아주 많을 수 있습니다. 데이터를 가공하면서 피쳐 폭발 과정을 통해 변수 개수가 많아질 수도 있습니다. 그러나 변수가 너무 많으면 분석이나 처리 과정이 불편한 경우가 있습니다. 데이터 용량이 커져서 그 자체로 시스템에 큰 부담이 될 수도 있고, 모델 성능에 악영향을 줄 수도 있습니다. 이런 경우에 데이터의 정보량을 유지하면서 변수 개수를 줄일 수 있는 방법이 주성분분석을 통한 차원 축소입니다.


변수 개수를 줄이면서 정보량을 유지하는 것이 어떻게 가능할까요? 앞서 2.1.2 장에서 범주형 데이터를 수치형 변수로 변환할 때를 기억해보면 감을 잡기 쉽습니다. 혈액형이라는 범주형 변수는 가변수들을 이용하여 세 개의 수치형 변수로 변환될 수도 있고, 이진 코드를 통해 두 개의 수치형 변수로 변환될 수도 있었습니다. 이것을 뒤집어 생각해보면, 똑같은 양의 정보가 두 개 변수 속에 담길 수도 있고, 세 개 변수 속에 담길 수 있다는 뜻입니다. 정보량을 유지하면서 변수를 줄이는 것이 가능할 것 같아 보입니다. 이제 예를 보면서 좀 더 개념을 잡아 보겠습니다.


[표 1] 펭귄 데이터셋


[표 1]의 데이터는 남극 기지 연구원들이 작성하여 비교적 최근에 공개한 것으로[1], 펭귄의 신체 측정값 들이 담겨 있습니다. 우선 성별 변수를 가변수를 이용하여 수치형으로 변환하면 [표 2]와 같이 됩니다.


[표 2] 펭귄 데이터셋 (수치형 변환)


[그림 1]은 펭귄 데이터 변수 다섯 개 사이의 상관 관계입니다. 변수간 상관 관계가 상당한 것을 확인할 수 있습니다.


[그림 1] 펭귄 데이터 변수 페어플롯(pair-plot)


이제 이 데이터의 주성분 분석 결과를 보겠습니다. 주성분분석은 일종의 선형 변환(Linear Transform)으로서, 변수들 간의 선형 조합으로 주성분(Principal Component)라고 불리는 새로운 변수들을 만들어 내는 것입니다. [표 3]은 펭귄 변수 다섯 개를 주성분분석으로 선형 조합하여 만든 주성분 변수 다섯 개를 보여주고 있습니다.


[표 3] 주성분(Principal Component) 변수들


주성분 변수들은 특이한 성질을 가집니다. 우선 [그림 2]에서 확인할 수 있듯이, 주성분들 사이에는 상관 관계가 사라집니다. 또 다른 특이한 성질은 정보량이 앞쪽 주성분에 집중된다는 것입니다. 주성분 분석 과정에서 가장 정보량이 큰 선형 조합이 첫 번째 주성분 변수로 뽑힙니다. 뒤에 뽑히는 변수들도 차례로 남은 정보들 중 가장 많은 부분을 설명할 수 있는 선형 조합을 찾게 됩니다. 이런 과정이 있기 때문에 앞쪽 주성분에 많은 정보량이 쏠리게 되는 것입니다.[2]


[그림 2] 펭귄 데이터 주성분 변수 페어 플롯(pair-plot)


[그림 3] 주성분들의 누적 정보량 (분산 설명력)


[그림 3]은 펭귄 데이터 주성분들의 누적 정보량을 보여주고 있습니다. 어떤 변수의 정보량은 그 변수의 분산에 비례한다고 볼 수 있기 때문에, 정보량은 분산 설명력으로 측정합니다. 놀랍게도 첫 번째 주성분이 전체 데이터의 정보량의 56 %를 차지하고 있습니다. 두 번째 주성분까지 합치면 전체 데이터 정보량의 84 %를 차지합니다. 세 번째까지 합치면 95 %에 육박합니다. 이제 우리는 필요에 따라 뒤쪽 주성분을 버리는 선택을 할 수 있습니다. 예를 들어 90 % 이상의 정보가 유지되는 것으로 만족한다면 주성분 4번, 5번은 버릴 수 있습니다. 이렇게 변수 5개였던 데이터가 3개 변수로 차원 축소됩니다. [3]


앞서 차원 축소의 필요성이 여러 가지 있을 수 있다고 말씀드렸는데요. 차원 축소로 인해 얻어지는 장점 중 빼놓을 수 없는 것이 그림을 그려보기 쉽다는 것입니다. 앞서 예에서 5개였던 변수를 3개로 줄였으니, 3차원 산포도(3D scatter plot)를 한번 그려보도록 하겠습니다.


[그림 4] 펭귄 데이터 주성분 변수의 3차원 산포도


[그림 4]는 펭귄 데이터 주성분 1~3번 변수의 분포를 3차원 그래프로 그려놓고, 이리저리 돌려본 것입니다. 데이터의 특성을 파악하는 데에 그림을 그려보는 것보다 나은 것은 없습니다. 주성분 분석의 결과로 우리는 저 3개 변수가 전체 데이터의 95%를 설명한다는 것을 알고 있습니다. 거의 모든 정보를 하나의 그림에 담아 특성을 살펴볼 수 있다면 그것만으로도 주성분 분석은 해 볼 만한 가치가 있습니다.



3.3.2 K-평균 군집 분석 (K-Means Clustering)


앞서 펭귄 데이터를 주성분 분석하여 3차원 산포도로 그렸을 때, 그려진 모양을 보고 어떤 느낌을 받으셨는지요? 사람마다 다르겠지만, 데이터가 군데군데 뭉쳐서 몇 개 집단을 형성하고 있다고 느낄 수도 있을 것입니다. 데이터 중에는 이렇게, 피쳐 변수만 활용해서 몇 개 집단으로 쪼갤 수 있는 것들이 있습니다. 데이터를 몇 개로 쪼개 분석하는 것을 군집 분석(Cluster Analysis)라고 합니다. K-평균 군집분석은 데이터를 쪼개는 방식으로 가장 널리 쓰이는 기법 중 하나입니다.


[그림 5] 펭귄 데이터 주성분 1번, 2번 K-평균 군집


[그림 5]는 앞서 살펴보았던 펭귄 데이터의 주성분 1번, 2번에 대해서 K-평균 군집 분석으로 군집을 분류한 결과입니다. 데이터는 4개의 군집으로 이루어져 있고, 각 군집은 해당 군집에 속하는 측정값들의 평균값으로 대표됩니다. 이 평균값은 그림에서 X로 표시되어 있습니다. K-평균 군집 분석이라는 용어는 K개의 군집을 대표하는 “K개의 평균”이라는 의미에서 왔습니다. 이 평균값을 군집의 중심(Cluster Center)이라고 부릅니다. K-평균 군집 모델을 만든다는 것은 K개의 군집 중심을 찾아내는 것을 의미합니다. K개의 군집 중심을 찾아내는 방식은 생각보다 간단합니다.


1) K를 정합니다. 그림을 그려보고 눈대중으로 할 수도 있고 특수한 알고리즘을 쓸 수도 있습니다.

2) K개의 군집 중심의 초기 위치를 임의로 정합니다. (랜덤 하게 뿌립니다.)

3) 각 군집 중심에서 유클리드 거리로 가까운 측정값들을 모아 군집을 형성합니다.

4) 각 군집에 속한 측정값들의 평균으로 군집 중심을 갱신합니다.

5) 군집 중심이 더 이상 변동하지 않을 때까지 3), 4) 과정을 반복합니다.


이것을 K-평균 군집 알고리즘이라고 부릅니다. 이 알고리즘의 멋진 부분은 3), 4) 과정이 반복되는 부분입니다. 군집 구성원 갱신, 군집 중심 갱신, 다시 군집 구성원 갱신으로 이어지는 반복을 수행하는 것 만으로, 군집 중심들이 적정 위치로 수렴할 수 있다는 것은 얼핏 보면 신기하지만, 그 뒤에는 이론적 배경이 있습니다.[4] 반면에 K-평균 알고리즘의 약점은 1) 번에서 K를 미리 지정해 주어야 한다는 것과, 2) 번에서 이루어지는 초기화가 최종 결과까지 영향을 미칠 수도 있다는 점입니다. 이런 부분들을 보완하기 위한 다양한 추가 기법들이 K-평균 군집 알고리즘과 함께 쓰일 수 있습니다.


K 평균 알고리즘은 유클리드 거리를 기반으로 계산되기 때문에 변수간 스케일 차이를 없애주는 정규화 등의 전처리 후에 사용하는 것이 좋습니다. 앞서 예에서는 데이터에 변수가 두 개인 경우를 설명하였는데, 변수가 많은 경우에도 사용할 수 있습니다. 다만, 유클리드 거리를 기반으로 하기 때문에 변수 개수가 너무 많을 경우 성능을 장담하기 어렵습니다. 이런 경우 차원 축소 등의 도움을 받는 것이 좋습니다.


[그림 6]은 차원 축소한 3개 변수를 군집 분석한 결과로, [그림 5]에 군집을 색깔로 표시한 것이라 할 수 있습니다. 이 군집 분석 결과는 펭귄 데이터를 6개 군집으로 나눌 수 있음을 보여주고 있습니다. 군집 분석 결과는 이런 식으로 2차원 또는 3차원 산포도로 시각화하여 그 결과를 확인해 주는 것이 좋습니다. 군집 분석 결과의 성능을 측정하는 여러 가지 지표가 있지만, 시각화해서 확인해보면 해당 지표를 신뢰하기 어려운 경우가 발견되는 경우도 있습니다. 산포도 상으로 한 덩어리인데 군집 분석이 억지로 쪼개거나, 쪼갤 만한 부분을 쪼개지 않은 경우를 발견할 수 있습니다. [그림 6]에서는 그런 부분이 발견되지 않고 있습니다.[5]


[그림 6] 펭귄 데이터 주성분변수의 3차원 산포도 + 군집 구분





[1] Palmer Penguins Dataset, https://github.com/allisonhorst/palmerpenguins

[2] 주성분분석의 선형 조합 인자는 데이터 피쳐 변수들 간의 공분산 행렬의 고윳값 벡터(Eigen Vector)입니다. 고윳값(Eigen Value)이 큰 순서로 주성분 순서가 정해집니다.

[3] 펭귄 데이터처럼 변수 간에 큰 상관 관계가 존재하는 경우에만 주성분분석 기반의 압축 효율이 좋습니다. 변수간 상관 관계가 낮은 경우 주성분 분석의 압축 효율은 좋지 않습니다.

[4] K-평균 군집 알고리즘은 EM(Expectation Maximization) 알고리즘이라고 불리는 일반적인 알고리즘의 특수한 형태로서, 그 수렴성이 증명되어 있습니다.

[5] 펭귄 데이터에는 사실 [표 3]에 나타난 5개 변수 외에 ‘종’ 변수가 있고, 종은 총 3가지(아델리 펭귄, 젠투 펭귄, 친스트랩 펭귄)입니다. ‘종’과 ‘성별’ 범주형 변수로 펭귄 집단을 6개로 나눌 수 있는데, 이렇게 나눈 결과는 수치형 변수의 군집 분석 결과와 거의 일치합니다.




이전 11화 3.2 지도 학습 모델
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari