회고
- 사실(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
비즈니스데이터분석 수업 수강
-> 별도로 정리해서 한번에 포스팅 예정