클러스터링(군집 분석) — 계층적 군집

Document.H
h_document
Published in
10 min readAug 15, 2021

유저들을 특정 성격에 따라 분류하고는 합니다. 신규, 이탈, 복귀 유저처럼 접속한 시점과 마지막 접속에 따라 기준을 잡기도 합니다. 이 경우는 기준점이 명확한데 비해 어떤 경우에는 유저들을 나눌 수 있는 기준을 모르는 경우도 있습니다. 예를 들어 이미 프로덕트를 사용하고 있는 유저들의 사용량 혹은 패턴에 따라 라이트, 헤비 유저로 나눈다고 했을 때, 라이트, 헤비 유저를 나누는 기준을 어떻게 정해야 하는지부터 문제가 시작됩니다.

군집분석이란

군집분석(clustering. cluster : 비슷한 특징을 가진 데이터들의 집합)이란 개체들을 유사성에 기초하여 n개의 군집으로 집단화하여 집단의 특성을 분석하는 다변량 분석을 말합니다.
변수들이 속한 모집단 또는 범주에 대한 사전 정보(분류 기준)가 없는 경우 관측값들 사이의 유사성(거리)을 이용하여 개체들을 자연스럽게 몇 개의 그룹 또는 군집으로 나누어 그룹의 특성을 찾아내는 방법입니다.

라벨이 붙어져 있지 않은 데이터를 나누는 것이기 때문에 분석가는 몇 개의 군집으로 묶을지를 궁금해하지만 군집분석에는 정답이 없습니다. 아래 이미지처럼 하나의 데이터셋을 두 개로 분류할 수도 있고 세 개로 분류할 수도 있기 때문입니다.

https://h1ros.github.io/posts/k-means-clustering/

p-value처럼 의사 결정에 참고할 수 있는 검증 값도 없으며, 어떤 변수와 분석법을 사용했는지에 따라 결과가 다르게 나타납니다. 그렇기 때문에 왜 이렇게 분류가 되었는지 이해할 수 있는 경험과 역량이 중요한 분석이기도 합니다.

군집 분석에서 중요한 사항

  1. 차원 축소
    : 유사한 변수들을 묶어서 차원을 축소합니다. 예를 들어 변수들이 연봉, 나이, 연차, 직군 등 다양한 변수가 있는 경우에 나이와 연차는 비슷한 변수로 묶을 수 있습니다. 이때는 나이를 제외하고 연차 하나만을 사용하는 것으로 차원을 축소할 수 있습니다. 같은 군집 내에서는 차원이 동질적(homogeneous)이어야 합니다.
  2. 변수 종류 및 이해
    : 변수 종류가 연속형 또는 명목형인지, 또 변수 개수와 특징에 대한 이해가 필요합니다. 변수 종류와 특징에 따라서 사용되는 방법론을 고려하게 됩니다.
  3. 사용하는 방법론과 적용될 알고리즘
    : 회귀분석에서는 변수 자체가 중요했다면 군집 분석에서는 거리를 어떻게 정의하고 측정할 것인지가 더 중요합니다. 군집 분석의 포인트는 이 거리를 측정하는 방법이 변수의 특성과 관계가 있기 때문입니다. 만약에 사용할 변수의 단위가 다를 경우는 표준화가 필요합니다.

이 외에도 군집 분석의 목적이라고 할 수 있는 ‘군집수’ 역시 군집 분석할 때 고려해야하는 중요한 사항입니다.

거리 계산

거리를 계산하는 방법은 변수의 종류에 따라 다릅니다. 물론 변수의 종류가 같은 경우에도 다양한 방법이 존재합니다.

연속형 변수인 경우 유클리드(Euclidean distance), 맨허튼(Manhattan Distance), 민코프스키(Minkowski Distance), 통계적(Statistical Distance), 마할라노비스(Mahalanobis distance) 거리등이 있습니다.

명목형 변수는 자카드(Jaccard disttance), Soremsem-Dice, Anderberg, Ochiai, Simple Matching, Rogers and Tanimoto, Hamming Distance 등이 있습니다.

만약 모든 변수가 명목형 변수라면 (1,1), (1,0), (0,1), (0.0) 이렇게 4가지의 케이스만 있게 됩니다. 개체 i와 j 간의 거리는 ‘개체 i와 j에서 다른 값을 가지는 변수의 수 / 총변수의 수'로 측정하게 되는데 이때 (1,1) 매칭과 (0,0) 매칭이 모두 동일하게 반영이 된다는 단점이 있습니다. 만약 (1,1) 매칭이 (0,0) 매칭보다 가중치를 더 줘야 하는 상황 혹은 유사성이 더 크다면 바람직하지 않은 결과가 나오게 됩니다.

이를 보완할 수 있는 방법들이 있으며, 변수의 특성에 맞는 종류를 선택해야 합니다. 같은 데이터를 가지고도 적용하는 계산법에 따라 결과가 다르게 나오는 것을 확인할 수 있습니다. (a=(1,1) / b=(1,0) / c=(0,1) / d=(0,0))

https://www.youtube.com/watch?v=3Uy4FZjEOwU 캡쳐

즉 앞에서 계속 얘기를 했던 변수의 특성과 의미 파악이 정말 중요하다는 것을 알 수 있습니다. 추가로 매칭과 불일치 중 무엇이 더 중요하며, 어떤 매칭( (0,0), (1,1))에 의미를 더 둘지도 고민해야 하는 포인트입니다.

연속형 변수와 범주형 변수가 함께 존재하는 혼합형 데이터의 경우 군집분석에서 범주형 변수로 인해 개체 간 거리 측정이 모호하다는 문제가 있습니다. 이는 연속형 변수와 명목형 변수 사이의 거리 측정이 사실상 불가능하다는 말이기도 합니다. 거리 단위에 대해서 표준화를 한다고 해도 명목형 변수와 연속형 변수의 측정 방식은 분명히 다르기 때문입니다. 지금 이 문제를 해결하기 위한 방법이(가변수 변환 방법, Gower 방법, Eskin 방법) 도입되고 있으나 한계가 있고 그것이 이론을 넘어서 실제로 적용할 수 있는 것은 또 다른 이슈입니다.

따라서 가장 안전하게 군집분석을 하는 방법은 사용하는 모든 변수를 동일한 형태의 변수로 지정하는 것입니다.

군집 분석의 종류

계층적 군집 (Hierarchical Clustering)

  • 군집의 개수가 정해지지 않았을 때 사용합니다. 군집의 개수를 모를 때 사용하기 때문에 몇 개의 군집으로 나누어야 하는지 결정하기 위해 사용하기도 합니다.
  • 가까운 개체끼리 차례로 묶거나 멀리 떨어진 개체를 차례로 분리하는 방법으로 합병에 의한 방법(agglomerative)과 분할에 의한 방법 (divise)이라고 합니다.
  • 구현이 간단하고 이해하기 쉬우며, 덴드로그램과 같은 그래프로 결과를 직관적으로 이해할 수 있습니다.
  • 한 번 병합된 개체는 다시 분리되지 않는다는 특징을 가지고 있습니다.
  • 군집의 특성을 설명하기가 애매한 경우도 발생합니다. 사용된 거리측정 방법과 알고리즘에 따라 아웃라이어에 민감도가 높거나, 큰 사이즈의 군집을 잘라버리는 경우도 발생하는 경우가 있기 때문입니다.
  • 많은 변수를 투입하거나 데이터의 크기가 많은 경우 계산량이 많아 느립니다.

비계층적 군집(Non-Hierarchical Clustering)

  • 다변량 자료의 산포를 나타내는 여러 측도를 이용하여 판정 기준을 최적화시키는 방법으로 군집을 나누는 방법입니다.
  • 한 번 분리된 개체도 반복적으로 시행하는 과정에서 재분류될 수 있습니다.
  • 사전에 군집의 개수가 정해져 있을 경우에 사용하며, 대표적인 방법으로는 k-mean clustering이 있습니다.

계층적 군집 중 합병에 의한 방법(Agglomerative methods)

합병에 의한 방법은 가까운 케이스끼리 묶어 군집을 이루어 나가는 것으로 마지막엔 한 개의 군집이 되며, 덴드로그램(dendrogram)으로 표현하게 됩니다.

덴드로그램 예

알고리즘

  1. 1개의 관찰 값(개체/케이스)을 가지는 샘플 사이즈 n개의 군집으로 시작합니다.
  2. 각각의 거리(유사성) 매트릭스를 계산합니다.
  3. 가장 유사한(=거리가 가까운) 군집의 쌍(a, b)을 찾아서 하나의 군집(A’)으로 묶습니다.
  4. 3번이 진행됨에 따라 하나의 군집으로 묶이고 나서 생긴 A와 다른 개체의 거리 매트릭스를 업데이트합니다.
  5. 데이터의 모든 관찰 값(개체/케이스)가 하나의 군집이 될 때까지 3번과 4번 반복하게 됩니다.

종류

  1. Single linkage method(최단 연결법)
  • 아웃라이어에 취약하다.
  • 방법
    1. 두 군집 사이의 모든 거리들 중에서 가장 짧은 것을 병합한다.
    2. 병합 후 거리 매트릭스를 업데이트할 때, 여러 개의 거리 값 중에서 가장 가까운 거리의 것을 새로운 거리로 업데이트한다.

2. Complete linkage method(최장 연결법)

  • single linkage method와 마찬가지로 아웃라이어에 취약하다.
  • 방법
    1. 두 군집 사이의 모든 거리들 중에서 가장 짧은 것을 병합한다.
    2. 단 병합 후 거리 매트릭스를 업데이트할 때, 여러 개의 거리 값 중에서 가장 먼 거리의 것을 새로운 거리를 업데이트한다.(최단 연결법과 반대)

3. Average linkage method(평균 엽결법)

  • simple linkage와 complete linkage 합친 방법으로 아웃라이어에 강하지 않다.
  • between group linkage, within groups linkage 방법이 있다.
  • 방법
    1. 두 군집 사이의 모든 거리들 중에서 가장 짧은 것을 병합한다.
    2. 단 병합 후 거리 매트릭스를 업데이트할 때 여러 개 거리 값 중에서 군집과 군집 사이의 관찰 값의 평균 거리를 새로운 거리로 업데이트한다.

4. Centroid method(중심 연결법)

  • 두 군집 간의 거리를 측정할 때, 각 군집의 중심 간의 거리를 사용한다.
  • 방법
    1. 두 군집 사이의 모든 거리들 중에서 가장 짧은 것을 병합한다.
    2. 군집이 형성되고 나면 형성된 군집의 중심을 계산해서 이를 새로운 좌표로 업데이트한다.
    군집들의 중심을 계산해야 하기 때문에 시간이 오래 걸린다.

5. Ward linkage method(Wards 연결법)

  • 두 군집 간의 유사성을 두 군집이 합쳐졌을 때의 오차 제곱 합의 증가분에 기반하여 측정한다. 오차 제곱 합의 증가를 최소화하면서 군집을 묶어나간다.
  • 오차 제곱합을 고려하기 때문에 아웃라이어에 약하지 않다.
  • minimum with in group variance를 만들도록 군집을 묶는다.
  • 원형의 군집을 묶을 때 군집의 크기가 달라지면 취약해진다는 단점이 있다.
  • 방법
    1. 초기 단계에서 각 개별 관찰 값을 개별 군집으로 보고 시작합니다. (이때의 오차 제곱합=0)
    2. n개의 군집 중 2개를 묶을 때, 가상 ess의 증가가 작아지는 군집을 첫 번째 군집으로 묶습니다. 이는 결국 거리가 가장 가까운 군집끼리 묶이게 됩니다. (기존의 다른 방법과 동일한 결과)
    3. 새로운 군집 중심을 centroid 방법으로 변경한다.
    4. 새로운 군집과 나머지 군집을 묶었다고 가정할 때의 오차 제곱합(ESS)의 증가분이 군집 간의 거리로 업데이트한다.

계층적 군집 중 분할에 의한 방법(Devisive methods)

전체를 하나의 군집에서 두 개의 군집으로 분할하는 것으로 시작합니다. 다른 개체들부터 나누어 마지막엔 각각의 개체들이 개별 군집으로 나누어지게 됩니다. 대표적인 방법으로는 다이아나 방법(Diana method)가 있습니다

정리하며…

계층적 군집 분석에서는 군집의 개수를 정확하게 결정하는 것이 목적이 아니다. 계층적 군집분석을 일반적으로 먼저 수행하는 이유는 데이터의 군집 형성이 어떻게 이루어졌는지 확인하는 목적이 강합니다. 이때 연구자의 판단과 경험에 비추어 적절한 수준의 군집의 개수를 예측하게 되며, 관찰 값들이 어떤 모양으로 군집을 이루고 있는지 확인하게 된다. 한번 합병되면 다시 분리되지 않는 성질을 가지고 있으므로 형성된 군집이 의미가 있는지도 검토할 필요가 있다. 가능하면 여러 가지 다양한 방법으로 군집을 형성해보고 결정하는 것을 추천한다고 한다.

결론은 클러스터링을 할 때 너무 정답에 집착하지 말아야 합니다. 특히 p value과 같은 내용이 없어 판단이 쉽지 않으며 오히려 다양한 방법을 적용하여 결과의 일치성을 보고 기존의 분석과 비교하거나 논리적으로 설명 가능한 결과를 보고자 노력해야 합니다.

출처 : Sapientia a Dei 님의 통계 유튜브

--

--

Document.H
h_document

좋은 질문을 던지고 싶은 데이터분석가