Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

Python으로 주가 추세 예측하기

권현욱(엑셀러) 2024. 1. 1. 20:00
반응형

파이썬을 사용하여 주가 추세를 예측할 수 있습니다. 파이썬은 재무 분석을 위한 강력한 도구이기도 합니다. 몇 줄의 코드만으로 주가 추세를 예측하고 정보에 입각한 결정을 내릴 수 있습니다.

 

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Predicting Stock Price Trends with Python: An Easy Guide
  • URL: https://wire.insiderfinance.io/predicting-stock-price-trends-with-python-an-easy-guide-f7f710d13bfb

주가 예측에 파이썬을 사용하는 이유

Python은 단순성과 가독성으로 잘 알려진 다용도 언어입니다. Prophet과 같은 방대한 라이브러리 생태계는 금융 분석가와 데이터 과학자가 선택하는 곳입니다. Python으로 주가 추세를 예측하면 다음을 수행할 수 있습니다.

 

  • 시장 움직임에 대한 통찰력을 얻을 수 있습니다.
  • 데이터 기반 투자 결정을 내립니다.
  • 미래 주가 시나리오를 시각화합니다.

 

환경 설정

시작하기 전에 가상 환경에 다음 라이브러리가 설치되어 있는지 확인하세요.

 

  • requests: 주식 데이터를 가져오기 위한 것입니다.
  • pandas: 데이터 조작용.
  • prophet: 주가를 예측하기 위한 것입니다.

 

pip를 사용하여 설치할 수 있습니다.

pip install requests pandas prophet

 

 

주식 데이터 가져오기

시작하려면 과거 주식 데이터가 필요합니다. 여기서는 FMP(Financial Modeling Prep) API를 사용합니다. Financial Modeling Prep은 금융 데이터를 얻기 위한 가장 신뢰할 수 있고 사용자 친화적인 플랫폼 중 하나로 돋보입니다. 이유는 다음과 같습니다.

 

  • 정확성 : FMP는 정확한 최신 데이터로 유명하므로 정확한 정보를 바탕으로 예측을 내릴 수 있습니다.
  • 사용 편의성 : 간단한 API를 통해 초보자도 문제 없이 데이터를 가져올 수 있습니다.
  • 종합 데이터 : FMP는 과거 주가부터 재무제표까지 광범위한 재무 데이터를 제공하여 분석가를 위한 원스톱 상점입니다.
  • 경제성 : 다른 플랫폼과 비교하여 FMP는 경쟁력 있는 가격을 제공하므로 전문가와 애호가 모두 큰 비용을 들이지 않고도 고품질 데이터에 액세스할 수 있습니다.

 

FMP 시작하기

  • 가입 : Financial Modeling Prep 웹사이트로 가서 무료 계정에 가입합니다. 또한 추가 혜택이 포함된 프리미엄 플랜도 제공하므로 필요에 따라 적합한 플랜을 선택하세요.
  • API 키 생성 : 로그인한 후 API 섹션으로 이동합니다. 여기에서 고유한 API 키를 생성하여 Python 환경으로 직접 데이터를 가져올 수 있습니다.

 

import requests

symbol = "AAPL"
from_date = "2022-01-01"
to_date = "2023-08-01"
url = f"https://financialmodelingprep.com/api/v3/historical-price-full/{symbol}?from={from_date}&to={to_date}&apikey={FMP_API_KEY}"

def fetch_data(url):
    response = requests.get(url).json()
    return response

 

데이터 전처리

데이터가 확보되면 Prophet 모델과의 호환성을 위해 전처리(preprocess)하는 것이 필수적입니다.

import pandas as pd

def preprocess_data(data):
    df = pd.DataFrame(data["historical"])
    df.reset_index(inplace=True)
    df.rename(columns={'date': 'ds', 'adjClose': 'y'}, inplace=True)
    return df

 

모델 훈련

데이터가 준비되었으면 Prophet 모델을 훈련해 보겠습니다.

Prophet이란 무엇인가?

Prophet은 일일 주식 데이터를 처리하고 휴일과 주말을 설명할 수 있는 강력한 예측 도구입니다. Meta에서 개발한 Prophet은 계절적 영향이 클 수 있는 시계열 데이터용으로 설계된 강력한 예측 도구입니다. 주가에 영향을 미칠 수 있는 휴일 및 주말을 처리할 수 있기 때문에 주가 예측과 같은 비즈니스 애플리케이션에 특히 유용합니다.

from prophet import Prophet

def train_prophet_model(data):
    model = Prophet(
        changepoint_prior_scale=0.05,
        holidays_prior_scale=15,
        seasonality_prior_scale=10,
        weekly_seasonality=True,
        yearly_seasonality=True,
        daily_seasonality=False
    )
    model.add_country_holidays(country_name='US')
    model.fit(data)
    return model

 

예측 생성 및 시각화

내년에 대한 예측을 생성하고 시각화해 보겠습니다.

def generate_forecast(model, periods=365):
    future = model.make_future_dataframe(periods=periods)
    forecast = model.predict(future)
    return forecast

def plot_forecast(model, forecast):
    model.plot(forecast)

 

Matplotlib 차트로 출력

천 마디 말보다 한 장의 그림이 더 중요할 수 있습니다. 특히 금융 데이터의 경우 더욱 그렇습니다. 예측을 시각화하면 잠재적인 주가 변동을 더 명확하게 이해할 수 있습니다. 우리의 예측이 차트에 어떻게 나타나는지 살펴보겠습니다.

 

 

하이퍼파라미터를 개선하면 예측의 정확도를 높일 수 있습니다. 결과에 관심이 있는 경우 Stock Telegraph의 AAPL 예측 페이지 확인해 보세요.

 

모든 것을 하나로 모으기

모든 기능을 결합하여 2022-01-01부터 2023-08-01까지 Apple(AAPL)의 주가 추세를 예측해 보겠습니다. 코드에 대해 더 자세히 알아보고 더 많은 기능을 탐색하는 데 관심이 있는 경우 GitHub 저장소에서 전체 코드와 추가 리소스를 찾을 수 있습니다.

import os

import pandas as pd
import requests
from prophet import Prophet

FMP_API_KEY = os.getenv("FMP_API_KEY")


def fetch_data(url):
    """Fetches data from the given URL and returns the JSON response.

    Args:
        url (str): The URL to fetch data from.

    Returns:
        dict: JSON response from the API.
    """
    response = requests.get(url).json()
    return response


def preprocess_data(data):
    """Preprocesses the historical data for compatibility with Prophet model.

    Args:
        data (dict): The historical data in dictionary format.

    Returns:
        pd.DataFrame: Processed DataFrame with renamed columns.
    """
    df = pd.DataFrame(data["historical"])
    df.reset_index(inplace=True)
    df.rename(columns={"date": "ds", "adjClose": "y"}, inplace=True)
    return df


def train_prophet_model(data):
    """Trains a Prophet model on the provided data.

    Args:
        data (pd.DataFrame): Processed DataFrame with 'ds' and 'y' columns.

    Returns:
        Prophet: Trained Prophet model.
    """
    model = Prophet(
        changepoint_prior_scale=0.05,
        holidays_prior_scale=15,
        seasonality_prior_scale=10,
        weekly_seasonality=True,
        yearly_seasonality=True,
        daily_seasonality=False,
    )
    model.add_country_holidays(country_name="US")
    model.fit(data)
    return model


def generate_forecast(model, periods=365):
    """Generates forecasts using the trained Prophet model.

    Args:
        model (Prophet): Trained Prophet model.
        periods (int): Number of periods to forecast into the future.

    Returns:
        pd.DataFrame: DataFrame containing forecasted values.
    """
    future = model.make_future_dataframe(periods=periods)
    forecast = model.predict(future)
    return forecast


def plot_forecast(model, forecast):
    """Plots the forecast generated by the Prophet model.

    Args:
        model (Prophet): Trained Prophet model.
        forecast (pd.DataFrame): DataFrame containing forecasted values.
    """
    model.plot(forecast)


def main():
    symbol = "AAPL"
    from_date = "2022-01-01"
    to_date = "2023-08-01"
    URL = f"https://financialmodelingprep.com/api/v3/historical-price-full/{symbol}?from={from_date}&to={to_date}&apikey={FMP_API_KEY}"

    # Fetch data
    data = fetch_data(URL)

    # Preprocess data
    df = preprocess_data(data)

    # Train Prophet model
    model = train_prophet_model(df)

    # Generate forecast
    forecast = generate_forecast(model)

    # Plot forecast
    plot_forecast(model, forecast)


if __name__ == "__main__":
    main()

 

결론

파이썬으로 주가 추세를 예측하는 것은 단순히 기술에 능숙한 것이 아니라 현명한 행동입니다. Prophet과 같은 도구를 사용하면 주식 시장 게임에서 앞서 나갈 수 있습니다. 더 이상 기다릴 필요가 없습니다. 지금 바로 예측을 시작하세요.