데이터로 Deep Dive

데이터 분석과 개발 경험을 공유합니다.

프로젝트 꾸러미

머신러닝과 ChatGPT로 테슬라 주식 가격 예측하기: 2) 뉴스 헤드라인으로 감성분석 비교하기

Marlangcow 2025. 3. 22. 22:35

앞전 포스팅에서는

'테슬라'의 주가를 가지고 예측해 보았다. 

- 머신러닝과 ChatGPT로 테슬라 주식 가격 예측하기: 1) 랜덤 포레스트, XGBoost, 앙상블 및 LSTM 모델링

 

머신러닝과 ChatGPT로 테슬라 주식 가격 예측하기: 1) 랜덤 포레스트, XGBoost, 앙상블 및 LSTM 모델링

'금융' 관련 머신러닝 사례를 찾아보다가 ChatGPT로 주식 가격과 코인 가격을 예측해 본 아티클을 발견했다.  찬찬히 읽어보았는데,시도해보면 재미있을 것 같아서 테슬라로 간단히 시도해보았

nanini.tistory.com

 

이번 포스팅에서는 '테슬라'의 뉴스 헤드라인으로

감성분석을 하여 주가 예측을 해보고자 한다. 

 

참고한 내용은 카카오뱅크 기술기획팀 William께서 발행한 포스팅이다. 

-> ChatGPT로 주식 가격 예측하기

 

ChatGPT로 주식 가격 예측하기

OpenAI의 ChatGPT가 금융시장 분석에 미치는 영향을 연구한 최신 논문을 소개합니다. 이 논문은 ChatGPT를 활용한 뉴스 감성 분석이 주식 시장 예측에 얼마나 효과적인지 실증적으로 검토합니다. 카카

tech.kakaobank.com

 

 

이번 포스팅의 전반적인 흐름은 다음과 같다.

 

그리고 마음같아선 관련 뉴스 몇 개월치를 몽땅 수집해서 ChatGPT로 돌리고 싶었으나

크롤링의 제한과 금전적인 한계로 인해

가능한 수준에서 가볍게 진행해보았다. 

  1. 테슬라 관련 뉴스 헤드라인 수집 -> 네이버 뉴스 30일 
  2. 다양한 감성 분석 방법 적용:
    • VADER(Valence Aware Dictionary and sEntiment Reasoner)
    • FinBERT(금융 뉴스에 특화된 BERT 모델)
    • KR-FinBert(한국어 금융 뉴스 특화 BERT 모델)
    • OpenAI(감성분석)
    • 감성 점수를 기반으로 주가 방향성 예측

OpenAI API를 활용한 감성 분석

 

'테슬라' 뉴스 헤드라인 수집

 

먼저 뉴스 헤드라인을 수집하기 위해

News API를 사용했는데 '무료' 버전은 많은 뉴스를 가져오지 못했다. 

그래서 

'테슬라' 주가를 가져왔을 때 처럼 yfinance API로 다시 시도했으나

마찬가지로 원하는 양의 뉴스를 가져오지 못했다. 

 

생각해 보니 네이버 뉴스가 영문 뉴스를 번역해서 가져오기도 하고, 

또 한국 주주들이 좋아하는 종목 중 하나가 '테슬라'니까 

네이버 뉴스를 가져오자...!

 

그래서

'BeautifulSoup'으로 

네이버 검색창에 '테슬라'로 검색했을 때 뉴스의 '날짜'와 '제목(헤드라인)'을 수집하도록 했는데, 

기간은 30일로 설정하고, 수집된 데이터는 DataFrame 형태로 반환되도록 했다.

 

 

더보기
import requests
from bs4 import BeautifulSoup
import pandas as pd
import datetime
import time

def get_naver_news(keyword, days=30, max_pages=3):
    """ 네이버 뉴스에서 특정 키워드(예: 테슬라)로 30일치 뉴스 크롤링 """
    base_url = "https://search.naver.com/search.naver"
    
    news_list = []
    today = datetime.datetime.today()
    
    for i in range(days):
        search_date = (today - datetime.timedelta(days=i)).strftime("%Y.%m.%d")
        for page in range(1, max_pages + 1):  # 페이지 수 제한
            params = {
                "where": "news",
                "query": keyword,
                "sort": "1",  # 최신순 정렬
                "start": (page - 1) * 10 + 1,  # 페이지네이션
                "ds": search_date,
                "de": search_date,
            }

            response = requests.get(base_url, params=params)
            soup = BeautifulSoup(response.text, "html.parser")
            
            # 뉴스 제목 가져오기
            news_titles = soup.select("a.news_tit")

            for title in news_titles:
                news_list.append({"date": search_date, "headline": title.text})

        time.sleep(1)  # (서버 부하 방지)

    return pd.DataFrame(news_list)

# 🔹 뉴스 크롤링 실행 (테슬라 관련 뉴스)
df_news = get_naver_news("테슬라", days=30)
print(df_news.head())  # 뉴스 데이터 확인

 감성 분석

방법 1: VADER (NLTK) 활용

ADER는 다음과 같은 방식으로 감성을 분석합니다.
- 감성 사전(Lexicon) 활용: VADER는 각 단어와 구문에 대한 감성 값이 미리 정의된 사전을 사용합니다.
- 문맥 고려: 대문자 사용, 느낌표, 부사(very, extremely 등) 같은 강조 표현을 인식하여 감성 강도를 조정합니다.
- 문장 구조 파악: 부정어(not, no 등)나 접속사(but 등)가 감성에 미치는 영향을 고려합니다.
- 이모티콘 인식: 😊, 😢 같은 이모티콘도 감성 분석에 반영합니다.

⚠️ VADER는 영어 텍스트에 최적화되어 있어서 한글로 된 "테슬라" 뉴스에는 정확도가 떨어질 수 있습니다.
한국어 감성 분석을 위해서는 KNU 한국어 감성사전, KoBERT 등 한국어에 특화된 모델이나 사전을 사용하는 것이 더 효과적입니다.
영어 뉴스를 분석한다면 VADER는 특별한 학습 없이도 소셜 미디어 텍스트, 뉴스 헤드라인 등에서 좋은 성능을 보입니다.

 

nltk에서 제공하는 VADER 알고리즘 기반의 감성 분석기를 사용했는데,

sia.polarity_scores(text)는 입력된 텍스트에 대해 다음 4가지 감성 점수를 포함하는 딕셔너리를 반환한다. 

  • negative (neg): 텍스트의 부정적 감성 정도 (0에서 1 사이의 값)
  • neutral (neu): 텍스트의 중립적 감성 정도 (0에서 1 사이의 값)
  • positive (pos): 텍스트의 긍정적 감성 정도 (0에서 1 사이의 값)
  • compound (compound): 위의 세 점수를 종합한 통합 점수 (-1에서 1 사이의 값)
    • -1: 매우 부정적
    • 0: 중립적
    • 1: 매우 긍정적

그래서 0.05 이상은 긍정(1), -0.05 이하는 부정(-1), 그 외는 0을 반환하도록 했다. 

sia = SentimentIntensityAnalyzer()

def get_vader_sentiment(text):
    """VADER를 사용한 감성 점수 계산"""
    sentiment_score = sia.polarity_scores(text)["compound"]
    if sentiment_score >= 0.05:
        return 1  # 긍정
    elif sentiment_score <= -0.05:
        return -1  # 부정
    else:
        return 0  # 중립

 

그래서 결과는...

아래처럼 나왔다.

엥? 다 0점이라고??

성능이 낮은가? 라고 생각했다가 VADER를 다시 살펴보니 '영어' 텍스트에 최적화가 되어 있다는 것이다;;

 

VADER 결과

방법 2: FinBert

금융 뉴스 분석에는 일반적으로 FinBERT가 더 적합하여 많이 사용되는 것으로 알고 있다. 

관련 논문을 확인해보니 '금융 뉴스 문장'을 수집하여 데이터셋을 구축했기 때문에, '주가 하락'이 항상 부정적인 것은 아니라는 등의 미묘한 문맥을 이해한다고 한다. 

또, 일반적으로 금융 텍스트에 대해선 VADER보다 더 높은 정확도를 보인다고 한다. 

 

참고로 FinBERT 관련 논문 중, 주요 부분은 아래와 같다. 

금융 문장 데이터셋 구축: 약 5,000개의 금융 뉴스 문장을 수집하여 긍정, 부정, 중립으로 분류한 데이터셋을 구축함, 이 데이터셋은 감성 분석 모델의 성능 평가에 사용됨
금융 전용 사전 개선: 기존의 MPQA 사전과 Loughran과 McDonald의 금융 사전을 결합하여 금융 특화된 사전을 개발, 이 사전은 금융 개념의 방향성에 따른 의미적 방향성을 반영함
Linearized Phrase Structure (LPS) 모델: 금융 텍스트에서 의미적 방향성을 감지하기 위해 LPS 모델을 제안함, 이 모델은 문장 구조 정보와 금융 특화된 사전을 활용하여 감성 분석을 수행함

 

이제 이걸 900개의 한국어 뉴스 headline에 감성분석을 진행해 보았다. 

# FinBERT 모델 로드
tokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert")
model = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert")

def analyze_sentiment_finbert(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128, padding="max_length")
    
    with torch.no_grad():
        outputs = model(**inputs)
        probabilities = torch.nn.functional.softmax(outputs.logits, dim=1)
        sentiment_idx = probabilities.argmax(dim=1).item()
        sentiment_score = probabilities[0].tolist()
    
    # FinBERT는 negative(0), neutral(1), positive(2) 순서로 출력
    sentiment_map = {0: -1, 1: 0, 2: 1}  # 부정: -1, 중립: 0, 긍정: 1
    return sentiment_map[sentiment_idx], sentiment_score

 

나온 결과는 다음과 같다. 

 

대략 확인해보면

5행의 '~ 주가 급등'인데 -1로 표기되어 있고, 

6행의 '트럼프, ~시승->구매~'가 -1로 되어 있어 '한국어'로 된 헤드라인은 잘 분석하지 못하는 것으로 보인다. 

 

 

방법 3: OpenAI

제일 기대감이 컸던 분석 방법이다.

프롬프트는 카카오뱅크 기술 블로그 포스팅을 참고했고,

모델은 4o-mini를 사용했다. 

client = openai.OpenAI()

# 프롬프트를 활용한 감성 분석 함수
def analyze_sentiment_openai(headline, company="Tesla", term="short"):
    prompt = f"""
    Forget all your previous instructions. Pretend you are a financial expert. 
    You are a financial expert with stock recommendation experience. 
    Answer "YES" if good news, "NO" if bad news, or "UNKNOWN" if uncertain in the first line. 
    Then elaborate with one short and concise sentence on the next line. 
    Is this headline good or bad for the stock price of {company} in the {term} term? 

    Headline: {headline}
    """

    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}]
    )

    result = response.choices[0].message.content
    return result

# 참고: 이 분석에서는 헤드라인이 주가에 영향을 주는 정보를 충분히 담고 있다고 가정합니다.
# 또한 GPT의 결과 재현성을 높이기 위해 temperature 값을 0으로 설정하였습니다.

 

결과는 다음과 같다. 

UNKNOWN은 0(중립), NO는 -1(부정), YES는 1(긍정)로 하여 score를 매겨보았을 때, 

'로봇주 강세'가 포함된 문장을 0으로, '주가 급등'을 -1로 분석했다. 

 

음...

논문과 동일하게 temperature=0으로 하였을 때, 

결과가 조금 더 나아지긴 했는데

'긍정'으로 볼 만한 뉴스기사를 '긍정'으로 볼 수 있는 것을 '부정'이나 '중립'으로 분석해 버려서

기대에는 조금 미치지 못한 것 같았다. 

OpenAI 뉴스 headline 감성분석 결과

 

결국 세 개의 모델을 시도해 봤지만

원하는 수준의 감성분석이 잘 이뤄지지 않았다.

 

그래서... 한번 더!

한국어 뉴스로 파인튜닝 되었다는

허깅페이스 모델을 발견하여 적용해 봤다. 

 

방법 4: KR-FinBert

한국어 경제 뉴스기사를 가장 잘 감성분석 할 만한 모델을 찾다가 

허깅페이스에서 'KR-FinBert'를 발견했다. 

KR-BERT-MEDIUM 데이터에 한국어 기반의 텍스트, 뉴스 기사, 법률, 댓글, 경제, 애널리스트 보고서 등의 데이터로 훈련되었으며, 440,067개의 뉴스 제목과 11,237개의 애널리스트 보고서가 포함되어 있다. 

모델의 정확도는 아래와 같고, 추론 샘플을 보니 주가 예측을 위한 뉴스 헤드라인 분석에 가장 적합할 듯하여 당첨!

KR-FinBert 정확도 및 추론 예시

 

 

VADER vs FinBERT vs OpenAI vs KR-FinBert 비교

Vader, Finbert, OpenAI, KR-FinBert의 분석 결과는 다음과 같다.

1행을 보면 '~머스크와의 결별은 시간문제~'라는 headline에서 FinBERT와 OpenAI는 모두 -1(부정)이 나온 반면, KR-FinBERT는 0(중립)이 나왔다. 

11행의 '반등 기대감 작용(긍정)'에서 FinBERT는 -1이 나왔는데, KR-FinBERT는 1이 나온 반면 OpenAI는 0점이 나왔다. 

 

대략 KR-FinBERT가 '긍정' 감성을 조금 더 잘 분석하는 것으로 확인된다.

 

뉴스 특성상, 동일한 일자에도 여러 개의 뉴스가 있다. 

이를 각 모델마다 점수를 평균 내어 날짜별로 시각화해 보았다.

 

이때, VADER과 FinBERT는 

편향이나 오류를 보완하기 위해 각 점수를 더한 후에 평균하여 하나의 점수로 만들었다.

 

긍정, 부정, 중립에 대한 분포는 아래의 표와 같다. 

  VADER/FinBERT OpenAI KR-FinBERT
-1 471 385z 261
0 429 485 429
1   30 210

 

아래 차트를 보면 전반적으로 이 시기에

'테슬라'에 부정적인 뉴스가 많다는 것을 짐작할 수 있다. 특히 OpenAI 모델(주황색)이 가장 부정적이고 민감한 결과를 보여주고 있다. 

 

 

  • OpenAI 모델(주황색)이 가장 부정적인 경향이 강하게 나타난다. GPT 모델이 뉴스의 미묘한 부정적인 영향을 더 민감하게 평가했음을 의미한다. 
  • VADER/FinBERT(파란색)는 OpenAI보다는 덜 부정적이지만 여전히 중립에서 부정 사이의 결과가 대부분이다. 금융 분야와 일반 분야를 합친 결과이므로 보다 중립적으로 나타난 것으로 보인다. 
  • KR-FinBert(초록색) 모델은 상대적으로 중립에 가까운 감성을 많이 보여준다. 특히 금융 분야에 특화된 한국어 모델이기 때문에  국내 뉴스 특성상 감성을 더 중립적으로 평가한 것으로 보인다.

 

정리해 보면, 

지난 한 달간 테슬라 관련 뉴스는 전반적으로 부정적이었으며

금융과 한국어에 특화된 모델일수록 중립적으로 평가한 부분이 있는 것으로 보인다.

날짜별 감성점수 평균 비교

아래 차트는 

sentiment의 전반적 추세를 더 명확히 파악할 수 있다. 

전반적으로는 최근 1개월 동안의 테슬라 뉴스는 시장에 부정적 영향을 줄 수 있는 내용이 많았으며, sentiment가 전반적으로 부정적 영역에 분포되어 있는 것을 확인할 수 있다. 


그러나 OpenAI가 특히 민감하게 부정적 sentiment를 표현하고 있어, 실제 투자자나 시장의 민감한 반응과 연관될 가능성이 크고, 
모델의 특성상 KR-FinBert는 보다 안정적이고 중립적으로 평가를 내리고 있는 것으로 보인다. 

 

  • OpenAI뉴스의 부정성을 더 민감하고 극단적으로 반영하고 있음을 알 수 있다.
  • KR-FinBert는 한국어 금융 뉴스 특성상 sentiment를 매우 중립적이면서도 덜 극단적으로 평가한다.
  • VADER/FinBERT는 두 모델의 중간 정도로, 뉴스가 지속적으로 일정 수준의 부정적 이슈를 가지고 있었다는 걸 의미한다.

 

 

감성점수 시계열 추이

아래 차트는 테슬라의 주가(Close Price)와 감성 분석(Sentiment) 결과를

함께 나타낸 시계열 그래프다. 

 

뉴스 sentiment가 지속적으로 중립에서 부정 사이에 위치하고 있는 것을 알 수 있는데, 
특히 OpenAI sentiment(초록색)은 전 기간에 걸쳐 가장 부정적이었고, 주가가 하락하는 2월 말 이후엔 더욱 부정적인 sentiment를 보이고 있다. 
테슬라 주가(빨간색)는 2월 중순 이후 급격한 하락세를 보이며, sentiment와 테슬라 주가 하락이 일정 부분 일치하는 패턴이 보입니다.

특히 OpenAI sentiment(초록색)은 주가 움직임과 가장 비슷한 방향을 보이고 있다. 

OpenAI sentiment가 부정적으로 치우쳐질 때, 주가도 함께 하락하는 현상이 관찰되는데, 
3월 초반 이후 주가 하락과 OpenAI sentiment의 부정성 증가가 거의 같은 시기에 나타난다. 


반면, VADER/FinBERT(파란색) sentiment는 비교적 일정한 부정성을 유지하며, 큰 폭으로 변화하지 않아 주가의 급격한 움직임을 예측하기에는 덜 민감했다. 

KR-FinBert(노란색)는 sentiment 값 자체가 가장 중립적이어서 주가 움직임과 명확한 관계가 잘 드러나지 않았다. 

이렇게 시각화하여 확인해 보니 각 모델 간의 차이와 성능을 한눈에 알 수 있었다. 

 

정리해 보면, 

OpenAI 모델은 실제 주가 움직임과 sentiment가 유사한 경향을 보이며, 실제 주가 하락 구간에서 가장 민감하게 반응하는 모습을 보인 것을 알 수 있다. 
→ 즉, OpenAI 모델이 주가 하락 및 투자자 심리 분석에 더 유리할 가능성이 있을 것이다.

VADER/FinBERT 및 KR-FinBert 모델은 보다 일반적이고 안정적인 평가를 제공한다.
→ 장기적이고 안정적인 평가가 필요할 때 사용하면 좋을 듯하다.

 

 

3. XGBoost

이제 모델 간의 성능을 비교해 보기 위해 XGBoost와 LSTM을 적용해 보았다. 

 

Feature는 기본 피처와 감성 피처를 구분하여 감성 분석의 효과를 정확히 측정해 보기로 했다. 

# 기본 피처와 감성 피처 정의
features_base = ['Close_TSLA', 'High_TSLA', 'Low_TSLA', 'Open_TSLA', 'Volume_TSLA']
features_sentiment = ['Close_TSLA', 'High_TSLA', 'Low_TSLA', 'Open_TSLA', 'Volume_TSLA', 
                     'sentiment_vader', 'sentiment_finbert', 'sentiment', 
                     'sentiment_openai_score', 'KR-FinBert']

 

기존 모델이 더 우수한 성능을 보이는 것을 알 수 있었고, 
감성 분석 추가 시 오히려 성능 저하되는 현상을 확인했다. 

  • 기존 모델(features_base) MAE: 0.7613
  • 감성분석(features_seniment) 추가 MAE: 0.9722
    • -> 성능 향상률: -27.70%

Feature Importance는 

Close_TSLA가 99.59%로 압도적으로 가장 중요한 피처로 나타났고,

이어서 KR-FinBert: 0.0011% (3위) >  sentiment_openai_score: 0.009% (4위) > sentiment_finbert: 0.0007% (5위) 순으로 

나타났다.

XGBoost Feature Importance

 

이를 통해

 가 예측에는 일 종가 가장 요한 지표라는 것을 알 수 있었고,

성 지표 서는 KR-FinBert가 가장 높지만 종가에 비하면 매우 낮다는 것을 확인했다. 

그리고 그 외 피쳐들은 예측에 거의 도움이 되지 않는다는 것을 확인할 수 있었다. 

 

Close_TSLA:              99.59%    # 압도적인 영향력
감성 지표 전체 합:        0.29%     # 매우 미미한 영향력

 

사실 '종가'가 가장 중요한 지표라는 것은

아래 아티클에서도 설명된 바와 같이 '딥러닝'이 loss를 최소화하기 위해

'내일 주식 가격은 오늘 주식가격과 같을 것이다'로 결론짓기 때문에 발생한 현상이다.

즉, 가장 loss가 적게 나오는 효율적인 예측모델을 만들었으니 '종가'가 주가 예측에 가장 중요한 피쳐로 결정된 것이다. 

 

 

(칼럼) 딥러닝 초보들이 흔히하는 실수 : 주식가격 예측 AI - 코딩애플 온라인 강좌

(강의 전체 목록) 딥러닝 입문자들이 LSTM 배우면 꼭 도전해보는 분야가 바로 주식가격 예측입니다. LSTM은 연속된 sequence 데이터를 다룰 때 좋은 레이어라고 하지 않았습니까. 그래서 주식가격 흐

codingapple.com

 

XGBoost VS LSTM

다음으로는 LSTM을 진행했고 MAE가 3.4541가 나왔다. 

더보기
# 🔹 최종 LSTM 코드
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 스케일링
close_scaler = MinMaxScaler()
y_scaled = close_scaler.fit_transform(y.values.reshape(-1, 1))
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)

# 시계열 데이터 생성
def create_sequences(data, target, seq_length=10):
    Xs, ys = [], []
    for i in range(len(data) - seq_length):
        Xs.append(data[i:i+seq_length])
        ys.append(target[i+seq_length])
    return np.array(Xs), np.array(ys)

# 데이터 준비
seq_length = 10
X_lstm, y_lstm = create_sequences(X_scaled, y_scaled, seq_length)
X_train_lstm, X_test_lstm, y_train_lstm, y_test_lstm = train_test_split(
    X_lstm, y_lstm, test_size=0.2, random_state=42
)

# LSTM 모델 구축
model_lstm = Sequential([
    LSTM(64, return_sequences=True, input_shape=(seq_length, X_train_lstm.shape[2])),
    Dropout(0.2),
    LSTM(32),
    Dropout(0.2),
    Dense(1)
])

# 학습 설정
early_stopping = tf.keras.callbacks.EarlyStopping(
    monitor='val_loss',
    patience=10,
    restore_best_weights=True
)

# 컴파일 및 학습
model_lstm.compile(
    optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
    loss='mse'
)

history = model_lstm.fit(
    X_train_lstm, y_train_lstm,
    epochs=100,
    batch_size=32,
    validation_split=0.2,
    callbacks=[early_stopping],
    verbose=1
)
  • XGBoost 기본 모델: MAE 0.7613
  • XGBoost + 감성분석: MAE 0.9722
  • LSTM 모델: MAE 3.4541

결과를 분석해 보자면

MAE 3.4541 = 평균 $3.45 오차로
테슬라 주가 범위($200~300) 고려 시, 약 1.2~1.7% 오차율로 허용 가능한 수준이나 개선 필요하다고 보인다. 

 

XGBoost 대비한 성능을 비교했을 때에는 
성능차이 = (3.4541 - 0.7613) / 0.7613 * 100

= 약 353.7% 더 높은 오차를 보인다는 것을 알 수 있다. 

 

결과

결과를 정리해 보면,

위의 실험 결과만으로효과적인 주가 예측이 어려운 것으로 보인다. 

 

모델의 각 성능을 비교해 보면 다음과 같다. 

# 성능 비교
XGBoost 기본 모델: MAE 0.7613     # 👍 가장 좋은 성능
XGBoost + 감성분석: MAE 0.9722    # 성능 저하 (-27.70%)
LSTM 모델: MAE 3.4541             # 가장 낮은 성능 -> XGBoost 대비 낮음

 

그리고 Feature Importance는 Close_TSLA: 99.59% > KR-FinBert: 0.12% > sentiment_openai_score: 0.10% 순서로 정리된다.

 

LSTM은 XGBoost에 비해 낮은 성능을 보여주는데, 

이는 해당 실험에서는 시계열을 분석할 수 있는 충분한 데이터가 부족해서 그런 것으로 보인다.

 

이어서 OpenAI의 감성분석에 대한 결과를 보면, 

Feature Importance에서 중요도 순위: 3위 (0.000955)로, 기존 감성분석 대비 높은 순위를 보인 것으로 보아 맥 이해도가 다른 모델들에 비해 더 우수하다고 볼 수 있다. 

다른 감성분석 도구

  • VADER: 거의 영향 없음 (0.000000)
  • FinBERT: 중간 정도 영향 (0.000703)
  • KR-FinBert: 가장 높은 영향 (0.001195)

 

해당 실험의 실패 원인을 정리해 보면, 

가장 핵심적인 것은 '제한된 데이터의 기간'이다. 

적어도 1년 이상의 뉴스 헤드라인을 모두 확인해봐야 하는데, 기술적으로도 비용적으로도 제한이 있다 보니 OpenAI를 충분히 활용하지 못했다. 

아마 조금 더 많은 데이터로 분석을 시도했으면

OpenAI가 어느 정도 주가 방향을 예측할 수 있었을 것으로 본다. 

 

이 외에도

커뮤니티, 소셜미디어, 유튜브 댓글 등의 텍스트 데이터와

경제 지표 등도 함께 고려한다면 더욱 정교한 분석이 되지 않을까 싶다. 

 

마무리하며

머신러닝으로 주식각겨 예측하기는 '머신러닝' 교재에도, 인터넷에도 많이 그런 주제다. 

그런데 이에 더 나아가서 OpenAI를 통한 감성분석도 시도해 보고, 

허깅페이스에서 한국 금융 뉴스에 특화된 모델로도 분석하고 비교해 보면서

제목만 보고 후킹 당했던 과거의 나 자신에게 말한다. '주식 가격 예측이 쉬웠으면, 부자가 넘쳐났겠다..'라고..

 

그리고 '자산가격 예측'이라는 연구가 꽤나 오래전부터 이뤄졌다는 사실도 새롭게 알게 되었다. (그리고 경제학의 한 분야라는 것도 ㄷㄷ)

 

이번 '주식 가격 예측'이후에 

카카오뱅크에서 실험한 '암호화폐' 가격 예측도 공부하며 시도해 볼 예정이었으나

난이도와 범위가 조금 높을 듯하여 잠시 보류하기로 했다. 

그래도 결론을 먼저 보자면, 

ChatGPT로 암호화폐 가격 예측하기 중

대신 관련 칼럼은 아래에서 확인하실 수 있으니 관심 있는 분들은 아래에서

자세한 실험 내용을 확인하실 수 있다. 

 

https://tech.kakaobank.com/posts/2405-predicting-cryptocurrency-prices-with-chatgpt/

 

ChatGPT로 암호화폐 가격 예측하기

안녕하세요, 카카오뱅크 기술기획팀의 William입니다. 이번 글에서는 암호화폐 시장에서 LLM을 활용한 연구를 소개합니다. 암호화폐의 역사부터 시작해, 뉴스 데이터를 통해 암호화폐 가격을 예측

tech.kakaobank.com