데이터 과학

k-평균 군집 분석 성능 평가

정답이 없는데 잘 묶였는지 어떻게 알까요?
데이터 안에서 잣대를 만들어 냅니다.

학습 목표

  1. 군집 내 유사성과 군집 간 상이성이 무엇을 뜻하는지 설명할 수 있다.
  2. 오차 제곱합을 구하고, 엘보 그래프로 군집의 개수를 정할 수 있다.
  3. 실루엣 계수가 어떻게 계산되는지 설명하고 값의 뜻을 해석할 수 있다.
  4. 두 잣대가 각각 무엇을 놓치는지 알고 함께 살펴볼 수 있다.

잘 묶였다는 것은 무슨 뜻일까?

맞춰 볼 정답이 없으니 데이터 안에서 잣대를 만들어 내야 합니다.

회귀 분석에서는 실젯값이 있었기에 「얼마나 빗나갔나」를 측정할 수 있었습니다. 군집 분석에는 그런 값이 없습니다. 그래서 잣대를 「좋은 군집이란 무엇인가」라는 정의에서 끌어옵니다. 군집 안은 촘촘하고, 군집끼리는 멀리 떨어져 있어야 한다는 두 가지입니다.

군집 내 유사성

한 군집 안의 데이터들이 서로 얼마나 비슷한가. 군집 안에서 데이터가 얼마나 좁게 모여 있는지로 측정합니다. 좁게 모여 있을수록 좋습니다.

군집 간 상이성

서로 다른 군집끼리 얼마나 다른가. 군집과 군집 사이가 얼마나 멀리 떨어져 있는지로 측정합니다. 멀리 떨어져 있을수록 좋습니다.

하나만 보면 속습니다

군집 내 유사성만 좋게 만들고 싶다면 데이터 하나마다 군집을 하나씩 만들면 됩니다. 군집 안에 혼자뿐이니 완벽하게 비슷하지만, 아무 쓸모도 없습니다. 거꾸로 군집 간 상이성만 보면 전체를 두 덩어리로 크게 자르는 것이 유리합니다. 그래서 두 조건을 함께 봅니다.

이것을 숫자로 만드는 방법은 두 가지입니다. 하나는 군집 내 유사성만 보고, 다른 하나는 둘을 한꺼번에 봅니다.

잣대 무엇을 보나 값의 범위
오차 제곱합 (SSE) 군집 내 유사성만 본다. 각 데이터가 자기 중심점에서 얼마나 떨어져 있는가 0 이상. 작을수록 좋다
실루엣 계수 군집 내 유사성과 군집 간 상이성을 함께 본다 −1 ~ 1. 1에 가까울수록 좋다

중심점에서 얼마나 떨어져 있나?

회귀 분석에서 쓴 오차 제곱합이 여기서도 나옵니다.

군집 분석에서 오차는 각 데이터와 자기 군집 중심점 사이의 거리입니다. 회귀에서는 점과 직선 사이의 세로 거리였는데, 여기서는 점과 중심점 사이의 거리로 바뀌었을 뿐 제곱해서 더한다는 것은 같습니다. 이 합을 오차 제곱합(SSE, sum of squared errors)이라고 합니다.

축제 부스 여섯 개로 계산합니다

가(1, 1) 나(3, 1) 다(2, 4) 라(7, 6) 마(9, 6) 바(8, 9), k = 2로 묶으면 중심점이 (2, 2)와 (8, 7)로 정해지는 데이터입니다.

중심점 오차 — 점과 중심점 사이의 거리

빨간 점선 하나하나가 오차입니다. 거리를 제곱하면 거리를 구할 때 씌웠던 제곱근이 풀리므로, 가로 차이의 제곱 + 세로 차이의 제곱만 더하면 됩니다.

부스 중심점 가로 차이 세로 차이 오차²
가 (1, 1)(2, 2)−1−11 + 1 = 2
나 (3, 1)(2, 2)1−11 + 1 = 2
다 (2, 4)(2, 2)020 + 4 = 4
라 (7, 6)(8, 7)−1−11 + 1 = 2
마 (9, 6)(8, 7)1−11 + 1 = 2
바 (8, 9)(8, 7)020 + 4 = 4
오차 제곱합 SSE 16

다와 바가 4로 가장 큽니다. 중심점에서 가장 멀리 떨어져 있기 때문입니다. SSE는 중심에서 벗어난 정도를 모두 모은 값이고, 작을수록 각 군집이 좁게 뭉쳐 있다는 뜻입니다. 즉 군집 내 유사성을 측정하는 잣대입니다.

SSE만으로는 k를 고를 수 없습니다

「SSE가 작을수록 좋다」를 그대로 따르면 k를 계속 키우게 됩니다. 군집을 잘게 쪼갤수록 중심점이 가까워져 SSE가 줄어드니까요. k를 데이터 개수만큼 키우면 SSE는 정확히 0이 됩니다. 점 하나하나가 자기 중심점이 되어 거리가 0이 되기 때문입니다. 완벽한 점수이면서 아무 쓸모도 없는 답이므로, SSE는 값 자체보다 줄어드는 모양으로 읽습니다.

k를 몇으로 두어야 할까?

SSE의 값이 아니라 줄어드는 모양을 봅니다.

k를 1부터 하나씩 늘려 가며 SSE를 구해 봅시다. k가 커지면 SSE는 줄어들므로, 볼 것은 얼마나 줄어드는가입니다.

k 어떻게 묶이나 SSE 직전보다 줄어든 양
1여섯 부스가 통째로 한 무리107.5—
2가 나 다 / 라 마 바 16 91.5  ← 뚝 떨어짐
3가 나 다 / 라 마 / 바106
4가 나 / 다 / 라 마 / 바46
5가 나 / 다 / 라 / 마 / 바22
6여섯이 모두 따로02
군집 개수(가로) · 오차 제곱합(세로) 팔꿈치 — k = 2

엘보(elbow) 그래프

가파르게 떨어지다가 갑자기 완만해지는 지점이 있습니다. 선의 모양이 팔을 굽혔을 때의 팔꿈치를 닮았다 해서 엘보 그래프라고 부릅니다. 이 팔꿈치를 알맞은 k의 후보로 삼습니다.

우리 데이터에서는 k = 2가 팔꿈치입니다. 1에서 2로 갈 때는 91.5나 줄었는데, 2에서 3으로 갈 때는 6밖에 줄지 않았습니다. 더 쪼개도 얻는 것이 별로 없다는 뜻입니다. 부스들은 왼쪽 아래와 오른쪽 위 두 덩어리였으니 눈으로 본 것과도 맞습니다.

팔꿈치가 안 보이는 경우도 많습니다

우리 예는 팔꿈치가 유난히 뚜렷했습니다. 일부러 그렇게 만든 데이터이기 때문입니다. 실제 데이터에서는 선이 완만하게 내려가기만 하고 꺾이는 곳이 어디인지 애매한 경우도 많습니다. 그럴 때 「여기가 팔꿈치다」라고 정하는 것은 사람의 판단입니다. 엘보 그래프는 답을 정해 주지 않고 판단의 근거를 보여 줄 뿐입니다.

스스로 확인

표에서 k = 3과 k = 4는 똑같이 6씩 줄었는데, 우리는 k = 2를 골랐습니다. 「가장 많이 줄어든 곳」을 고른 것과 「줄어드는 속도가 꺾인 곳」을 고른 것은 어떻게 다른가요?

이 점은 제자리에 있는 걸까?

점 하나하나에 대해 물어보는 잣대입니다.

SSE는 전체가 얼마나 뭉쳐 있는지를 하나의 숫자로 말해 줍니다. 실루엣 계수(silhouette coefficient)는 다릅니다. 점 하나를 집어 「이 점은 지금 들어간 군집이 맞는가」를 두 거리로 묻습니다.

a — 우리 편과의 거리

나와 같은 군집에 있는 다른 점들까지의 평균 거리입니다. 작을수록 좋습니다. 우리 편과 가깝다는 뜻이니까요.

b — 옆 동네와의 거리

가장 가까운 다른 군집의 점들까지의 평균 거리입니다. 클수록 좋습니다. 남과 멀다는 뜻이니까요.

실루엣 계수

(b − a) ÷ (a와 b 중 큰 값)

b − a가 「얼마나 잘 자리 잡았는가」이고, 큰 값으로 나누는 것은 −1에서 1 사이로 가두기 위해서입니다

1에 가까움

우리 편은 가깝고 남은 멀다. 제자리에 잘 있다.

0 근처

양쪽이 비슷하게 멀다. 두 군집의 경계에 걸쳐 있다.

−1에 가까움

남이 우리 편보다 가깝다. 엉뚱한 군집에 들어가 있다.

부스 「다」의 실루엣 계수를 구해 봅시다

부스 다(2, 4)는 1군집(가, 나, 다)에 속해 있습니다.

a = 같은 군집인 가, 나까지의 평균 거리
   = (다→가 3.16 + 다→나 3.16) ÷ 2 = 3.16

b = 다른 군집인 라, 마, 바까지의 평균 거리
   = (5.39 + 7.28 + 7.81) ÷ 3 = 6.83

실루엣 계수 = (6.83 − 3.16) ÷ 6.83 = 3.67 ÷ 6.83 ≈ 0.54

양수이므로 제자리에 있는 것이 맞습니다. 다만 1에는 좀 못 미칩니다. 여섯 부스 전부를 구해 보면 이유가 보입니다.

1군집 2군집 가 나 다 마 바 라 0.72 0.67 0.54 0.68 0.66 0.60 전체 평균 0.65

이렇게 점마다의 실루엣 계수를 막대로 늘어놓은 그림을 실루엣 플롯이라고 합니다. 막대가 길수록 그 점이 자기 군집에 잘 어울린다는 뜻입니다.

부스 a — 우리 편 b — 옆 동네 실루엣 계수
가2.589.290.72
나2.587.880.67
다3.166.830.54  ← 가장 낮다
라2.586.530.60
마2.588.170.68
바3.169.290.66
평균0.65

가장 낮은 점은 부스 다입니다

다가 0.54로 가장 낮습니다. 다는 왼쪽 무리에서 혼자 위쪽에 떨어져 있어 우리 편과는 멀고 옆 무리와는 덜 먼 위치에 있습니다. 실루엣 계수는 이런 점을 숫자로 드러냅니다. 전체 합 하나만 내는 SSE로는 알 수 없는 정보입니다.

두 잣대를 어떻게 함께 쓸까?

두 잣대는 각자 놓치는 것이 다릅니다.

비교 항목 오차 제곱합 (SSE) 실루엣 계수
보는 것 군집 내 유사성만 군집 내 유사성 + 군집 간 상이성
값의 범위 0 이상. 단위가 있다 −1 ~ 1. 단위가 없다
값이 나오는 대상 전체에 대한 값 하나 점 하나하나마다 값이 나온다
k를 고를 때 값만 보면 안 되고 엘보를 찾아야 한다 평균이 가장 큰 k가 우선 후보가 된다
약점 k를 키우면 무조건 좋아 보인다 점마다 거리를 모두 계산해야 해 계산이 무겁다

실루엣 계수로는 가장 큰 값을 고르면 되는 이유

SSE는 k를 키우면 한 방향으로만 좋아져서 가장 좋은 값을 고르는 방식이 통하지 않았습니다. 실루엣 계수는 다릅니다. k를 너무 잘게 쪼개면 옆 군집이 바싹 다가와 b가 작아지므로 값이 오히려 떨어집니다. 너무 적게 나누어도, 너무 잘게 나누어도 값이 떨어지므로 가장 좋은 지점이 그 사이에 생깁니다. 오렌지의 From X to Y가 k를 골라 줄 때 쓰는 값도 이것입니다.

둘 다 놓치는 것이 있습니다

두 잣대 모두 「중심에서 가깝다」와 「서로 가깝다」를 기준으로 삼습니다. 그래서 동글동글하게 뭉친 무리에는 잘 맞지만, 초승달처럼 휘어진 무리에는 사람 눈에 뚜렷한 두 무리인데도 낮은 점수를 줍니다.

점수가 낮다고 해서 「묶임이 없다」는 뜻은 아닙니다. 「k-평균이 잘 찾는 모양의 묶임은 아니다」라는 뜻일 수 있습니다. 반대로 점수가 높아도 그 묶음이 뜻이 있는지는 따로 판단해야 합니다. 점수는 점들이 서로 얼마나 가까운지를 측정했을 뿐, 바깥의 정답과 맞춰 본 값이 아니기 때문입니다. 그래서 숫자를 보기 전에 산점도를 먼저 그려 봅니다.

정리하면, k를 정할 때는 이렇게

  1. 산점도부터 그려 몇 덩어리로 보이는지 눈으로 확인한다.
  2. 엘보 그래프로 SSE가 꺾이는 지점을 찾는다.
  3. 실루엣 계수의 평균이 가장 큰 k를 확인한다.
  4. 셋이 어긋나면 무엇을 하려는 분석인지로 돌아가 판단한다.
스스로 확인

부스 여섯 개를 k = 6으로 묶으면 SSE는 0이 되어 완벽해 보입니다. 그런데 이때 실루엣 계수는 구할 수조차 없습니다. a를 구하려면 같은 군집의 다른 점이 있어야 하는데, 혼자뿐이라 측정할 대상이 없기 때문입니다. 이 사실이 두 잣대의 차이에 대해 무엇을 말해 주나요?

핵심 정리

좋은 군집의 두 조건

함께 봐야 한다

  • 군집 내 유사성 — 안쪽이 좁게 모여 있는가
  • 군집 간 상이성 — 군집끼리 멀리 떨어져 있는가
  • 하나만 보면 쓸모없는 답이 만점을 받는다

오차 제곱합

SSE · sum of squared errors

  • 각 점과 자기 중심점 사이 거리를 제곱해 모두 더한다
  • 군집 내 유사성만 본다. 작을수록 좁게 뭉쳤다
  • k를 키우면 계속 줄어 k = 데이터 개수면 0이 된다

엘보 그래프

elbow — 팔꿈치

  • k를 늘려 가며 SSE를 그린 선그래프
  • 줄어드는 속도가 꺾이는 지점이 알맞은 k
  • 실제로는 팔꿈치가 안 보이는 경우도 많다

실루엣 계수

silhouette coefficient

  • (b − a) ÷ 큰 값. a는 우리 편, b는 옆 동네와의 평균 거리
  • −1 ~ 1. 1이면 제자리, 0이면 경계, 음수면 엉뚱한 군집
  • 점마다 나오므로 애매한 점을 찾아낼 수 있다
  • SSE도 실루엣도 데이터 안에서 만든 점수라, 높아도 묶음에 뜻이 있다는 보장은 아니다

확인 퀴즈

배운 내용을 확인해 봅시다.

Q1

군집 분석에서 오차 제곱합(SSE)은 무엇을 더한 값인가?

Q2

「SSE가 작을수록 좋다」를 그대로 따라 k를 계속 키우면 어떻게 되나?

Q3

엘보 그래프에서 알맞은 k를 고르는 기준은?

Q4

어떤 데이터의 실루엣 계수가 0에 가까운 값으로 나왔습니다. 무슨 뜻인가?

Q5

SSE와 달리 실루엣 계수는 평균이 가장 큰 k를 후보로 삼을 수 있습니다. 그 까닭은?