군집화

Clustering

방법

미리 정해 둔 칸 없이 비슷한 것끼리 묶어, 데이터 안에 어떤 덩어리가 있는지 찾아내는 과제입니다.

등장 배경

사용자를 몇 갈래로 나눌지는 오래도록 사람이 손으로 정했습니다. 가입 시기, 요금제, 회사 규모로 갈라 놓고 덩어리마다 다른 메시지를 보냈습니다.

그 기준이 이미 믿고 있던 것에서 나왔다는 게 걸림돌이었습니다. 페이지덱에서 지현이 "우리 제품을 실제로 어떻게 쓰고 있죠" 하고 물으면 답이 사람 수만큼 나왔습니다. 현우는 유입 경로로 갈랐고, 수아는 계약 규모로 갈랐고, 태오는 접속 빈도로 갈랐습니다. 셋 다 틀린 기준은 아니었지만, 확인하고 싶은 답을 미리 정해 두고 데이터를 거기 맞춰 자른 셈이라 몰랐던 사실은 한 건도 나오지 않았습니다.

군집화는 자르는 순서를 뒤집습니다. 기준을 먼저 정하지 않고, 기록이 비슷한 것끼리 저절로 붙게 둔 다음 붙어 나온 덩어리가 무엇인지를 나중에 읽습니다. 페이지덱 계정 5만 개를 사용 패턴만 보고 나눠 보면 회의록만 쓰는 팀과 제안서만 쓰는 팀이 갈려 나오는데, 이 선은 아무도 미리 긋지 않은 선입니다. 정답을 붙여 두지 않은 데이터에서 구조만 찾아내는 이런 방식을 비지도 학습이라고 부르고, 군집화가 그중 가장 많이 쓰이는 과제입니다.

사용 절차

묶을 대상을 정하고, 그 대상을 숫자로 바꾸고, 단위를 맞추고, 묶음 개수를 정해 돌린 다음, 나온 덩어리를 사람이 읽는 다섯 단계로 진행합니다.

  1. 무엇 하나를 한 점으로 볼지 정합니다. 계정 하나인지 사용자 한 명인지 문서 한 건인지에 따라 결과가 전혀 다른 이야기를 합니다. 페이지덱이 요금제를 손보려고 돌린다면 돈을 내는 단위인 계정이 점이 됩니다.
  2. 그 점을 숫자 묶음으로 바꿉니다. 기계는 계정 자체를 보지 못하고 피처, 그러니까 기록에서 뽑아낸 개별 입력 값만 봅니다. 하루 평균 문서 수, 초대한 사람 수, 댓글이 달린 문서의 비율, 템플릿을 쓴 비율 같은 값 네댓 개가 계정 하나를 대신합니다.
  3. 값의 단위를 맞춥니다. 하루 문서 수는 0에서 50 사이인데 초대 인원은 0에서 300 사이라면, 숫자가 큰 쪽이 거리 계산을 혼자 좌우합니다. 각 값을 0과 1 사이로 눌러 맞춘 뒤에야 네 값이 같은 무게로 들어갑니다.
  4. 묶는 방법과 묶음 개수를 정해 돌립니다. 가장 흔한 방법은 묶음의 중심점을 잡고 각 점을 가까운 중심에 붙이기를 반복하는 식인데, 이때 몇 개로 나눌지는 사람이 넣어 줘야 합니다. 3개부터 6개까지 각각 돌려 놓고 비교합니다.
  5. 나온 덩어리를 읽고 이름을 붙입니다. 기계는 1번 묶음, 2번 묶음이라고만 부릅니다. 1번 묶음의 계정들이 문서를 매일 여러 건 만들지만 초대는 거의 하지 않는다는 걸 확인하고 "혼자 쓰는 사용자" 라고 부르는 일은 사람 몫입니다.

3번부터 5번까지는 한 번에 끝나지 않습니다. 읽히지 않는 덩어리가 나오면 묶음 개수를 바꿔 보고, 그래도 안 되면 2번으로 돌아가 피처를 갈아 끼웁니다.

적합한 상황과 한계

무엇을 찾아야 할지 아직 모를 때가 군집화의 자리입니다. 이탈을 알아보려는데 어떤 유형의 사용자가 있는지부터 모르는 상황, 새 요금제의 구간을 어디서 끊어야 할지 근거가 없는 상황이 그렇습니다. 답을 확인하는 도구가 아니라 질문을 만드는 도구에 가깝습니다.

한계는 셋입니다. 첫째, 정답표가 없으니 맞았는지 틀렸는지를 채점할 방법이 없습니다. 같은 데이터에 4개로 나누라고 하면 4개가 나오고 7개로 나누라고 하면 7개가 나오는데, 어느 쪽이 진짜인지는 기계가 말해 주지 않습니다.

둘째, 넣어 준 피처가 결과를 통째로 정합니다. 접속 시간과 문서 수만 넣으면 많이 쓰는 팀과 적게 쓰는 팀으로 갈리고, 이건 돌려 보기 전부터 알던 사실입니다. 새로운 것이 나오려면 아직 아무도 나란히 놓고 보지 않은 값을 넣어야 합니다.

셋째, 덩어리가 갈렸다고 해서 그 구분이 쓸모 있다는 뜻은 아닙니다. 묶음마다 다르게 할 일이 떠오르지 않으면 보기 좋은 그림 한 장으로 끝납니다. 그래서 돌리기 전에 "묶음이 나오면 무엇을 다르게 할 것인가" 를 한 문장으로 적어 두고 시작하는 팀이 많습니다.

실무 용례

"계정 5만 개를 군집화해 봤더니 네 덩어리로 갈리네요. 회의록만 쓰는 팀이 그중 제일 큽니다."

사람이 정한 기준이 아니라 사용 기록이 저절로 갈라 준 유형이라는 뜻입니다.

"이건 군집화가 아니라 분류로 가야 할 것 같아요. 우리가 찾는 답이 이미 정해져 있잖아요."

넣을 칸이 미리 있으면 군집화 자리가 아니라는 지적입니다.

"묶음이 일곱 개 나왔는데 셋은 설명이 안 돼요. 피처부터 다시 봅시다."

결과가 읽히지 않을 때는 방법이 아니라 입력을 의심한다는 말입니다.

페이지덱이 요금제를 개편하기로 한 분기에 지현이 태오에게 부탁해 돌린 적이 있습니다. 나온 덩어리는 넷이었습니다. 문서를 매일 만들지만 남을 거의 초대하지 않는 계정, 초대 인원은 많은데 문서는 몇 건뿐인 계정, 특정 템플릿만 반복해서 쓰는 계정, 어느 쪽에도 속하지 않는 계정이었습니다. 두 번째 덩어리가 눈에 걸렸습니다. 사람은 많이 들어와 있는데 정작 쓰는 사람이 없다는 뜻이었고, 그 계정들이 다음 분기 해지의 절반을 차지했습니다.

왜 그런지는 수아가 그중 여덟 곳에 전화를 걸고 나서야 나왔습니다. 도입은 위에서 결정했는데 쓰는 법을 아무도 알려 주지 않은 팀들이었습니다. 군집화는 어디에 전화를 걸지를 정해 줬을 뿐입니다.

흔한 오해

갈라져 나온 묶음이 곧 쓸 수 있는 고객 구분이라고 읽는 경우가 가장 많습니다. 사람이 아니라 숫자가 그어 준 선이니 더 믿을 만해 보입니다. 하지만 기계가 그은 선은 넣어 준 값들 위에서 가까운 것끼리 붙인 결과일 뿐이고, 그 덩어리가 사업에서 의미가 있는지는 전혀 다른 질문입니다. 이 점을 넘기면 묶음에 그럴듯한 이름을 붙이고 덩어리마다 다른 메일을 보냈는데 반응은 이전과 똑같은 상태가 됩니다. 시장을 성격이 비슷한 덩어리로 나누는 세그멘테이션은 군집화 결과를 재료로 쓸 수 있지만, 재료가 곧 결과는 아닙니다.

묶음 개수를 기계가 알아서 정해 준다고 아는 것도 흔한 오해입니다. 정답 없이 알아서 찾는다고 하니 개수까지 찾아 줄 것 같지만, 널리 쓰이는 방법 대부분은 몇 개로 나눌지를 사람이 넣어야 돌아갑니다. 처음 돌린 값 하나를 그대로 받아들이면, 사실은 "5개로 나누라고 시켜서 5개가 나온 것" 을 "이 제품의 사용자는 다섯 유형" 이라는 사실처럼 문서에 적게 됩니다.

자주 헷갈리는 용어

용어답이 어떻게 생겼는가군집화와의 차이
분류미리 정해진 칸 가운데 하나칸이 먼저 있고 거기 넣는 일입니다. 문의가 환불 건인지 버그 건인지처럼 답의 목록을 이미 아는 자리에 씁니다. 사람이 붙여 둔 정답으로 학습시키므로 채점도 됩니다

같이 보면 좋은 페이지

  • 머신러닝

    군집화가 어느 갈래에 속한 과제인지, 옆에 어떤 과제들이 있는지 봅니다

  • 분류

    답의 목록을 아는 쪽의 과제입니다. 둘을 나란히 보면 어느 쪽을 써야 할지가 정해집니다

마지막 업데이트 2026-09-16