Professional Documents
Culture Documents
(R) 금융데이터마이닝 (V2 0)
(R) 금융데이터마이닝 (V2 0)
2017
Amateur Quant.
R을 활용한
금융 데이터 마이닝
Financial Data Mining
강 사 : 조성현
목 차
3. 금융 데이터 학습 개요
1. R 프로그래밍 기초
3-1. 학습 데이터 유형 (학습용 데이터, 평가용 데이터, 시험용 데이터)
1-1. R, RStudio 설치 및 사용자 인터페이스 3-2. 데이터 학습의 유형 (지도 학습, 비지도 학습, 강화 학습)
1-3. R 기본 자료형 (벡터, 행렬, 리스트, 데이터 프레임) 3-4. 데이터 전처리
목 차
7. 앙상블 기법 (Ensemble)
5. 군집 분석 (Clustering)
7-1. 과잉적합 문제와 Regularization
7-2. Cross validataion 시험
5-1. K-Means Clustering
7-3. 앙상블 기법 (배깅, 부스팅, 랜덤포레스트)
5-2. 계층 군집 분석 (Hierarchical Clustering : H-Cluster)
7-4. [실습] 앙상블 기법을 활용한 주가의 방향 예측 실습
5-3. [실습] K-Means Clustering을 이용한 주가의 패턴 분석
5-4. [실습] H-Cluster를 이용한 주가의 패턴 분석
8. 인공신경망 (Artifitial Neural Network)
6-2. 연관 규칙의 강도 척도 (지지도, 신뢰도, 향상도) 8-4. Instar 규칙, 경쟁학습모델 (Competitive learning model),
6-4. [실습] Apriori 알고리즘을 이용한 외국인, 기관, 개인의 8-5. [실습] 경쟁 및 자기조직지도 (SOM) 알고리즘
6-5. 분석의 문제점과 확장 (안) 8-7. [실습] 당일 시가의 기술적 지표를 이용한 당일 종가의 방향 예측 실습
8-8. [실습] 다중 분류 실습 (Multi Classification)
목 차
목 차
실습 파일
1. R 프로그래밍 기초
R 프로그래밍 도구 다운로드 및 설치
R의 기본 자료형 : (1) 벡터
벡터는 R 자료 구조의 가장 작은 단위로, Atomic Vector라 함.
# 숫자형 (numeric) 벡터 할당 # 벡터 연산
> x <- c(13, 27, 29, 17, 19, 23, 15) # x에 우변 값을 벡터로 할당함 >x+y*2 # 벡터의 각 요소들을 연산함
> y <- 1:7 # 1부터 7까지 1씩 증가한 숫자를 y에 벡터로 할당 [1] 15 31 35 25 29 35 29 # 연산 결과
> z <- seq(1, 14, 2) # 1부터 14까지 2씩 증가한 숫자를 z에 할당 # 결과의 첫 번째 요소 = x[1] + y[1] * 2
> u <- rep(10, 7) # 10을 7번 반복하여 u 벡터에 할당
> s <- sample(1:7) # 1부터 7사이의 랜덤 값을 s 벡터에 할당 # 결측치 (Not Available) 처리
> x;y;z;u;s # x, y, z, u, s 벡터 확인 > x <- c(13, 27, NA, 17, 19, NA, 15) # 2개의 결측치가 포함됨
[1] 13 27 29 17 19 23 15 # x 벡터의 내용 > is.na(x) # 요소 별로 결측치인지 아닌지 확인함
[1] 1 2 3 4 5 6 7 # y 벡터의 내용 [1] FALSE FALSE TRUE FALSE FALSE TRUE FALSE
[1] 1 3 5 7 9 11 13 # z 벡터의 내용
[1] 10 10 10 10 10 10 10 # u 벡터의 내용 > x[!is.na(x)] # 결측치가 아닌 정상적인 요소만 출력함
[1] 6 2 1 3 4 5 7 # s 벡터의 내요 [1] 13 27 17 19 15
> x <- c(13, 27, NA, 17, 19, NA, 15) > v <- c("happy", "new", "year") # 문자열 벡터 할당
> y <- 1:7 >v
>x+y [1] "happy" "new" "year"
[1] 14 29 NA 21 24 NA 22 # NA 부분은 연산 안됨 > is.vector(v) # 벡터인지 확인
[1] TRUE
> sum(x)
> class(v)
[1] NA # x의 NA 부분 때문에 연산할 수 없음
[1] "character“ # v는 문자형 객체임
> sum(x, na.rm = TRUE) # x의 NA 부분을 제외하고 연산함. > is.vector(v, mode = "character") # v가 문자형인지 확인함
[1] 91 [1] TRUE
> v <- vector(mode = 'numeric', length = 7) # 길이 7인 빈 벡터 생성 > is.vector(v, mode = "numeric") # v가 숫자형이 아님
요인 (Factor) 형 : 양적 데이터 (수치 데이터, 문자 데이터)를 카테고리 데이터로 표현함. (ex : “남자” M, “여자” F)
> fdata <- factor(data, labels = c("A", "B", "C")) [1] 27 # Factor 자료형을 수치 벡터로 변환하여 연산
# 행렬 생성 및 조회 # 벡터 -> 행렬 변환
# 행 혹은 열 추가, 삭제 # 행, 열의 이름 지점
> rbind(x, c(10, 15, 13, 19, 14)) # 마지막 행에 행 벡터 추가 > rownames(x) <- letters[1:3] # 행 이름을 알파벳으로 지정
[,1] [,2] [,3] [,4] [,5] > colnames(x) <- month.abb[1:5] # 열 이름을 월 약자로 지정
[1,] 1 4 7 10 13 >x
[2,] 2 5 8 11 14
Jan Feb Mar Apr May
[3,] 3 6 9 12 15
a 1 4 7 10 13
[4,] 10 15 13 19 14
b 2 5 8 11 14
c 3 6 9 12 15
> rbind(x[1:2, ], c(2, 4, 3, 9, 2), x[3, ]) # 2행 뒤에 행 벡터 추가
[,1] [,2] [,3] [,4] [,5] > t(x) # x 의 전치 행렬 (Transpose)
[1,] 1 4 7 10 13 a b c
[2,] 2 5 8 11 14 Jan 1 2 3
[3,] 2 4 3 9 2 Feb 4 5 6
[4,] 3 6 9 12 15 Mar 7 8 9
Apr 10 11 12
May 13 14 15
> cbind(x, c(1, 4, 2)) # 마지막 열에 열 벡터 추가
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 7 10 13 1
[2,] 2 5 8 11 14 4
[3,] 3 6 9 12 15 2
# 행렬 연산 # 내적과 역행렬
> x <- 1:4; dim(x) <- c(2,2) # 2 x 2 인 x 행렬 생성 > crossprod(x, y) # x’ y ~ x의 전치행렬과 y 행렬의 곱셈
> y <- x # x 와 동일한 행렬 y 생성 [,1] [,2]
[1,] 5 11
>x [2,] 11 25
[,1] [,2] > crossprod(x) # x’ x ~ x 행렬의 전치행렬과 x 행렬의 곱셈
[1,] 1 3
[,1] [,2]
[2,] 2 4
[1,] 5 11
>x+y # 행렬의 각 요소끼리 더함 [2,] 11 25
[,1] [,2]
[1,] 2 6 > install.packages('MASS')
[2,] 4 8 > library(MASS)
>x*y # 행렬의 각 요소끼리 곱함
> ginv(x) # x의 역행렬
[,1] [,2]
[1,] 1 9 [,1] [,2]
[2,] 4 16 [1,] -2 1.5
[2,] 1 -0.5
>x–y # 행렬의 각 요소끼리 뺌
[,1] [,2] > rowSums(x) # x 행렬의 행의 합계
[1,] 0 0
> [1] 4 6
[2,] 0 0
>x/y # 행렬의 각 요소끼리 나눔 > rowMeans(x) # x 행렬의 행의 평균
[,1] [,2] > [1] 2 3
[1,] 1 1
> colSums(x) # x 행렬의 열의 평균
[2,] 1 1
> x %*% y # 행렬 곱셈 ( % %는 특수 목적의 연산자임) > [1] 3 7
[,1] [,2] > colMeans(x) # x 행렬의 열의 평균
[1,] 7 15
> [1] 1.5 3.5
[2,] 10 22
리스트 (List) – 자료 형이 다른 여러 벡터들로 구성된 자료 구조임. 벡터는 동일한 자료 형만 가능하나 (자료의 동질성),
리스트는 다른 자료 형으로 구성된 벡터들을 포함함 (자료의 이질성). 리스트는 또 다른 리스트를 포함할 수 있음. Recursive Vector
$y # 행렬 $y
[,1] [,2] [,3] [,4] [,5] [,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13 [1,] 1 4 7 10 13
[2,] 2 5 8 11 14 [2,] 2 5 8 11 14
[3,] 3 6 9 12 15 [3,] 3 6 9 12 15
$z # 문자열 $z
[1] "Hello World" [1] "Hello World"
데이터 프레임 (Data Frame) : 엑셀의 워크시트 같은 방식으로 행과 열의 형태로 데이터를 관리함. (행렬과는 다름).
# 데이터 프레임 생성 및 조회
> grade$Alice # 학생 별 점수 조회 (벡터 형으로 조회됨)
> grade.A <- c(90, 80, 85, 78, 65) # 벡터 생성 [1] 90 80 85 78 65
> grade.B <- c(84, 76, 64, 74, 60) # 벡터 생성
> grade.C <- c(80, 96, 84, 84, 90) # 벡터 생성 > grade$Bob
> grade <- data.frame(A = grade.A, B = grade.B, C = grade.C) [1] 84 76 64 74 60
> grade # 생성된 데이터 프레임 (학생 별 점수)
A B C > grade$Charlie
[1] 80 96 84 84 90
1 90 84 80
2 80 76 96
3 85 64 84 > grade["korean",] # 행 이름으로 요소 조회 (학생 별 국어 점수)
4 78 74 84 Alice Bob Charlie Dennis
5 65 60 90 korean 90 84 80 72
> colnames(grade) <- c("Alice", "Bob", "Charlie")
> grade # 열 (Column)에 (학생) 이름을 지정함 > grade["korean", "Alice"] # 행 이름과 열 이름으로 요소 조회
[1] 90
Alice Bob Charlie
1 90 84 80
> grade[1,] # 행렬 방식으로 조회함. 1행의 모든 요소 조회
2 80 76 96
3 85 64 84 Alice Bob Charlie Dennis
4 78 74 84 1 90 84 80 72 # 데이터 프레임 형으로 조회됨.
5 65 60 90 > grade[,1] # 1열의 모든 요소 조회 (벡터 형으로 조회됨)
[1] 90 80 85 78 65
> rownames(grade) <- c("korean", "english", "mathmatics", "science", "history")
> grade[2,3] # 2행 3열의 요소 조회
> grade # 행 (Row)에 (과목) 이름을 지정함
Alice Bob Charlie Dennis [1] 96
korean 90 84 80 72 > grade$Bob[2] # 학생 Bob 의 두 번째 요소 조회
english 80 76 96 58 [1] 76
mathmatics 85 64 84 62
science 78 74 84 68
> grade$Alice[grade$Alice > 80] # 조건부 요소 검색
history 65 60 90 70
[1] 90 85
# 데이터 프레임의 파일 저장 및 읽기
> grade[1:2, ] # 1 ~ 2 행 조회
Alice Bob Charlie Dennis > write.csv(grade, “grade.csv”) # csv 형식으로 저장함
korean 90 84 80 72
english 80 76 96 58
# 엑셀에서 grade.csv를 읽음
> head(grade, 3) # 앞 부분부터 3개 행을 조회함
> tail(grade, 3) # 뒷 부분부터 3개 행을 조회함
> nrow(grade) # 행 개수 조회
> ncol(grade) # 열 개수 조회
> class(dgrade)
[1] "data.frame“ # dgrade 는 데이터 프레임임
산술 연산자
# 연산자 사용 예시
+ 덧셈
- 뺄셈 > 2 ^ 3; 2 ** 3 # 2의 3제곱 계산
[1] 8
* 곱셈
[1] 8
/ 나눗셈
^ or ** 제곱 >5/2 # 5 나누기 2 (결과는 실수)
%*% 행렬 곱셈 [1] 2.5
%/% 나눈 후 정수부분 > 5 %/% 2 # 5를 2로 나눈 후 결과의 정수 부분
%% 나눈 후 나머지 [1] 2
<- or -> 할당 연산자 > 5 %% 2 # 5를 2로 나눈 후 남은 나머지
[1] 1
<<- or ->> 전역 변수 할당 연산자 (함수에서 사용)
> x <- -5
> y <- ifelse(x > 0, "Positive", "Negative")
>y
[1] “Negative”
> df <- data.frame(x=c(1,2,3), y=c(4,5,6), z=c(7,8,9)) > lapply(df, sum) # 각 열 (column)에 sum() 함수를 적용한 후 결과를 list로 반환함
> df $x
xyz [1] 6 # sum(df$x) 와 동일함
1147
$y
2258
[1] 15 # sum(df$y) 와 동일함
3369
$z
# 각 행에 sum() 함수를 적용한 후 결과를 벡터로 반환 [1] 24 # sum(df$z) 와 동일함
> apply(df, 1, sum)
[1] 12 15 18 > sapply(df, sum) # lapply() 와 유사하나 결과를 벡터로 반환함
x y z
# 각 열에 sum() 함수를 적용한 후 결과를 벡터로 반환 6 15 24
> apply(df, 2, sum)
x y z # tapply() 예시
6 15 24 > data(iris)
> head(iris, 3)
# 각 행 (row)에 사용자 함수 (x * 2)를 적용한 후 결과를 행렬로 반환 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
> apply(df, 1, function(x) {x * 2})
2 4.9 3.0 1.4 0.2 setosa
[,1] [,2] [,3] 3 4.7 3.2 1.3 0.2 setosa
x 2 4 6
y 8 10 12 > is.factor(iris$Species) # Species는 요인 (factor) 자료형임
z 14 16 18
[1] TRUE
> levels(iris$Species) # Species는 3개의 요인으로 구성됨
# 각 열 (column)에 사용자 함수 (x * 2)를 적용한 후 결과를 행렬로 반환
[1] "setosa" "versicolor" "virginica"
> apply(df, 2, function(x) {x * 2})
x y z
# 요인의 수준 별로 mean() 함수를 적용함
[1,] 2 8 14
> tapply(iris$Sepal.Length, iris$Species, mean)
[2,] 4 10 16
setosa versicolor virginica
[3,] 6 12 18
5.006 5.936 6.588
xts 자료형 : 시간의 흐름에 따라 자료를 데이터 프레임 형식으로 관리함. 날짜, 시간을 키 (Key, or Index)로 자료를 관리함.
quantmod 패키지 : 주가 등 금융 시계열 데이터를 쉽게 관리하기위한 도구
xts, quantmod 사용 예시
> head(s, 3)
open high low close volume adjusted rtn
2010-01-04 803000 809000 800000 809000 239000 762853.0 NA
2010-01-05 826000 829000 815000 822000 558500 775111.4 0.01594148
2010-01-06 829000 841000 826000 841000 458900 793027.6 0.02285126
xts, quantmod 사용 예시
(첨부 파일 : 1.CollectData.R)
quantmod 사용 예시 – 주가 데이터 수집 (구글, 야후 사이트 등에서 주가 데이터를 읽어옴)
# File name : 1.CollectData.R
# 한 종목의 데이터를 가져온다 # 1.CollectData.R 파일을 읽어옴
getData <- function(x, from) { > source(‘1.CollectData.R’)
if (missing(from))
stock <- getSymbols(paste(x, ".KS", sep = ""), auto.assign = FALSE) # 삼성전자 데이터 전체를 수집합
else > samsung <- getData(‘005930’)
stock <- getSymbols(paste(x, ".KS", sep = ""), from=from, auto.assign = FALSE)
# 삼성전자의 2016-01-01 이후 데이터를 수집함
# 모든 분석은 수정 주가 (adjusted)를 이용한다 > samsumg <- getData(‘005930’, from = ‘2016-01-01’)
stock <- adjustOHLC(stock, use.Adjusted=TRUE)
# 종합주가지수 데이터 전체를 수집합
# 거래량이 0 인 데이터는 제외한다 (공,휴일) > kospi <- getKospi()
stock <- stock[Vo(stock) > 0]
# 종합주가지수의 2016-01-01 이후 데이터를 수집함
# colume 이름을 바꾼다 > kospi <- getKospi(from = ‘2016-01-01’)
colnames(stock) <- c("open", "high", "low", "close", "volume", "adjusted")
# 데이터 확인
getData <- stock > head(samsung)
}
open high low close volume adjusted
# 종합주가지수를 읽어온다 2016-01-04 1259099 1259099 1204139 1204139 306900 1204139
getKospi <- function(from) { 2016-01-05 1201141 1217129 1185152 1207137 216000 1207137
if (missing(from)) 2016-01-06 1207137 1207137 1167165 1174160 366700 1174160
stock <- getSymbols('^KS11', auto.assign = FALSE) 2016-01-07 1165167 1182154 1150177 1162169 282300 1162169
else 2016-01-08 1162169 1185152 1162169 1170163 257700 1170163
stock <- getSymbols('^KS11', from=from, auto.assign = FALSE) 2016-01-11 1155174 1165167 1145181 1151177 241200 1151177
quantmod 패키지를 이용하면 전략 모델링, Back Testing 등의 작업을 쉽게 할 수 있음. (첨부 파일 : 2.GoldenCross.R)
아래 (예시)는 기술적 분석의 Golden/Dead Cross 지표를 이용하여 간단히 Back test 해 본 것임.
단기, 장기 이동평균을 계산하고, 단기 이평이 장기 이평 위에 있을 때는 매수 포지션을 유지하고, 단기 이평이 장기 이평
아래에 있을 때는 매도 포지션을 유지하여 누적 수익률을 관찰해 봄. 단기 장기로 바뀔 때 (혹은 반대) 포지션을 변경함.
단기, 장기 이동평균 기간을 다르게 적용하면 성과가 다르게 측정됨. 최적 이동평균 기간이 존재하는가? 분석 기간에 따라 달라짐
이 테스트는 R의 기본 기능을 익히기 위한 것으로, 실제 전략으로 사용되기는 어려움.
> source('1.CollectData.R')
> source('2.GoldenCross.R')
> p <- getData('005930')
> r <- goldenCross(p['2013::'], 10, 30, chart=T) > r <- goldenCross(p['2013::'], 5, 20, chart=T)
단기 이평 = 5일, 장기 이평 = 20일
단기 이평 = 10일, 장기 이평 = 30일
> opt <- optimize(p['2007-01-01::2012-12-31'], 5, 40, 15, 120) 검색 기간내에서 최적 기간을 찾아냄 검색 기간 설정
user system elapsed 15일 120일
최적 이동평균 기간
87.35 0.06 88.30
ShrtMA LongMA LastRtn Stdev Sharp Remark 5일 20 ~ 140일
1 17 36 1.2742621 0.02196947 58.00150 Max return 6일 21 ~ 141일
Sharp ratio가 최대가 되는 이동평균
2 5 20 -0.6097235 0.02190166 -27.83915 Min stdev 7일 22 ~ 142일
기간은 17일, 36일 임
3 17 36 1.2742621 0.02196947 58.00150 Max sharp ratio .
> r <- goldenCross(p['2013-01-01::'], 17, 36, chart=T) 2013 이후에 최적 기간을 적용함 .
40일 55 ~ 175일
누적 수익률
2. 빅데이터와 금융 데이터마이닝
금융 빅데이터
빅 데이터란 기존 데이터베이스 관리도구로 데이터를 수집, 저장, 관리, 분석할 수 있는 역량을 넘어서는 대량의 정형 또는 비정형 데이터 집합 및 이러한
데이터로부터 가치를 추출하고 결과를 분석하는 기술을 의미함 (Wikipedia)
금융 빅데이터는 금융 분야의 데이터로 주로 거래 시장 데이터와, 공공정보, 뉴스정보, 공시정보, 그리고 소셜 데이터 등을 포함함. 거래 시장 데이터는 정형화된
데이터이며, 공공정보 등은 비정형되된 데이터이.
금융 빅데이터 데이터 분석 기술
거래 시장 데이터 공공 정보 소셜 데이터
패턴인식
증권사 API 증권사 HTS 공공정보 사이트 통계 사이트
Facebook
.
거래소 시세 증권사 제공 기업공시, 실적, 거시경제 지표 등
검색 Open API .
데이터 수집 시세 데이터 재무재표 등
.
데이터 마이닝 개요
데이터 마이닝이란 방대한 데이터 (Data)로부터 유용한 정보 (Information)를 추출하고, 의사 결정을 위한 지식 (Knowledge)을 얻는 일련의 과정을 말함.
(Data Information Knowledge Decision making)
데이터는 과거에 발생한 상황에 대한 사실적 자료들의 집합체이고, 정보는 데이터로부터 의사 결정에 관련된 사항들을 추출하여 상호 연관성, 상관성, 패턴 등을
분석하여 요약, 정리한 것임. 그리고 지식이란 객관적 사실에 입각한 정보들을, 추론하고 일반화시켜, 의사 결정에 유용한 형태로 변환한 것을 의미함.
일반화된 지식을 바탕으로 몰랐던 것을 알게 되고 (Inferring unknowns from knowns.), 미래의 결과를 예측 (Prediction) 해 볼 수 있음. (Prediction은 Forecasting
보다 Estimation 혹은 Inference 쪽에 더 가까움.)
데이터 마이닝은 새로운 기술은 아니며 기존의 기술들과 융합된 것임.
기계학습 : “A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at
tasks in T, as measured by P, improves with experience E” (Tom M. Mitchell) : 데이터마이닝 : “Experience” “Data”
기계 학습 인공 지능
시각화 기술
통계학 (Machine Learning) (Artificial
(Visualization)
Intelligence)
지식 탐사와 데이터 마이닝 (Knowledge Discovery in Database : KDD, Data Mining : DM)
KDD 도 데이터로부터 유용한 지식을 얻는 과정이라는 점에서 데이터 마이닝과 유사한 의미로 사용됨.
KDD는 1989년 첫 번째 워크샵에서 지식이 데이터에서 발견된 최종 산출물이라는 것을 강조하기 위해 위해 사용된 것으로 초기에는 KDD와 데이터 마이닝이
혼용되어 사용되었음.
1995년 캐나다 몬트리올에서 개최된 “The first international conference on knowledge discovery & data mining” 에서 KDD는 데이터로부터 지식을 발견하는
전체적인 프로세스로 정의함. 데이터 마이닝보다 넓은 개념.
KDD는 지식 발견을 위한 포괄적인 프로세스를 의미하고, 데이터 마이닝은 특별한 알고리즘이나 기술을 적용하는 KDD의 한 단계로 간주됨. (Data mining is the
analysis step of the "knowledge discovery in databases" process. - Wikipedia)
패턴
통계
인식
기계 학습 인공 지능
데이터베이스
데이터 마이닝
KDD
지식 탐사 과정
데이터 분석이란 수집/축적된 데이터를 기반으로 어떤 현상에 대한 사실적 정보를 추출하고 그 정보로부터 유용한 지식을 얻어 (추론적 정보) 과거 현상에 대해 깊이
이해하거나, 미래 상황을 예측하여 투자 의사결정에 활용하기 위한 과정임.
데이터 분석의 목적은 사실 (Fact)에 근거한 의사결정을 추구함에 있음. Data-Driven Decision making (DDD)
축적된 데이터는 정보화, 지식화 과정을 거치면서 그 가치가 커지고, 비지니스 활동을 통해 발생하는 데이터가 다시 축적되어 데이터로부터 얻을 수 있는 지식이
점차 증가함.
데이터 사이언스 영역
투자 의사결정
데이터 정보 지식
(Decision)
(Data) 정보화 (Information) 지식화 (Knowledge) 활용
데이터로부터 추출한
어떤 현상에 대한 데이터의 의미와 정보를 해석, 추론 지식을 투자 의사
사실적 자료 (Fact) 가치를 찾음. 하여 지식을 창출함. 결정에 활용함
금융 투자 활동을 통한 데이터 축적
데이터마이닝 프로세스
지식 발견을 위해서는 데이터 베이스로부터 분석 목적에 맞는 데이터를 선별하여 결과를 잘 설명할 수 있는 특징 (Feature) 집합을 생성함. Feature Generation.
특징 집합이 생성되면 데이터 표준화 등 전처리 과정을 거처 입력 데이터를 생성함. Feature Aggregation.
입력 데이터는 학습 데이터 (Training Data Set), 평가 데이터 (Validation Data Set), 시험 데이터 (Test Data Set)로 구분됨.
학습 데이터는 실제 학습 (분석)을 위한 데이터이고, 평가 데이터는 과적합 (Overfitting)을 방지하고, 일반화 특성을 향상시키기 위해 사용됨 (학습을 어느 수준까지
할 것인가를 결정함). 그리고 시험 데이터는 결과의 신뢰성을 확인하기 위해 사용됨. 학습 데이터와 평가 데이터는 학습 과정에서 사용된 데이터이므로 결과의
신뢰성 확인은 학습에 사용되지 않은 시험 데이터를 이용함.
데이터 마이닝 알고리즘을 이용하여 입력 데이터를 학습하고 신뢰성 검증 과정을 거치면 결과가 나옴. 학습 결과는 데이터 후처리 과정을 거쳐 결과 해석, 시각화
과정 등을 통해 의사 결정에 사용 가능한 형태의 지식으로 변환됨..
최종 산출물인 지식은 의사 결정 시스템의 하나의 입력으로 사용될 수 있음.
기계 학습
금융 데이터마이닝을 위한 가정 사항
금융 데이터는 자연과학, 사회과학이나 일반적인 비즈니스 데이터와 달리 특정한 패턴을 발견하기 어려우므로 과거 데이터를 분석하여 미래를 예측하기 어려움.
금융 데이터마이닝의 목표는 과거 데이터를 학습하여 “미래를 예측 (Prediction or forecast)하는 것”이라기 보다는 “몰랐던 사실을 알아내는 것 (Inference)” 임.
과거 데이터를 학습하여 미래를 예측하는데 목표를 두려면 아래의 가정 사항이 충족되어야 함.
주가의 미래 예측을 위한 가정 사항
Market action discounts everything : 주가, 거래량 등 거래 시장 데이터에는 금융 시장의 모든 정보가 반영되어 있음.
Prices move in trends : 주가에는 관성이 있어서 다른 사건이 발생할 때까지는추세 방향으로 움직이는 경향이 있음.
History tends to repeat itself : 주가는 과거의 패턴이 반복되는 경향이 있음. 과거의 패턴을 분석하면 미래를 예측할 수 있음.
Efficient-Market Hypothesis (EMH) : 금융 시장의 정보는 주가에 즉시 반영됨. 아래 그림의 (A).
주식 시장은 Efficient-Market이 아니라고 가정함. (B, C) 주가
B
News 등 공공정보 분석이 의미가 있다고 가정함. 균형 주가
Random Walk : 주가의 움직임은 Random walk 이며, 현재의 주가는 과거의 주가와 무관함. A
금융 데이터의 종류
금융 데이터는 수치 데이터인 거래 시장 데이터 (정형화된 데이터)와, 텍스트 데이터 (비 정형화된 데이터)인 뉴스, 공공정보, 소셜 데이터 등이 있음.
금융 데이터는 모두 통계적 기법을 이용하여 분석함. 텍스트 데이터도 통계분석을 위해서는 수치 데이터로 변환함 (ex : Term frequency)
시장의 거래 데이터
G7014KR4101G9000001
2360000000440093101110000000000 235751. 거래소
23705 구입
23520 증권사 API 수집
2. DMA 수집
23595005172000610249625040013705 23595000057
23590000175 23585000103 23580000128
23575000144010662 23600000108 23605000149
23610000159 23615000168 09310129
23620000161026710024002500380049006402337004100560
06900570061 diff order ask price bid order diff HTS, 인터넷
B6014KR4101G900000140013706 23595000058 0 61 161 23620 수집
23590000175 23585000103 23580000128 0 57 168 23615
23575000144010662 23600000108 23605000149 0 69 159 23610
23610000159 23615000168 0 56 149 23605
23620000161026720025002500380049006402337004100560 0 41 108 23600 0 0 요약,
0690057006109310127 00000 3 0 23595 60 26 2 리포트
B6014KR4101G900000140013705 23595000058 23590 175 25 0
23590000175 23585000103 23580000128 필터링, 23585 103 38 0
23575000143010662 23600000108 23605000149 가공 23580 128 49 0
23610000159 23615000168 23575 143 63 0
23620000161026710025002500380049006302337004100560
0690057006109310127 00000 0 2337 10662 23595 13707 2672 2
B6014KR4101G900000140013707 23595000060
23590000175 23585000103 23580000128 total value = A=0 P=3 0.00 3.00
23575000143010662 23600000108 23605000149 mystock 0.00 0 0.00 0 0.0
23610000159 23615000168 remain cnt = 0 00000 00000 0 C=0 0 p=23600 23595
23620000161026720026002500380049006302337004100560
0690057006109310129 00000
B6014KR4101G900000140013705 23595000060
23590000173 23585000103 23580000128
23575000143010662 23600000108 23605000149
23610000159 23615000168
3. 금융 데이터 학습 개요
분석할 데이터 세트를 훈련용 (Training), 평가용 (Validataion), 시험용 (Test) 으로 나누에서 분석함.
훈련용 데이터는 실제 학습할 데이터이고, 평가용 데이터는 어느 정도의 수준으로 학습하는 것이 적당한지를 결정하는 데 사용되고, 시험용 데이터는 학습의
최종 성과를 평가하기위해 사용됨.
참고 : k-Fold Cross validation
평가용 데이터 세트
(Validataion Set) 훈련용 데이터 세트
훈련용 데이터 세트
데이터를 나누어서 평가용 데이터 세트 훈련용 데이터 세트
(Sampling) 분석함
훈련용 데이터 세트
훈련용 데이터 세트
학습에
시험용 데이터 세트 사용되지
시험용 데이터 세트 시험용 데이터 세트 시험용 데이터 세트
(Test Set) 않음
지도 학습 (Supervised Learning)
- 훈련 데이터에 결과가 미리 주어진 상태에서 학습의 결과가 주어진 값 (목표 값)이 나오도록 학습 시키는 방법. 학습이 완료되면 결과를 알려 주지 않아도
스스로 추론한 결과를 제시함. 주어진 입력 값이 어는 부류에 속하는지 (Classification), 입력 값으로 예측이나 추정 (Regression)하는데 주로 사용됨.
- 훈련 데이터에는 결과 값이 같이 주어짐. 학습 과정에서 학습 결과와 주어진 결과와의 오차가 최소가 되도록 반복 학습함. 학습 결과를 이용하여 결과가
- 훈련 데이터의 패턴을 관찰하여 스스로 의미를 찾아냄. 서로 유사한 패턴끼리 묶거나 (Clustering), 연관 규칙 (Association)등을 찾아냄.
- 예측이나 추정 문제보다는 데이터가 어떻게 구성되어 있는지 밝히는데 주로 사용함. (데이터 요약, 정리)
- 과거 데이터를 학습하는 것이 아니라 현재 상태에서 시행착오 혹은 시뮬레이션에 의해 최적의 행동을 결정함. 시행착오 경험에 의해 행동을 점차 개선시킴.
- 현재의 데이터 (혹은 Experience)를 학습하여 어떤 Action을 취하고 결과에 대해 보상 (Reward)을 받음.
금융 데이터마이닝 프로세스
분석 목표가 설정되면 수집된 원시 데이터 (Trade & Market Data)로부터 목적에 적합한 특징 (Features) 혹은 속성 (Attribute)들을 생성함. Featrure Generation
생성된 특징들을 모두 모아서 학습이 가능한 형태의 특징 집합을 생성함. Feature Aggragation
데이터 전처리 (Preprocessing) 과정을 거쳐 기계학습 알고리즘에 입력함.
Data Cleaning (정제) : 데이터 누락이나, 중복, 잡음 , 이상치 (Outlier) 들을 수정 하거나 제거해야 함.
Data Integration (통합) : 데이터는 다양한 소스로부터 수집할 필요가 있음.
Data Transformation (변환) : 데이터는 속성 별로 스케일이나 단위 등이 다를 수 있으므로, 이를 표준화할 필요가 있음. (ex: Z-Score or Min-max Normalization)
Data Reduction (축소) : 분석 결과에 영향이 없다면, 데이터의 차원을 줄이는 것이 필요함. 중요도 분석을 통해 중요한 데이터에 더욱 집중해야 함 (차원의 저주).
Data Discretization (이산화) : 연속된 수치 데이터를 이산화 시킴. 이산화된 숫자, 분류 명이나 단위 명 등으로 대체함.
데이터 정제 (Cleaning)
누락 데이터 처리 방안 (예시)
- 평균, 중앙값, 최빈수 등으로 중심 경향 적인 데이터로 채우는 방법 : 단순한 방법이면서 크게 무리가 없는 방식이나, 데이터의 분산이 감소하고, 소수의 평균이
전체를 대표하는 경우가 발생하거나, 극단적인 값으로 평균이 영향을 받음.
- 데이터 분포에 맞게 랜덤 값을 생성하여 채우는 방법 : 데이터의 분포를 알고 있는 경우에만 적용 가능함.
- 회귀 분석에 의한 추정 값으로 채우는 방법 : 데이터 특성에 타당한 회귀식으로 중간의 누락 값을 추정함. 등.
이상 데이터 검출 (예시)
- 분석자가 Min, Max 범위를 설정하고, 이 범위를 벗어난 데이터들을 이상치로 판단함.
- 데이터의 평균과 표준편차를 계산하고 평균에서 너무 떨어진 데이터들을 이상치로 판단함. (ex : ± 3σ 를 벗어남)
- 데이터 간 최 근접 거리 (Nearest neighbor) 를 계산하여, 거리의 분포에서 멀리 있는 데이터를 이상치로 판단함.
- 데이터를 여러 개의 클러스터로 묶어 보고 (군집화, 그룹화), 각 그룹의 중심에서 멀리 떨어진 데이터를 이상치로 판단.
- 이상치도 하나의 정보가 될 수도 있음.
잡음 데이터 검출 (예시)
- 이동 평균에 의한 필터링 : 이동 평균에 비해 너무 높거나 낮은 값들을 잡음으로 판단함. 이동 평균으로 대체.
- Kernel 이나 Spline 등의 평활화에 의한 필터링 : 이동 평균은 데이터 후행성이 나타나므로, Kernel이나 Spline 사용.
- 푸리에 변환 등을 통한 Low pass, High pass 필터링. 등.
데이터 변환 (Transformation)
함수 식에 의한 데이터 변환 (예시)
- 데이터의 범위가 넓고 수치가 낮은 쪽이나 높은 쪽으로 크게 치우친 경우 로그나 제곱근 함수로 변환이 필요한 경우도 있음 (Right or Left Skewness).
예를 들어 장기간 주가 데이터의 경우 현재 주가가 과거 주가에 비해 높은 경우, 과거 주가의 등락은 잘 드러나지 않으므로 절대적 수준 보다 등락의 변화를
분석하고자 할 경우는 로그 주가를 이용함.
- 함수 식을 이용하여 데이터를 변환하는 경우는 데이터의 왜곡이 발생하므로 결과 해석에 이를 반영해야 함.
- 데이터 간 비교를 위해서는 평균과 분산을 표준화 시킬 필요가 있음. (Z-score Normalization)
- 너무 큰 값이나, 작은 값이 결과에 미치는 영향을 줄이기 위해 데이터를 일정 범위로 맵핑 시킬 필요가 있음.
(예 : 직선의 방정식이나 시그모이드 같은 함수를 이용하여 데이터의 범위가 0 ~ 1 또는 -1 ~ +1 사이에 있도록 변환)
Outlier
2008년 금융위기 이후
로그 변환
달러 발행량이 급격히
증가하였음. (QE1 ~ QE3) 과거에도 꾸준히 등락이
있었던 것을 알 수 있음.
과거에는 달러 발행이
거의 없었던 것처럼
인식될 수 있음.
데이터 분석을 위해서는 데이터를 표준화 시켜야 할 경우가 많음. 데이터의 크기가 Z-score Normalization
상이할 경우 분석 결과에 영향을 미칠 수 있으므로 스케일을 맞추어야 함.
데이터 표준화 방법은 Z-score normalization, Min-max normalization 등이 있음.
F ~ T 사이의 값으로 변환
(Min, max Normalization)
(F : From, T : To)
* 실습 파일 : 3-2.FeatureSetTA.R
기술적 분석 지표의 Feature 들로 데이터 세트 생성 실습
Yahoo에서 주가 데이터를 읽어와서 9개의 기술적 분석 지표로 구성된 훈련용, 시험용 데이터 세트를 생성함.
1 – 향후 5일간 평균 주가 하락 (Down)
9개의 기술적 분석 지표로
2 – 향후 5일간 평균 주가 보합 (Flat)
구성된 훈련용 데이터 세트
3 – 향후 5일간 평균 주가 상승 (Up)
4. 분류 기법 (Classification)
A B
알고리즘
Class 3
Class 1 1. 점 A 와 모든 훈련 데이터 사이의 거리를 측정함.
d - 거리는 평면상의 2점 사이의 거리로 측정 (Euclidean distance)
2. 측정한 거리가 작은 순으로 K 개의 점을 찾음. (ex : K = 9)
A
3. K개의 점들이 속한 클래스를 찾음.
d 4. K개의 점들이 속한 클래스가 가장 많은 것을 찾음. (다수결 원칙)
Decision
클래스 집합 = {1, 1, 1, 1, 1, 2, 2, 2, 4} 라면 클래스 1이 가장 많음.
Boundary Class 2
5. 점 A를 클래스 1로 분류함.
6. 시험 데이터를 이용하여 분류가 잘 되었는지 평가함.
Class 4 7. K 값과 훈련 데이터, 시험 데이터를 바꾸어 가면서 가장 정확하게
분류하는 K 값을 찾음. – Cross Validation
아래 예시는 20개의 훈련 데이터와 1개의 시험 데이터가 있을 때, 시험 데이터 (0.3, 0.1)가 어느 클래스에 속하는지 판단하는 예시임.
K = 5로 설정한 후 시험 데이터와 가장 가까운 5개의 점을 찾은 결과 5개의 점들이 속한 클래스 집합은 = {2, 2, 2, 1, 1} 임.
클래스 2 가 가장 많으므로 시험 데이터는 클래스 2에 속하는 것으로 추정함.
측정한 거리에 순위를 매기기 위해 Rank( ) 함수를, 5개 점들이 속한 클래스를 찾기 위해 Vlookup( ) 함수를 이용하였음.
이 시험 데이터는 어느
클래스에 속한다고
Class 2 가 가장
볼 수 있을까? 거리가 가장 짧은
많으므로 시험
5개를 찾음.
데이터를 Class 2
로 분류함.
시험 데이터와 전체 훈련
데이터와의 거리를
측정함.
* 실습 파일 : 4-1.KNN.xlsm (주가방향예측)
KNN 알고리즘 - 엑셀 예시 : 주가의 방향 예측
KNN 알고리즘으로 미래 주가의 방향을 예측해 봄. 훈련 데이터는 삼성전자의 일일 데이터 (2015.6.5 ~ 2016. 5.3) 임.
주가 방향과 관련된 속성 6개를 선택 (Feature Generation). (1) 스프레드는 주가의 5일 이평과 종가의 차이이고, (2) 가격 편차는 당일 고가 – 저가임. (3) 거래량은
일일 거래량이고, (4) 외국인, (5) 기관, (6) 개인은 주체 별 순 매수량임. 6개의 Feature 들과 수익률에 대해 5일 이동평균을 계산한 후 Z-Score 방식으로 표준화함.
미래 수익률을 예측하기 위해 당일 데이터의 수익률을 5일 후 평균 수익률로 대체함. 당일의 Feature가 어떤 상태일 때 5일 후 평균 수익률은 얼마인지를 표현한 것임.
수익률 -0.2% 이하이면 클래스 1 (하락), -0.2% ~ +0.2% 이면 클래스 2 (보합), +0.2% 이상이면 3 (상승) 으로 분류함.
시험 데이터 (2016.5.12)의 Feature를 이용하여 미래의 수익률이 어느 클래스에 해당하는지 평가. 클래스 3 으로 분류됨.
결과 : 5일 후 평균 수익률이 +0.2% 이상 상승할 확률 = 3/5 = 60%, -0.2% ~ +0.2% 일 확률 = 2/5 = 40%, =0.2% 이하로 하락할 확률 = 0%
향후 5일간 평균
금융 데이터는 경계를
수익률은 클래스 3에
결정하기 어려움.
속한다고 볼 수 있음.
분리가 어려움.
예측이 어려움.
가격 편차
주가 상승이 예상되며
클래스가 2와 3이므로
적어도 하락하지는 않을
가능성이 있어 보임.
Feature 들은 6차원이므로
공간 죄표에 시각화 할 수
없음.
스프레드
KNN 알고리즘으로 삼성전자의 주가 데이터를 수집하여 기술적 분석 Feature를 생성하여 내일 주가의 방향을 예측함. (상세 내역은 R-소스 참조)
최적 k = 168
내일 주가 방향 예측 결과 K
KNN 분류기는 훈련 데이터가 충분히 많으면 좋은 성능을 나타내지만, 차원이 증가하면 (Feature 개수가 많아지면) 성능이 저하됨. 차원의 저주
차원이 증가할수록 고차원 공간을 채울 데이터가 많이 필요하고, 멀리 떨어진 훈련 데이터를 참조해야하기 때문에 "근접이웃"에 한정하기 어려움.
예를 들어 Feature 개수가 3개인 경우 (3차원 공간, D=3인 정육면체), 테스트 데이터 주변의 훈련 데이터의 개수가 전체 데이터의 10% 를 유지하려면,
한 변의 길이가 s = (0.1) ^ (1/3) = 0.464 인 정육면체가 필요함.
D = 10인 경우 s = (0.1) ^ (1/10) = 0.8 로 증가하므로, 근접이웃의 영역이 급격히 증가함. 근접이웃이 아닌 멀리있는 데이터를 참조해야함.
Feature-3 f=10%
s
D=9
차원이 증가할수록
Feature-2
s가 급격히
증가하므로 D=2 D=1
근접이웃의 영역이
급격히 증가함
Feature-1
s
A
x >= b x >= c
Class = 1
Yes No Yes No
Class = 2
-2개 -4개 -4개 -4개
x -5개 -1개 -1개 -9개
a b c
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-7
4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)
Decision Tree (의사결정 나무) 알고리즘 : 불순척도 (Inpurity)와 최적의 분할 선택 기준 (분리 기준)
엔트로피
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 (p)
엔트로피 P=0.5 에서 불순 척도가 최대임
1. 초기분할 : x = a 인 경우 Gini 지수
지니 지수 - 11 개
Left
-1개
y
x=a - 10 개
Right
- 16 개
가중평균
2. 초기분할 : y = A 인 경우 Gini 지수
- 14 개
Upper 불순도가 더 낮음
A y=A -7개
x = a 로 분할하는
-7개 것이 좋음
Below
- 10 개
a x
Decision Tree의 특징
가지치기 (Pruning)
기술적 분석 지표들을 학습하여 내일 주가의 방향을 예측함. (기술적 분석 지표 : ATR, SMI, ADX, Aroon, Bollinger Band, OBV, MACD)
1 단계 : 복잡도를 증가시켜 (cp를 작게 설정함) 트리를 최대한 크게 성장 시킴. (과잉 적합인 상태임)
복잡도 (cp)는 트리가 커질수록 Penelty를 부여할 때의 penalty 상수로 정의함. cp 가 작을수록 penalty 효과가 작아지므로 트리의 복잡도가 증가함.
2 단계 : CV 오차가 최소가 되는 cp (=0.003268) 를 선정함. rpart는 자체적으로 CV를 수행하므로, validation 세트를 sampling 으로 인해 실행할 때마다 달라짐.
CV 오차가 최소인 지점
CV 오차가 최소인 지점
선정된 cp 를 이용하여 가지치기를 수행한 후 테스트용 데이터 세트를 이용하여 성능을 확인함.
예측용 데이터를 이용하여 내일 주가의 방향을 예측함.
가지치기 (Pruning) 후의 트리
CV 오차가 최소인 깊이를
가진 트리임.
이 지점은
100% 확률로
내일 주가가
하락할 것으로
예상.
이 지점은
57% 확률로
내일 주가가
상승할 것으로
예상.
분리 (Classification) 문제는 여러 클래스 간의 경계를 특정하는 문제로 볼 수 있음. 경계는 선형일 수도 있고 비선형일 수도 있음. 다차원 공간의 경우는 경계를
직관적으로 이해하기 어려움. 수학적으로 판단함.
왼쪽 그림에서 클래스 1 과 클래스 2를 구분하는 직선 2개 (A 와 B) 를 그려 보면, 두 직선은 훈련 데이터의 클래스를 완벽하게 구분하고 있음. 그러나 두 직선이
시험 데이터도 완벽하게 구분한다고 볼 수는 없음. 일반화 특성이 달라짐.
직관적으로 보면 직선 B 가 더 유용해 보임. 그 이유는 클래스 1 쪽과도 무리가 없어 보이고, 2 쪽과도 무리가 없어 보임.
두 직선을 오른쪽과 왼쪽으로 각 클래스의 점과 만날 때까지 각각 평행 이동 시켜 보면 B가 A보다 이동 폭이 큼.
이동 폭을 마진 (Margin) 이라 하고, 최대 마진을 갖는 경계를 찾는 것이 SVM 알고리즘의 기본 아이디어임.
최대 마진 (초평면)으로 경계를 생성하면 과잉 적합 (Overfitting) 문제가 작고, 일반화 특성이 좋아짐.
마진이 작음 마진이 큼
A
B
A B
A 를 좌,우로 평행 이동 Class 2
Class 1 시키면 여기서 만남.
Class 2 B 를 좌,우로 평행
Class 1 이동 시키면 여기서
만남.
선형 분리
d 를 최대화 = w 를 최소화
x (2) yi = +1
제한 조건
d
w
(2)
yi = -1 (1)
(3)
x (1) Primal Lagrange
(최소화)
Dual Lagrange
(최대화)
그림과 같이 3개의 훈련 데이터 (x1, x2, x3)와 클래스 데이터 (y1, y2, y3)가 있는 경우 Decision Boundary를 찾음.
훈련 데이터가 많은 경우 Quadratic Optimization 기법을 이용해야 하나, 직관적인 이해를 위해 훈련 데이터가 적은 경우로 단순화시켜 수작업으로 Decision
Boundary를 찾음. (N = 3, i = {1, 2, 3}, j = {1, 2, 3})
x (2) y1 = +1
x1 = (1, 3)
d y2 = +1
x2 = (2, 2)
(2)
x3 = (1, 1)
y3 = -1
(1)
(3)
x (1)
Dual
Lagrange가
최대가 되는 λ를
먼저 찾음.
이 값을 식 (8)에
대입하여 w 를 찾음.
식 (23)이 두 클래스 (+1, -1)의 여러 구분선 중 마진이 최대인 직선의 방정식 (Decision Boundary) 임.
Support Vector는 x1과, x2 임. λ > 0 인 곳이 Support Vector이고, 나머지 λ = 0 임.
아래 예시는 x1과 x2 만 있으면 Decision Boundary를 결정할 수 있다는 의미임.
식 (22) 에서 b는 -4 ~ -2 사이에 있으며, 중간 지점인 -3 이 최대 마진을 갖는 지점임. (-4와 -2의 평균 지점)
인공 신경망 등의 분류 방식은 지정된 오류 이하로 학습되면 그 지점에서 Decision Boundary를 결정하는데, 이것은 여러 구분선 중 하나가 됨. 최적의 구분선이라
할 수는 없음.
SVM 은 여러 구분선 중 마진이 최대가 되는 직선을 찾기 때문에 일반화 특성이 우수함.
x (2)
3
x1 Support
x2 Vector
2
1
x3
경계를 벗어난 데이터를 허용함. Slack 변수를 추가하여 경계에 대한 제한 조건을 완화함. (식 24)
목적 함수에 (식 25) Loss에 대한 Penalty 항을 추가함. C는 모형의 복잡도를 조절하는 상수로 분석자가 지정함.
Dual Lagrange는 식 (10)과 동일하므로 (제한 조건만 다름) 선형 분리가 가능한 경우와 동일하게 (Quadratic Programming) λ 를 구할 수 있고, 식 (27)로 w 를
구할 수 있음. (나머지 변수는 KKT 조건으로 구할 수 있음.)
x (2) yi = +1
yi = -1 제한 조건
x (1)
- 이라면, 가
되어 제한 조건에 위배되지 않을 수 있음.
x2 Φ(x2)
원래 공간 변환 공간
B yi = +1 C yi = +1
A
변환
Φ(x)
yi = -1 yi = -1
x1 Φ(x1)
20개의 학습 데이터 (훈련 데이터) 세트 및 이진 클래스 (+1 or -1)에 대해 의사 결정면 (Decision boundary)을 결정함.
선형 분리가 가능한 경우의 예시임. Support Vector는 모두 3개이며, Support Vector의 라그랑지 승수는 0 보다 큼.
의사 결정면 (Decision boundary)은 Support Vector 까지의 마진이 최대가 되는 지점임.
Decision boundary
Support Vector
선형 분리가 불 가능한 경우의 예시임. 경계 조건을 위반한 사례가 2건 있음. 이 사례를 허용하여 의사 결정면을 결정함.
경계 조건을 위반한 사례들을 허용하도록 조건을 완화하면, Boundary가 위반 사례 쪽으로 이동하는 모습을 볼 수 있음.
의사 결정면의 최대 마진이 커지고 (Support Vector가 뒤로 물러남), 마진 범위 내에 일부 데이터가 존재하게 됨.
Decision boundary
경계 조건을
위반한 데이터
Kernel function 으로 Radial Basis function (RBF)을 사용한 경우의 예시 – C과 Gamma를 변화시켜가면서 특성을 비교함.
RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 (C = 100, Gamma = 0.1)
RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 – CV 오차가 최소가되는 C와 Gamma를 선택함.
Gamma, C 를 조합하여 CV 오차가 최소인 지점을 찾음. (범위를 더 넓힐 필요가 있음 시간이 오래걸림)
CV 오차가 최소인 지점
RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 – CV 오차가 최소가되는 C와 Gamma를 선택함.
일반적으로 SVM의 성능은 우수한 것으로 알려져 있으나, 기술적 지표로 Feature 데이터를 구성한 경우에는 성능이 좋지 않음.
그 이유는 분석에 사용된 데이터 세트가 분류에 적당한 데이터가 아니기 때문임. 더 나은 데이터 세트를 만들기 위해서는 금융 이론과 조화를 이루어야 함.
MACD
ATR
5. 군집 분석 (Clustering)
중점을 변경함
p
A
점 p는 중점 A에 가까움
중점을 변경함
중점을 변경함
4개 클러스터의
중점을 찾았음.
캔들스틱의 형태를 4개로 분류하여 4가지 유형으로 군집화 함. 예 : 군집-(1) = 큰 양봉 (장대 양봉), 군집-(2) = 큰 음봉 등.
K-Means 알고리즘으로 4개의 초기 중심 좌표를 설정하고, 각 캔들에서 중심 까지의 거리가 최소가 되도록 중심을 조절함.
캔들 차트 (원본 데이터)
K-Means Clustering 알고리즘 구현 예시 : 주가의 캔들스틱 차트 군집화 – 사람과 K-Means 알고리즘의 인식의 차이
2 차원
4 차원
1 차원
3 차원
기계
사람 K-Means Clustering
* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 실습 (학습 데이터 세트 생성)
Yahoo 사이트에서 삼성전자 주가를 읽어와서 종가를 기준으로 패턴을 8개의 그룹 (클러스터)로 분류함.
아래와 같이 종가 20개를 한 개의 패턴으로 (약 1개월 패턴) 정의하고, 각 패턴을 8개의 그룹으로 분류함. 각 그룹에는 유사한 패턴끼리 모여있음.
종가를 3일씩 건너뛰면서 20개씩 벡터로 모아서 각 벡터마다 한 개의 패턴이 되도록 함.
변환
일일 종가 데이터 세트 : 일일 종가를 20개씩 표준화한 후 (Normalization, Z-score) Colume에 표시함. Colume당 1개의 패턴을 갖음.
Normalize
* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (20일 주가를 8개의 유사 패턴으로 분류함)
* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (1번 유사 패턴 확인)
* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (최근 유사 패턴 차트 확인)
최근 100 기간의 종가 차트 위에 패턴 번호를 표시함. 최근에는 주로 1, 4, 5 번 패턴이 발생했음.
패턴 번호로 그린 최근 삼성전자 주가 차트
최근 100 기간 동안 발생한 패턴의 비율을 확인함. 4, 5 번 패턴이 주로 발생하였음 (Multinomial 분포). 패턴 번호는 실행할 때마다 달라짐.
군집 분석 (Unsupervised)의 결과물은 Supervised Learning의 입력이 될 수도 있고, Bayesian Inference 같은 방법으로 Next likelihood pattern 분포 등을 추론해
볼 수도 있음. 패턴 분석의 과제임.
최근 패턴 발생 횟수 분포
4번, 5번 패턴이
많이 발생하였음.
2-Cluster
3-Cluster
4-Cluster
[ Dendrogram ] A B E D C
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-12
5. 군집 분석 (Clustering) – 계층 군집 알고리즘 (Hierarchical Clustering : H-Cluster)
* 실습 파일 : 5-5.Hcluster(Pattern).R
H-Clustering 알고리즘 구현 실습 : 주가의 패턴 분석 (20일 주가를 8개의 유사 패턴으로 분류함)
K-Means 실습용 데이터 세트를 이용하여 Dendrogram을 작성함. (전체는 복잡하게 보이므로, 일부만 작성함)
* 실습 파일 : 5-5.Hcluster(Pattern).R
H-Clustering 알고리즘 구현 실습 : 주가의 패턴 분석 (1번 유사 패턴 확인)
1 번 패턴은 하락하다가 등락을 거듭하는 모습임.
* 실습 파일 : 5-5.Hcluster(Pattern).R
H-Clustering 알고리즘 구현 실습 : 주가의 패턴 분석 (1번 유사 패턴 확인)
1 번 패턴은
최근 하락하다가
100 기간의 등락을
종가 차트 위에거듭하는 모습임.
패턴 번호를 표시함. 최근에는 주로 2, 3번 패턴이 발생했음.
6. 연관 분석 (Association)
연관 규칙 (Association Rules)
연관 규칙 #1 : { 네이버 } { POSCO }
* 참조 : Introduction to Data Mining (데이터 마이닝), p 320 ~, (by 용환승, 나연묵, 박종수 등)
지지도 카운트 : 특정 종목 집합을 포함하는 트랜젝션의 개수. 예) { 네이버, POSCO } 의 지지도 카운트는 3이고, { 한국전력, POSCO }는 2 임.
표기 : X = { 네이버, POSCO } 일 때 σ (X) = 3, Y = { 한국전력, POSCO } 일 때 σ (Y) = 2 , σ (X ∪ Y) = σ { 네이버, POSCO, 한국전력 } = 2
연관 규칙은 X Y 으로 표시하고, 한 연관 규칙의 강도는 지지도 (Support)와 신뢰도 (Confidence), 향상도 (Lift)로 측정할 수 있음. (N : 트랜젝션 개수)
지지도가 낮을수록 우연히 발생할 가능성이 높아짐. 지지도는 유용하지 않은 규칙들을 제거하는데 사용할 수 있음.
(예시)
신뢰도가 높을수록 X를 포함하는 트랜젝션에 Y가 존재할 가능성이 높아짐.
X = { 한국전력, 네이버 }
연관 규칙에 의한 추론은 인과관계 (Causality)를 의미하는 것보다는 동시 발생 관계를 의미함.
Y = { POSCO }
σ (X ∪ Y) = 2
[ 그림 – 1] 외국인 일일 구매 목록 [ 그림 – 2] 이진 목록 행렬 (Item Matrx in sparse format)
σ (X ) = 3
N=5
s (X Y) = 2/5 = 0.4
c (X Y) = 2/3 = 0.67
Lift(X Y) = 2/3 * 5/3 = 10/9 =1.11
데이터에서 연관 규칙을 찾는다는 것은 지지도와 신뢰도가 임계치 이상인 모든 규칙을 찾는 것을 의미함. (임계치 : minsup, minconf)
Brute Force 방식은 가능한 모든 규칙들에 대해 지지도와 신뢰도를 전부 계산하는 것임. Item이 한 개 증가할 때마다 부분 집합 개수는 기하 급수적으로 증가함.
지지도는 (X ∪ Y) 에만 의존하므로 부분 집합이 같으면 지지도는 모두 동일함. 예) { a, b } { c } 이 지지도와 { a } { b, c }의 지지도는 동일함. (6개 조합)
만약 (X ∪ Y) = { a, b, c } 이 빈번하지 않다면 (빈발하지 않다면), 즉, 지지도가 낮다면 6개 규칙의 신뢰도는 계산할 필요가 없음. 조합을 줄일 수 있음.
규칙 검색 알고리즘의 기본 절차 :
1. 빈발 항목 생성 : 지지도 임계치를 만족하는 모든 항목 집합을 찾음. 빈발 항목 집합 (Frequent item set)
빈발 항목 집합을 줄이는 것이 관건임
2. 규칙 생성 : 빈발 항목 집합에 대해 높은 신뢰도나 향상도를 갖는 규칙을 추출함.
a b c d
빈발 항목 집합에 불필요한 부분 집합이 포함되지 않도록 가지치기가 필요함.
원시 데이터 분석 대상
원시 데이터로 외국인이 매도한 장바구니 트랜젝션 데이터를 구성함. (Market basket transaction)
외국인 거래 종목별 비중
{A,B} C
C
분석의 문제점
이 분석 결과는 1년 동안 20종목에 대한 분석이므로 일반적인 규칙이라고 볼 수는 없고, 해당 기간의 특수한 상황으로 볼 수 있음.
일반적인 규칙을 얻기 위해서는 오랜 기간, 많은 종목들을 대상으로 분석해야함. (예 : 10년간 200 종목에 대한 규칙 등)
금융 데이터는 다른 분야의 데이터보다 랜덤 성분이 강하기 때문에 이런 규칙을 얼마나 신뢰할 수 있는지는 의문임. 즉, 고객들의 구매 성향은 비교적 Static한 반면,
투자자의 구매 성향은 Dynamic 함 (변덕이 심함). 그래도 참조할 만한 결과를 얻을 수는 있을 것임.
이진 분석은 매수, 혹은 매도에 한정해서 분석한 것이나, 범주형 분석을 이용하면 매수와 매도를 동시에 분석할 수 있음.
금융 데이터의 경우는 고객들 (투자자들)이 매수와 매도, 즉, 양방향으로 구매하기 때문에 이것을 동시에 분석해야 더 의미있는 규칙을 찾을 수 있을 것임.
예를 들어, 어떤, 어떤 종목들을 매수할 때 어떤 종목들을 매도하는지에 대한 규칙을 만들어 볼 수 있고, 이런 규칙에서 더 많은 정보를 얻을 수 있음.
확장 (예시-2) – 시차 분석으로 확장
이진 분석이나 범주형 분석은 동일한 날짜에 구매한 목록들을 분석하는 것이지만, 시간의 흐름에 따른 구매 성향을 분석해 보는 것도 유용할 것임.
예를 들어 어느 날 어떤 종목들을 매수하면, 그 다음 날은 어떤 종목들을 매수하거나, 매도하는 경향이 있는지 등을 분석해 볼 수 있음.
이 규칙을 이용하면 내일의 구매 경향을 추정할 수 있으므로 투자 의사결정에 도움이 될 것임.
X Y 라는 규칙에서 X는 과거 목록의 부분집합이고, Y는 미래 목록의 부분집합임.
7. 앙상블 기법 (Ensemble)
모형이 복잡하거나 학습이 과도하면 훈련 데이터 자체는 정확히 설명할 수 있으나, 학습에 사용되지 않은 시험 데이터에 대해서는 설명력이 떨어질 수 있음.
과잉적합 문제 (Overfitting) 일반화 특성이 좋지않음.
데이터 마이닝에서 과잉적합은 일반화 성능을 떨어뜨리는 주요한 요인이므로 대단히 중요한 문제임.
과잉적합을 방지하기 위해서는 Validation 데이터를 이용하여 오류를 평가하고 최적의 학습 중단 지점을 설정해야 함.
오차를 최소화하는 함수에 (Cost function) 모형의 복잡도에 대한 Penelty 항을 추가함. Penelty 항으로 인해 복잡도가 증가할수록 오차는 증가하므로, 오차를
최소화하려는 알고리즘이 복잡도가 증가하지 않는 방향으로 진행함. Regularization
오차
시험 데이터의 오차
시험 데이터의 오차
Optimal Optimal
Variance
훈련 데이터의 오차
Bias 2
모형이 복잡해질수록 훈련 데이터에 대한 설명력은 증가함. (훈련 데이터의 모형이 복잡해질수록 훈련 데이터에 대한 설명력은 증가함.
오차 감소). 그러나, 학습 결과를 학습에 사용되지 않은 시험 데이터에 학습 오차 감소 (Bias 2 감소)
적용하면 오차가 감소하다가 다시 증가함. Overfitting Overfitting 되면, 데이터에 따라 결과의 편차가 커짐 (Variance 증가)
시험 데이터의 오차가 최소가 되는 수준에서 모형의 복잡도를 결정함. 시험 데이터의 오차가 최소가 되는 수준에서 모형의 복잡도를 결정함.
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-2
7. 앙상블 기법 (Ensemble) – Cross Validation (교차 검증)
훈련 데이터로 학습한 후 동일한 훈련 데이터를 평가하면 당연히 좋은 성과가 나옴. 훈련 데이터로 학습한 결과를 학습에 전혀 사용되지 않은 시험 데이터에
적용해서 적용한 모형의 성과를 측정해야 함.
전체 데이터를 훈련 데이터 세트와 시험 데이터 세트로 구분함. 훈련 데이터와 시험 데이터가 골고루 분산되도록 구분함.
K-fold Cross Validation : 전체 데이터를 K 구간으로 나눈 후 각 구간에서 시험 데이터 하나씩 할당함. 시험 데이터를 제외한 데이터 (훈련 데이터)로 학습하고,
제외했던 시험 데이터에 결과를 적용해서 정확도, 오류 율 등을 확인함.
아래 예시는 전체 데이터를 4 구간으로 나누어 Cross Validation을 적용한 것임.
Cross Validation은 알고리즘 간 성능 비교에 사용될 수 있고, 동일 알고리즘 내에서도 정확도 평가를 위해 사용됨.
1 2 3 4
4 훈련 데이터 시험 데이터
단일 분류 알고리즘을 사용하는 것보다 여러 알고리즘을 사용한 후 결과를 종합하는 것이 좋음. 정확도, 일반화 특성 증가
훈련 데이터를 여러 개의 서브 훈련 데이터로 나눈 후 (샘플링) 각 서브 훈련 데이터를 서로 다른 알고리즘으로 학습한 후 결과를 종합함. 각 알고리즘 결과의
다수결로 결정함.
배깅 (Bagging or Bootstrap Aggregation)
훈련 데이터를
결과의 분산 (변동)이 감소함 .
서브 서브 ... 서브
데이터 데이터 데이터 여러 개로 나눔
(균등 분포) 부스팅 (Boosting)
서브 서브 ... 서브 훈련 데이터를
데이터 데이터 데이터 여러 개로 나눔
(균등 분포)
(여러) 분류기로 2 1 2 2
트리-1 트리-2 ... 트리-n
각각을 학습함
첫 번째 테스트 데이터 시험 결과 :
- 1번 서브 데이터는 class = 2로 분류하였고
- 3번 서브 데이터는 class = 1로 분류하였음.
- Class = 1이 4개, class = 2가 6개 이므로
- 다수결에 의해 2로 분류함.
- 기술적 분석 지표로 구성된 훈련 데이터의
경우는 5 : 5 가 발생하는 경우가 많아
좋은 성능을 기대하기는 어려움.
훈련 데이터를 Boosting 방식으로 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함 (서브 트리의 가중치가 다름).
훈련 데이터를 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함. (트리 개수에 따른 오차의 변화 관찰)
서브트리 개수 별 훈련 데이터 오차
트리 개수가 많아질수록 서서히 감소함
Down
OOB
Up
서브트리 개수 별로 측정된 오차
훈련 데이터를 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함. (트리 개수에 따른 오차의 변화 관찰)
Down
OOB
정확도는 약 48.57%
8-1. 인공신경망 개요 및 역사
w21 w36
8-2. 인공신경망 동작 원리 (분류, 군집)
8-3. 학습 규칙 (델타, 오류 역전파 알고리즘)
8-4. Instar 규칙, 경쟁학습모델 (Competitive learning model), 자기 조직 지도 모델 (SOM)
8-5. [실습] 경쟁 및 자기조직지도 (SOM) 알고리즘 w19 w20
w1 w2
8-6. Global Optimization 문제
8-7. [실습] 당일 시가의 기술적 지표를 이용한 당일 종가의 방향 예측 실습
8-8. [실습] 다중 분류 실습 (Multi Classification)
a b c d
이 길이의 합이
각 뉴런의 w1 w3
최소가 되는
직선을 찾음. 출력 계산 w2
x Out 방법
출력 값 x y z
임계치
0 활성 함수
출력층
w7 w9
Σ
w8 Sigmoid
그래프 표현
확장 은닉층
C w2 w5
w1 w2 비선형
w1 w4 신경 세포 (Neuron)
w3 w6
연결 (Connetion)
입력층
개략적인 인공신경망의 역사 : 중요 사건 중심
SVM Kernel,
2006 Deep Learning 전성 시대
GP 등이 인기
* 실습 파일 : 8-1.ANN(Classfication).xlsm
Neural Network (인공 신경망) 알고리즘 (예시 - Classification)
아래 예시는 XOR 패턴을 학습하는 분류 문제에 대한 것임. XOR 문제는 인공 신경망 발전의 큰 계기가 된 전환점임. (MLP, Backpropagation)
입력 패턴 = {(0,0), (0,1), (1,0), (1,1)}을 입력받아 출력 패턴 = {0,1,1,0}이 나오도록 6개의 w를 결정함.
입력 패턴을 학습한
결과임.
입력 패턴을
학습하면서
가중치를
초기 연결 가중치를 랜덤하게 부여함
업데이트 함.
학습 알고리즘은 오류 역전파
(일반화된 델타 규칙) 방식을
사용하였음.
Sigmoid 함수의 미분
출력층
하위 뉴런의 출력 * weight
Gradient Descent
참고 사항 : 델타 학습 규칙 (Delta Rule) – 의미 분석
델타 학습 규칙 (Delta rule)
Chain Rule
은닉층
은닉층의 연결 가중치 변경
입력층
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-8
8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (Instar 와 경쟁학습모델)
Neural Network (인공 신경망) 알고리즘 – Instar 및 경쟁학습모델 (Competitive learning model)
Unsupervised Learning은 입력 패턴만있는 학습 데이터가 사용됨. 출력층의 목표값 (Desired output)이 없음.
입력 패턴이 입력되면 각 뉴런들은 자신의 연결 가중치가 주어진 입력 패턴과 유사해지도록 연결 가중치를 조절함. Instar 학습 규칙 (좌측 하단 박스 참조)
이 과정이 반복되면 뉴런들은 특정한 입력 패턴에만 반응하게 되고, 결국, 입력 패턴들은 몇 개의 클래스로 분류됨 (Clustering).
연결 가중치가 입력 패턴과 유사하다는 것은 어떤 입력 패턴이 입력되었을 때 특정 뉴런의 활성값이 크다는 것임.
경쟁에서 이긴 승자 (Winner) 뉴런에 대해서만 연결 가중치를 조절함. 경쟁학습모델
학습 절차 : (1) 입력 패턴 제시 (2) 기존의 W와 입력 패턴으로 Winner 뉴런 검색 (2) Winner 뉴런의 연결 가중치 조절 (Instar) 반복
(예시) (0.8, 0.1) 은 클래스 1 (Big & Small 패턴), (0.1, 0.8) 은 클래스 2 (Small & Big 패턴) 로 분류함.
Neural Network (인공 신경망) 알고리즘 – Instar 및 자기 조직 지도 모델 (Self Organizing Map model : SOM) – Kohonen 모델
클래스 = 1 클래스 = 4
(-) 경쟁
(+) 경쟁 (+) 경쟁
(+) 경쟁
1 2 3 4 5 6
패턴 인식 : 2, 3, 4 를 구별함
입력 뉴런 수
= 10 X 20 pixel
시가 고가 저가 종가
* 실습 파일 : 8-2.ANN(Clustering).xlsm
Neural Network (인공 신경망) 알고리즘 (예시 - Clustering) – Instar 및 SOM 학습 규칙
훈련 데이터 (입력 패턴)를 4개의 클러스터로 군집화. 학습 규칙은 Grossberg의 Instar 규칙과, Kohonen의 Self-Organized Map (SOM) 규칙을 사용하였음.
K-Means 군집화와
유사한 결과임.
학습 결과 가중치
클러스터의
중심을 의미함.
* 실습 파일 : 8-1.ANN(Classfication).xlsm
* 실습 파일 : 8-2.ANN(Clustering).xlsm
Global Optimization 문제
통계, 수치해석, 데이터 마이닝 등 최적화를 다루는 많은 분야에서 Global min. (or max) 값을 찾는 문제는 대단히 중요함.
예 : argmin (MSE) – Mean Square Error가 최소일 때의 조건을 찾음.
Error 공간 (다차원 공간)에서 Error의 지역 최소점이 여러 군데 존재하는 경우 초기값에 따라 지역 최소점을 찾을 수도 있음.
1) 번의 경우는 지역 최소점을 찾을 수 있고, 2) 번의 경우는 전역 최소점을 찾을 수 있음. Error 함수가 다차원 공간에 있고 찾을 범위가 넓은 경우 전역 극소점을
찾는 것은 쉬운 문제가 아님.
해를 찾는 가장 일반적인 방법은 곡면의 경사를 타고 내려가면서 최소점을 찾는 방식 (Gradient Descent : GA) 이지만, 이 방법은 초기값에 따라 지역 최소점을
찾을 수도 있고, 전역 최소점을 찾을 수도 있음.
지역 최소점
Particle Swam Optimization (PSO) 알고리즘.
(Local Min.)
전역 최소점 - 새 때나, 물고기 때가 몰려다니면서 먹이를 찾는 과정에 착안하여 전역
(Global Min.)
최소점을 찾음.
- 처음에 랜덤 위치에서 여러 Particle을 놓고 서로 통신하면서 점차 전역
찾고 싶은 위치
최소점으로 몰려가서 극소점을 찾음.
당일 시가를 대상으로 기술적지표 (RSI, EMA cross, MACD signal, BBand,)를 학습하여 당일 종가의 방향을 예측함.
0 ~ 1 사의의 값으로
Normalization
훈련 데이터 세트
학습
인공신경망
시험 데이터 세트
학습 결과 (Weighting)를 이용하여
시험 데이터의 pchg를 예측함
0.005
Class 3개를 갖는 데이터의 경우는, 출력 뉴런의 값은 0 ~ 1 사이의 값이므로, 출력 뉴런 1개로 구분할 수 없음.
출력 뉴런의 개수를 3개로 설정함. 3개의 출력 데이터 중에 가장 큰 뉴런의 번호가 예상 Class 임. 해당 뉴런의 활성화 정도가 가장 크기 때문임.
예) 출력 데이터 = 0, 1, 0 2번째 출력이 가장 크므로 Class = 2 임.
은닉층
w1 w2
Class 3개 w11 w12
입력층
a b c d
출력층 뉴런이 3개 임
0.4 0.6
9-1. 은닉 마코프 모델 개요
9-2. 주가의 은닉 상태 (잠재 상태) π Z1 Z2 Z3 Z4
9-3. 은닉 상태를 가진 주사위 추론 문제 예시
0.4
9-4. 다항 분포 (Multinomial) 샘플링
9-5. 은닉 상태의 주사위 실험 및 추론 X1 X2 X3 X4
9-6. 주식 시장에 던져지는 주사위 유형
9-7. [실습] 주가의 은닉 상태 추론 실습
9-8. Bayesian Change Point (BCP)
0.6
π Z1 Z2 Z3 Z4
0.4
0.4
X1 X2 X3 X4
X1 X2 X3 X4
0.4
은닉 상태
상태 (1) 상태 공간
주가 상태 전환점
상태 (1)
수익률 상태 (2) (Change point)
상태 (2) 시간 순서로 배열
Emission
수익률
HMM의 3가지 관심 사항
1. 초기상태 (π), 전이확률 (A), 출력확률 (E) , 은닉 상태 (Z), 관측치 (X) 가 모두 주어진 경우 관측치 X 가 나올 확률 계산. (Evaluation Question)
Forward, Backward 알고리즘
2. π , A, E, X 가 주어진 상황에서 가장 가능성있는 Z 의 시퀀스를 추정함. (Decoding Question) Viterbi decoding 알고리즘
딜러가 그 동안 어떤 주사위를 던졌는지 추정함 : 위 예에서 LLL, FFF, LFL, LLF ..... 중에 가장 가능성이 높은 시퀀스를 추정함.
삼항분포 (예시)
이항분포 (Binomial Distribution)
~ 주사위를 던져서 1의 눈이 나오는 사건을 X, 2나 3이 나오는 사건을 Y, 4,5,6 이 나오는
사건을 Z 라 할 때, 주사위를 10번 던졌을 때 X가 3번, Y가 2번 나올 확률은 ?
~ 사건 발생의 1가지 경우 : X X X Y Y Z Z Z Z Z 순서가 바뀔 수 있음.
두 개의 은닉 상태 (L, F)를 갖는 주사위 30회를 던지는 실험을 수행함. 실험의 결과로 나타난 주사위 눈을 학습하여 이 실험에 사용한 전이행렬 등을 추론함.
“6” 의 눈이 가장
많이 나왔음.
은닉 상태 시뮬레이션 (Z)
은닉 상태의 발현
시뮬레이션 (X)
(다항 분포)
실제 전이행렬을
잘 추정하고 있음.
추정한
상태 시퀀스 (Z)
출력 창
3번 주사위
2번 주사위
1번 주사위 Transition Transition
상승하는
1번 주사위를 던졌을 때 발생할 수 경우가 많음
있는 주가 시뮬레이션.
- 전부 상승함.
하락하는
경우가 많음
1번 주사위
2번 주사위
3번 주사위
3가지 은닉 상태를 가정함.
1번 주사위가 계속 사용될 확률 = 47.6%
2번 주사위가 계속 사용될 확률 = 72.3%
2번 주사위를 바꿀 확률 = 27.7%
은닉 상태 (Z) 시퀀스
어떻게 해석하면 좋을까 ?
주가같은 시계열 데이터에서 확률구조에 변화가 생기면 (평균, 분산의 특성이 달라지면) 그 지점을 주가의 변환점 (Change Point)로 판단하여, 변환점의
위치와 확률을 추론함 (Bayesian Inference). 아래 예시는 삼성전자 (2016.1.1 ~ 2017.1.6 : 1년간) 주가의 변환점을 추론한 것임.
변환점
변환점
변환점의 위치들
변환점의 사후 확률 (Posterior)이 p % 이상인 변환점이 며칠에 한 번씩 발생하는지 날짜를 계산해 보고, 날짜의 분포를 확인함.
아래 예시는 삼성전자 (2007.7.26 ~ 2017.1.6 : 9년간) 주가의 사후 확률이 50% 이상인 변환점의 경우 평균 27.35일에 한 번씩 발생하는 것을 의미함.
지수 분포의 특징
시간 (t1) 시간 (t2) t : 지수 분포
포아송 분포 : 단위 시간 당 일어나는 사건의 횟수에 대한 확률분포.
지수 분포 : 발생하는 사건 사이의 시간 간격에 대한 확률분포.
발생 사건 사이의 평균 시간 간격은 평균 대기시간임.
주가의 변환점을 일종의 사건으로 생각하면, 변환점이 발생하는 기간이
사건 (X1) 사건 (X2) 사건 (X3) X : 포아송 분포
지수 분포를 따른다고 가정할 수 있음.
지수 분포를 이용하면 1개월 이내에 변환점이 발생할 확률을
계량화 해 볼 수 있음.
예시
이 확률은 향후 발생할 위험의 확률로 간주할 수 있음.
Early Warning Signal로 활용
Posterior 확률이 50% 이상인 주가 변환점이 평균 27.35일에 한 번씩 발생하고 있음.
향후 1개월 (31 일) 이내에 이 정도의 주가 변환점이 발생할 확률은?
이 결과는 향후 발생할 변환점에 대한 확률이므로 일종의 Early Warning Signal로 생각할 수 있음.
텍스트 마이닝 개요
텍스트 마이닝은 텍스트로 구성된 다수의 문서에서 특징들을 (Features) 추출하여 의미있는 정보를 추론하는 분야임. (문서 분류, 주제 추론 등)
텍스트 마이닝은 통계학과 기계학습 기술뿐만 아니리 언어학 분야까지 (파싱, 형태소, 구문, 어휘, 품사 분석 등) 포함한 자연언어 처리 기술 (NLP)을 기반으로 함.
텍스트 문서는 문장 어절 어구 단어 형태소 로 분해되어 기계가 이해할 수 있는 형태로 구조화 됨. 학습 데이터
문서의 내용들은 최소 분석 단위로 분해되고 불필요한 요소들을 제거하거나 대체하는 등 정제 과정 (Cleaning)을 거침. 전처리 (Preprocessing)
문서의 내용은 인간이 이해하는 것처럼 언어적으로 분석하기보다는 문서에 사용된 단어들의 빈도수에 기반하여 통계적으로 분석함.
텍스트로 구성된 데이터는 (비정형 데이터) 통계분석을 위해 수치 데이터 (정형화된 데이터)로 변환됨. (예 : Term Document Matrix, tf-idf 등)
텍스트 마이닝은 문서 작성자의 의도는 모르더라도 단어들의 발생 빈도 등을 분석하여 숨겨진 관계와 경향등을 발견함.
텍스트 마이닝 분석 절차
문서 수집 (ex : 웹 크롤링)
단어-문서 행렬
구조화된 문서 집합 전처리 (Term Docuent Matrix) 적용 분야
문서 Classification
문서 1 문서 2 문서 3
… 문서 Clustering
토큰화 (Tokenizing) 단어 1 5 문서 Summary
단어 2 23 32 주제 추론 (Topic Model)
코퍼스 불용어 제거 (Stop-word)
웹문서 검색 (Search)
(Corpus) 어근 분석 (Stemming) 단어 3 18 7
감성분석 (Sentiment Analysis)
질의 응답 시스템
…
…
오, 탈자 수정 시스템
…
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-2
10. 텍스트 마이닝 (Text Mining) - 용어
텍스트 마이닝 용어
Corpus : 텍스트 문서의 집합체. 비정형화된 문서를 1차적으로 정형화함. (예 : 문서 작성일, 작성자, 내용 등)
Bigram : 두 개의 연속된 단어. 어떤 단어 뒤에 어떤 단어가 나올 확률이 높은지, 어떤 단어는 나올 수 없는지 등을 알 수 있음. (종속적, 1차 마코프 연쇄 과정)
N-gram : N-개의 연속된 단어. 단어들의 선, 후 관계를 파악할 수 있으나 조합이 너무 많아 N을 크게 하기 어려움.
Noun phrases : 명사구. 단어만으로 분석하는 것보다 가능한 구 (Phrases) 단위로 분석하면 더 유용한 정보를 얻을 수 있음. (예 : “파란 차”, “내가 사는 곳” 등)
Token (토큰) : 의미를 가진 최소 단위. (기호, 단어, 구 등). 텍스트 분석의 최소 단위.
Stop-words removal (불용어 제거) : 분석이 불필요한 토큰을 제거함. (예 : is, am, it 등). 그러나 “To be or not to be” 와 같이 필요한 경우도 있을 수 있음.
Stemming (어근 분석) : 기본 단어에서 파생된 단어는 기본 단어로 대체함. (예 : making, makes, made make, 동의어 압축 등).
Term-Document matrix (TDM, 단어-문서 행렬) : 문서별로 사용된 단어의 빈도를 행렬 형태로 표시함.
Term frequency (TF) : 어떤 문서에 등장하는 단어의 빈도수. TF가 높으면 이 문서에서 이 단어는 중요하다고 판단함.
Document frequency (DF) : 어떤 단어가 얼마나 많은 문서에 등장하는지에 대한 지수. DF가 높을수록 범용적인 단어이므로 중요도가 낮음.
Inverse document frequency (IDF) : DF의 역수. IDF가 높을수록 중요도가 높음.
Similarity Measure (문서의 유사도) : 문서 간의 유사도를 평가함. TDM 공간에서 TF-IDF 간의 (코사인) 거리를 측정함. Vector Space Model
아래와 같은 검색문으로 세 개의 문서 (#1, #2, #3)를 검색할 때 검색문과 가장 유사한 문서가 상위에 검색되도록 함.
검색문과의 유사도는 TF-IDF 간의 코사인 거리를 이용함. (두 벡터의 내적이 클수록 유사도가 높음.) 상세 계산 과정은 첨부 파일 (엑셀)의 수식 침조
분석 결과 문서 #2가 가장 상위에 랭크되고 이어서 #3, #1 이 나옴. 문서 #2 의 경우 “silver”가 2개, “truck”이 1개로 검색문과의 유사도가 가장 높음.
TF-IDF 는 정보검색, 인덱싱, 유사도 계산에 유용하지만 문서와 단어 개수가 많아지면 너무 많은 시간이 소요되고, 최신 트랜드를 반영하기 어려운 단점이 있음.
최신 트랜드를 반영한 문서의 범위를 정하는 것도 어렵고, 신조어가 있는 신기술 문서인 경우 특정 단어가 포함된 문서가 많아 오히려 중요도가 낮아지는 현상이
발생함. 트랜드 분석을 위해서는 특정 키워드가 연도별로 얼마나 중요한지 가중치를 부여함. TF-DI (Term frequency – Data index)
문서 #2 문서 #3 문서 #1 순으로 Rank 됨.
TF-IDF TF
검색된 트윗 문서들
문서는 토픽 집합에 속한 단어들로 구성되고, 한 문서에 등장하는 단어들은 여러 토픽들과 연계되어 있음. 토픽 분포
아래 문서의 주제는 (토픽) 기업 실적과 관련된 것으로 추론할 수 있음.
토픽 집합
1. 실적 2. 수주 3. 이슈 문서
분기 수주 주가
매출 계약 약세 삼성전자는 연결기준으로 매출 47.82조원, 영업이익
영업이익 발주 하락 5.2조원의 2016년 3분기 실적을 발표했다. 매출은 전년
영업외이익 호재 부정적 동기 51.68조원 대비 7.5% 감소했고, 영업이익은 전년 동기 실적
토픽 모델링 : 문서집합에서 토픽 분포 등을 추론
문서 집합 (Document Corpus)에 사용된 단어들의 빈도를 측정 (학습)하여, 이 문서 집합에 사용된 토픽들을 추정하고, 문서들을 토픽별로 분류함.
시간에 따라 어떤 토픽이 관심을 받는지, 신규 문서가 어느 토픽에 대한 것인지 등을 추정할 수 있음.
토픽 #1 토픽 #2 토픽 #3 토픽 #4 토픽 #5 토픽 #6
분기 수주 주가 원화 자본 증권사
토픽 추정 매출 계약 약세 환율 신주 주가
문서 집합 (Document Corpus) (Bayesian Inference) 영업이익 발주 하락 영업이익 발행 애널리스트
영업외이익 호재 부정적 매출 발행가액 적정가격
실적 기대 악화 강세 보통주 영업이익
증가 매출 예상 약세 기준일 실적
감소 실적 감소 달러 배정 기대
토픽 추출 토픽#5
토픽#3
문서 문서
#1 #4
문서 문서 토픽 토픽
#4 #2 #4 #4
토픽별 문서분포,
문서 토픽 토픽
#2 문서 문서 토픽
#2 #2
문서별 토픽분포 추출 #5 #1 #5 토픽
문서 토픽 #3
#5 #1
토픽 #1 토픽 #2 문서 #1 문서 #2
시간대 별
토픽의 변화 토픽 #1
토픽 #2
추정
1월 2월 3월 4월 5월 6월 7월 8월
Kitten 은 토픽-1 에서 약
14% 사용되었고, 토픽-2
에서는 8.2% 사용되었음.
토픽 모델링 : Latent Dirichlet Assignment (LDA) 모형 : 문서 집합 (Corpus) 에서 관측된 을 이용하여 Hidden 상태의 와 를 추론함.
문서 들의 주제 분포를 추론할 수 있음.
관측된 단어
베이지안 네트워크의
Plate 표현
Prior Prior
단어 개수
θ 로 부터 뽑은
토픽 번호 문서 개수 토픽 개수
= { 0.01, 0.2 … } = { 0.01, 0.3 … } = { 0.01, 0.15 … } = { 0.01, 0.2 … } = { 0.01, 0.1 … } = { 0.01, 0.12 … }
문서 - 1 문서 - 2 문서 - D 토픽 - 1 토픽 - 2 토픽 - K
확률 확률 확률 확률 확률 확률
… …
1 2 3 4 … K 1 2 3 4 … K 1 2 3 4 … K 1 2 3 4 … N 1 2 3 4 … N 1 2 3 4 … N
토픽 토픽 토픽 단어 단어 단어
샘플링
와 를 알고 있다면 해당 분포에 어울리는 단어를 생성할 수 있음.
생성한 단어로 특정 주제에 대한 문서를 생성할 수 있음.
0.30
문서 #1의 토픽 분포 (사전에 주어짐)
0.15
0.10
0.05
토픽
1 2 3 4 5
토픽 별 단어들의 확률 분포
토픽 #1 토픽 #2 토픽 #3 토픽 #4 토픽 #5
분기 0.1 수주 0.15 주가 0.1 원화 0.2 자본 0.1
매출 0.1 계약 0.25 약세 0.2 환율 0.2 신주 0.2
영업이익 0.2 발주 0.2 하락 0.25 영업이익 0.05 발행 0.25
영업외이익 0.2 호재 0.05 부정적 0.05 매출 0.05 전환 0.1
실적 0.2 기대 0.05 약화 0.25 강세 0.15 보통주 0.1
증가 0.1 매출 0.15 예상 0.05 약세 0.15 기준일 0.05
감소 0.05 실적 0.1 감소 0.05 달러 0.15 배정 0.15
계약 0.05 약세 0.05 영업이익 0.05 발행 0.05 발주 0.05 문서 #1 이 생성됨. 단어를 많이 만들어보면 토픽 3의 확률이 높게 나올 것임.
토픽 #3 에 토픽 #5 에
해당 해당
토픽 #1 토픽 #2 토픽 #3 토픽 #4 토픽 #5
분기 0.1 수주 0.15 주가 0.1 원화 0.2 자본 0.1
매출 0.1 계약 0.25 약세 0.2 환율 0.2 신주 0.2
영업이익 0.2 발주 0.2 하락 0.25 영업이익 0.05 발행 0.25
영업외이익 0.2 호재 0.05 부정적 0.05 매출 0.05 전환 0.1
실적 0.2 기대 0.05 약화 0.25 강세 0.15 보통주 0.1
증가 0.1 매출 0.15 예상 0.05 약세 0.15 기준일 0.05
감소 0.05 실적 0.1 감소 0.05 달러 0.15 배정 0.15
계약 0.05 약세 0.05 영업이익 0.05 발행 0.05 발주 0.05
트위터 검색어
Marc-André Mittermayer, 2004, Forecasting Intraday Stock Price Trends with Text Mining Techniques
금융 관련 뉴스와 주가 데이터를 스스로 학습하여 뉴스를 3 가지 부류로 구분해 놓음 (Good News, Bad News, No Movers). SVM
새로운 뉴스가 발생하면 이 뉴스가 어느 부류에 속하는지 판단하여 거래를 수행함.
Robert P. Schumaker and Hsinchun Chen, 2010, Textual Analysis of Stock Market Prediction Using Breaking Financial News: The AZFinText System
뉴스 기사를 Bag of Words, Noun Phrases, Proper Noun, Named Entity로 표현하여 분석함.
학습 알고리즘은 SVR을 사용하였고 (분류가 아닌 회귀분석), 뉴스 기사 발생 전 60분부터 기사 발행 후 20분 후의 주가 데이터를 이용하여 분석하였음.
성과 시험 결과 다른 퀀트 펀드들, ex) Vanguard Growth & Income (VQNPX)의 6.44%, BlackRock Investment Trust Portfolio Inv. (CEIAX)의 5.48%, 등 보다
좋은 성과를 보였다고 함 (AZFinText는 8.50%).
Example :
Stock Quote Analysis
Binary Representation Price at Article Release :
fell 1 = $15.65
fined 1
fourth 1 +20 min Regression :
quarter 1 = $15.633
NYSE 1
profit 1 +20 min Actual Price :
Schwab 1 = $15.59
taco 0
System Output
SVR Ext + 20min Price
= $15.645
대부분 기술적 분석의 매매 신호는 오실레이터 형태로 정상성 시계열의 특징을 갖도록 만들어져 있음. 비정상 시계열을 정상 시계열로 변환하는 과정임.
매매 신호 자체에 추세가 있다면 의사 결정이 곤란하므로, 정상성의 특징이 나타나도록 만들어진 것임.
그러나 주가는 비정상성의 특징을 가지므로, 정상 시계열로 비정상 시계열을 설명할 수는 없음. 근본적인 문제임
오실레이터 형태의 기술적 분석 신호는 대부분 주가에 대한 설명보다는 주가의 평균 수익률에 대해 설명하는 것임.
주가에 대한 정상 시계열은 수익률 계열이므로, 정상 시계열인 오실레이터 신호는 수익률 계열에 대해서는 설명할 수 있음.
이동평균 수익률
주가 (비 정상성)
동일 개념
기술적 분석 신호
(오실레이터 형)
이동평균 구간
이동평균 수익률 곡선 (빨간색)
+5 +2 과 오실레이터 형의 기술적분석
지표가 유사할 것임.
오실레이터 형태의 기술적 분석 신호들을 표준화 (Normalization) 시켜 같이 그려보면 유사한 모습을 보임.
오실레이터 형태의 시계열 데이터는 정상성 (Stationary)을 갖는 반면, 주가는 비정상성 (Non-stationary)을 갖는 시계열임.
정상성 시계열로 비정상성 시계열의 방향을 예측하는 것은 어려움. 기계학습으로 기술적분석 지표들을 학습하여 주가의 방향을 예측하면 정확도가 50% 내외임.
주가의 방향을 예측하는 것 보다는 다른 특성에 대한 유용한 정보를 추출하는 것을 목표로 하는 것이 바람직해 보임.
…
…
훈련 데이터 세트에 다양한 형태의 기술적 지표들을 추가함. 예측을 위해 어떤 지표가 효과적인지 알 수 없으므로 일단 다양하게 추가한 다음 추후에 판단함.
기술적 지표 이외에도 예측과 관련된 Feature들은 많음. 예를 들어 캔들의 모양이나 변동성 정보도 가까운 미래 주가와 관련이 있을 수 있음.
다양한 Featurre 들을 개발하려면 금융 이론을 충분히 활용하는 것이 필요함.
기술적분석 지표 Feature : MA Cross (spread), ATR, SMI, ADX, Bollinger Band, MACD, OBV, CCI, RSI …
기타 Feature : Candle 패턴, 변동성 (갭, 장중 변동성), 평균 거래 대금 …
Candle Pattern
장중 변동성 측정
예측 대상 및 예측 기간 설정
주가의 방향 예측은 향후 트렌드를 추정하는 것임. 며칠 후 까지 예측할 것인가를 설정할 필요가 있음.
현재 주가가 과거 주가에 종속되어 있다고 가정하면, 먼 과거로 갈수록 현재와의 종속 관계가 약해진다고 볼 수 있음. 따라서 현재의 주가도 미래로 멀리 갈수록
종속성이 약해지고 예측의 정확도도 떨어질 것임. 단기 며칠 간의 트렌드 예측을 목표로 함.
이전 장의 실습에서는 단적으로 내일 주가의 방향을 예측하였으나, 특정 일의 순간 주가는 Noise일 수 있으므로 예측력이 떨어질 것임. 예를 들어 향후 트렌드가
상승해도 내일의 주가는 일시적으로 하락할 수 있음.
내일 주가의 방향을 예측하는 것보다는 향후 며칠 간의 평균 주가의 방향을 예측하는 것이 합리적 일 수 있음.
아래 예시는 k = 5 일 후 주가의 수익률을 모두 누적한 예시임. 단, 수익률은 현재 시점을 기준으로 계산함. 미래 수익률이 특정 레벨 이상 오르거나 떨어진 경우만
누적할 수도 있음. 약간 상승하거나 하락한 경우는 변동이 없는 것으로 판단함.
향후 2일간 하락했다가 3일간 상승하면 누적 수익률은 서로 상쇄되어 0 에 가까워짐. 트렌드가 없는 경우
상승한 적이 많으면 누적 수익률이 커질 것임. 상승 트렌드
하락한 적이 많으면 누적 수익률은 작아질 것임 (음수). 하락 트렌드
과거 현재 미래
* 참고 자료 : Luis Torgo, 2011, Data Mining with R (Learning with Case Studies), page 109.
데이터 세트 구성 * 실습 파일 : 11-2.FeatureSetTA(2).R
실습 파일 :4-6.svm(2).R 의 결과보다 개선되어 보임. 더 개선할 방법은 ? 16개 Feature 들 중 정확도가 향상되는 특정 조합이 있을까 ?
전체 조합 별로 데이터 세트를 구성하고 다시 학습해 보기로 함.
기술적 지표 Feature의 조합 별 성능 확인
16개 Feature들의 조합으로 구성된 훈련 데이터를 학습하여 성과가 개선될 여지가 있는지 확인함.
정확도가 가장 높은 Feature 들의 조합을 찾아냄. 예를 들어, “ATR + SMI + MACD + RSI + 변동성 + 거래량 으로 구성된 데이터가 가장 정확도가 높음”
16개 중 Candle (open, high, low, close) Feauture는 1개로 취급하고, 두 개의 변동성 관련 Feature도 1개로 취급하고, MA Cross (spread)를 기본으로 선택
하기로 하면, 총 Feauture 수는 11개 임.
11개 Feature 중 5개 이상의 Feature가 선택되도록 조합을 만들면 총 조합의 개수는 아래와 같음.
11C5 = 462, 11C6 = 462, 11C7 = 330, 11C8 = 165, 11C9 = 55, 11C10 = 11, 11C11 = 1 총 1,486 개 조합
각 조합별로 훈련 데이터 및 시험 데이터를 구성하고 SVM 알고리즘으로 학습하여 결과를 확인함.
이 시험은 특정 종목에 대해서만 수행하였으나, 정확한 시험을 위해서는 데이터 세트에 다수의 종목을 포함시켜 시험할 필요가 있음. 종목별로 데이터 특성이 다름.
11 개 Features 데이터 세트 구성 학습
5개 Feature 선택
MA Cross (spread) 훈련, 시험 데이터 SVM
ATR
SMI 훈련, 시험 데이터 SVM
…
…
ADX
Bollinger Band 6개 Feature 선택
MACD 훈련, 시험 데이터 SVM 총 1,486 개 결과에서
OBV 정확도가 가장 높은
CCI 훈련, 시험 데이터 SVM Feature 조합을 찾음
…
…
RSI
Candle (OHLC)
변동성 (갭, 장중)
거래량 11개 Feature 선택
훈련, 시험 데이터 SVM
6개 Feature를 사용한
경우 조합 전체의 평균
정확도는 51.96% 이고
편차는 3.58% 임.
8개 Feature를 사용한
경우 조합 전체의 평균
정확도는 53.27% 로
6개를 사용한 경우보다
약간 증가하였고, 편차는
3.36% 로 약간 감소
하였음.
원으로 표시한 부분에서는 Incorrect 보다 Correct의 비율이 높았음. 만약 여러 데이터를 사용했을 때 일정한 패턴을 발견할 수 있으면 하나의 Rule로 사용할 수 있음.
Generative Model
Ex : 잠재상태,
Inference 변환점
HMM
BCP 등
개별 종목의 위험과 수익률을 측정하여 효율적 투자선을 제안하고, 최적 포트폴리오 구성 방안을 이론적으로 정립함.
수익률
수익률
수익률
지배원리
효율적 투자선 (EF)
무차별곡선
효용 증가 ρ = -0.5
종목-2
ρ=0
MVP ρ=1
위험 위험 종목-1 위험
위험 감소, 수익률 증대로 효용이 증가함 위험은 작고, 수익률은 높은 종목으로 상관계수에 따라 효율적 투자선과
포트폴리오 구성 각 종목의 투자비율이 달라짐
* MVP : Minimal Variance Portfolio
행렬 표시
ρ 에 따라 포트폴리오의
위험 (분산)이 달라짐
최소분산 포트폴리오의
투자 비중
공분산 행렬
야후 사이트로부터 코스피 대형주 57 종목 및 Kospi 지수를 읽어와서 수익률 테이블을 구성함. (2010-01-01 ~ 현재) * 실습 파일 : 11-1.Portfolio.R
* 실습 파일 : 12-1.Portfolio.R
수익률, 위험 공간의 지배원리
종목 별로 측정된 수익률과 위험 (변동성)을 마코비츠 공간 상에 배치하여 지배원리를 육안으로 확인함. 버블의 크기는 Sharp Ratio의 크기임.
* 실습 파일 : 12-1.Portfolio.R
포트폴리오 최적화 – Sharp Ratio가 최대가 되는 최적 투자 비율 산출
2016 년 데이터로 최적 투자비율을 산출함. 매도가 가능하다고 가정하였음 (w < 0 가능). Overfitting
분석에 사용된 수익률과 위험은 과거 데이터이므로 미래의 성과와는 무관함. 예를 들어 2016년 데이터를 분석해서 최적 비율을 산출한 후 2017년에 투자
집행한다고 해서 2016년 같은 성과가 나올 수 없음. 2016년에는 삼성테크윈의 SR이 높았고, 기아차의 SR은 낮았지만, 2017년에는 다른 상황이 발생할 수 있음.
일반화의 (Generalization) 오류, 과적합 (Overffiting) 문제점
기업 분석 등을 통해 미래의 수익률과 위험을 추정할 수 있다면 좋겠지만, 미래를 추정하는 것은 대단히 어려운 일임. 이 경우도 포트폴리오 효과로 추정 오류를
(추정 위험) 줄일 수 있음.
과거 데이터에 의존하는 경우에는 Regularization 작업을 통해 일반화 오류를 줄이는 방법이 사용될 수 있음. (Penalty 항을 추가하여 특정 w가 커지는 것을 방지)
일반화 정도를 조절하면서 (조절변수 : λ, ex: Rideg Regerssion or Weight decay ) Cross Validation test로 성과가 좋은 일반화 정도를 채택할 수 있음.
* 실습 파일 : 12-2.Portfolio(Reg).R
Regularization에 의한 포트폴리오 최적화
Sharp Ratio를 최대화하기위한 목적 함수에 특정 Weight가 커지지 않도록 Penalty 항을 추가함. (조절변수는 임의 지정)
* 최적 투자 비율에 의한 기대 수익률
* Regularization에 의한 최적 투자 비율 * 훈련 데이터를 학습하여 다시 훈련
* 모든 종목의 비중이 어느 정도 균등해 짐. (대략 6% 이하) 데이터로 시험하였으므로, 당연히
(일반화 특성이 향상됨) 높게 나옴. (아직도 잘못된 시험임)
* 실습 파일 : 12-2.Portfolio(Reg).R
Regularization에 의한 포트폴리오 최적화
최적 투자 비율에의한 포트폴리오의 기대 수익률과 변동성을 마코비츠 공간에 표시함. Overfitting 때 보다 기대 수익률 수준은 낮아졌으나, 일반화 특성이 향상됨.
효율적 투자선
(Efficient Frontier)
위험 감소
Overfitting 때 수익률
96.98% 보다는 낮아짐.
훈련 데이터와 시험 데이터를 분리하여 훈련 데이터로 산출한 Weight을 시험 데이터에 적용하여 성과를 측정함. 조절 변수를 조절해 가면서 시험함.
* 2016 년 기대 수익률
* Lamda = 10 을 적용한 경우
성능을 개선하기 위해 조절변수를 크게 적용함 (Lamda = 100). 투자 비율이 더 균등해 짐. 시장 포트폴리오 (지수 매입)를 구입하는 것과 유사해 짐.
조절변수를
증가할수록
시장 수익률에
가까워짐.
위험 감소
* 2016 년 기대 수익률
* Lamda = 100 을 적용한 경우
거시시장에서는 주가 움직임이 상.하 대칭적이고 독립적이므로 (기술적) Trade Signal의 유의성이 약함 (랜덤워크 성향). 따라서 거시시장에서는 기술적 신호 이외에
기본적 분석 (Fundamental), 업황분석, 수급 분석, 거래량 분석, 거시 경제 지표 분석 등을 병행함.
미시시장은 주가 움직임에 종속성이 나타나므로 (기술적) Trade Signal의 유의성이 나타남. 미시시장으로 갈수록 강해짐.
Ex) DMA 등으로 milli-second 단위의 주문 흐름 분석을 통한 Trade Signal은 유의성이 나타나지만, 일 봉 혹은 주 봉 단위의 주가 차트를 통한 Trade Signal은
유의성이 약함. 미래 주가의 방향에 대한 설명력이 약해짐.
거시시장의 전략은 방향성 전략, 차익거래 전략, 헤지 거래 전략 등으로 비교적 장기적인 전략인 반면, 미시시장의 전략은 주문 흐름 분석, 유동성 분석 등에 의한
통계적 차익거래 (마켓메이킹 등) 전략이나, (초) 단기적인 주가의 방향을 예측하여 수익을 창출하는 형태의 전략임. Ex : High Frequency Trade (HFT)
거시시장의 전략은 장기적 Drift 효과나 추세 효과, 혹은 상대 평가를 통한 롱-숏 효과를 얻을 수 있으나, 기간에 따른 보유 위험이 존재함. 미시시장의 전략은 보유
기간이 매우 짧으므로 보유 위험 (재고 위험)은 낮음.
거시시장의 전략은 장기 보유로 회전율이 낮아 거래 비용이 낮으나, 미시시장의 전략은 빈번한 거래로 회전율이 매우 높아 거래 비용이 많이 발생함. 거래비용
분석 (Transaction Cost Analysis : TCA)이 중요함.
거래 비용은 고정비용 이외에 시장 충격 비용까지 고려한 개념으로 거시시장에서는 주로 대량 주문 집행 시 고려 할 사항이지만, 미시시장에서는 빈번한 거래로 인한
미시적 충격 비용까지 고려해야 함.
Price
시장 충격 이전의 균형 가격
종속성
0.7
Trading Signal이 Permanent Impact
유의한 영역
Market
Impact 일시적 충격 이후의
새로운 균형 가격
매도
0.5
Temporary Impact
Time
ms sec 분봉 일봉
* 참조 파일 : data/ECU16.xlsx
Clock time, Tick time, Volume time
일반적인 주가의 캔트 차트는 일정 시간 동안의 주가 (시가, 고가, 저가, 종가)를 관찰한 것임. Clock time based candle chart.
금융 시장의 정보는 거래량에 반영되어 거래 시장으로 유입됨. 즉, 모든 정보는 주가에 반영됨. The price is a vichecle of information.
그러나 거래량은 시간대에 따라 달라지므로 Clock time으로 구성된 각 캔들은 보유한 정보량이 다름.
예를 들어, 장 개장 직후와 폐장 직전에는 거래량이 많고, 점심 시간에는 거래량이 적기 때문에 장 개장 직후에
생성된 캔들과 점심 시간에 생성된 캔들을 동일하게 취급할 수 없음. 오후 22:00 이후
일정 거래량이 발생할 때마다 캔들을 구성함. Volume time based candle chart. 틱 발생량이 높음
일정 수량의 체결 틱 데이터가 발생할 때마다 캔들을 구성함. Tick time based candle chart.
[실습] Tick time 으로 구성된 캔틀 차트에 기술적 분석 지표를 적용하고 SVM으로 학습하여 미래 주가의 방향을 예측함. * 실습 파일 : 13-1.TickSVM.R
buy.sell : 매수 강도
bid.ask : Bid, Ask 잔량의 비율
* 학습 데이터량이 작음.
[실습] Volume time 으로 구성된 캔틀 차트에 기술적 분석 지표를 적용하고 SVM으로 학습하여 미래 주가의 방향을 예측함. * 실습 파일 : 13-2.VolumeSVM.R
buy.sell : 매수 강도
bid.ask : Bid, Ask 잔량의 비율
* 학습 데이터량이 작음
거래 시장에 정보기반 거래자 (Informed Trader), 유동성 거래자 (Liquidity Trader), 마켓 메이커 (Market Maker)가 참여하는 모형.
정보기반 거래자는 사설 정보 (Private Information)를 가지고 있어서, 주가가 오를 것인지 떨어질 것인지 알고 있음 (가정 사항).
유동성 거래자는 정보가 없고 자신의 특별한 목적 (헤지 거래)을 위해 사거나 파는 거래자임 (Noise Trader). 매수, 매도 주문이 랜덤하게 발생함.
정보기반 거래자와 유동성 거래자는 상대호가 주문으로 즉시 체결되는 형태로 거래함 (시장가 주문).
마켓 메이커는 지정가 주문으로 Ask, Bid 측에 지정가 매수, 매도 주문을 동시에 송출함. 이 주문은 대기 상태의 주문이고 시장에 유동성으로 공급됨 (지정가 주문).
정보기반 거래자가 호재성 정보를 가지고 있으면 되도록 많은 수량을 매수하려고 할 것이나, 한번에 다량의 주문을 송출하면 마켓 메이커는 이를 알아채고 높은
호가에 유동성을 공급하므로 정보기반 거래자는 높은 가격을 지불해야함. 따라서 정보기반 거래자는 자신의 정보를 숨기기 위해 주문을 소량으로 나누어야 함.
마켓 메이커는 시장에 유입되는 주문을 관찰하여 정보기반 거래자의 정보를 추정하여 호가를 결정함. 그러나 발생한 주문이 정보기반 거래자의 주문인지
유동성 거래자의 주문인지는 확인할 수 없음. 정보기반 거래자의 주문 행위를 Hidden (or Latent ) Variable로 생각함.
유동성 거래자가 많아지면 정보기반 거래자의 정보가 시장에 노출되는 것을 방지해 주므로, 정보기반 거래자는 유동성 거래자가 많아질수록 공격적으로 주문을
낼 수 있는 반면, 마켓 메이커는 정보기반 거래자의 정보를 추정하기 어려워 짐.
주가의 방향을 알고 있음
정보 노출을 최소화 하면서
Profit이 최대가 되는 주문 Market 주가의 방향을 모름.
수량을 결정해야 함
정보기반 거래자 시장에 유동성을 공급하고
X
(Informed Trader) 주문 수량을 관찰함. W =X + Y. 그 대가를 취함.
X, Y를 직접 관찰할 수 없고, W만
관찰됨.
X+Y 마켓 메이커 * 이런 과정을 거치면서
주가의 방향을 모름 (Market Maker) 시장은 균형상태에 이르게 됨.
(일반적인 참여자)
정보기반 거래자의 정보를 추정
매수, 매도 주문이 랜덤하게 하여 유동성을 공급할 호가의
발생함 (정규분포) 위치를 결정함.
유동성 거래자
Z
(Liquidity Trader)
시장에 유입되는 매수 (Buy), 매도 (Sell) 주문 수량, 혹은 매수 주문 강도 (Buy / Sell)를 관찰하여 정보기반 거래자의 비중을 추론함.
정보기반 거래자의 참여 비중은 주문 수량의 Hidden 상태로 볼 수 있음. 정보기반 거래자가 호재성 정보를 가지고 있다면 매수 주문이 매도 주문에 비해 많을 것이고,
악재성 정보를 가지고 있다면 매도 주문이 많을 것임. 정보기반 거래자가 없다면 (특별한 정보가 없다면), 시장에는 Noise Trader만 있으므로 매수, 매도 주문이
랜덤하게 발생하므로 B = S 경향을 보일 것임.
Market microstructure 분야에서 정보기반 거래자의 참여 비중을 추정하는 모형으로 PIN (Probability of Informed Trader), VPIN (Volume Synchronized PIN)
모형이 있음. HMM 으로도 PIN을 추정해 볼 수 있음.
Hidden 상태 (2차원)
정보기반 거래자 상태 1차원 상태로
단순화.
* 실습 파일 : 13-3.VolumeHMM.R
[실습] HMM에 의한 정보기반 거래자 상태 (비중) 추론 실습
* 실습 파일 : 13-3.VolumeHMM.R
[실습] HMM에 의한 정보기반 거래자 상태 (비중) 추론 실습
추론 결과 정보기반 거래자의 평균 참여 비중은 28.46% 였고, 현재 상태는 정보기반 거래자는 없고, 유동성 거래자만 남아있는 상태임.
다시 정보기반 거래자가 참여할 확률은 29.0% (Transition matrix) 임.
정보기반 거래자의 상태
매수 강도가 주로 1.0을
초과하고 있음.
정보기반 거래자가
거래했던 시기들
유동성 거래자의 상태
호가창의 호가 및 잔량이 균형 상태를 이루고 있으면 주가는 어느 한 방향으로 움직이지 못하고 횡보하는 상태가 됨.
호가창의 호가 및 잔량 상태에 불균형이 발생하면 주가는 치우친 방향으로 움직임.
호가창의 사건을 호가와 잔량으로만 설명하는 정적 모형 (Static Model) 임. 주문의 흐름은 고려하지 않음.
호가창의 불균형 정도는 잔량가중평균가격 (VWAP)으로 표시함. (여기서 Volume은 거래량이 아닌 잔량의 의미로 쓰였음).
Ask측과 Bid측의 VWAP을 각각 계산하여 평균인 Mid VWAP을 계산함.
Ask VWAP이 높거나 Bid VWAP이 높다면 시장 참여자들이 높은 가격에 매도하거나 높은 가격에 매수하기를 희망한다고 볼 수 있음. 주가 상승 가능성.
Ask VWAP 과 Bid VWAP이 높으면 둘 간의 평균 가격인 Mid VWAP이 높음. 즉, Mid VWAP이 높으면 주가는 상승함.
최우선 호가로 Mid Price를 계산함 (Mid Price도 잔량가중평균 가격으로 계산함).
Mid VWAP과 Mid Price를 비교하여 Mid VWAP이 Mid Price에 비해 높으면, 현재의 Mid Price (중간가)는 저평가 되었다고 판단하여 매수 진입함.
매수한 주식은 호가창의 불균형이 유지되는 동안 보유하거나, 일정 수준 이상 오르면 청산함.
이 모형은 참여자들의 의도가 호가창에 거짓없이 반영된다는 가정이 필요함. 허수 주문 (Market manipulation)이 없어야 함. 실제 시장에서는 허수 주문이 존재함.
AskVwap 과 BidVwap의 평균 가격
* 실습 파일 : 13-4.SOBI.R
[실습] SOBI 전략에 의한 (초) 단기 주가의 방향 예측 실습 – SVM으로 Static Order Book 데이터를 학습함.
추론 결과 정보기반 거래자의 평균 참여 비중은 28.46% 였고, 현재 상태는 정보기반 거래자는 없고, 유동성 거래자만 남아있는 상태임.
다시 정보기반 거래자가 참여할 확률은 29.0% (Transition matrix) 임.
약 15시간 동안 183,934 개의 호가 데이터가 발생하였음. 잔량 데이터 Ask 4번 호가에서 3개의 주문이 취소되었음.
Ask 1번으로 옮겨 졌을 수도 있음.
초 단기 주가 방향 예측의 정확도가 향상됨. (그러나 초단기 수익률은 대단히 작기 때문에 거래 비용을 고려하면 현실적으로 취하기 어려운 수익임.
HFT 는 매우 작은 수익을 빈번히 취하는 형태이므로 어떻게 이 수익을 취할 것인가는 별개의 문제임.