"숫자만 보고 주식을 나누다: K-means 클러스터링 과정"
지난 글에서 저는 3,619개의 주식 데이터를
- 쓰레기 데이터를 제거하고
- 극단치를 정리하고
- 스케일링을 통해 벡터로 변환했습니다.
그 결과 남은 것은 단 하나였습니다.
AI가 학습할 수 있는 숫자 행렬
하지만 중요한 사실 하나.
👉 여기까지는 아직 ‘학습’이 아닙니다.
지금까지의 과정은 전부
AI가 판단을 내릴 수 있도록 환경을 만들어준 단계일 뿐입니다.
이제부터가 진짜입니다.
이제 왜 ‘K-Means’인가
이미 2편에서 이야기했듯이,
Stockit은 정답이 없는 주식 분류 문제를 다룹니다.
- 우량주 / 성장주라는 정답이 없음
- 사람이 기준선을 정하지 않음
- 오직 숫자의 패턴만 존재
이 조건에서 선택한 방식이
비지도 학습 기반의 K-Means 클러스터링이었습니다.
클러스터링 자체에 대한 설명은 2편에서 충분히 다뤘기 때문에,
이번 글에서는 왜 하필 K-Means였는지에 집중해보겠습니다.
왜 K-Means를 선택했을까?
클러스터링 알고리즘은 생각보다 많습니다.
- DBSCAN
- Hierarchical Clustering
- Gaussian Mixture Model
- 그리고 K-Means
그중 K-Means를 선택한 이유는 명확합니다.
- 결과 구조가 직관적이다
- 각 그룹의 “중심값”으로 해석이 가능하다
- 금융 데이터 분석에서 활용 사례가 많다
- 무엇보다 “왜 이렇게 나뉘었는지 설명할 수 있다”
Stockit에서 중요한 것은
정확한 수식보다 설명 가능성이었습니다.
“AI가 알아서 분류했다”가 아니라
“이 숫자 패턴 때문에 이렇게 묶였다”라고 말할 수 있어야 했습니다.
K-Means는 어떻게 주식을 나누는가
K-Means는 이름 그대로입니다.
- K: 나눌 그룹의 개수
- Means: 각 그룹의 평균(중심점)
작동 방식은 단순하지만 강력합니다.
- K개의 중심점을 무작위로 설정
- 각 주식을 가장 가까운 중심점에 배정
- 배정된 주식들의 평균 위치로 중심 이동
- 중심이 더 이상 크게 움직이지 않을 때까지 반복
이 과정을 통해
숫자 패턴이 가장 비슷한 주식들끼리 자연스럽게 묶입니다.
중요한 점은,
AI는
이 그룹이 성장주인지, 우량주인지 전혀 모른다는 것입니다.
그저
“이 숫자 조합은 서로 비슷하다”
라고 판단했을 뿐입니다.
K는 어떻게 정했을까? (엘보우 방식)
K-Means의 유일한 단점은 이것입니다.
👉 K를 사람이 정해야 한다
그래서 사용한 방법이
엘보우(Elbow) 방식입니다.
엘보우 방식은 다음과 같습니다.
- K를 1부터 점점 늘려가며
- 각 경우의 비용(Inertia)을 계산
- 비용 감소 폭이 급격히 줄어드는 지점을 찾음
비유하자면,
그룹을 늘릴수록 정리는 잘 되지만
어느 순간부터는 노력 대비 효율이 급격히 떨어집니다.
그 꺾이는 지점이 팔꿈치처럼 보여
엘보우 방식이라고 부릅니다.
Stockit 데이터에서는
K = 8에서 이 꺾임이 가장 명확하게 나타났습니다.
K-Means 학습 코드 해부
이제 실제 학습 코드입니다.
model = KMeans(
n_clusters=K,
n_init='auto',
random_state=42
)
model.fit(features_scaled)
하나씩 보면,
- n_clusters=K
→ “K개의 그룹으로 나눠라” - random_state=42
→ 매번 같은 결과를 얻기 위한 설정
→ 디버깅과 재현성을 위해 필수 - model.fit(features_scaled)
→ 이 한 줄에서 모든 계산이 시작됩니다
👉 이 순간이
Stockit 프로젝트에서의 첫 번째 ‘진짜 학습’입니다.
AI가 나눈 8개의 주식 그룹
학습이 끝나면
각 주식에는 그룹 번호가 붙습니다.

| 그룹 번호 | 종목 수 |
| 0 | 74 |
| 1 | 91 |
| 2 | 35 |
| 3 | 65 |
| 4 | 18 |
| 5 | 18 |
| 6 | 158 |
| 7 | 41 |
| 총계 | 500 |
다시 한 번 강조하지만,
AI는 이 그룹이 무엇을 의미하는지 모릅니다.
단지 숫자 패턴이 비슷한 주식들끼리 묶었을 뿐입니다.
이 숫자들이 의미하는 것
이제 여기서부터는
다시 사람의 역할입니다.
- 어떤 그룹은 ROE와 PER이 높고
- 어떤 그룹은 부채비율과 PBR이 낮을 수 있습니다
이 패턴을 해석하며,
- “이 그룹은 안정형이다”
- “이 그룹은 고성장 기대주다”
같은 의미를 부여하는 단계로 넘어갑니다.

다음 글에서는 이 8개의 그룹을 하나씩 살펴보며, “숫자를 언어로 번역하다”에 대해 다뤄보겠습니다.
'모의투자' 카테고리의 다른 글
| ~투자 성향을 캐릭터로 만들다: 페르소나 매칭 설계~ 스톡잇! 개발기 #6 (0) | 2025.12.26 |
|---|---|
| ~숫자를 언어로 번역하다 : 태깅~ 스톡잇! 개발기 #5 (1) | 2025.12.26 |
| ~학습에 적합한 형태로 변환하다 : 전처리 과정~ 스톡잇! 개발기 #3 (0) | 2025.12.18 |
| ~정답이 없는 주식 분류 문제, 왜 클러스터링을 선택했을까?~ 스톡잇! 개발기 #2 (0) | 2025.12.18 |
| ~3,619개의 주식, if문(Rule-Base)으로 분류할 수 있을까?~ 스톡잇! 개발기 #1 (1) | 2025.12.17 |