Prophet은 다음을 고려하지 못합니다:
- 기업 실적 발표
- 경제 지표 변화
- 국제 정세
- 시장 심리
- 산업 트렌드
따라서 주식 예측에는 한계가 있으며, 교육/학습 목적으로만 사용해야 합니다.
TL;DR: 본 문서는 Python을 이용해 삼성전자 주가 데이터를 수집하고, Prophet 라이브러리로 시계열 예측 모델을 만드는 방법을 다룹니다. yfinance 라이브러리로 삼성전자(티커: 005930.KS)의 과거 주가 데이터를 다운로드합니다. 이후 Prophet 모델이 요구하는 형식(ds, y 컬럼)에 맞게 데이터를 전처리합니다. 모델을 학습시킨 후, 미래 기간에 대한 주가를 예측하고 matplotlib을 통해 결과를 시각화하여 추세와 계절성을 확인하는 과정을 포함합니다. 이 가이드는 금융 데이터 분석 및 시계열 예측의 기초를 다루는 실무자에게 유용합니다.
서론: Prophet을 이용한 시계열 예측의 중요성
금융 시장에서 주가 예측은 가장 도전적이고 흥미로운 분야 중 하나입니다. Prophet은 Meta(구 Facebook)에서 개발한 오픈소스 시계열 예측 라이브러리로, 복잡한 시계열 데이터를 비교적 간단하게 모델링하고 예측할 수 있도록 설계되었습니다. 특히 계절성(Seasonality)과 추세(Trend), 휴일 효과를 잘 처리하여 비전문가도 쉽게 사용할 수 있다는 장점이 있습니다.
이 글에서는 파이썬 환경에서 삼성전자 주가 데이터를 yfinance 라이브러리를 통해 가져오고, Prophet 모델을 활용하여 미래 주가를 예측하는 전체 과정을 단계별 예제 코드와 함께 상세히 설명합니다.
Why it matters: Prophet은 기존의 복잡한 시계열 모델(ARIMA 등)에 비해 직관적이고 사용하기 쉬우며, 준수한 성능을 보여줍니다. 실무자들이 복잡한 튜닝 없이 빠르게 시계열 데이터의 패턴을 파악하고 미래를 예측하는 프로토타입을 만들 때 매우 유용합니다.
1단계: 개발 환경 설정 및 라이브러리 설치
가장 먼저 필요한 파이썬 라이브러리들을 설치해야 합니다. 데이터 분석에는 pandas, 주가 수집에는 yfinance, 시계열 예측에는 prophet, 결과 시각화에는 matplotlib이 사용됩니다.
!pip install pandas yfinance prophet matplotlib -q
설치가 완료되면, 필요한 라이브러리들을 임포트합니다.
import pandas as pd
import yfinance as yf
from prophet import Prophet
import matplotlib.pyplot as plt
Why it matters: 정확한 버전의 라이브러리를 설치하고 프로젝트를 시작하는 것은 재현 가능하고 안정적인 분석 환경을 구축하는 첫걸음입니다. 각 라이브러리는 특정 역할을 수행하므로, 누락 없이 모두 설치하는 것이 중요합니다.
2단계: yfinance로 삼성전자 주가 데이터 가져오기
yfinance는 Yahoo Finance API를 통해 주식 데이터를 간편하게 다운로드할 수 있는 라이브러리입니다. 삼성전자의 티커(Ticker)는 '005930.KS'입니다. yf.download() 함수를 사용하여 지난 5년간의 데이터를 가져오겠습니다.
# 삼성전자 티커
ticker = '005930.KS'
# 데이터 다운로드 (예: 2020-01-01부터 2025-10-10까지)
start_date = '2020-01-01'
end_date = '2025-10-10'
data = yf.download(ticker, start=start_date, end=end_date)
# 데이터 앞부분 5개 확인
print(data.sort_index(ascending=False).head())
Date | Close | High | Low | Open | Volume |
2025.10.2 | 89,750 | 90,300 | 88,700 | 89,300 | 49,883,028 |
2025.10.1 | 86,000 | 86,200 | 84,700 | 84,900 | 22,039,361 |
2025.9.30 | 83,900 | 84,900 | 83,400 | 84,600 | 16,319,061 |
2025.9.29 | 84,200 | 85,000 | 83,200 | 83,300 | 13,069,094 |
2025.9.26 | 83,300 | 85,300 | 82,400 | 85,000 | 24,071,193 |
다운로드된 데이터는 시가(Open), 고가(High), 저가(Low), 종가(Close), 수정 종가(Adj Close), 거래량(Volume) 컬럼으로 구성된 Pandas DataFrame 형태입니다.
Why it matters: 정확하고 신뢰할 수 있는 과거 데이터를 확보하는 것은 예측 모델의 성능을 좌우하는 핵심 요소입니다. yfinance를 사용하면 단 몇 줄의 코드로 표준화된 금융 데이터를 손쉽게 얻을 수 있습니다.
3단계: Prophet 모델을 위한 데이터 전처리
Prophet 모델은 특정 형식의 입력 데이터를 요구합니다. 바로 날짜 정보가 있는 ds 컬럼과 예측할 값(여기서는 종가)이 담긴 y 컬럼입니다. 다운로드한 데이터를 이 형식에 맞게 가공해야 합니다.
# 날짜 인덱스를 컬럼으로 변환
df = data.reset_index()
# 필요한 컬럼만 선택하고 이름 변경
df = df[['Date', 'Close']].rename(columns={'Date': 'ds', 'Close': 'y'})
# MultiIndex 컬럼 문제 해결 (yfinance가 반환하는 데이터 구조 때문)
if isinstance(df.columns, pd.MultiIndex):
df.columns = df.columns.get_level_values(0)
# ds 컬럼을 datetime 형식으로 변환
df['ds'] = pd.to_datetime(df['ds'])
# y 컬럼을 숫자형으로 명시적 변환 및 평탄화
df['y'] = df['y'].values.flatten()
# NaN 값 제거
df = df.dropna()
# 데이터 확인
print(df.sort_index(ascending=False).head())
Price | ds | y |
1412 | 2025.10.2 | 89,750 |
1411 | 2025.10.1 | 86,000 |
1410 | 2025.9.30 | 83,900 |
1409 | 2025.9.29 | 84,200 |
1408 | 2025.9.26 | 83,300 |
Why it matters: 데이터 전처리는 모델링에서 가장 많은 시간이 소요될 수 있는 중요한 단계입니다. 모델의 요구사항에 맞게 데이터를 정확히 변환해야만 오류 없이 모델 학습을 진행할 수 있습니다.
4단계: Prophet 모델 학습 및 미래 예측
데이터 준비가 완료되었으면 Prophet 모델을 생성하고 학습시킬 차례입니다. 모델 객체를 생성한 후 fit() 메소드를 호출하여 데이터를 학습시킵니다.
# Prophet 모델 생성 (한국 공휴일 포함)
model = Prophet(daily_seasonality=True)
model.add_country_holidays(country_name='KR')
# 모델 학습
model.fit(df)
학습이 완료되면, make_future_dataframe() 함수를 사용해 예측을 수행할 미래 기간을 정의합니다. 예를 들어, 향후 365일(1년)을 예측해 보겠습니다.
# 미래 365일 예측
future = model.make_future_dataframe(periods=365)
# 예측 실행
forecast = model.predict(future)
# 예측 결과 확인 (마지막 5개 행)
display(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
ds | yhat | yhat_lower | yhat_upper | |
1773 | 2026.9.28 | 52,281.35667 | 37,493.68425 | 66,900.36074 |
1774 | 2026.9.29 | 52,182.02656 | 37,075.11049 | 68,163.16971 |
1775 | 2026.9.30 | 51,775.90743 | 37,543.43204 | 68,660.54809 |
1776 | 2026.10.1 | 51,368.63271 | 37,018.00412 | 67,333.97566 |
1777 | 2026.10.2 | 50,699.6975 | 35,662.37866 | 65,590.34719 |
forecast DataFrame에는 예측값(yhat)과 예측의 불확실성을 나타내는 신뢰구간(yhat_lower, yhat_upper)이 포함됩니다.
Why it matters: 모델 학습과 예측은 시계열 분석의 핵심입니다. Prophet은 이 과정을 단 몇 줄의 코드로 단순화하여, 사용자가 복잡한 수학적 이론 대신 데이터와 예측 결과 해석에 집중할 수 있도록 돕습니다.
5단계: 예측 결과 시각화
마지막으로 예측 결과를 시각화하여 모델이 데이터를 어떻게 학습했고 미래를 어떻게 전망하는지 직관적으로 확인합니다. Prophet은 plot()과 plot_components()라는 편리한 시각화 함수를 제공합니다.
# 예측 결과 그래프
fig1 = model.plot(forecast)
plt.title('Samsung Electronics Stock Price Forecast')
plt.xlabel('Date')
plt.ylabel('Close Price (KRW)')
plt.show()
위 그래프는 과거 데이터(검은 점), 예측값(파란 선), 신뢰구간(하늘색 영역)을 함께 보여줍니다.
# 예측 성분 분해 그래프
fig2 = model.plot_components(forecast)
plt.show()
plot_components는 데이터의 전반적인 추세(Trend), 연간 계절성(Yearly seasonality), 주간 계절성(Weekly seasonality)을 시각적으로 분해하여 보여줍니다. 이를 통해 주가가 특정 요일이나 월에 어떤 패턴을 보이는지 파악할 수 있습니다.
Why it matters: 시각화는 숫자만으로는 파악하기 어려운 데이터의 패턴과 모델의 예측 결과를 명확하게 이해하는 데 필수적입니다. 특히 성분 분해 그래프는 예측 결과의 근거를 해석하는 데 중요한 단서를 제공합니다.
결론 및 주의사항
본 문서에서는 파이썬의 yfinance와 Prophet 라이브러리를 사용하여 삼성전자 주가를 가져와 예측하는 전 과정을 살펴보았습니다. 이 방법론은 다른 주식이나 시계열 데이터에도 쉽게 적용할 수 있는 강력한 프레임워크를 제공합니다.
다만, 주가 예측은 시장 심리, 경제 지표, 기업 뉴스 등 예측 모델에 포함되지 않은 수많은 외부 변수에 의해 영향을 받습니다. 따라서 이 모델은 학습용 및 기술 시연용으로 참고해야 하며, 실제 투자 결정의 근거로 사용해서는 안 됩니다.
**면책조항**
본 예측 모델은 교육 및 학습 목적으로만 제작되었습니다. 실제 투자에 활용 시 발생하는 손실에 대해 어떠한 책임도 지지 않습니다. 투자 결정은 반드시 전문가와 상담하고 자신의 판단 하에 신중하게 결정하시기 바랍니다.
'개발 창고 > AI' 카테고리의 다른 글
딥러닝의 핵심 메커니즘, Attention의 원리와 Transformer 아키텍처 이해 (0) | 2025.10.15 |
---|---|
알리바바의 Qwen3-VL-30B-A3B: 효율성과 성능을 모두 갖춘 오픈소스 멀티모달 AI 혁신 분석 (1) | 2025.10.11 |
ML 성능과 효율을 동시에, LoRA(Low-Rank Adaptation) 완벽 분석 (1) | 2025.10.07 |
에이전틱 AI(Agentic AI)란? 스스로 생각하고 행동하는 AI 에이전트 개념, 사례 총정리 (2) | 2025.10.06 |
텐센트 Hunyuan-DiT: Sora와 동일 아키텍처의 이미지 생성 AI (3) | 2025.10.04 |