머신러닝 알고리즘은 크게

지도 학습(Supervised Learning),

비지도 학습(Unsupervised Learning),

강화 학습(Reinforcement Learning) 세가지로 나눌 수 있습니다.

 

 

 

1. 지도 학습(Supervised Learning)

지도 학습은 말 그대로 정답을 알려 주며 학습 시키는 것을 말합니다.

입력값(Input data), 즉 벡터형식의 입력값에 대한 Label(Y값)을 붙여 주고

계속 학습을 시켜나가는 것 입니다.

 

예를 들어, 공부 시간에 따른 점수 분포에 대한 데이터가 있다고 생각 해봅시다.

우리는 이제 공부 시간 데이터(Input Data)를 컴퓨터에 입력 시켜 주고 동시에 이에 대응하는 점수 데이터(Y값)을 입력할 수 있습니다.

이 데이터들은 하나의 선형 모델을 만들 것 이고

우리는 다른 공부 시간에 대한 점수도 예측할 수 있게 되는 것입니다.

 

 

위 예제를 파이썬을 통해 그래프로 나타낸 것 입니다.

위의 Original의 데이터들이 입력값으로 들어가 학습하게 되고

회귀모델(빨간선)을 만들어 내 실제 Y값이 아닌 시간만 알고 있는 X값으로 구성된 TestSet를

통해 정확도를 계산하게 됩니다.

 

머신러닝이 크게 세가지로 나뉜 것 처럼 지도 학습도 문제의 형식에 따라 두가지로 나뉠 수 있습니다.

바로 회귀(Regression)분류(Classification)입니다.

위의 예제처럼 연속적이며 기대되는 특정 결과값의 수치를 예측할 경우 회귀 문제라고 합니다.

이와 다르게 연속성을 띄지 않고 '참/거짓'과 같이 두가지로 결과값을 분류하는 경우를 이진분류(Binary Classification), '성적 등급(A/B/C/D/F)'과 같이 그 이상의 결과값으로 분류하는 경우를 다중분류(Multi-Classification)라고 합니다.

 

(Regression에는 Linear, Logistic이 있고, Classification에는 Naive Bayes, SVM, Random Decision Forests가 있습니다. 이중에 중요한 몇가지는 추후 컨텐츠에 다룰 예정입니다.)

 

 

2. 비지도 학습(Unsupervised Learning)

비지도 학습은 위에서 본 지도 학습과 달리 Input data(X값)에 대한 Label(Y값)이 없는 경우

(Labeling이 되어있지 않다고 합니다)를 말합니다.

주로 입력하는 변수들 사이의 관계를 이용해서 군집화를 하고,

데이터로부터 변수가 가질 수 있는 모든 값의 밀도(확률)를 추정 하는 것에 목표를 두고 있습니다.

실생활에서 비지도 학습을 사용하는 예를 찾아보면,

관심 아이템 및 구매 내역 특성에 따라 소비자를 분류하여 다른 아이템을 소개해줄수도 있고

자신이 관심있거나 좋은 평을 남겼던 영화에 따라 비슷한 유형의 영화를 소개시켜주는 등의 다양한 분야에서 사용됩니다.

 

위와 같이 x와 y에 대한 데이터를 분포해놓았을 때

유사성, 관련성이 있는 데이터들 끼리 군집을 이룹니다.

이 군집을 통해 구조를 만들고 분류 하는 것이 목표입니다.

 

 

 

3. 강화 학습(Reinforcement Learning)

 

강화 학습이란 상과 벌이란 보상(Reward)를 통해 상을 최대화하고 벌을 최소화 하는 방향으로 행위를 강화하는 학습 방법입니다.

강화 학습 모델은 위에 그림에서 볼 수 있듯이

행동 집합(Action), 환경 상태 집합(State), 보상 집합(Reward)로 구성되어 있습니다.

행동을 하는 주체(Agent)가 t 시점의 상태에서 행동(Action)을 하면

환경(Environment)로 부터 새로운 상태(St+1)와 새로운 보상(Rt+1)을 얻게 됩니다.

여기서 '보상(Reward)'이 강화 학습의 핵심입니다.

Agent는 계속된 시행착오를 통하여 누적된 보상을 최대화 할 수 있는 정책(Policy)를 개발하게 됩니다.

중요한 점은 즉시 보상보다 보상의 총합을 최대화 하는 방향으로 학습한다는 것입니다!

 

대표적으로 여러분들이 많이 들어 보았던 '알파고'에서 이 강화 학습 알고리즘을 사용하였습니다.

알파고는 정책망(Policy Network)이라고 불리는 신경망이 다음번 돌의 위치를 지정하고

가치망(Value Network)이라고 불리는 다른 신경망이 승자를 예측하는

심층 신경망(Deep Neural Network)으로 이루어져 있습니다.

 

또한 수많은 시뮬레이션 작업을 통해 행동가치가 높은 지점을 추려내는

몬테카를로 트리 탐색(Monte Carlo tree search, MCTS) 기법을 사용하였습니다.

이것이 알파고가 수많은 대국 시뮬레이션을 하는 이유입니다(추후 자세한 내용을 포스팅하겠습니다)

 

 

https://alphasquare.co.kr/home/stock/stockinfo?code=005930

 

알파스퀘어(AlphaSquare) - 스마트한 당신의 주식투자

주식정보 | 종목발굴 | 전략공유 등 알파스퀘어만의 ‘All In One’ 스마트 주식투자 플랫폼

www.alphasquare.co.kr

 


머신러닝(ML)

 

"Field of study that gives computers the ability to learn without being explicitly programmed”
-Arthur Samuel (1959)-

Arthur Samuel은 1959년 논문에서 최초로 머신러닝을 정의 하신 분 입니다.

머신러닝이란 한마디로 말하면

인간이 기계로 하여금 스스로 '학습' 할 수 있도록 프로그램화(코딩)를 하는 것입니다.

 

 

기계가 주어진 데이터를 스스로 학습해서

데이터간의 잠재적인 매커니즘을 밝혀내고

어떠한 패턴을 찾아내어

새로운 데이터에 대한 최적의 예측을 제공합니다.

 

다들 인간과 기계의 세기의 대결이라고 불리우는 이세돌 - 알파고간의 대국 기억나시나요?

 

알파고는 수많은 경험적 데이터들을 기반으로 스스로 학습하고

스스로 바둑을 두며 익혀 경우의 수가 무한한 바둑대결에서

세계적인 이세돌 선수를 상대로 4:1로 승리 하였습니다.

 

머신러닝은 실생활에서도 찾아볼 수 있습니다.

대표적으로 마케팅 분야에서 주로 사용되고 있습니다.

개별 소비자들의 소비패턴을 학습하여 개인 맞춤형 제품을 찾아주는 등

그 적용은 마케팅을 넘어 무한합니다.

삼성 갤럭시에 내장된 '빅스비', 스마트홈, 음성 인식, 자율주행자동차 등

많은 제품들에 적용된 인공지능(AI)과 머신러닝은 4차산업혁명에서 가장 핫한 주제입니다.

 

 

여기서 잠깐!

 

 

머신러닝이 주식투자에도 활용될 수 있습니다.

실제로 미국에서는 수 년 전부터 로보어드바이져가 도입되었습니다.

로보어드바이져(robo-advisor)는 로봇(robot)과 투자전문가(advisor)의 합성어로 즉,

로봇이 고도화된 알고리즘으로 자동으로 개인의 자산을 관리해주는 서비스 입니다.

 

이처럼, 주식투자에서도 머신러닝의 바람이 불고 있습니다.

수 많은 축적된 데이터를 기반으로 주가와 많은 변수들간의 상관관계를 학습하여

인간 대신 투자를 하는 방식입니다.

물론,

머신러닝을 기반으로 투자 포트폴리오를 구성한다고

해도 수익률이 저조하거나 마이너스 수익률을 기록할 수도 있습니다.

 

하지만 수 많은 경험적 데이터들을 기반으로 투자를 하기에

안정적인 수익률을 얻을 수학적 확률이 더 높겠죠?

그 외에도 자동화로 인해 인간의 수고를 덜 수도 있고

인간의 감정을 배제하여 더욱더 원칙에 맞는 투자를 할 수 있습니다.

실제로 제임스 시몬스의 '르네상스 테크놀로지'라는

알고리즘 트레이딩 회사는 위와 같은 투자방식으로 유명합니다.

 

얼마나 수익률이 좋으면 르네상스 테크놀로지의 창립자이자 CEO인

제임스 시몬스의 연봉이 무려 한화 2조에 달한다고 합니다.

 

 

 

 

https://alphasquare.co.kr/home/stock/stockinfo?code=005930

 

알파스퀘어(AlphaSquare) - 스마트한 당신의 주식투자

주식정보 | 종목발굴 | 전략공유 등 알파스퀘어만의 ‘All In One’ 스마트 주식투자 플랫폼

www.alphasquare.co.kr

 

이번 글에서는 Pandas DataReader 라는 모듈을 사용하여

Jupyter Notebook 에서 주가 데이터를 읽어 오는 법을 알아보려 합니다.

프로그래밍을 하나~~~~도 몰라도 누구나 이해하면서 쉽게 따라 할 수 있도록

자세하게 설명하였으니 차근차근 읽어보시면 좋을 것 같습니다.

 

 

모듈이란?

'파일 단위로 작성된 프로그램의 기능 단위'를 의미

-> 쉬운 이해를 위해 프로그램을 작성하는 일을 블록을 조립하여 로봇을 만드는 일이라고 생각해봅시다.

따로 만들어져있는 부품이 없다면 설명서를 보면서 작은 블록들을 하나하나 조립해 나가야 로봇이 겨우 완성될 것입니다.

하지만 내가 원하는 부분 (예를 들어 로봇의 팔이나, 다리, 몸통 등) 을 누가 조립해 놓았고

그것을 자유롭게 가져다 쓸 수 있다면 훨씬 수월하게 로봇을 만들 수 있을 것입니다.

 

프로그래밍에서 모듈이 바로 '조립되어있는 어떤 기능을 할 수 있는 부품'에 해당된다고 이해하시면 됩니다. 따라서 '모듈을 가져다 쓴다' == '누군가 블록으로 조립해놓은 부품을 가져다 쓰는 것'입니다.

파이썬의 모듈을 사용할 때에는 해당 모듈을 설치하고

불러오기만(import) 하면 해당 모듈에 구현된 함수 및 자료구조 등을 편리하게 사용할 수 있습니다.

 

 

그렇다면 우리가 사용할 pandas_datareader라는 모듈을 설치하는 방법을 알아보도록 하겠습니다.

먼저 아나콘다가 설치된 폴더에 들어갑니다.

그다음 Anaconda Prompt를 실행합니다.

위와 같이 pip install pandas_datareader라고 입력한 뒤 엔터키를 누릅니다.

여기서 pip install 은 특정한 모듈을 설치하라는 명령어입니다.

 

설치가 정상적으로 진행되었다면 위와 같은 메시지가 출력됩니다.

설치에 문제가 있거나 진행에 문제가 생겼다면 pip 설치 링크에서

자신의 운영체제에 맞는 pip 툴을 설치해보시고 다시 위 과정을 시도해 보시면 됩니다.

이로써 pandas_datareader라는 모듈이 파이썬에 설치되었습니다.

이제 Jupyter notebook에서 모듈을 불러와서 사용하는 법을 알아보도록 하겠습니다.

Jupyter notebook을 실행한 뒤 처음 셀에 다음과 같이 입력 한 후 실행(쉬프트 + 엔터) 합니다.

import pandas_datareader as pdr

 

정상적으로 실행되었다면 표시된 부분과 같이 ln [1]이라는 글씨가 떠있어야 합니다.

import pandas_datareader as pdr

위 코드의 뜻은 "pandas_datareader라는 모듈에 pdr이라는 이름을 붙여서 불러와라"입니다.

즉 우리는 이제 코드에서 pdr이라는 명령을 통해

pandas_datareader 모듈에 접근할 수 있는 것입니다.

 

 

그렇다면 이제 pdr이라는 이름으로 불러온 모듈을 사용해 보도록 하겠습니다.

두 번째 셀에 아래와 같이 코드를 입력합니다.

 

pdr.DataReader('KRX:005930', 'google', '2017-01-01', '2017-12-08')

이 코드의 뜻은 pdr이라는 이름을 가진 모듈에서 DataReader라는 함수를 사용하겠다는 뜻입니다.

그렇다면 파이썬에서 함수는 무엇일까요?

 

 

'함수는 x라는 입력이 들어오면 어떤 y 값을 뱉어내는 기계와 비슷한 것'

함수 박스 개념

파이썬에서 함수도 이와 같습니다.

우리가 입력한 pdr.DataReader 가 박스의 역할을 하는 것이고

그 옆의 괄호 안에 있는 값들, ('종목코드', '주가 데이터를 읽어올 곳', '시작일', '종료일')과

같은 양식으로 표현되어 있는 정보가 입력값인 x에 해당합니다.

이 x 데이터가 pdr.DataReader라는 박스를 거치면

그 기간 동안의 주가 데이터라는 y 값이 나오게 되는 것이고

주피터 노트북은 나오는 y 값을 바로 보여주는 역할을 합니다.

따라서 위에서 입력한 코드를 해석해보면 다음과 같습니다.

구글이 가지고 있는 삼성전자(KRX:005930이 삼성전자의 종목코드입니다) 관련 주가 데이터 중에서 2017년 1월 1일부터 2017년 12월 8일 사이의 데이터를 가져와라

 

그렇다면 함수가 실제로 작동하는지 보기 위해 두 번째 셀에 입력한 코드를 실행해봅시다.

데이터가 나온다면

1) 설정한 날짜와 다르게 현재의 날짜를 기준으로 1년치의 결과 나오거나

2) 에러가 발생하게 될 것입니다.

두가지 경우 모두 같은 이유 때문에 발생하는 현상인데,

구글에서 주가 데이터를 제공해주는 url이 최근에 변경되었기 때문 입니다.

DataReader라는 함수에 바뀌기 이전의 url 주소가 설정되어 있어서 에러가 나는 것입니다.

이 문제를 해결하기 위해 세 번째와 네 번째 셀에 다음과 같이 코드를 입력하고 두 줄 다 실행을 합니다.

 

from pandas_datareader.google.daily import GoogleDailyReader

GoogleDailyReader??

정상적으로 실행이 되었다면 다음과 같은 화면이 나타나게 될 것입니다.

뭔가 복잡해 보이고 어려워 보일 수 있지만

여기서 우리는 하늘색 테두리 친 부분만 최신 url 주소로 고쳐 주면 됩니다.

이 코드를 수정하기 위해서는 빨간색으로 테두리친 경로에 저장된 daily.py 라는 파일에 접근해야 합니다. 그러기 위해 저번 시간에 설치한 파이참을 실행하여 위의 경로에 있는 daily.py 파일을 열어 줍니다.

PyCharm에서 daily.py를 열어 놓은 화면

파일을 열어준 다음 위와 같이 url 주소를 http://finance.google.com/finance/historical 로 바꿔 줍니다.

수정이 완료되었다면 저장한 후 파이참을 종료합니다.

파이참을 통해 모듈 수정이 완료되었지만 켜져 있는 주피터 노트북에 그것이 바로 적용되지는 않습니다.

새로 바뀐 모듈을 import 해서 사용하려면

작업 중인 노트북을 종료(Shutdown) 했다가 다시 켜줘야 합니다.

먼저 아까 작업 중이던 주피터 노트북에서 디스크 버튼을 눌러 저장한 뒤 창을 닫습니다.

저는 Pandas_google_finance_data_reader.ipynb 라는 노트북에서 작업을 하고 있었는데

창을 닫아도 옆에 Running 이 떠있음을 볼 수 있습니다.

이를 종료시키기 위해 체크 버튼을 누릅니다.

체크 버튼을 누르면 아래 사진과 같이 Shutdown 항목이 생기는데 그 버튼을 눌러줍시다.

Shutdown 을 하면 다음과 같이 Running 표시가 사라지게 됩니다.

이제 다시 노트북에 들어가서 데이터 읽어오는 코드를 실행해 보도록 하겠습니다.

첫 번째 셀과 두 번째 셀의 코드를 차례대로 실행해 주면

다음과 같이 주피터 노트북에 시작일로 정한 2017년 1월 1일부터의 데이터가

력되는 것을 확인할 수 있습니다.

(1월 1일이 빠져있는 이유는 주식 장이 열리지 않는 날이기 때문입니다.

휴장일은 데이터가 없기 때문에 빠져있습니다.)

스크롤을 내려서 확인해 보면 우리가 종료일로 정한 12월 8일 이전까지의 삼성전자(KRX:005930) 주가 데이터가 출력되어 있음을 확인할 수 있습니다.

표의 각 항목을 설명하며 글을 마치도록 하겠습니다.

'Open'은 그날 장이 열릴 때의 시가를 의미합니다.

'High'는 그날 장에서의 최고가를 의미합니다.

'Low'는 그날 장에서의 최저가를 의미합니다.

'Close'는 그날 장이 마감할 때 수정 종가를 의미합니다(수정 주가에 대한 설명 보기)

'Volume'은 거래량을 나타내는 데이터입니다.


이번 글에서는 Pandas DataReader라는 모듈을 활용해서 Google Finance의 주가 데이터를 불러오는 방법에 대해 알아보았습니다. 다음 시간에는 주가 데이터를 불러오는 다른 방법들(키움 API 사용, 직접 크롤링하기)과 불러온 데이터를 파이썬으로 어떻게 처리 또는 시각화할 수 있는지 그 방법에 대해서 알아보려고 합니다.

질문이나 더 궁금한 점은 댓글로 올려주시면 저에게도 큰 도움이 될 것 같습니다! 다음 포스팅도 기대해주시길 바랍니다.

https://alphasquare.co.kr/home/stock/stockinfo?code=005930?source=tistory

 

알파스퀘어(AlphaSquare) - 스마트한 당신의 주식투자

주식정보 | 종목발굴 | 전략공유 등 알파스퀘어만의 ‘All In One’ 스마트 주식투자 플랫폼

www.alphasquare.co.kr

 

+ Recent posts