2024. 2. 1. 15:35ㆍTIL
K-means Clustering
K-means Clustering은 'K-평균 군집화'라고 부르며 전체 데이터를 K개의 덩어리(클러스터)로 나누는 비지도 학습법이다. K-means 군집화 기법을 푸는 유명한 두 알고리즘은 로이드(Lloyd) 알고리즘, 엘칸(Elkan) 알고리즘이 있다. 로이드 알고리즘은 가장 기본적인 방법으로 초기화, 할당, 업데이트, 반복인 4가지 단계로 구성된다. 엘칸 알고리즘의 경우 데이터 포인트와 클러스터 중심 거리를 계산하는 과정에 삼각 부등식을 사용한다.
- 로이드 알고리즘 단계 - 초기화
- K개의 클러스터 중심점을 임의로 선택
- 초기 위치는 최종 결과에 큰 영향을 미칠 수 있음
- k-means++ 초기화 방법을 많이 사용
- 초기 중심점의 위치를 멀리 떨어지게 설정
- 임의의 랜덤 위치보다 좋은 결과를 보여줌
- 로이드 알고리즘 단계 - 할당
- 각 데이터 포인트를 가장 가까운 클러스터 중심에 할당
- 일반적으로 유클리드 거리를 기반으로 거리 계산을 진행
- 대안으로, 코사인 유사도나 맨해튼 거리
- 로이드 알고리즘 단계 - 업데이트
- 각 클러스터에 속한 데이터들의 평균점 위치로 클러스터 중심의 위치를 업데이트
- 로이드 알고리즘 단계 - 반복
- 클러스터 중심의 변화가 미미할 때까지 할당 과정과 업데이트 단계를 반복
- 변화가 미미함의 정의는
- 정말 위치의 변화가 없음
- 클러스터에 할당되는 데이터 포인트의 변화가 없음
- 동일한 데이터 포인트 할당 과정이 반복됨
- 지정된 횟수에 도달 등
만약 K가 너무 작다면 중요한 하위 그룹을 잘 포착하지 못할 수 있고 같은 클러스터 안에 서로 상당히 다른 데이터가 공존할 수 있으며 유의미한 인사이트를 얻기 어렵다. 또는 K가 너무 크다면 과적합, 해석의 어려움, 효율성 저하 같은 문제가 생긴다. 적절한 K을 고르는 방법을 엘보우 방법(Elbow Method)이라고 한다. 엘보우 방법은 클러스터 수를 늘려가며 각각에 대한 클러스터링 성능을 측정해, 클러스터 수에 따른 성능 변화를 분석한다. 클러스터 수(K)는 일반적으로 극히 작은 값(1)부터 매우 큰 값까지 사용한다. 클러스터링 성능은 SSE(Sum of Squared Errors)값을 활용한다. SSE는 각 클러스터 내의 데이트 포인트와 클러스터 중심 간 거리의 제곱 합이다. 즉, 데이터 포인트가 클러스터 중심에 얼마나 가까운지 나타낸다. SSE의 감소율이 급격히 줄어드는 지점을 최적 클러스터 수로 간주한다.
K의 수와 같은 중요 하이퍼파라미터를 튜닝해야 하기 때문에 군집화 성능 평가는 중요하다. 하지만 군집화와 같은 비지도 학습은 정답이 존재하지 않는 경우가 많아 성능을 측정이 쉽지 않다. 그럼에도 일반적으로 많이 사용하는 평가 척도는 SSE(Sum of Squared Errors)와 실루엣 계수(Silhouette Coefficient)가 있다. 실루엣 계수는 클러스터 안의 응집도와 서로 다른 클러스터 간의 분리도를 동시에 고려해 군집화의 품질을 평가하는 방법이다. 이 값은 -1에서 1사이의 값을 가지며, 높은 값일수록 좋은 클러스터링을 의미한다.
- 응집도 (Cohesion) : a(i)
- 특정 데이터 i에 대해, 동일한 클러스터 안에 들어있는 다른 데이터들과의 평균 거리
- 클러스터 내부의 데이터가 얼마나 모여있는지를 나타냄
- 분리도 (Separation) : b(i)
- 특정 데이터 i에 대해, i가 들어있는 클러스터 말고, 다른 클러스터 중 가장 가까운 클러스터 중심까지 거리
- 다른 클러스터와 얼마나 떨어져 있는지를 나타냄
- 실루엣 계수 : s(i)
- 최대값 : 1 → a(i)가 거의 0에 근접해 b(i)만 남는 상황 : 제일 좋은 상황
- 최솟값 : -1 → b(i)가 값이 작아지고 오히려 a(i)가 커지는 경우 : 제일 나쁜 상황

클러스터링 기법을 활용한 실습
Mall Customers 데이터셋(https://www.kaggle.com/datasets/kandij/mall-customers/)으로 실습을 해볼 것이다. 200명의 쇼핑몰 고객에 대한 정보 데이터가 있으며 고객 ID, 성별, 나이, 연간 소득, 쇼핑 점수(쇼핑 행동과 지출 성향을 기반으로 쇼핑몰에서 점수 부여) 변수를 포함한다. 풀어야 하는 문제는 주어진 고객 데이터를 바탕으로 고객을 세분화(Customer Segmentation) 군집화이다. 머신 러닝 모델의 입력은 고객 정보 데이터이고 출력은 클러스터링 결과이다. 실제 업무 환경에서는 고객 세분화로 끝나는 게 아니라 "타겟 마케팅 전략 수립, 신규 고객 유치 방법, 재고 관리 최적화”와 같은 더욱 깊이 있는 문제를 설계 혹은 그것을 위한 방법으로 머신 러닝 모델이 사용된다.
고객 ID는 수치형 데이터로 고유 식별자라 학습에서 제외하였다. 성별은 범주형 데이터로 인코딩 과정이 전처리로 필요하다. 나이, 연간 소득, 쇼핑 점수는 수치형 데이터로 각자 서로 다른 스케일을 갖고 있다. 거리 기반 군집화에서 스케일 매칭이 매우 중요한 요소이다. 성별 분포는 약간의 치우침이 있으나 비슷한 정도이다. 성별은 여성은 1, 남성은 0으로 이진 인코딩해주었다. 나이와 소득은 인구 통계학에 근거한 데이터에서 크게 벗어나고 있지 않다. 쇼핑 점수도 정규 분포를 어느 정도 모방한다. 상관관계 분석에서도 세 변수가 큰 상관관계를 갖고 있지 않다. 수치형 데이터는 Standard 스케일링이 더 적합해 보인다.
K값의 변화에 따른 SSE와 실루엣 계수를 확인해보았다. SSE에서는 점진적으로 값이 변화하나 그나마 K=4 혹은 K=6에서 감소율 변화가 있고 실루엣 계수는 K=6에서 최고값을 갖는다. 그래서 최적 K=6으로 선택하였다. 만약 실루엣 계수 간 차이가 크지 않다면 작은 K를 기준으로 하는 게 좋은 선택이다.
학습 결과로 나온 클러스터를 이용해 시각화를 할 수 있다. 일반적으로 사용한 데이터는 2차원 이상이므로 PCA 혹은 T-SNE 등의 방식을 활용해 2차원으로 차원 축소 가능하다. 클러스터 생성에서 그치지 않고 만들어진 클러스터가 어떤 의미가 있는지 도메인 지식을 이용해 추측해야 한다.
'TIL' 카테고리의 다른 글
| 딥러닝 (0) | 2024.02.02 |
|---|---|
| 이상탐지 (0) | 2024.02.01 |
| 비지도학습 알아보기 (1) | 2024.01.31 |
| SVD와 Decision Tree (0) | 2024.01.31 |
| 선형 회귀와 선형 분류 (1) | 2024.01.30 |