2. 해외선물/2-2. 해외선물 알고리즘 연구

(해외선물 자동매매 알고리즘) (1) 선형회귀분석 설명 (개념설명)

봄이오네 2024. 1. 29. 08:07
반응형

 

목 차
1. 들어가며
2. 개념설명
   1) 선형회귀분석 설명
   2) 선형회귀의 선을 구하는 방법
   3) matplotlib 라이브러리 설명
3. 마치며

 

 

1. 들어가며

지난글에서는 MCTS를 활용해 틱택톡 게임을 하는 코드를 알아보았다. 2016년 알파고(Alphago Lee)는 MCTS와 UCT를 사용한 것으로 알려져있다. MCTS는 "선택-확장-시뮬레이션-역전파"의 4단계이며, UCT(Upper Confidence Boundary of Tree)는 이용(exploitation) 및 탐사(exploration)을 활용하여 한번도 탐색되지 않은 노드에 대해 한번은 실행한다. "한번도 탐색되지 않은 노드"는 혹시나 모를 경우의 수를 탐사(exploration)한다는 말이다. 어렵다. @@ 자세한 내용은 검색을 통해 알아보자. ※ UCT에 대한 설명 : https://gusals1620.tistory.com/5

 

이번글에서는 알려진 데이터로 미래를 예측하는 선형회귀분석(Linear Regression Analysis)에 대해 알아보자. 필자도 완벽하게 이해를 못하였다. 그래도 코드는 실행이 되니, 출처를 밝히고 글을 서술해 나가도록 하겠다.

 

※ 출처 : 또야님 티스토리의 경사하강법 설명  (위 링크된 글을 누르면, 새창이 열리면서 또야님 티스토리로 이동한다)

 

사실, 선형회귀는 AI 혹은 GPU 영역이라고 생각해서 별로 관심이 없었다. 그러나, 계속된 해외선물의 손실은 지금의 알고리즘에 대해 깊은 회의를 느끼게 해주었고, 다른 알고리즘의 필요성을 상기시켜주었다.

 

특히, 또야님의 "경사하강법"에 대한 설명과 코드를 보면서, 2024년 1월 계속 고민하였던 새로운 알고리즘이 생각나니 너무나 기뻤다. 막혔던 혈이 뚫린 느낌??? (물론, 이 느낌이 수익으로 연결된 경우는 단 한번도 없었다는 것은 안 비밀~ ㅠ)

 


2. 개념설명

1) 선형회귀분석 설명

선형회귀(Linear Regression)를 인터넷 검색을 하면 어려운 설명이 많다. 간단하게 이해하자.

  • 개념 : 알려진 데이터 값을 활용하여 알 수 없는 데이터 값을 예측하는 분석기법

"알려진 데이터"를 통해 "알려지지 않은 데이터"를 예측한다. 이것을 해외선물에 적용해보면??? 현재까지의 가격 데이터를 활용하여 미래를 예측할 수 있다는 말일까?  결론부터 말하면 이론상 가능하겠지만, 실제는 "알 수 없다"로 결론을 내야할 것으로 생각된다. 해외선물에서 함부러 예측하는 것 자체가 모험이다. 해외선물은 그 변화 자체를 예측하기 힘들기 때문이다.

 

2) 선형회귀의 선을 구하는 방법

우리가 구하고 싶은 식은 y = wx + b 중 w(가중치, weight) 및 b(편차, bias)를 구하면 된다. 선형회귀(y=wx+b)를 구하는 방법은 평균제곱오차(MSE) 및 경사하강법(Grandient Descent) 2가지가 있다. 둘다 오차를 최소화하는 선형회귀 분석을 찾아가는 내용이다.

 

평균제곱오차(Mean Squared Error, MSE)는 오차(=셀제값-예측값)에 제곱하여 더하는 방법이며, 경사하강법(Grandient Descent)은 함수의 기울기를 구하고 해당 경사 반대방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 방법이다.

 

 ※ 출처 : myungshinKang 선형회귀분석의 설명 (평균제곱오차 및 경사하강법 설명)

     출처 : https://twojun-space.tistory.com/124 (경사하강법 설명)    

 

필자는 평균제곱오차는 코드로 구현해보지 않았다. 필자가 작성한 경사하강법을 코드로 설명해 볼 예정이다.

 

3) matplotlib 라이브러리 설명

  • matplotlib 설명 : x, y 축을 기반으로 그래프를 시각화시키는 라이브러리
  • matplotlib 설치 : pip install matplotlib

 

아래의 그래프에 대한 코드는 아래와 같다.

※ 코드 출처 : https://bcho.tistory.com/1201

 

from matplotlib import pyplot as plt
import numpy as np
x = np.arange(1,10)
y = x*1
plt.plot(x,y)
plt.show()

 

그림2. matplotlib 라이브러리를 통해 그래프 그리기

 


3. 마치며

선형회귀에 대해 알아보았다. 우리가 알고 싶은 것은 y=wx+b에서 w와 b값이다. w값은 기울기, b값은 y절편이다. 해외선물에서 w값은 추세(방향성)로 볼 수 있을 것이다. 선형회귀가 의미 있는 이유는 기울기(추세)를 파악할 수 있을 것으로 보인다. y절편은 혹시나 몰라 구해보는 것이다.

 

다음글에서는 또야님 티스토리의 경사하강법 설명을 통해 선형회귀를 구하는 방법을 알아보자.

 

 

반응형