K-means
- 라이브러리 로드
- 데이터 로드
- 데이터 중 사용할 피처만 분리해서 로드
- 스케일링
- k 찾기 (엘보우/실루엣)
- K-means 실행
- 클러스터 결과 확인 후 클러스터 별로 데이터 해석
DBSCAN
- 라이브러리 로드
- 데이터 로드
- 데이터 중 사용할 피처만 분리해서 로드
- 스케일링
- eps 후보 찾기 (min_samples/k distance plot)
- DBSCAN 실행
- 클러스터/노이즈 결과 확인 후 클러스터/노이즈 별로 데이터 해석
- 이후 제일 적절한 결과로 선정(eps도 이 단계에서 확정)
거의 유사한 흐름으로 진행된다.
k 개수 찾기
- 일단 k 개수 찾기의 개념을 알아보자.
- 각 클러스터의 중심점 수가 k인데, 각 클러스터의 중심점에서 각 클러스터에 들어있는 데이터와의 '거리 제곱의 합'을 최소화할 수 있는 k의 개수를 찾는 것.
2. k 개수 찾기 방법은?
- 첫번째, 엘보우 그래프 만들기
- 각 클러스터 개수 별 거리 제곱의 합을 구한다. 클러스터 개수가 많아질수록 거리 제곱의 합(inertia)은 무조건 줄어든다. 하지만 몇 개까지 줄어야 가장 효과적인가를 찾기 위한 것이 그래프 시각화. 그래프 기울기가 팍팍 꺾이다가 완만해지는 그 지점을 보통 선택한다.
- 그러나, 가끔 4개도 좋아보이고 5개도 좋아보이는, 그런 애매한 지점이 나타난다. 그런 경우에는?
- 두번째, 실루엣 스코어 사용하기
- 실루엣 스코어란 응집도가 얼마나 좋은지 보여주는 척도. 응집이 실제로 잘 되었으면 최대 1, 안되었으면 최하 -1까지 된다. 한 점마다 실루엣 스코어를 계산해서, 모든 점의 스코어 평균을 계산하면 최종 실루엣 스코어가 됨!
- 계산식: (특정 점과 다른 클러스터의 모든 점과의 거리의 평균 중 가장 가까운 클러스터와의 거리평균(A) - 특정 점이 속하는 클러스터의 다른 점들과의 거리평균(B)) / MAX(A,B)
- 예를 들어, 특정 점이 해당되는 클러스터 점들과의 거리 평균이 1이고, 다른 클러스터와의 거리 평균을 쟀을때 최소값이 10이라고 하면, 해당 점의 실루엣 스코어는 (10-1)/10 = 0.9가 나옴. 그렇게 모든 점의 스코어를 구해서 평균내면 최종 스코어!
다만,
- 분포에 따라 실루엣 스코어가 낮아도 의미 있는 클러스터링이 되는 경우가 있으니 분포와 데이터의 특성을 함께 고려해야 함
- k도 유사하게 나오고 스코어도 유사하게 나온다면 일단 가장 작은 k로 시도해보자
- 그래도 좀 더 k를 정할 수 있는 기준이 필요하다면, 최종 클러스터 이후 결과물을 해석해서 몇 개의 클러스터가 더 비지니스적으로 유의미한지 고민해보자
eps 찾기 ("반지름 eps 안에 최소 min_samples 개의 점이 있으면, 그 점은 핵심점이다.")
- min_samples 설정: 최소한 군집안에 들어있어야 하는 샘플 수
- 정하는 법: 데이터 크기 고려, 데이터 차원 고려, 비지니스 의미 기준(최소 몇명 이상이 모여야 이 정책이나 액션이 의미가 있는지 스스로 질문하기)
- k-distance plot: 엘보우와 유사하게, 특정 지점에서 k번째 이웃까지의 거리를 계산하고, 모든 거리를 정렬해서 그래프로 만듦. 변곡점이 있는 즈음을 eps 값으로 고려한다.
'Python_Wiki > 머신러닝' 카테고리의 다른 글
| (포폴 다시 공부하기) 인스타카트 예측: 새제품 추천, 재구매제품 예측, 구매주기 예측 (0) | 2026.02.11 |
|---|---|
| 클러스터링 방법은 각각 언제 쓸까?_K-means vs. DBSCAN vs. 계층적 클러스터링 (feat. id 컬럼 포함 컬럼이 총 2개인데 클러스터링 쓰기) (0) | 2026.02.09 |