IT/컴퓨터프로그램

파이썬을 활용한 종합 금융 데이터 분석 프로젝트

chn1002 2024. 4. 29. 09:22

금융 시장의 동향을 파악하기 위해 다양한 데이터 소스를 통합하고 분석하는 것은 트레이더와 투자자에게 매우 중요합니다. 본 프로젝트에서는 파이썬을 사용하여 주식 데이터, Google Trends, 그리고 공시 정보를 분석하고 시각화하여 시장 예측에 활용합니다.

사용된 도구 및 라이브러리

  • FinanceDataReader: 주식 데이터를 가져옵니다.
  • Pytrends: Google Trends 데이터를 검색합니다.
  • TensorFlow와 Keras: 주식 가격 예측 모델을 구축합니다.
  • OpenDartReader: 공시 정보를 조회합니다.
  • Matplotlib: 데이터 시각화를 수행합니다.
  • Scikit-learn: 데이터 전처리와 모델링을 위한 도구입니다.

 

데이터 통합 및 분석 프로세스

  1. 주식 데이터 로딩: FinanceDataReader를 사용하여 특정 기간 동안의 주식 데이터를 로드합니다. 예를 들어, 삼성전자의 일별 주가 데이터를 가져옵니다.
  2. Google Trends 데이터 분석: Pytrends API를 활용하여 특정 키워드(예: "반도체")에 대한 Google 검색 트렌드를 분석합니다. 이 데이터는 시장의 관심도와 관련이 깊습니다.
  3. 데이터 시각화: matplotlib을 사용하여 주식 가격과 Google 검색 트렌드를 동시에 표시하여 두 데이터 소스 간의 상관관계를 시각적으로 분석합니다.
  4. 주식 가격 예측 모델: TensorFlow와 Keras를 사용하여 LSTM 기반의 시계열 예측 모델을 구축하고 훈련합니다. 이 모델은 미래의 주식 가격을 예측하는 데 사용됩니다.
  5. 공시 정보 분석: OpenDartReader를 통해 특정 회사의 주요 주주와 최근 공시 정보를 조회합니다. 이는 투자 결정에 중요한 정보를 제공합니다.

 

프로그램 구현

프로그램은 파이썬 스크립트로 구현되었으며, 주식 데이터의 추출부터 분석, 모델링, 시각화에 이르기까지의 전체 과정을 다룹니다. 구체적인 코드의 실행 과정은 다음과 같습니다.

주식 데이터 추출

def stockMain(val, strFromDay, strToDay):
    print("stockMain")
    symbol, name = stockCode(val)
    df = fdr.DataReader(symbol, strFromDay, strToDay)
    return df

이 함수는 FinanceDataReader를 사용하여 주식 데이터를 로드합니다. 사용자가 입력한 회사 이름에 해당하는 주식 코드를 찾고, 해당 기간 동안의 주가 데이터를 가져옵니다.

Google Trends 데이터 분석

def trendTimeMain(words, startDate, endDate):
    pytrends = TrendReq(hl="ko", tz=360)
    pytrends.build_payload(words, cat=0, timeframe=f"{startDate} {endDate}", geo="KR", gprop="")
    return pytrends.interest_over_time()

 

Pytrends 라이브러리를 사용하여 입력된 키워드에 대한 Google 검색 트렌드 데이터를 조회합니다. 이 데이터는 특정 기간 동안의 검색량 변화를 나타내며, 경제적 관심사의 변화를 이해하는 데 사용됩니다.

데이터 시각화

def pltStocknTrend(stockName, s_df, s_KOSPI_df, t_df, keywords):
    # 데이터 스케일링
    scaled_stock = pd.DataFrame(s_df['Close'])
    cointrendT = preprocessing.MinMaxScaler().fit_transform(scaled_stock)
    # 시각화
    fig = plt.figure(figsize=(16,14))
    axes = plt.subplot2grid((4,4),(0,0), rowspan=3,colspan=4)
    axes.plot(s_df.index, cointrendT, linewidth=1, label=stockName)
    axes.legend()
    plt.show()

주식 가격 데이터와 Google Trends 데이터를 함께 시각화하여 경제적 이벤트와 주식 가격 간의 상관관계를 분석합니다.

예측 모델 구축 및 훈련

def initModel(tr_d, test_d, y_test):
    model = Sequential([
        Conv1D(filters=32, kernel_size=5, padding="causal", activation="relu", input_shape=[WINDOW_SIZE, 1]),
        LSTM(16, activation='tanh'),
        Dense(16, activation="relu"),
        Dense(1),
    ])
    optimizer = Adam(0.0005)
    model.compile(loss=Huber(), optimizer=optimizer, metrics=['mse'])
    # 모델 학습
    checkpoint = ModelCheckpoint('model.h5', save_best_only=True)
    history = model.fit(tr_d, validation_data=(test_d), epochs=50, callbacks=[checkpoint])
    plt.figure(figsize=(12, 9))
    plt.plot(np.asarray(y_test)[20:], label='actual')
    plt.plot(pred, label='prediction')
    plt.legend()
    plt.show()

 

LSTM 기반의 딥러닝 모델을 사용하여 주식 가격을 예측합니다. 이 모델은 과거 데이터를 기반으로 미래 가격을 예측하는 데 사용됩니다.

 

프로젝트의 중요성 및 잠재적 활용

이 프로젝트는 데이터 주도적 접근 방식을 통해 금융 시장의 복잡한 동향을 이해하고 예측하는 데 중요합니다. 분석 결과는 개인 투자자가 보다 정보에 기반한 투자 결정을 내리는 데 도움을 줄 수 있습니다. 또한, 기업의 재무 분석가나 데이터 과학자에게도 유용한 리소스가 될 수 있습니다.