머신러닝 파이썬

주식 데이터를 사용하여 K-means 클러스터링을 구현하는 방법(feat. 파이썬, 3D 시각화, Elbow curve)

fast learner 2023. 4. 4. 16:04

안녕하세요, 여러분! 오늘은 주식 데이터를 사용하여 K-means 클러스터링을 구현하는 방법에 대해 알아보겠습니다. 이 글에서는 Tesla 주식 데이터를 이용해 클러스터링을 수행하며, 주식 데이터를 분석하는 데 도움이 되는 지표들을 사용해 보겠습니다. 먼저, 필요한 라이브러리들을 불러옵니다.

import matplotlib.pyplot as plt
import pandas as pd

다음으로, Tesla 주식 데이터를 불러와 날짜 형식을 변환합니다.

tsla = pd.read_csv('dataset/TSLA.csv')
tsla['Date'] = pd.to_datetime(tsla['Date'])
print(tsla.head())

이어서, 주가 데이터에 대한 이동평균을 계산합니다. 이동평균은 주식의 일정 기간 동안의 평균 가격을 매일 계산한 것으로, 주가의 변동성을 평균화하여 추세를 파악하기 쉽게 만드는 지표입니다.

for ma in [1, 3, 15, 25]:
    colname = "ma" + f"{ma}"
    tsla[colname] = tsla['Close'].rolling(window=ma).mean()

데이터를 클러스터링하기 전에, 최적의 클러스터 개수를 찾기 위해 엘보우 그래프를 그립니다. 이 과정에서, 클러스터 개수를 늘려가며 KMeans 객체를 생성하고 각각의 점수를 구합니다. 그래프를 통해 클러스터 개수가 증가할수록 점수가 급격하게 낮아지는 구간이 있을 것입니다. 이 구간의 마지막 클러스터 개수를 최적의 개수로 선택합니다.

from sklearn.cluster import KMeans

ncluster = range(1, 20)
kmeans = [KMeans(n_clusters=i).fit(data_numpy) for i in ncluster]
scores = [kmeans[i].score(data_numpy) for i in range(len(kmeans))]

fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(ncluster, scores, label='clusters vs kmean scores')
plt.legend()
plt.title('Elbow curve')
plt.show()

마지막으로, 클러스터링 결과를 3차원 그래프로 시각화합니다.

from mpl_toolkits.mplot3d import Axes3D

X = tsla[['Close', 'ma3', 'ma25']].dropna()
X = X.reset_index(drop=True)  # index starts from 0
km = KMeans(n_clusters=10)
km.fit(X)
labels = km.labels_

fig = plt.figure(figsize=(7, 7))
ax =Axes3D(fig)
ax.scatter(X.iloc[:, 0], X.iloc[:, 1], X.iloc[:, 2], c=labels.astype(np.float), edgecolor='k')
ax.set_xlabel('Close')
ax.set_ylabel('ma3')
ax.set_zlabel('ma25')
plt.title("K means", fontsize=4)
plt.show()

이제 위 코드를 실행하면, 테슬라 주식 데이터를 기반으로 K-평균 클러스터링 결과를 3차원 그래프로 확인할 수 있습니다. 여기서 X축은 종가(Close), Y축은 3일 이동 평균(ma3), 그리고 Z축은 25일 이동 평균(ma25)을 나타냅니다.

이 실습을 기반으로 해볼 만한 추가 연습을 두 가지 추천드리겠습니다.

1. 다른 주식 데이터로 실험해보기: 테슬라 주식 데이터 대신 다른 회사의 주식 데이터를 활용하여 코드를 실행해보세요. 그러면 어떤 차이점이 있는지 알아볼 수 있습니다.

2. 다른 클러스터링 알고리즘 사용해보기: K-평균 클러스터링 알고리즘 대신 다른 클러스터링 알고리즘을 적용해보세요. 예를 들어, DBSCAN, 계층적 클러스터링 등의 방법을 사용해보면 어떻게 결과가 달라지는지 확인할 수 있습니다.

이상으로 주식 데이터 분석과 시각화에 대한 실습을 마치겠습니다. 이 코드를 활용하여 여러분만의 데이터 분석 및 시각화 프로젝트를 진행해 보시길 바랍니다

728x90
반응형