-
Python) 선형회귀 모델을 사용해서 주식 상승률 예측하기(초보)Programing Language/Python 2021. 7. 24. 13:19728x90반응형
계속해서 공부해야지 해야지 했던 인공지능 관련 개발을 동빈나님 유튜브 채널을 통해서 처음 시작하게 되었다.
처음 소개된 내용은 선형회귀 모델이다.
자세한 이론 설명은 다음을 참고하면 좋다.
https://www.youtube.com/watch?v=ve6gtpZV83E&list=PLRx0vPvlEmdAbnmLH9yh03cw9UQU_o7PO&index=20
이론을 제외하고 결론을 말하면 원인과 결과를 알면 해당 내용을 학습해서 학습 모델을 만들고
원인을 입력함으로써 결과를 예측하는 것을 말한다.
해당 동빈나님의 강의는 여러가지 인자를 통해서 배추가격을 예측하는 인공지능 모델을 만들었다.
나는 현재 TSMC 주주이기 때문에 간단하게 나스닥 상승률에 따른 TSMC 상승률로 인공지능 모델을 코드로 만들어 보기로 했다.
자료는 인베스팅 홈페이즈를 통해서 2020.01.01 ~ 2021.07.23일의 나스닥, tsmc 데이터를 수집했다.
https://www.investing.com/indices/nasdaq-composite-historical-data
코드는 다음과 같다. (Tensorflow 버전은 2.0입니다. 2.0 버전에서 1.0 버전 문법을 사용했습니다.)
학습 모델 파일.py
import os import tensorflow as tf import numpy as np from pandas.io.parsers import read_csv os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' model = tf.compat.v1.global_variables_initializer() nasdac_data = read_csv('nasdac_data.csv', sep=',') tsmc_Data = read_csv('tsmc_data.csv', sep=',') nasdac_xy = np.array(nasdac_data, dtype=np.float32) tsmc_xy = np.array(tsmc_Data, dtype=np.float32) # nasdac의 상승률 저장 x_data = nasdac_xy[:, [-1]] # TSMC 상승률 저장 y_data = tsmc_xy[:, [-1]] for index in range(len(x_data)): x_data[index] = (x_data[index] * 100) # 엑셀로 1% -> 숫자로 변환하면 0.01이 나오기 때문에 배열 값에 100을 곱해줘서 값을 고쳐준다. for index in range(len(y_data)): y_data[index] = (y_data[index] * 100) # 상동 # 플레이스 홀더를 설정합니다. tf.compat.v1.disable_eager_execution() X = tf.compat.v1.placeholder(tf.float32, shape=[None, 1]) # X 값으로 넣어줄 x_data가 2차원 배열(xy)에서 총 1개의 값을 가지기 때문에 1로 지정한다. Y = tf.compat.v1.placeholder(tf.float32, shape=[None, 1]) # 상동 W = tf.Variable(tf.random.normal([1, 1]), name="weight") # placeholder의 2차월 배열과 같은 차원으로 값을 타입을 맞춰준다. b = tf.Variable(tf.random.normal([1]), name="bias") # 가설을 설정합니다. hypothesis = tf.matmul(X, W) + b # 비용 함수를 설정합니다. cost = tf.reduce_mean(tf.square(hypothesis - Y)) # 최적화 함수를 설정합니다. optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate=0.000005) train = optimizer.minimize(cost) # 세션을 생성합니다. sess = tf.compat.v1.Session() # 글로벌 변수를 초기화합니다. sess.run(tf.compat.v1.global_variables_initializer()) # 학습을 수행합니다. for step in range(100000): cost_, hypo_, _ = sess.run([cost, hypothesis, train], feed_dict={X: x_data, Y: y_data}) if step % 500 == 0: print("#", step, " 손실 비용: ", cost_) print("- tscm 상승률: ", hypo_[0]) # 학습된 모델을 저장합니다. saver = tf.compat.v1.train.Saver() save_path = saver.save(sess, "./tsmc_saved.cpkt") print('학습된 모델을 저장했습니다.') #'''
결과 실행 파일.py
import os import tensorflow as tf import numpy as np os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # 플레이스 홀더를 설정합니다. tf.compat.v1.disable_eager_execution() X = tf.compat.v1.placeholder(tf.float32, shape=[None, 1]) Y = tf.compat.v1.placeholder(tf.float32, shape=[None, 1]) W = tf.Variable(tf.random.normal([1, 1]), name="weight") b = tf.Variable(tf.random.normal([1]), name="bias") # 가설을 설정합니다. hypothesis = tf.matmul(X, W) + b # 저장된 모델을 불러오는 객체를 선언합니다. saver = tf.compat.v1.train.Saver() model = tf.compat.v1.global_variables_initializer() # 1가지 변수를 입력 받습니다. avg_temp = float(input('나스닥 상승률: ')) with tf.compat.v1.Session() as sess: sess.run(model) # 저장된 학습 모델을 파일로부터 불러옵니다. save_path = "./tsmc_saved.cpkt" saver.restore(sess, save_path) # 사용자의 입력 값을 이용해 배열을 만듭니다. data = ((avg_temp)) arr = np.array([[data]], dtype=np.float32) # 예측을 수행한 뒤에 그 결과를 출력합니다. x_data = arr[0:1] dict = sess.run(hypothesis, feed_dict={X: x_data}) print("나스닥 상승률에 따른 TSMC 주가 상승률 : ", str(round(dict[0][0], 2)) + "%")
결과
전체적으로 나스닥 상승에 따른 TSMC 상승 결과 도출 가설 자체가 성립되지 않기에 이상한 값이 나온다.
그럼 이만. 다들 즐코딩
(재미로 만들어 본 것이니 예측 값에 대해서는 신뢰도는 0% 입니다.)
728x90반응형'Programing Language > Python' 카테고리의 다른 글
pip) Python 백앤드 모듈에서 package.json 과 같은 모듈 리스트 만들기(requirements.txt) (0) 2022.10.14 Python ) pyenv 설치해서 파이썬 버전 관리하기 (0) 2022.09.05 Python) tf.placeholder에서 shape[None,2]의 의미 (0) 2021.07.24 Python) Numpy에서 np.sum 함수와 axis와의 상관관계 (0) 2021.07.23 Python) Numpy 2차원 배열 만들고 값 추가하는 방법 (0) 2021.07.23