~숫자만 보고 주식을 나누다: K-means 클러스터링 과정~ 스톡잇! 개발기 #4

2025. 12. 25. 16:46·모의투자
"숫자만 보고 주식을 나누다: 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: 각 그룹의 평균(중심점)

작동 방식은 단순하지만 강력합니다.

  1. K개의 중심점을 무작위로 설정
  2. 각 주식을 가장 가까운 중심점에 배정
  3. 배정된 주식들의 평균 위치로 중심 이동
  4. 중심이 더 이상 크게 움직이지 않을 때까지 반복

이 과정을 통해
숫자 패턴이 가장 비슷한 주식들끼리 자연스럽게 묶입니다.

중요한 점은,

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
'모의투자' 카테고리의 다른 글
  • ~투자 성향을 캐릭터로 만들다: 페르소나 매칭 설계~ 스톡잇! 개발기 #6
  • ~숫자를 언어로 번역하다 : 태깅~ 스톡잇! 개발기 #5
  • ~학습에 적합한 형태로 변환하다 : 전처리 과정~ 스톡잇! 개발기 #3
  • ~정답이 없는 주식 분류 문제, 왜 클러스터링을 선택했을까?~ 스톡잇! 개발기 #2
MacArthur17
MacArthur17
Mac(Arthur)hine Learning
  • MacArthur17
    Human Learning LAB
    MacArthur17
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • 모의투자 (32)
      • 분산 시스템 (2)
      • 테커 부트캠프 (20)
      • 백준문제 (24)
      • 공부일기 (0)
      • 후기 (3)
      • 팁 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
MacArthur17
~숫자만 보고 주식을 나누다: K-means 클러스터링 과정~ 스톡잇! 개발기 #4
상단으로

티스토리툴바