TIL/멋사_AI스쿨_TIL

TIL 12.19 RNN 시계열 데이터 실습

2022. 12. 19. 15:02

회고

  • 사실(Fact) : RNN(시계열 데이터) 주가 분석 실습, 비즈니스 데이터 분석 실습
  • 느낌(Feeling) : RNN이 뭔지 이제야 조금 알 거같고(?), 비즈니스 데이터 분석으로 pandas를 다시 복습하니까 좋았다.
  • 교훈(Finding) : 인간은 계속 까먹으니까 계속 복습 정리하기!!

 

RNN 시계열 데이터 분석 실습

공식문서 참고: https://www.tensorflow.org/tutorials/structured_data/time_series

시계열 데이터에서는 섞어서 나누지 않고 순서를 고려해서 나누게 된다.

자연어 텍스트를 시퀀스 인코딩 했던 것처럼 시계열 데이터에서도 순서가 중요하다.

 

예를 들어 지난 일년 간의 데이터를 통해 앞으로 일주일 간의 데이터를 예측한다고 했을 때

윈도우를 밀어서 앞으로 예측할 일주일 데이터도 일주일치를 한번에 예측하게 하지 않고

그 전날까지의 데이터를 가지고 와서 다음날을 예측하게 합니다.

→ WindowGenerator

 

사용할 수 있는 사례

  • 주식, 부동산 가격, 날씨 예상
  • 판매량, 재고량, 매출액 예측
  • 서비스 이용 고객 수 예측, 하루 방문 고객수, 수요 수량 예측
  • 동시 접속자 수, 트래픽량 예측
  • 농수산물 가격 예측, 식물 성장 예측

 

1107 파일 주가 예측 실습

회귀와 시계열의 차이? (이번 실습과 bike sharing 실습의 차이)

  • bike는 데이터를 나눈 기준이 특이했다 1~19일이 train, 나머지가 test
  • 여러 변수를 고려해서 수치데이터를 예측할 때 회귀 모델을 사용하기도 한다

 

주가 데이터

Volume과 다른 값 간에 차이가 많이나서 스케일링 활용

 

정규화

# MinMaxScaler
# 복원을 위해 x, y 따로 스케일링하기
# 스케일링 후 list 형태로 변환하기 
from sklearn.preprocessing import MinMaxScaler

#나중에 복원을 하기 편하기 위해 x, y를 따로 스케일링
mmsx = MinMaxScaler()
mmsy = MinMaxScaler()

# fit_transform을 할 때는 1차원 데이터는 받지 않습니다
# y값은 종가(Close) 컬럼의 값을 시리즈 형태로 가져왔기 때문에 2차원 형태로 변경할 필요가 있습니다
x_mm = mmsx.fit_transform(dfx)
y_mm = mmsy.fit_transform(dfy.to_frame())
x_mm.shape, y_mm.shape

x, y 값 window_size 적용하기

- tqdm, trange, for문 활용

from tqdm import trange

x_data = []
y_data = []

for i in trange(len(y_mm) - window_size):
    stop = i+window_size
    x_data.append(x_mm[i:stop])
    y_data.append(y_mm[stop])
    # print("start: ", i, "stop:", i+window_size, end=",")

모델 생성 예시

- LSTM, Bidirectional 사용

예측 결과 시각화

pd.DataFrame({"test": y_test.flatten(),
              "predict":y_pred.flatten()}).plot(figsize=(12,4))

 

정규화했던 값 되돌리기

y_predict_inverse = mmsy.inverse_transform(y_pred)
y_predict_inverse = y_predict_inverse.flatten()
y_predict_inverse[:5]

RMSE 계산

rmse = ((y_test_origin - y_predict_inverse) ** 2).mean() ** 0.5
rmse

시각화

pd.DataFrame({"test": y_test_origin,
              "predict":y_predict_inverse}).plot(figsize=(12,4))

다른 방법

 

미니프로젝트 리뷰

- pytorch (현업: 텐서플로우가 더 많다, 논문: 파이토치가 더 많이(대학원)

- pororo https://dacon.io/en/competitions/official/235875/codeshare/4462

 


비즈니스데이터분석 수업 수강

-> 별도로 정리해서 한번에 포스팅 예정

 

'TIL/멋사_AI스쿨_TIL' 카테고리의 다른 글
  • [비즈니스 데이터 분석] 온라인 리테일 데이터 분석
  • 221213 NLP 텍스트 전처리 + 데이터리안 세미나
  • 221207 AI스쿨 TIL 전이학습, 이미지전처리 없이 CNN
  • 221206 AI스쿨 TIL CNN 이미지 전처리
둥둥런
둥둥런
대학원생의 UX, 데이터분석, 개발 공부 기록장📁
둥둥런
Done is better than Perfect
둥둥런
전체
오늘
어제

공지사항

  • About me
  • 분류 전체보기
    • TIL
      • 멋사_AI스쿨_TIL
    • 회고
      • 프로젝트 회고
    • STUDY
      • SQL
      • Python
      • Pandas
      • 태블로
      • 통계
      • 머신러닝 | 딥러닝
      • ETC
      • 그로스마케팅 | 광고
      • UX
    • BOOK
    • EVENT

인기 글

블로그 메뉴

  • 태그
  • 관리
hELLO · Designed By 정상우.
둥둥런
TIL 12.19 RNN 시계열 데이터 실습
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.