티스토리 뷰
투자하고 있는 주식 종목의 미래 가치를 예측하여 자산 관리에 도움이 될 수 있도록 하기 위해 이 프로젝트를 교내 학회에서 진행하였습니다.
1. Dataset 설명
2. Data Preprocessing
3. Modeling
4. 확장점
1. Dataset 설명
FinaceDataReader은 금융데이터를 크롤링하여 데이터를 로드할 수 있는 파이썬 오픈소스입니다.
https://github.com/FinanceData/FinanceDataReader
GitHub - FinanceData/FinanceDataReader: Financial data reader
Financial data reader. Contribute to FinanceData/FinanceDataReader development by creating an account on GitHub.
github.com
FinanceDataReader을 import 하여 DataReader 메서드를 이용해 데이터를 로드할 수 있습니다. 로드하고 싶은 주식 종목의 코드를 위 Github에서 찾고 원하는 기간을 인자로 줄 수 있습니다. 본 프로젝트에서는 삼성전자, 하이브 엔터테인먼트, 테슬라 종목을 불러와 동일 모델로 학습시킨 후 비교하는 것을 진행하였습니다.
2. Data Preprocessing
시계열 데이터를 전처리할 때 가장 중요한 것은 데이터의 평균과 분산이 시간의 흐름에 따라 변한다는 것을 상기하는 것입니다. 특히 결측치를 단순하게 데이터의 평균으로 대체한다면 특정 구간에서 시간의 흐름과 상관없는 데이터 분포를 보여줄 수 있습니다. 사용한 FinanceData에서는 결측치는 없지만 다른 데이터에서는 결측치를 직전 관측치나 직후 관측치로 대체하는 것이 중요합니다.
데이터를 정규화, Train/Test Data로 분리해 준 다음 Tensorflow Dataset을 활용해 시퀀스 데이터셋을 생성해 주었습니다. 모델을 학습할 시에 전체 Raw Data 자체를 입력으로 주는 것보다 Batch size와 Window Size에 따라 Raw Data를 분할, 슬라이싱 하면서 하나의 데이터셋을 생성해 주는 것입니다. 이렇게 하는 이유는 데이터의 특정 구간에서의 과적합을 방지할 수 있고 일반화된 모델을 생성할 수 있기 때문입니다. 본 프로젝트에서는 'Close(종가)'에 대한 학습과 예측만 진행했기에 해당 칼럼에 대한 데이터에만 시퀀스 데이터셋을 생성했습니다.
3. Modeling
Convolution layer을 이용하여 데이터를 1차원 feature map으로 변환시킨 값을 LSTM 계층의 입력값으로 넣어주었습니다. Convolution layer은 filter을 통해 입력 데이터와 filter 간의 합성곱 연산으로 입력 데이터의 feature을 추출하는 역할을 합니다. 합성곱 연산을 통해 특정 구간의 벡터 값이 높다는 것은 데이터의 중요한 feature에 가중치를 더 주어 학습 시에 더 활용한다는 것을 의미합니다. 합성곱 연산에서 가장 중요한 것은 합성곱 연산으로 나온 output의 수를 filter의 채널 수와 맞추는 것이 중요합니다. 이 점은 CNN(Convolution Neural Network)에 대한 포스트에서 자세히 다루겠습니다.
Conv1d을 이용하여 1차원 입력 데이터에 대한 합성곱 연산을 수행한 후 LSTM 계층 수행을 진행했습니다. LSTM은 RNN이 가지는 Gradient Descent 문제를 해결할 수 있는 한 층 발전된 모델입니다. 간단히 요약하자면 현재의 Cell State Gate에 현재 상태의 입력값과 과거 상태의 정보를 더해 Output을 정할 수 있는 구조입니다. LSTM의 자세한 구동 원리는 시계열 딥러닝 모델에 대한 포스트에서 자세히 다루겠습니다. 본 프로젝트는 종가에 대한 학습과 예측만 이뤄지기 때문에 Dense층의 units을 1로 설정하였습니다.
4. 확장점
학습에 사용된 데이터의 수가 약 천개로 크게 복잡하지 않았기 때문에 복잡한 모델을 사용하지 않아도 꽤 괜찮은 정확도를 산출할 수 있었습니다. 데이터의 수가 많아진다면 Dropout 층을 추가해 일부 파라미터만 학습시키거나 LSTM 모델에서 한 층 발전된 GRU 모델을 사용하여 모델링하는 방법으로 확장시킬 수 있을 거 같습니다.
본 프로젝트에 대한 전체 코드는 https://github.com/hba-sangil/hba-sangil-deep-learning/blob/main/LSTM.ipynb 에서 볼 수 있습니다.
'프로젝트' 카테고리의 다른 글
[Classification] 부동산 허위매물 분류 예측 프로젝트 (0) | 2025.03.09 |
---|---|
[Regression] Used Car Price Prediction (0) | 2025.03.01 |
[Data Visualization] Titanic 데이터 시각화 (0) | 2025.01.22 |
[Computer Vision] Deepfake classification (0) | 2024.06.19 |
- html #javascript #구구단 출력
- 파이썬 #코딩테스트 #프로그래머스 #스택 #큐
- python #프로그래머스 #겹치는선분의길이
- #tf idf
- 딥러닝 #오차역전파 #연쇄법칙 #계산그래프 #최적화
- #seq2seq #encoder #decoder #teacher forcing
- rnn #딥러닝 #시계열 데이터 #장기의존성 문제
- #attention #deeplearning
- seaborn #데이터시각화 #타이타닉
- #opencv #이미지 연산 #합성
- 파이썬 #시각화 #matplotlib
- python #프로그래머스 #리스트 #인덱싱
- randomforest #bagging #머신러닝 #하이퍼파라미터 튜닝
- #자연어 처리 #정수 인코딩 #빈도 수 기반
- 프로젝트 #머신러닝 #regression #eda #preprocessing #modeling
- #python #프로그래머스 #외계어사전 #itertools #순열과조합
- 머신러닝 #project #classification #dacon
- 머신러닝 #xgboost #
- 로지스틱 회귀 #오즈비 #최대우도추정법 #머신러닝
- pca #주성분분석 #특이값분해 #고유값분해 #공분산행렬 #차원의 저주
- #물고기 종류별 대어 찾기 #즐겨찾기가 가장 많은 식당 정보 출력하기 #mysql #programmers
- subquery #sql 코딩테스트
- 자연어 처리 #정제 #정규표현식 #어간 추출 #표제어 추출
- nlp #토큰화 #nltk #konply
- 잘라서 배열로 저장하기 #2차원으로 만들기
- #opencv #이미지 읽기 #이미지 제작 #관심영역 지정 #스레시홀딩
- #프로그래머스 #안전지대 #시뮬레이션
- python #deque #프로그래머스 #공 던지기 #문자열 계산하기 #코딩테스트
- 머신러닝 #lightgbm #goss #ebf
- gan #생성자 #판별자 #적대적 신경 신경망 #딥러닝 #computer vision