지난주 지도학습에 이어 오늘은 비지도학습을 학습하였다.
지금까지는 데이터 분석을 통해 "정답이 있는" 결과를 찾는 학습을 하였다면, 오늘은 "정답이 없는" 패턴을 찾는것을 배운것이다.
클러스터링이란?????
강의 초반에 받은 설명이 정말 와닿았다.
현업에서 데이터분석가는 방대한 고객 DB를 받는다.
그 속에는 수백만 개의 고객 정보가 있는데, 우리는 이 고객들을 어떻게 묶을 것인가?
- 구독자와 미구독자로? (이미 정답이 있음 - 분류)
- 아니면 고객들의 특성에 따라 자연스러운 그룹을 찾아볼까? (정답이 없음 - 클러스터링)
클러스터링은 정답 없이 데이터 자체에서 의미 있는 그룹을 찾아내는 것이다.
지금까지 배운 분류(Classification)와 다른 점:
- 분류: "이 고객은 구독할 것인가?" (Yes/No 정해짐)
- 클러스터링: "고객들을 어떻게 나눌 것인가?" (정답 없음)
그래서 이름도 "비지도학습(Unsupervised Learning)"이다.
정답을 가르쳐주지 않기 때문이다.
정답이 없기에 클러스터링 프로세스는 정말 길다.
1단계: 데이터 전처리
먼저 기간을 정한다.
강의에서는 "최소 3개월 이상"이라고 했다.
왜일까?
단기 데이터는 노이즈가 많고, 충분한 패턴을 담지 못하기 때문이다.
그 다음은 이상치 제거인데, 여기서 4가지 방법이 나왔다:
- Z-Score부터 살펴봤다. 정규분포를 가정하고, 평균에서 표준편차의 몇 배 떨어져 있는지를 본다. ±3을 넘으면 이상치로 간주한다. 예를 들어 Z-score가 -2라면 평균보다 2 표준편차만큼 작다는 뜻이다.
- IQR은 정규분포를 가정하지 않는다. 대신 25% 지점과 75% 지점(사분위수)의 범위를 본다. 그 범위를 벗어나면 이상치다. 이건 상자수염그림(Box Plot)으로 시각화할 수 있어서 직관적이었다.
- Isolation Forest는 머신러닝 방식이다. 의외로 재미있었는데, 결정트리 형태로 데이터를 여러 번 분기시키다 보면 이상치는 빨리 분리된다는 원리다. 경로 길이가 짧을수록 이상치라는 뜻이다.
- DBScan은 밀도 기반이다. 주변에 포인트가 충분하면 정상, 없으면 이상치다. 지리 데이터나 이미지 분석에서 쓰인다고 했다.
그리고 표준화다. 강의에서는 Standard Scale을 권장했다. MinMax는 이상치에 약하기 때문이다. Standard Scale은 평균을 0으로, 표준편차를 1로 만들어주는데, 이렇게 하면 각 데이터의 상대적 위치가 명확해진다고 했다.
- 차원 축소(PCA).
고차원 데이터(컬럼이 많은 데이터)를 저차원으로 줄이되, 가장 큰 분산을 가진 축을 찾아낸다.
왜? 분산이 크다는 것은 정보를 많이 담고 있다는 뜻이기 때문이다.
PCA의 설명 분산 비율이라는 개념이 있다. 예를 들어 3개 주성분이 전체 분산의 95%를 설명한다면, 원래 10개 컬럼을 3개로 줄여도 95%의 정보를 유지한다는 뜻이다. 이 부분이 정말 똑똑한 기법이라고 생각했다.
2단계: 최적의 K값 찾기
K값이라는 게 "몇 개의 그룹으로 나눌 것인가"를 의미한다. 하지만 정답이 없다!
그래서 3가지 방법을 사용해서 판단한다:
Silhouette Coefficient는 -1부터 1 사이의 값을 가진다. 1에 가까울수록 군집이 잘 분리되었다는 뜻이다. 즉, 같은 군집 내 데이터들은 서로 가깝고, 다른 군집과는 멀다는 의미다.
Elbow Method는 시각적으로 보여준다. scree plot을 그려서 "꺾이는 지점"을 찾는다. 그 지점이 추천 K값이다. yellowbrick 라이브러리가 자동으로 해준다고 했다.
Distance Map은 군집 간 거리를 히트맵으로 보여준다. 색이 밝을수록 거리가 멀다는 뜻이다. 직관적으로 그룹들이 얼마나 떨어져 있는지 확인할 수 있다.
3단계: K-Means 알고리즘 적용
원리는 간단했다:
- K개의 중심점을 랜덤하게 설정
- 각 데이터를 가장 가까운 중심점에 할당
- 할당된 데이터들의 평균으로 중심점 이동
- 중심점이 변하지 않을 때까지 반복
수렴한다는 것이 신기했다. 계속 반복하다 보면 어느 순간 중심점이 움직이지 않는다. 그때가 최종 군집이다.
4단계: 결과 확인 및 반복
산점도를 그려서 군집이 잘 분리되었는지 본다. 만약 뭉쳐있으면 K값이나 피처를 다시 조정해서 반복한다.
강의에서 줄 세운 체크리스트가 현실적이었다:
- 한 명의 고객이 하나의 클러스터만 매핑되었는가?
- 결측치가 많지는 않은가?
- 0값이 많지는 않은가?
- 클러스터 비중이 너무 편향되진 않았는가?
이 모든 걸 확인하면서 최적의 조건을 찾아야 한다.
새로운 한주의 하루를 마무리하며...
지난 40일간 배운 것들은 모두 "이게 맞는가?"를 묻는 것들이었다. 신뢰구간, 가설검정, 분류... 다 Yes/No로 답할 수 있는 것들이다.
하지만 클러스터링은 다르다. "고객을 어떻게 나눌 것인가?"에는 한 가지 정답이 없다. 5개일 수도, 7개일 수도 있다. 그건 데이터와 비즈니스 맥락에 따라 다르다.
이게 더 창의적인 일인 것 같다. 기술만으로는 부족하고, 도메인 지식과 데이터에 대한 이해, 그리고 비즈니스 감각이 필요하다.
내일은 비지도학습 실습이 있는 날이다.
클러스터링 실습을 통해 어떻게 작동하는지 보면 조금 더 와닿을거 같다.
오늘 강의를 통해 배운것이 있다.
데이터 분석은 기술과 직관의 조화라는 것이다.