INVESTAR / StockAnalysisInPython

459 stars 413 forks source link

9장 삼성전자 주가 예측 #166

Open parkdongseon opened 2 years ago

parkdongseon commented 2 years ago

안녕하세요. 교재 442p.에 출력되는 '삼성전자 주가 예측 비교' 그래프에 대해 질문이 있어서 글 남깁니다. x축은 time, y축은 stock price로 레이블이 지정되어 있습니다. 하지만 그와 같이 나오는 값은 실제 년도나 주식금액으로 출력되지 않음을 볼 수 있습니다. 이를 데이터베이스에 있는 실제 년도 또는 실제 주식금액으로 출력되게 하는 방법이 있는지 궁금하여 질문 남깁니다! 매번 답변해주셔서 감사합니다.

INVESTAR commented 2 years ago
>>> raw_df
code date open high low close diff volume
date
2018-05-04 005930 2018-05-04 53000 53900 51800 51900 1100 39565391
2018-05-08 005930 2018-05-08 52600 53200 51900 52600 700 23104720
2018-05-09 005930 2018-05-09 52600 52800 50900 50900 1700 16128305
2018-05-10 005930 2018-05-10 51700 51700 50600 51600 700 13905263
2018-05-11 005930 2018-05-11 52000 52200 51200 51300 300 10314997
... ... ... ... ... ... ... ... ...
2020-01-16 005930 2020-01-16 59100 60700 59000 60700 1700 14381774
2020-01-17 005930 2020-01-17 61900 62000 61000 61300 600 16025661
2020-01-20 005930 2020-01-20 62000 62800 61700 62400 1100 12528855
2020-01-21 005930 2020-01-21 62000 62400 61200 61400 1000 11142693
2020-01-22 005930 2020-01-22 60500 62600 60400 62300 900 15339565

삼성전자 주가 예측 시 실제 수치 단위로 계산을 수행할 경우 시간이 오래 걸리기 때문에 MinMaxScaler를 구현해서 실제 수치를 0 ~ 1 값으로 변환해서 처리하였습니다.

def MinMaxScaler(data):
    """최솟값과 최댓값을 이용하여 0 ~ 1 값으로 변환"""
    numerator = data - np.min(data, 0)
    denominator = np.max(data, 0) - np.min(data, 0)
    return numerator / (denominator + 1e-7) # ②

dfx = raw_df[['open','high','low','volume', 'close']]
dfx = MinMaxScaler(dfx) # ③
dfy = dfx[['close']]
x = dfx.values.tolist()
y = dfy.values.tolist()

MinMaxScler로 변환된 0~1 값을 다시 실제 수치로 복원하는 것은 가능하지만 구현하려면 다소 복잡할 것 같습니다. 인터넷에서 sklearn의 inverse_transform() 위주로 검색해 보시기 바랍니다.

https://www.inflearn.com/questions/224124

https://blog.naver.com/PostView.naver?blogId=gh03014&logNo=222168440616&categoryNo=9&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView