AI & ML/딥러닝
LSTM을 활용한 삼성전자 주가 예측
JYUN(sia)
2024. 7. 17. 15:03
SimpleRNN 단점
- 장기 의존성 문제
과거의 정보가 마지막 레이어까지 충분히 전달되지 못함
LSTM
- 은닉층의 출력값 이외에 LSTM 레이어 사이에서 공유되는 셀 상태(cell state) C(t)라는 변수가 추가적으로 공유됨
- 장기 의존성 문제 해결 가능
- 현재 시점의 정보를 바탕으로 과거 내용을 얼마나 잊을지 또는 기억할지 등을 계산하고, 그. 결과에 현재 정보를 추가해서 다음 시점으로 정보를 전달
데이터 전처리
DL을 공부할수록 전처리의 중요성을 알아가는 중이다!
애초에 데이터가 별로거나(좋은 정보를 뽑아내지 못하거나) 오류가 있으면 그 후 과정은 문제가 생길 수 밖에 없다
2024.07.15 - [AI] - CNN 예제 (MNIST, Fashion MNIST)
CNN 예제 (MNIST, Fashion MNIST)
진행중인 프로젝트에서 어쩌다보니(?) ai를 맡게 돼(?) DL, 데이터분석 등등을 공부하기 시작했다.저번학기부터 ai 관심 생겼었는데.. 완전 럭키비키잖앙...!!.. 현재는 AIHub에서 수집한 샘플 데이터
k-jyun.tistory.com
(전처리 이슈로 문제 생겼던 적)
결측값 제거
raw_df.describe()
- 데이터프레임 raw_df의 기술 통계 값을 요약하여 반환
- 데이터의 기본적인 통계 정보를 빠르게 파악을 위함
** 데이터 프레임(DataFrame)은 판다스(Pandas) 라이브러리에서 제공하는 데이터 구조로, 2차원 배열 형태로 데이터를 저장하고 처리할 수 있게 한다.
raw_df.isnull().sum()
- 데이터프레임 raw_df의 각 열에서 결측값(null 값 또는 NaN 값)의 개수를 계산하여 반환
- 주식과같은 금융데이터에서 Volume(거래량) 값이 없는(0으로 나타난) 것은 missing value인 NaN으로 취급하는 것이 일반적
- 결측치(Missing value)는 특정 데이터가 누락된 것을 말하며, 금융데이터에서 결측치는 row전체를 삭제하는 것이 일반적
raw_df['Volume'] = raw_df['Volume'].replace(0, np.nan)
- 0을 NAN 으로 변환
- 많은 pandas 함수(dropna(), fillna(), isnull())는 NaN 값을 처리하는 데 최적화되어 있으므로 0을 결측값(NaN)으로 바꾼 뒤 한 번에 삭제하는 것이 더 효과적이다.
- 어차피 0도 현재 데이터에선 결측값과 같은 취급을 받기에 이런 식으로 처리해도 전혀 문제되지 않는다!
정규화
딥러닝 학습이 잘되기 위해서는 정규화 작업이 필요하다.
날짜를 나타내는 Date 항목을 제외한 숫자로 표현되는 모든 column에 대해서 0~1 값으로 정규화를 수행한다.
scaled_df = scaler.fit_transform(raw_df[scale_cols])
- 정규화를 수행하는 코드
- fit_transform() 메서드는 데이터를 변환하기 전에 학습(fit)하여 데이터의 최소값과 최대값을 기준으로 변환
- raw_df[scale_cols]는 정규화할 열들만 선택한 데이터프레임
- numpy 배열을 반환하므로 pandas의 함수를 사용하려면 다시 pandas의 데이터프레임으로 바꿔야함
시계열 데이터 생성
window_size = 40
X,Y = make_sequence_dataset(feature_np, label_np, window_size)
print(X.shape, Y.shape)
- x와 y의 형태는 (batch_size, time_steps, input dims) 로 나타난다.
모델 학습
from tensorflow.keras.callbacks import EarlyStopping
early_stop = EarlyStopping(monitor='val_loss', patience = 5)
model.fit(x_train, y_train,
validation_data = (x_test, y_test),
epochs=100, batch_size=16,
callbacks=[early_stop])
- 조기종료(early_srop) 의미
- 과적합을 방지하고, 불필요한 train 시간을 줄이는데 유용함
- 검증 손실이 더 이상 개선되지 않으면 멈추므로, 모델이 더 빨리 수렴할 수 있음