You are on page 1of 207

Financial Data Mining using R (Ver 2.0) Feb.

2017

Amateur Quant.

R을 활용한

금융 데이터 마이닝
Financial Data Mining

강 사 : 조성현

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

목 차
3. 금융 데이터 학습 개요
1. R 프로그래밍 기초
3-1. 학습 데이터 유형 (학습용 데이터, 평가용 데이터, 시험용 데이터)

1-1. R, RStudio 설치 및 사용자 인터페이스 3-2. 데이터 학습의 유형 (지도 학습, 비지도 학습, 강화 학습)

1-2. R 기본 명령어 구조 3-3. 금융 데이터마이닝 프로세스

1-3. R 기본 자료형 (벡터, 행렬, 리스트, 데이터 프레임) 3-4. 데이터 전처리

1-4. R 기본 문법 (조건문, 반복문) 3-5. 데이터 표준화 (Normalization)

1-5. R 확장자료형 (시계열 자료형, xts) 3-6. [실습] 학습용 데이터 세트 생성 실습

1-6. quantmod 패키지 사용 예시


1-7. [실습] 주가의 기술적 분석 백 테스트 예시 4. 분류 기법 (Classification)

2. 빅데이터와 금융 데이터 마이닝 4-1. KNN (k-Nearest Neiborhood) 분류 기법


4-2. Decision Tree (의사결정 나무) 분류 기법
2-1. 데이터 과학의 개요 (빅데이터, 기계학습, 데이터마이닝, KDD) 4-3. SVM (Support Vector Machine) 분류 기법
2-2. 데이터마이닝 프로세스 4-4. 의사결정 경계면과 비선형 분리 (Kernel Trick)
2-3. 금융 데이터마이닝을 위한 가정 사항 (EMH, Random Walk) 4-5. [실습] KNN 에 의한 주가의 방향 예측 실습
2-4. 금융 데이터의 종류 (시장 데이터, 공공 데이터, 소셜 데이터) 4-6. [실습] Decision Tree에 의한 주가의 방향 예측 실습
4-7. [실습] SVM에 의한 주가의 방향 예측 실습

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

목 차
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. 연관 분석 (Association) 8-1. 인공신경망 개요 및 역사


8-2. 인공신경망 동작 원리 (분류, 군집)

6-1. 연관 규칙 (Association Rule) 8-3. 학습 규칙 (델타, 오류 역전파 알고리즘)

6-2. 연관 규칙의 강도 척도 (지지도, 신뢰도, 향상도) 8-4. Instar 규칙, 경쟁학습모델 (Competitive learning model),

6-3. Apriori 알고리즘 개요 자기 조직 지도 모델 (SOM)

6-4. [실습] Apriori 알고리즘을 이용한 외국인, 기관, 개인의 8-5. [실습] 경쟁 및 자기조직지도 (SOM) 알고리즘

거래 패턴 연관 분석 실습 8-6. Global Optimization 문제

6-5. 분석의 문제점과 확장 (안) 8-7. [실습] 당일 시가의 기술적 지표를 이용한 당일 종가의 방향 예측 실습
8-8. [실습] 다중 분류 실습 (Multi Classification)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

목 차

9. 은닉 마코프 모델 (Hidden Markov Model) 10. 텍스트 마이닝 (Text Mining)

9-1. 은닉 마코프 모델 개요 10-1. 텍스트 마이닝 개요 및 용어


9-2. 주가의 은닉 상태 (잠재 상태) 10-2. [실습] TF-IDF 척도를 이용한 웹문서 검색 순위 결정 예시
9-3. 은닉 상태를 가진 주사위 추론 문제 예시 10-3. [실습] 트위터 검색 및 워드 크라우드
9-4. 다항 분포 (Multinomial) 샘플링 10-4. 토픽 모델 (Topic Model)
9-5. 은닉 상태의 주사위 실험 및 추론 10-5. [실습] 문서 집합과 토픽 분포 추론 예시
9-6. 주식 시장에 던져지는 주사위 유형 10-6. Latent Dirichlet Allocation (LDA) 모형
9-7. [실습] 주가의 은닉 상태 추론 실습 10-7. [실습] 문서 생성 과정 실습
9-8. Bayesian Change Point (BCP) 10-8. [실습] 토픽 추론 과정 실습
10-9. [실습] 트위터 검색 및 토픽 추론 과정 실습
10-10. 금융 뉴스 분석 트레이딩 시스템 사례

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

목 차

11. 기술적 분석 (Technical Analysis) 13. 데이터 마이닝과 고빈도매매 (HFT)

11-1. 기술적 분석 지표의 특성 분석 및 속성 (Features) 13-1. 시장미시구조 (Market microstructure) 개요


11-2. 다양한 형태의 데이터 속성 추출 13-2. Tick Time과 Volume Time
11-3. 기술적 지표 Feature의 조합 별 성능 확인 13-3. Tick Time 및 Volume Time 캔들 차트의 SVM 학습
11-4. 학습 성과 개선 방안 예시 (Rule based trading) 13-4. 시장미시구조의 정보 모형 (Kyle 모형) 개요
11-5. 비 지도학습과 지도학습을 혼합한 학습 모형 (Hybrid) 13-5. HMM과 정보기반 거래자의 은닉 상태
13-6. HMM에 의한 정보기반 거래자의 은닉 상태 (비중) 추론
13-7. 호가창의 정적 모형 (SOBI)
12. 포트폴리오 최적화 (Portfolio Optimization)
13-8. SVM으로 Static Order Book 학습

12-1. 포트폴리오 이론 (Portfolio Selection Theory) 개요


12-2. 최적 포트폴리오 구성 방법 (EF, MVP, S/R)
12-3. Regularization에 의한 최적 포트폴리오
12-4. Cross Validation 시험에 의한 최적 포트폴리오

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

실습 파일

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)


R을 활용한 금융 데이터 마이닝

1. R 프로그래밍 기초

1-1. R, RStudio 설치 및 사용자 인터페이스


1-2. R 기본 명령어 구조
1-3. R 기본 자료형 (벡터, 행렬, 리스트, 데이터 프레임)
1-4. R 기본 문법 (조건문, 반복문)
1-5. R 확장자료형 (시계열 자료형, xts)
1-6. quantmod 패키지 사용 예시
1-7. [실습] 주가의 기술적 분석 백 테스트 예시

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-1


1. R 프로그래밍 기초 : R 프로그래밍 도구 설치 (R 및 RStudio 설치)

R 프로그래밍 도구 다운로드 및 설치

 R 기본 패키지 (필수 패키지) : R 프로그래밍을 위한 필수 패키지.


 RStudio (선택 패키지) : R 프로그래밍을 위한 통합 개발 환경을 제공함.

 R 기본 패키지 다운로드  RStudio 다운로드


https://cran.r-project.org/bin/windows/base/ https://www.rstudio.com/products/rstudio/download3/

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-2


1. R 프로그래밍 기초 : R 사용자 인터페이스

R 기본 패키지 사용자 인터페이스


 R 기본 패키지 (필수 패키지) : R 프로그래밍을 위한 필수 패키지.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-3


1. R 프로그래밍 기초 : RStudio 사용자 인터페이스

RStudio 사용자 인터페이스


 RStudio (선택 패키지) : R 프로그래밍을 위한 통합 개발 환경을 제공함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-4


1. R 프로그래밍 기초 : 기본 명령어

 R의 기본 명령어 형식 : 연산, 변수 할당, 문자열 처리, 결과 출력 방법 등.

# 기본 연산 기능 (수식, 수학 함수, 난수 발생) 및 변수 할당 # 문자열 처리

> 2 + 3 * 5 + (20 - 4) ^ 2 # 수식 연산 > strA <- "Hello“ # 변수 strA에 문자열 할당


[1] 273 # 결과가 출력됨 > strB <- "World"
> str <- paste(strA, strB, sep=“ ") # 문자열 strA 와 strB를 합침
> 2 * sqrt(5 + 3) + log(2 * 3) + sin(45) * exp(5) # 수학 함수 사용 > str # 합칠 때 공백 문자로 연결.
[1] 133.7339 [1] "Hello World“

> x <- 3 # x에 3을 할당함 > class(y) # 변수 y의 데이터 타입 확인


> y <- 2 * (x - 2) ^ 2 + 3 # 우변 계산 결과를 y에 할당함 [1] "numeric“ # 변수 y는 숫자형임.
>y # y 의 값을 출력함
[1] 5 > class(t); class(str) # 변수 t와 str의 데이터 타입 확인
[1] "logical“ # 변수 t는 논리형임.
> t <- y > 2 # 논리형 변수 [1] "character“ # 변수 str은 문자열임.
>t
[1] TRUE # 결과 출력 방법
> print(y) # 변수 혹은 개체의 내용을 출력함
> runif(4) # 0 ~ 1 사이의 난수 4개를 발생함 (Uniform distribution) [1] 5
[1] 0.3266205 0.2748698 0.7006157 0.2343275
> cat("y 값은", y, "입니다") # 출력할 포맷을 지정하여 출력함
> rnorm(4) # 표준 정규분포의 난수 4개를 발생함 (Normal distribution) y 값은 5 입니다
[1] -0.005480971 -0.947822922 -0.187519959 0.143652407

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-5


1. R 프로그래밍 기초 : R 자료형 – (1) Vector

 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[1]; x[3] # x 벡터의 개별 요소 확인


> na.omit(x) # 결측치를 생략하고 출력함
[1] 13 # x 벡터의 첫 번째 요소 = 13
[1] 13 27 17 19 15
[1] 29 # x 벡터의 세 번째 요소 = 29
attr(,"na.action")
> length(x); sum(x); var(x); sd(x) # x 벡터의 길이, 합계, 분산, 편차 [1] 3 6
[1] 7 # x 벡터의 길이 = 7 attr(,"class")
[1] 143 # x 벡터의 각 요소들의 합계 = 143 [1] "omit"
[1] 36.95238 # x 벡터의 각 요소들의 분산 = 36.95 > as.vector(na.omit(x)) # 결측치가 생략된 벡터를 출력함.
[1] 6.078847 # x 벡터의 각 요소들의 표준편차 = 6.08 [1] 13 27 17 19 15

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-6


1. R 프로그래밍 기초 : R 자료형 – (1) Vector

# NA가 포함된 연산 # 문자열 (character) 벡터

> 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가 숫자형이 아님

>v [1] FALSE

[1] 0 0 0 0 0 0 0 # 초기값 0 으로 설정됨


> y <- letters[1:10] # y 벡터에 a ~ j 까지 할당함
> is.vector(v) # v 변수가 벡터형인지 확인함
>y
[1] TRUE
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j“ # y 벡터 내용
> append(x, 20) # x 벡터 맨 뒤에 20 을 추가함 > toupper(y) # y 벡터의 내용을 대문자로 변환
[1] 13 27 NA 17 19 NA 15 20 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J“

> append(x, 35, after = 3) # x 벡터의 3 번째 뒤에 35 를 추가함


> y <- c(1, 2, 3, "abc") # 숫자와 문자를 같이 할당하면 …
[1] 13 27 NA 35 17 19 NA 15
>y
> x[-3] # x 벡터의 3 번째 요소를 제외함 [1] "1" "2" "3" "abc“ # 모두 문자형으로 할당됨.
[1] 13 27 17 19 NA 15 > class(y)
> x[-length(x)] # x 벡터의 마지막 요소를 제외함 [1] "character"
[1] 13 27 NA 17 19 NA

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-7


1. R 프로그래밍 기초 : R 자료형 – (1) Vector

 요인 (Factor) 형 : 양적 데이터 (수치 데이터, 문자 데이터)를 카테고리 데이터로 표현함. (ex : “남자”  M, “여자”  F)

# 수치 벡터의 요인화 (Factorizing) > data


[1] 1 2 2 3 1 2 3 3 1 2 3 3 1
> data <- c(1,2,2,3,1,2,3,3,1,2,3,3,1) > sum(data) # data 벡터의 요소들을 합산함
> fdata <- factor(data) # data 벡터를 요인화함 [1] 27
> fdata > fdata <- factor(data) # data 벡터를 요인화함
[1] 1 2 2 3 1 2 3 3 1 2 3 3 1 > fdata
Levels: 1 2 3 # Factor의 Level [1] 1 2 2 3 1 2 3 3 1 2 3 3 1
Levels: 1 2 3
> levels(fdata) <- c("A", "B", "C") # Factor의 Level을 변경함
> sum(fdata) # Factor 자료형은 연산이 안됨.
> fdata # 1 -> A, 2 -> B, 3 -> C ...
Error in Summary.factor(c(1L, 2L, 2L, 3L, 1L, 2L, 3L, 3L, 1L, 2L, 3L, :
[1] A B B C A B C C A B C C A # Level이 변경 되었음.
요인(factors)에 대하여 의미있는 ‘sum’가 아닙니다.
Levels: A B C
> sum(as.numeric(fdata))

> fdata <- factor(data, labels = c("A", "B", "C")) [1] 27 # Factor 자료형을 수치 벡터로 변환하여 연산

> fdata # data 벡터를 A,B,C 로 요인화함 > fdata


[1] A B B C A B C C A B C C A [1] A B B C A B C C A B C C A
Levels: A B C Levels: A B C

> unclass(fdata) # factor를 정수형 벡터로 만든다


> is.factor(fdata) # fdata가 요인형인지 확인함
[1] 1 2 2 3 1 2 3 3 1 2 3 3 1
[1] TRUE
attr(,"levels")
> as.numeric(fdata) # factor 형을 숫자형으로 변환
[1] "A" "B" "C"
[1] 1 2 2 3 1 2 3 3 1 2 3 3 1

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-8


1. R 프로그래밍 기초 : R 자료형 – (1) Vector

 기본 그래프 (예시) : 수치 벡터의 내용으로 기본 그래프를 작성함


 plot() – 점과 선으로 그래프를 그림. abline() – plot()으로 그린 그래프 위에 직선 그래프를 추가함.
 barplot() – 막대 그래프를 그림

> x <- c(13, 27, 29, 17, 19, 23, 15)


> plot(x, type = “b”, col = “red”, ylim = c(10, 35))
> plot(x)

> plot(x, type = “b”, col = “red”, ylim = c(10, 35))


> abline(v = 3, col = “blue”, lty = 2) > barplot(x, col = “green”)
> abline(h = max(x), col = “blue”, lty = 2)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-9


1. R 프로그래밍 기초 : R 자료형 – (2) Matrix

 R의 기본 자료형 : (2) 행렬 – 행과 열을 갖는 벡터형

# 행렬 생성 및 조회 # 벡터 -> 행렬 변환

> a <- matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3) > x <- 1:15 # 벡터 생성


>a # 2행 3열 행렬 생성 (행 순서로 배열) > dim(x) <- c(3, 5) # x 벡터를 3행 5열의 행렬로 변환
[,1] [,2] [,3] >x
[1,] 2 3 5 [,1] [,2] [,3] [,4] [,5]
[2,] 4 1 7 [1,] 1 4 7 10 13
> a <- matrix(c(2, 4, 3, 1, 5, 7), nrow=2, ncol=3, byrow=TRUE) [2,] 2 5 8 11 14
>a # 2행 3열 행렬 생성 (열 순서로 배열) [3,] 3 6 9 12 15
[,1] [,2] [,3]
[1,] 2 4 3 > x[1:2,] # x 행렬의 1 ~ 2 행 조회
[2,] 1 5 7 [,1] [,2] [,3] [,4] [,5]
> a[2, 3] # 2행 3열의 요소 조회 [1,] 1 4 7 10 13
[1] 7 [2,] 2 5 8 11 14
> a[2,] # 2행 전체 요소 조회
[1] 1 5 7 > x[, 3:5] # x 행렬의 3 ~ 5 열 조회
> a[,3] # 3열 전체 요소 조회 [,1] [,2] [,3]
[1] 3 7 [1,] 7 10 13
> a[, c(1, 3)] # 1열과 3열 요소 조회 [2,] 8 11 14
[,1] [,2] [3,] 9 12 15
[1,] 2 3
[2,] 1 7

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-10


1. R 프로그래밍 기초 : R 자료형 – (2) Matrix

 R의 기본 자료형 : (2) 행렬 – 행과 열을 갖는 벡터형

# 행 혹은 열 추가, 삭제 # 행, 열의 이름 지점

> 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

> cbind(x[, 1:2], c(1, 4, 2), x[, 3:5]) # 2열 뒤에 열 벡터 추가


[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 1 7 10 13
[2,] 2 5 4 8 11 14
[3,] 3 6 2 9 12 15

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-11


1. R 프로그래밍 기초 : R 자료형 – (2) Matrix

 R의 기본 자료형 : (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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-12


1. R 프로그래밍 기초 : R 자료형 – (3) List

 리스트 (List) – 자료 형이 다른 여러 벡터들로 구성된 자료 구조임. 벡터는 동일한 자료 형만 가능하나 (자료의 동질성),
리스트는 다른 자료 형으로 구성된 벡터들을 포함함 (자료의 이질성). 리스트는 또 다른 리스트를 포함할 수 있음.  Recursive Vector

# 리스트 (List) 생성 및 조회 # 리스트 요소 추가 및 삭제


> mylist <- list (x = 1:5, y = matrix(1:15, 3, 5), z = "Hello World") > mylist$new <- letters[1:5] # new 요소 추가 (알파벳 a ~ e)
> mylist > mylist
$x # 벡터 $x
[1] 1 2 3 4 5 [1] 1 2 3 4 5

$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"

$new # 새로운 요소가 추가됨


> mylist$x # 벡터 조회
[1] "a" "b" "c" "d" "e“
[1] 1 2 3 4 5
> mylist$x[2] # 벡터 요소 조회 > mylist$new <- NULL # 특정 요소 삭제

[1] 2 > length(mylist) # 요소의 개수 (x, y, z 3 개임)

> mylist$y[c(1,2),] # 행렬 조회 (1행과 2행만 조회) [1] 3


[,1] [,2] [,3] [,4] [,5] > names(mylist) # 리스트의 요소 이름 조회
[1,] 1 4 7 10 13
[1] "x" "y" "z"
[2,] 2 5 8 11 14
> mylist$y[2, 3] # 행렬 요소 조회 > is.list(mylist) # mylist 개체가 리스트인지 확인

[1] 8 [1] TRUE

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-13


1. R 프로그래밍 기초 : R 자료형 – (4) Data Frame

 데이터 프레임 (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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-14


1. R 프로그래밍 기초 : R 자료형 – (4) Data Frame

# 데이터 프레임의 파일 저장 및 읽기
> 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) # 열 개수 조회

> mgrade <- as.matrix(grade) # 데이터 프레임  행렬 변환


> mgrade
Alice Bob Charlie Dennis
korean 90 84 80 72
english 80 76 96 58
mathmatics 85 64 84 62
science 78 74 84 68
history 65 60 90 70 # grade.csv 파일을 읽어 데이터 프레임에 할당함
# 첫 번째 열은 row 이름임.
> class(mgrade)
[1] "matrix“ # mgrade는 행렬임 > gr <- read.csv("grade.csv“, row.names = 1)
> dgrade <- as.data.frame(mgrade) # 행렬  데이터 프레임 변환 > gr
> dgrade Alice Bob Charlie Dennis
korean 90 84 80 72
Alice Bob Charlie Dennis
english 80 76 96 58
korean 90 84 80 72
mathmatics 85 64 84 62
english 80 76 96 58
science 78 74 84 68
mathmatics 85 64 84 62
history 65 60 90 70
science 78 74 84 68
history 65 60 90 70

> class(dgrade)
[1] "data.frame“ # dgrade 는 데이터 프레임임

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-15


1. R 프로그래밍 기초 : R 연산자 (Operator)

 산술 연산자
# 연산자 사용 예시
+ 덧셈
- 뺄셈 > 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 <- 1:4; dim(x) <- c(2,2) # 2 x 2 행렬 생성


 논리, 비교 연산자 >x
[,1] [,2]
== Equal [1,] 1 3
!= Not equal [2,] 2 4
< Less than >x*x # 각 요소끼리 그냥 곱함 > x %*% x # 행렬 곱셈
> Greater than [,1] [,2] [,1] [,2]
[1,] 1 9 [1,] 7 15
<= Less than or equal
[2,] 4 16 [2,] 10 22
>= Greater than or equal
& AND (벡터 요소 전체에 적용) > x <- 1:5
&& AND (벡터의 첫 번째 요소만 적용) > (x > 1) & (x < 4) # x 벡터의 모든 요소에 AND 연산 수행
| OR (벡터 요소 전체에 적용) [1] FALSE TRUE TRUE FALSE FALSE
|| OR (벡터의 첫 번째 요소만 적용) > (x > 1) && (x < 4) # x[1]에 만 AND 연산 수행
[1] FALSE
! Not
> x[(x > 1) & (x < 4)] # x 벡터 요소 중 1보다 크고,
xor Exclusive OR
[1] 2 3 # 4 보다 작은 요소만 출력함

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-16


1. R 프로그래밍 기초 : 기본 구문 - 조건문

 조건문 : if ~ else 문, ifelse() 함수

if (조건식) { > if (x > 0) {


조건식이 참인 경우 수행되는 부분 + print("Positive")
} else { + } else if (x < 0) {
조건식이 거짓인 경우 수행되는 부분 + print("Negative")
} + } else {
+ print("Zero")
if (조건식 1) { +}
조건식 1이 참인 경우 수행되는 부분 [1] "Negative"
} else if (조건식 2) {
> x <- 1:5
조건식 2가 참인 경우 수행되는 부분
> if (x %% 2 == 0) print("Even") else print("Odd")
} else {
[1] "Odd“ # 벡터의 첫 번째 요소만 비교함
조건식 1, 2 가 모두 거짓인 경우 수행되는 부분
Warning message:
}
In if (x%%2 == 0) print("Even") else print("Odd") :
the condition has length > 1 and only the first element will be used
# Conditional Element Selection
ifelse(조건식, 조건식이 참인 경우 반환 값, 조건식이 거짓인 경우 반환값) # 문자열 비교

> str <- "Hello World"


# 조건문 예시 > if (substr(str, 1, 1) == 'H') print("OK") else print("NOK")
[1] "OK“ # 문자열 str의 위치 1부터 1까지 문자만 비교함
> x <- -5 > if (substr(str, 1, 5) == 'Hello') print("OK") else print("NOK")
> if (x > 0) print("Positive") else print("Negative") [1] "OK“ # 문자열 str의 위치 1부터 5까지 문자열만 비교함
[1] "Negative"
# Conditional Element Selection

> x <- -5
> y <- ifelse(x > 0, "Positive", "Negative")
>y
[1] “Negative”

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-17


1. R 프로그래밍 기초 : 기본 구문 - 반복문

 반복문 : for 반복문, while 반복문, next 문, break 문


 R에는 반복문 대신 쓸 수 있는 표현이 많으므로 되도록이면 반복문을 쓰지 않는 것이 좋음.  반복문은 속도가 느림.

for (변수명 in 벡터) { while (조건식 1) {


if (조건문) { # 조건식 1이 참인 동안 while 루프를 수행함
break # for 문을 탈출함 if (조건식 2) {
} else { break # while 문을 탈출함
next # for 문의 다음 반복을 계속 수행함 } else {
} next # while 문의 다음 반복을 계속 수행함
} }
}
> x <- 1:3
for (i in 1:length(x)) { sum <- 0; x <- 0
if (x[i] %% 2 == 0) while (x < 10) { # 1 ~ 10 까지 합을 계산함
cat("x[", i, "] is even.\n", sep="") x <- x + 1
else sum <- sum + x
cat("x[", i, "] is odd.\n", sep="") }
} cat("1부터 10까지 합은", sum, "입니다.\n")
결과 : 1부터 10까지 합은 55 입니다.
x[1] is odd.
x[2] is even. x <- 0
x[3] is odd. sum <- 0
while(TRUE) { # 1 ~ 10까지 합을 계산함. 조건식은 항상
for (i in 1:length(x)) {
x <- x + 1 # 참 (TRUE) 이므로 무한 루프임
if (x[i] %% 2 == 0) {
if (x > 10)
cat("x[", i, "] is even.\n", sep="")
break # x가 10보다 크면 무한 루프를 탈출함
break # x 벡터에서 첫 번째 짝수를 만나면 for 문을 종료함
else {
} else {
sum <- sum + x
cat("x[", i, "] is odd.\n", sep="")
next
}
}
}
}
x[1] is odd. cat("1부터 10까지 합은", sum, "입니다.\n")
x[2] is even. 결과 : 1부터 10까지 합은 55 입니다.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-18


1. R 프로그래밍 기초 : 기본 구문 – 함수 적용문

 함수 적용문 : apply(), lapply(), sapply(), tapply()

> 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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-19


1. R 프로그래밍 기초 : 확장 자료형 – 시계열 데이터 프레임 (xts : Extensible Time Series) 과 quantmod 패키지

 xts 자료형 : 시간의 흐름에 따라 자료를 데이터 프레임 형식으로 관리함. 날짜, 시간을 키 (Key, or Index)로 자료를 관리함.
 quantmod 패키지 : 주가 등 금융 시계열 데이터를 쉽게 관리하기위한 도구

# 시계열 데이터 생성 (파일 읽기) 및 조회 # Quantmod 패키지에 의한 주가 데이터 분석

> install.packages(“xts”) > install.packages(“quantmod”)


> library(xts) > library(quantmod)
> stock <- read.csv(“데이터/주가.csv") # csv 파일을 읽음 (데이터 프레임)
# stock 데이터 프레임을 xts 형으로 변환함 # Google 사이트에서 삼성전자 주가 데이터 수집
# 1 열은 날짜이며, xts 형의 index (key)로 사용함. > s <- getSymbols('005930.KS', auto.assign = FALSE)
> ohlc <- xts(stock[,-1], order.by=as.POSIXct(stock[,1]))
> head(ohlc) # Colume 이름이 길어서 간단히 표시함
open high low close volume >colnames(s) <- c('open', 'high', 'low', 'close', 'volume', 'adjusted')
2015-05-18 1335000 1335000 1309000 1320000 192537
2015-05-19 1321000 1355000 1307000 1338000 173618 # 앞부분 3개 데이터 조회
2015-05-20 1349000 1370000 1341000 1366000 205829 > head(s, 3)
open high low close volume adjusted
# 날짜를 key 로 데이터 조회 (2016-02-01~2016-02-04)
> ohlc['2016-02-01::2016-02-04'] 2007-01-01 613000 613000 613000 613000 0 578033.2
open high low close volume 2007-01-02 620000 627000 616000 626000 352100 590291.7
2016-02-01 1152000 1163000 1151000 1163000 259979 2007-01-03 627000 628000 611000 614000 393500 578976.2
2016-02-02 1161000 1166000 1147000 1156000 166348 # 뒷부분 3개 데이터 조회
2016-02-03 1150000 1152000 1137000 1146000 174507
> tail(s, 3)
2016-02-04 1150000 1161000 1148000 1156000 247959
open high low close volume adjusted
> ohlc['2016-05-10::'] # 2016-05-10 부터 현재까지 조회 2016-10-07 1700000 1716000 1690000 1706000 521000 1706000
open high low close volume 2016-10-10 1650000 1689000 1628000 1680000 505800 1680000
2016-05-10 1299000 1300000 1288000 1296000 171191 2016-10-11 1600000 1625000 1545000 1545000 768500 1545000
2016-05-11 1296000 1299000 1287000 1292000 176688
2016-05-12 1292000 1292000 1275000 1281000 152302
# 2010-01-01 ~ 현재 까지 데이터 수집
> ohlc$open[1] # 기타 조회 방식은 데이터 프레임과 동일함 > s <- getSymbols('005930.KS', from = ‘2010-01-01’,
open auto.assign = FALSE)
2015-05-18 1335000

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-20


1. R 프로그래밍 기초 : quantmod 패키지

 xts, quantmod 사용 예시

# 수익률, 연평균 수익률, 연평균 변동성 계산 # 주가, 수익률 차트 작성


> plot(as.vector(s$close), type="l", col="blue")
> s <- getSymbols('005930.KS', from='2010-01-01',
auto.assign = FALSE)
> colnames(s) <- c('open', 'high', 'low', 'close', 'volume', 'adjusted')
> s <- s[Vo(s) > 0] # 거래량 = 0 인 데이터를 제외함
> s$rtn <- ROC(Cl(s)) # 종가 기준 수익률 계산

> 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

> s <- na.omit(s)


> head(s, 3)
> plot(as.vector(s$rtn), type="l", col="red")
open high low close volume adjusted rtn
2010-01-05 826000 829000 815000 822000 558500 775111.4 0.01594148
> abline(h=mean(s$rtn))
2010-01-06 829000 841000 826000 841000 458900 793027.6 0.02285126
2010-01-07 841000 841000 813000 813000 442100 766624.8 -0.03386055

> drift <- mean(s$rtn) * 252 * 100


> drift
[1] 10.01817  연 평균 수익률 = 10.02%

> volatility <- sd(s$rtn) * sqrt(252) * 100


> volatility
[1] 27.85096  연 평균 변동성 = 27.85%

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-21


1. R 프로그래밍 기초 : quantmod 패키지

 xts, quantmod 사용 예시

# 일일 수익률 분포 # 거래량 차트, 이동평균 차트


> barplot(as.vector(s$volume['2016-09-15::']), col='red')
> plot(density(as.vector(s$rtn)), col="red")
> abline(v = 0, col = "blue")

> s$sma5 <- SMA(s$close, 5)


> s$sma10 <- SMA(s$close, 10)
> plot(as.vector(s$close['2016-07-01::']), type='l')
> lines(as.vector(s$sma5['2016-07-01::']), col='red')
> lines(as.vector(s$sma10['2016-07-01::']), col='blue')

> mean(s$rtn)  수익률의 평균


[1] 0.0003975466  일일 평균 수익률 = 0.0398 %

> sd(s$rtn)  수익률의 표준편차


[1] 0.01754446  일일 수익률의 표준편차 = 1.754 %

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-22


1. R 프로그래밍 기초 : quantmod 패키지

 quantmod 사용 예시 – 주가 차트 작성 (주가의 일일 캔들 차트 및 기술적 분석 지표)

> chartSeries(s['2016-05-01::'], up.col='red', dn.col='blue', theme='white', name="Samsung")


> addMACD() # CCS 기술적 지표 추가
> addBBands() # 볼린저 밴드 추가
> addSMA(10); addSMA(30, col = ‘blue’) # 10일, 30일 이동평균선 추가

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-23


1. R 프로그래밍 기초 : quantmod 패키지

 quantmod 사용 예시 – 주가 차트 작성 (주가의 주간 혹은 월간 캔들 차트 및 기술적 분석 지표)

> chartSeries(to.weekly(s['2016-05-01::']), up.col='red', dn.col='blue', theme='white', name="Samsung")


> addMACD() # CCS 기술적 지표 추가
> addBBands() # 볼린저 밴드 추가
> addSMA(10); addSMA(30, col = ‘blue’) # 10일, 30일 이동평균선 추가 * 월봉은 to.monthly() 사용

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-24


1. R 프로그래밍 기초 : 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

# 수정주가로 바꾼 후 리턴 > tail(samsung)


stock <- adjustOHLC(stock, use.Adjusted=TRUE) open high low close volume adjusted
2016-12-16 1765000 1801000 1760000 1793000 234900 1793000
# colume 이름을 바꾼다 2016-12-19 1781000 1819000 1781000 1795000 108700 1795000
colnames(stock) <- c("open", "high", "low", "close", "volume", "adjusted") 2016-12-20 1796000 1820000 1792000 1812000 152300 1812000
2016-12-21 1818000 1830000 1801000 1805000 131000 1805000
getKospi <- stock 2016-12-22 1813000 1815000 1799000 1809000 127000 1809000
} 2016-12-23 1801000 1804000 1780000 1782000 166600 1782000

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-25


1. R 프로그래밍 기초 : quantmod 패키지 – 기술적 분석 백 테스트 (예시)

 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일

누적 수익률 (전략의 결과) 누적 수익률 (전략의 결과)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-26


1. R 프로그래밍 기초 : quantmod 패키지 – 기술적 분석 백 테스트 (예시)
(첨부 파일 : 3.GoldenCross_test.R)
 단기, 장기 이동평균 기간 설정에 따라 성과가 다르게 나타나므로 최적 이동평균 기간을 설정해 봄.
 GoldenCross.R 에 정의된 optimize() 함수를 이용하여 설정된 검색 기간 내에서 누적 수익률이 최대가 되거나, 누적 수익률의 표준편차가 최소가 되거나,
Sharp Ratio가 최대가 되는 이동평균 기간을 찾아 봄.
 최적 이동평균 기간을 적용하여 성과를 다시 분석함.  분석 기간과 적용 기간은 달라야 함. (참고 : k-fold Cross Validation test)

> 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일

2013년 ~ 현재 차트 > plot(density(r), main="Return Density")


> abline(v=mean(r), col='red')
> mean(r)
[1] 0.0003886604

누적 수익률

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-27


1. R 프로그래밍 기초 : quantmod 패키지 – 차트 평활화 (Smoothing) (참고파일 : 20.Smoothing.R)

시계열의 평활화 : 단순이동평균 (SMA), Kernel Regression, Spline


 Kernel Regression 방식은 평활점을 계산하는 시점에 정규분포를 적용해서 인근 시계열 데이터의 가중치를 다르게 적용하여 가중 평균을 계산한 방식임. 정규분포의 중심
부분에는 높은 가중치를 부여하고, 좌, 우로 갈수록 점차 가중치를 낮게 부여.
 Spline은 인접한 두 점을 다항식으로 잇고 두 개의 다항 곡선을 서로 미분 가능하도록 (Smooth한 곡선이 되도록) 잇는 원리.
 Kernel과 Spline은 후행성이 없음. 그러나 이것은 과거 시점에서 미래의 데이터를 이용하기 때문임. 현재 시점에서 미래 데이터는 이용할 수 없음.
 과거 데이터만으로는 후행성이 없는 평활선을 찾는 것은 불가함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 1-28


R을 활용한 금융 데이터 마이닝

2. 빅데이터와 금융 데이터마이닝

2-1. 데이터 과학의 개요 (빅데이터, 기계학습, 데이터마이닝, KDD)


2-2. 데이터마이닝 프로세스
2-3. 금융 데이터마이닝을 위한 가정 사항 (EMH, Random Walk)
2-4. 금융 데이터의 종류 (시장 데이터, 공공 데이터, 소셜 데이터)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-1


2. 빅데이터 와 금융 데이터마이닝 : 금융 빅데이터

금융 빅데이터

 빅 데이터란 기존 데이터베이스 관리도구로 데이터를 수집, 저장, 관리, 분석할 수 있는 역량을 넘어서는 대량의 정형 또는 비정형 데이터 집합 및 이러한
데이터로부터 가치를 추출하고 결과를 분석하는 기술을 의미함 (Wikipedia)
 금융 빅데이터는 금융 분야의 데이터로 주로 거래 시장 데이터와, 공공정보, 뉴스정보, 공시정보, 그리고 소셜 데이터 등을 포함함. 거래 시장 데이터는 정형화된
데이터이며, 공공정보 등은 비정형되된 데이터이.

금융 빅데이터 데이터 분석 기술

거래 시장 데이터 공공 정보 소셜 데이터

인터넷 포털 인터넷 포털 데이터마이닝


거래소 DMA 뉴스 검색 금융 데이터 Twitter
기계학습
시세 데이터 거래소 시세 기사 검색 Open 기업 정보, 주가 검색 Open API
데이터 수집 API 등. 정보 등 데이터 인공지능

패턴인식
증권사 API 증권사 HTS 공공정보 사이트 통계 사이트
Facebook
.
거래소 시세 증권사 제공 기업공시, 실적, 거시경제 지표 등
검색 Open API .
데이터 수집 시세 데이터 재무재표 등
.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-2


2. 빅데이터 와 금융 데이터마이닝

데이터 마이닝 개요

 데이터 마이닝이란 방대한 데이터 (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)

데이터 베이스 최적화


기술 데이터 마이닝 (Optimization)
(Data Mining)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-3


2. 빅데이터 와 금융 데이터마이닝

지식 탐사와 데이터 마이닝 (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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-4


2. 빅데이터 와 금융 데이터마이닝

지식 탐사 과정

 데이터 분석이란 수집/축적된 데이터를 기반으로 어떤 현상에 대한 사실적 정보를 추출하고 그 정보로부터 유용한 지식을 얻어 (추론적 정보) 과거 현상에 대해 깊이
이해하거나, 미래 상황을 예측하여 투자 의사결정에 활용하기 위한 과정임.
 데이터 분석의 목적은 사실 (Fact)에 근거한 의사결정을 추구함에 있음.  Data-Driven Decision making (DDD)
 축적된 데이터는 정보화, 지식화 과정을 거치면서 그 가치가 커지고, 비지니스 활동을 통해 발생하는 데이터가 다시 축적되어 데이터로부터 얻을 수 있는 지식이
점차 증가함.

데이터 사이언스 영역

투자 의사결정
데이터 정보 지식
(Decision)
(Data) 정보화 (Information) 지식화 (Knowledge) 활용
데이터로부터 추출한
어떤 현상에 대한 데이터의 의미와 정보를 해석, 추론 지식을 투자 의사
사실적 자료 (Fact) 가치를 찾음. 하여 지식을 창출함. 결정에 활용함

데이터 수집, 관리 투자 결정에 활용


데이터 분석
• 데이터 수집 (축적) • 과거 현상의 이해
• 데이터 저장 및 가공 • 현재 상태을 추론
• 통계적 분석
• 데이터 조회 (쿼리) • 미래 상황을 예측
• 기계학습적 분석 등

금융 투자 활동을 통한 데이터 축적

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-5


2. 빅데이터 와 금융 데이터마이닝

데이터마이닝 프로세스

 지식 발견을 위해서는 데이터 베이스로부터 분석 목적에 맞는 데이터를 선별하여 결과를 잘 설명할 수 있는 특징 (Feature) 집합을 생성함.  Feature Generation.
 특징 집합이 생성되면 데이터 표준화 등 전처리 과정을 거처 입력 데이터를 생성함.  Feature Aggregation.
 입력 데이터는 학습 데이터 (Training Data Set), 평가 데이터 (Validation Data Set), 시험 데이터 (Test Data Set)로 구분됨.
 학습 데이터는 실제 학습 (분석)을 위한 데이터이고, 평가 데이터는 과적합 (Overfitting)을 방지하고, 일반화 특성을 향상시키기 위해 사용됨 (학습을 어느 수준까지
할 것인가를 결정함). 그리고 시험 데이터는 결과의 신뢰성을 확인하기 위해 사용됨. 학습 데이터와 평가 데이터는 학습 과정에서 사용된 데이터이므로 결과의
신뢰성 확인은 학습에 사용되지 않은 시험 데이터를 이용함.
 데이터 마이닝 알고리즘을 이용하여 입력 데이터를 학습하고 신뢰성 검증 과정을 거치면 결과가 나옴. 학습 결과는 데이터 후처리 과정을 거쳐 결과 해석, 시각화
과정 등을 통해 의사 결정에 사용 가능한 형태의 지식으로 변환됨..
 최종 산출물인 지식은 의사 결정 시스템의 하나의 입력으로 사용될 수 있음.

데이터 Data Query, 특징 Feature 데이터 Feature 입력


베이스 Pivoting 생성 Generation 전처리 Aggregation 데이터
 학습 데이터
 검증 데이터
금융 이론
 시험 데이터

 기계 학습

데이터 Output 데이터  결과 해석 Input


지식화 의사 결정 시스템
Input 마이닝 후처리  시각화 등

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-6


2. 빅데이터 와 금융 데이터마이닝

금융 데이터마이닝을 위한 가정 사항

 금융 데이터는 자연과학, 사회과학이나 일반적인 비즈니스 데이터와 달리 특정한 패턴을 발견하기 어려우므로 과거 데이터를 분석하여 미래를 예측하기 어려움.
 금융 데이터마이닝의 목표는 과거 데이터를 학습하여 “미래를 예측 (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

따라서 미래 주가는 예측할 수 없음.  주가는 Random walk가 아니라고 가정함.


News 이전의
C
주가
News 이후의
위의 가정은 기술적 분석의 가정 사항이기도 함. 금융 데이터마이닝도 새로운 (?) 형태의 주가

기술적 분석의 일종으로 볼 수 있으므로, 가정 사항도 동일함. 시간


Good News
발생 시점

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-7


2. 빅데이터 와 금융 데이터마이닝

금융 데이터의 종류

 금융 데이터는 수치 데이터인 거래 시장 데이터 (정형화된 데이터)와, 텍스트 데이터 (비 정형화된 데이터)인 뉴스, 공공정보, 소셜 데이터 등이 있음.
 금융 데이터는 모두 통계적 기법을 이용하여 분석함. 텍스트 데이터도 통계분석을 위해서는 수치 데이터로 변환함 (ex : Term frequency)

거래 시장 데이터 (수치 데이터) 뉴스, 공공정보, 소셜 데이터 (텍스트 데이터)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-8


2. 빅데이터 와 금융 데이터마이닝

시장의 거래 데이터

 시장 데이터는 거래소에서 회원사 (증권사)에게 제공하는 시세 데이터 (틱 데이터)를 기초로 만들어 짐.


 거래소에서 제공되는 원본 데이터는 증권사에서 필터링, 가공 등의 절차를 거쳐 HTS, 인터넷 금융 사이트 등으로 요약된 형태로 일반에게 공개됨.

거래소 시세 데이터 원본 증권사 가공 데이터 (예시) HTS/ 인터넷 금융 사이트

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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 2-9


R을 활용한 금융 데이터 마이닝

3. 금융 데이터 학습 개요

3-1. 학습 데이터 유형 (학습용 데이터, 평가용 데이터, 시험용 데이터)


3-2. 데이터 학습의 유형 (지도 학습, 비지도 학습, 강화 학습)
3-3. 금융 데이터마이닝 프로세스
3-4. 데이터 전처리
3-5. 데이터 표준화 (Normalization)
3-6. [실습] 학습용 데이터 세트 생성 실습

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-1


3. 금융 데이터 학습 개요 : 학습 데이터

학습 데이터 유형 (훈련용 데이터, 평가용 데이터, 시험용 데이터)

 분석할 데이터 세트를 훈련용 (Training), 평가용 (Validataion), 시험용 (Test) 으로 나누에서 분석함.
 훈련용 데이터는 실제 학습할 데이터이고, 평가용 데이터는 어느 정도의 수준으로 학습하는 것이 적당한지를 결정하는 데 사용되고, 시험용 데이터는 학습의
최종 성과를 평가하기위해 사용됨.
 참고 : k-Fold Cross validation

평가용 데이터 세트
(Validataion Set) 훈련용 데이터 세트
훈련용 데이터 세트
데이터를 나누어서 평가용 데이터 세트 훈련용 데이터 세트
(Sampling) 분석함

평가용 데이터 세트 학습에


사용됨
훈련용 데이터 세트
(Training Set) 평가용 데이터 세트
전체 데이터 세트 훈련용 데이터 세트

훈련용 데이터 세트
훈련용 데이터 세트

학습에
시험용 데이터 세트 사용되지
시험용 데이터 세트 시험용 데이터 세트 시험용 데이터 세트
(Test Set) 않음

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-2


3. 금융 데이터 학습 개요 : 기계학습 유형

데이터 학습의 유형 (기계학습)

 지도 학습 (Supervised Learning)

- 훈련 데이터에 결과가 미리 주어진 상태에서 학습의 결과가 주어진 값 (목표 값)이 나오도록 학습 시키는 방법. 학습이 완료되면 결과를 알려 주지 않아도

스스로 추론한 결과를 제시함. 주어진 입력 값이 어는 부류에 속하는지 (Classification), 입력 값으로 예측이나 추정 (Regression)하는데 주로 사용됨.

- 훈련 데이터에는 결과 값이 같이 주어짐. 학습 과정에서 학습 결과와 주어진 결과와의 오차가 최소가 되도록 반복 학습함. 학습 결과를 이용하여 결과가

주어지지 않은 시험 데이터의 결과를 추정함.

 비 지도학습 (Unsupervised Learning)

- 훈련 데이터에 결과가 주어지지 않은 상태에서 자율적으로 학습함.

- 훈련 데이터의 패턴을 관찰하여 스스로 의미를 찾아냄. 서로 유사한 패턴끼리 묶거나 (Clustering), 연관 규칙 (Association)등을 찾아냄.

- 예측이나 추정 문제보다는 데이터가 어떻게 구성되어 있는지 밝히는데 주로 사용함. (데이터 요약, 정리)

 강화학습 (Reinforcement Learning)

- 과거 데이터를 학습하는 것이 아니라 현재 상태에서 시행착오 혹은 시뮬레이션에 의해 최적의 행동을 결정함. 시행착오 경험에 의해 행동을 점차 개선시킴.

- 현재의 데이터 (혹은 Experience)를 학습하여 어떤 Action을 취하고 결과에 대해 보상 (Reward)을 받음.

- 보상은 결과에 따라 양수 (+ : Reward) 일 수도 있고 음수 (- : Punishment)일 수도 있음.

- 강화 학습은 보상이 최대가 되는 Action을 찾는 방법임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-3


3. 금융 데이터 학습 개요 : 금융 데이터마이닝 프로세스

금융 데이터마이닝 프로세스

 분석 목표가 설정되면 수집된 원시 데이터 (Trade & Market Data)로부터 목적에 적합한 특징 (Features) 혹은 속성 (Attribute)들을 생성함.  Featrure Generation
 생성된 특징들을 모두 모아서 학습이 가능한 형태의 특징 집합을 생성함.  Feature Aggragation
 데이터 전처리 (Preprocessing) 과정을 거쳐 기계학습 알고리즘에 입력함.

Trade and Feature Feature Data


Learning
Market Data Generation Aggragation Preprocessing

 상세 거래 데이터 :  거래 데이터 자체 :  Feature 집합 생성  데이터 정제  기계학습


- 호가, 잔량, 건수 - 데이터 자체가 개별적으로  학습 가능한 형태로 가공  데이터 통합  분류 (Classification)
- 거래 시각 Features가 될 수 있음.  학습 데이터 세트 구성  데이터 변환  군집 (Clustering)
- 체결 가격  미시 시장 Features :  데이터 축소  회귀분석 (Regression)
- 체결 수량 - Depth, Liquidity, Spread …  데이터 이산화  연관분석 (Association)
 요약 거래 데이터 : - Tick Time, Volume Time …  전처리는 Trade & Market  추론 (Inference) 등.
- 요약 시간 (분봉, 일봉 등) - Order flow, Trade Intensity … 데이터에서도 수행함.
- 시가, 고가, 저가, 종가 - PIN, VPIN …
- 거래량  기술적 분석 Features :
 시장 데이터 : - MA, MACD, Bollinger Band,
- 지수 (기초자산, 변동성 지수) - Stochastic, RSI, CCI …
- 거래 주체별 수요, 공급량 - 변동성, 왜도, 첨도
- 파생 상품 관련 - VWAP …
- 내재변동성, 민감도, 베이시스 …

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-4


3. 금융 데이터 학습 개요 : 데이터 전처리 (Data Preprocessing)

데이터 전처리 과정의 필요성

 실생활에서 수집된 데이터는 완벽할 수 없음. 불완전성, 불일치성, 잡음 등의 현상이 항상 존재함.


 데이터의 품질은 분석 결과에 큰 영향을 미치므로, 데이터의 전처리 과정 (Data Preprocessing) 이 필요함.  데이터 전처리 작업이 분석 작업보다 더 오래 걸릴 수 있음.
 데이터는 적시성 (Timeliness)과 결과와의 관련성 (Relevance)이 있어야 함. 결과와 시기적으로 맞지 않는 데이터는 의미가 전혀 없는 것은 아니지만 분석 시기와
수집 시기와의 차이를 고려하여 적절히 보정되어야 함 (적시성). 또한, 수집된 데이터는 분석 결과에 필요한 정보를 충분히 가지고 있어야 함 (관련성).
 데이터 전처리 방법으로 정형화된 방법은 없으며 데이터의 특성과 분석 목적에 따라 분석자의 노하우를 통해 결정됨.
 시행 착오, Cross validation 등을 통해 결과의 정확도가 높아지도록 전처리 방법을 연구해야 함.
 분석자는 데이터를 분석하는 기법 뿐만 아니라 데이터 자체에 대한 지식이 풍부해야 함. 의미 있는 분석을 위해서는 해당 분야 (해당 비지니스) 의 데이터를 충분히
이해하는 데이터 전문가가 필요함.  데이터 사이언티스트의 필요성. (예 : 금융 데이터 분석을 위해서는 데이터 분석 기법 뿐만 아니라 금융 이론에 대한 깊은
이해가 필요함.)

데이터 전처리 과정의 대표적 유형

 Data Cleaning (정제) : 데이터 누락이나, 중복, 잡음 , 이상치 (Outlier) 들을 수정 하거나 제거해야 함.
 Data Integration (통합) : 데이터는 다양한 소스로부터 수집할 필요가 있음.
 Data Transformation (변환) : 데이터는 속성 별로 스케일이나 단위 등이 다를 수 있으므로, 이를 표준화할 필요가 있음. (ex: Z-Score or Min-max Normalization)
 Data Reduction (축소) : 분석 결과에 영향이 없다면, 데이터의 차원을 줄이는 것이 필요함. 중요도 분석을 통해 중요한 데이터에 더욱 집중해야 함 (차원의 저주).
 Data Discretization (이산화) : 연속된 수치 데이터를 이산화 시킴. 이산화된 숫자, 분류 명이나 단위 명 등으로 대체함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-5


3. 금융 데이터 학습 개요 : 데이터 전처리 (Data Preprocessing)

데이터 정제 (Cleaning)

 누락 데이터 처리 방안 (예시)
- 평균, 중앙값, 최빈수 등으로 중심 경향 적인 데이터로 채우는 방법 : 단순한 방법이면서 크게 무리가 없는 방식이나, 데이터의 분산이 감소하고, 소수의 평균이
전체를 대표하는 경우가 발생하거나, 극단적인 값으로 평균이 영향을 받음.
- 데이터 분포에 맞게 랜덤 값을 생성하여 채우는 방법 : 데이터의 분포를 알고 있는 경우에만 적용 가능함.
- 회귀 분석에 의한 추정 값으로 채우는 방법 : 데이터 특성에 타당한 회귀식으로 중간의 누락 값을 추정함. 등.

 이상 데이터 검출 (예시)
- 분석자가 Min, Max 범위를 설정하고, 이 범위를 벗어난 데이터들을 이상치로 판단함.
- 데이터의 평균과 표준편차를 계산하고 평균에서 너무 떨어진 데이터들을 이상치로 판단함. (ex : ± 3σ 를 벗어남)
- 데이터 간 최 근접 거리 (Nearest neighbor) 를 계산하여, 거리의 분포에서 멀리 있는 데이터를 이상치로 판단함.
- 데이터를 여러 개의 클러스터로 묶어 보고 (군집화, 그룹화), 각 그룹의 중심에서 멀리 떨어진 데이터를 이상치로 판단.
- 이상치도 하나의 정보가 될 수도 있음.

 잡음 데이터 검출 (예시)
- 이동 평균에 의한 필터링 : 이동 평균에 비해 너무 높거나 낮은 값들을 잡음으로 판단함. 이동 평균으로 대체.
- Kernel 이나 Spline 등의 평활화에 의한 필터링 : 이동 평균은 데이터 후행성이 나타나므로, Kernel이나 Spline 사용.
- 푸리에 변환 등을 통한 Low pass, High pass 필터링. 등.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-6


3. 금융 데이터 학습 개요 : 데이터 전처리 (Data Preprocessing)

데이터 변환 (Transformation)

 함수 식에 의한 데이터 변환 (예시)

- 데이터의 범위가 넓고 수치가 낮은 쪽이나 높은 쪽으로 크게 치우친 경우 로그나 제곱근 함수로 변환이 필요한 경우도 있음 (Right or Left Skewness).
예를 들어 장기간 주가 데이터의 경우 현재 주가가 과거 주가에 비해 높은 경우, 과거 주가의 등락은 잘 드러나지 않으므로 절대적 수준 보다 등락의 변화를
분석하고자 할 경우는 로그 주가를 이용함.
- 함수 식을 이용하여 데이터를 변환하는 경우는 데이터의 왜곡이 발생하므로 결과 해석에 이를 반영해야 함.
- 데이터 간 비교를 위해서는 평균과 분산을 표준화 시킬 필요가 있음. (Z-score Normalization)
- 너무 큰 값이나, 작은 값이 결과에 미치는 영향을 줄이기 위해 데이터를 일정 범위로 맵핑 시킬 필요가 있음.
(예 : 직선의 방정식이나 시그모이드 같은 함수를 이용하여 데이터의 범위가 0 ~ 1 또는 -1 ~ +1 사이에 있도록 변환)

 데이터 이상치 (Outlier) 유형 (예시)

Outlier

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-7


3. 금융 데이터 학습 개요 : 데이터 전처리 (Data Preprocessing)

 데이터 이상치 (Outlier) 유형 (예시)

 현실에서 충분히 발생할 수 있는 데이터지만, 일반적인 데이터는 아님.


 이상 값으로 인해 평균, 편차, 왜도, 첨도 등이 영향을 받음.
 분석 결과의 일반화에 영향을 미칠 수 있으므로, 제거할 필요가 있음.

이상 값  과거의 데이터가 현재 데이터에 비해 현저히 낮은 경우, 과거 데이터의


등락이 잘 드러나지 않음. 과거에는 별로 변하지 않은 것으로 보임.
 데이터를 로그 변환해 보면 과거에도 그 수준에 맞춰 등락이 있었음을 알 수 있음.
 아래 데이터는 1918년 1월 ~ 2016년 4월 까지 미국 달러 발행량 임.

2008년 금융위기 이후
로그 변환
달러 발행량이 급격히
증가하였음. (QE1 ~ QE3) 과거에도 꾸준히 등락이
있었던 것을 알 수 있음.

과거에는 달러 발행이
거의 없었던 것처럼
인식될 수 있음.

자료 출처 : St. Louis Adjusted Monetary Base (AMBNS)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-8


3. 금융 데이터 학습 개요 : 데이터 표준화 (Normalization) * 실습 파일 : 3-1.Normalization.xlsx

데이터 표준화 : Data Normalization

 데이터 분석을 위해서는 데이터를 표준화 시켜야 할 경우가 많음. 데이터의 크기가 Z-score Normalization
상이할 경우 분석 결과에 영향을 미칠 수 있으므로 스케일을 맞추어야 함.
 데이터 표준화 방법은 Z-score normalization, Min-max normalization 등이 있음.
F ~ T 사이의 값으로 변환
(Min, max Normalization)
(F : From, T : To)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-9


3. 금융 데이터 학습 개요 : 데이터 세트 생성

* 실습 파일 : 3-2.FeatureSetTA.R
기술적 분석 지표의 Feature 들로 데이터 세트 생성 실습

 Yahoo에서 주가 데이터를 읽어와서 9개의 기술적 분석 지표로 구성된 훈련용, 시험용 데이터 세트를 생성함.

* 기술적 분석 지표로 학습용 데이터를 구성하면 좋은 성과를 기대하기 어려우나,


기계학습 기법을 이해하기위해 예시로 작성해 본 것임. 더 좋은 성과를 위해서는
금융 이론을 바탕으로 더 타당한 데이터 세트를 구성하는 것이 필요함

Supervised Learning을 위한 Class

1 – 향후 5일간 평균 주가 하락 (Down)
9개의 기술적 분석 지표로
2 – 향후 5일간 평균 주가 보합 (Flat)
구성된 훈련용 데이터 세트
3 – 향후 5일간 평균 주가 상승 (Up)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 3-10


R을 활용한 금융 데이터 마이닝

4. 분류 기법 (Classification)
A B

4-1. KNN (k-Nearest Neiborhood) 분류 기법


4-2. Decision Tree (의사결정 나무) 분류 기법
4-3. SVM (Support Vector Machine) 분류 기법
4-4. 의사결정 경계면과 비선형 분리 (Kernel Trick)
4-5. [실습] KNN 에 의한 주가의 방향 예측 실습
4-6. [실습] Decision Tree에 의한 주가의 방향 예측 실습
4-7. [실습] SVM에 의한 주가의 방향 예측 실습

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-1


4. 분류 기법 (Classification) – KNN (K-nearest neighbor)

KNN 알고리즘 (근접이웃 알고리즘)

 아래 그림과 같이 4개의 클래스로 구분된 데이터가 있을 때 점 A 는 어느 클래스에 속한다고 평가할 수 있을까?


 간단한 방법으로는 점 A와 인접한 점 들과의 거리가 가까운 클래스에 속한다고 할 수 있음.
 육안으로 보았을 때 점 A는 클래스 1 에 속한다고 볼 수 있음.  다차원 공간 (다변량)인 경우는 육안으로 확인이 불가함.
 KNN (K-nearest neighbor : 최 인접 이웃) 알고리즘은 점 A 로부터 가까운 거리에 있는 K 개의 점을 선택한 후, K 개의 점들이 가장 많이 속한 클래스를 찾아 점
A가 그 클래스에 속한다고 평가하는 알고리즘임. 예를 들어 A에서 가까운 9개의 점을 선택하였더니, 그 중 5개는 클래스 1에 속하고, 3개는 클래스 2에 속하고,
1개는 클래스 4에 속한다면 점 A 는 클래스 2에 속한다고 평가함.

알고리즘

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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-2


4. 분류 기법 (Classification) – KNN (K-nearest neighbor)
* 실습 파일 : 4-1.KNN.xlsm
KNN 알고리즘 - 엑셀 예시

 아래 예시는 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
로 분류함.

시험 데이터와 전체 훈련
데이터와의 거리를
측정함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-3


4. 분류 기법 (Classification) – KNN (K-nearest neighbor)

* 실습 파일 : 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차원이므로
공간 죄표에 시각화 할 수
없음.
스프레드

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-4


4. 분류 기법 (Classification) – KNN (K-nearest neighbor)
* 실습 파일 : 4-2.knn.R
KNN 알고리즘 - R 실습 : 주가의 방향 예측

 KNN 알고리즘으로 삼성전자의 주가 데이터를 수집하여 기술적 분석 Feature를 생성하여 내일 주가의 방향을 예측함. (상세 내역은 R-소스 참조)

삼성전자 주가의 방향을 예측함.

최적 k = 168
내일 주가 방향 예측 결과 K

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-5


4. 분류 기법 (Classification) – KNN (K-nearest neighbor)

KNN 알고리즘 - 차원의 저주 (Curse of Dimensionality)

 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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-6


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

Decision Tree (의사결정 나무) 알고리즘 : 개요

 훈련 데이터가 왼쪽 그림처럼 구성된 경우 분류를 위한 경계선은 오른쪽의 트리 형식으로 표현할 수 있음.


 아래 예시는 입력 변수가 2개 (x, y) 인 경우이며 2차원 평면상에 배치된 데이터들을 4개의 직선으로 분류한 경우임.
 입력 변수가 3개 이상인 다차원 구조에서는 직선 대신 (초) 평면으로 구분함.
 트리 구조로 경계선을 구분하면 차원이 높아져도 직관적으로 이해하기 쉬우므로, 분류 기법으로 많이 사용됨.
 경계선을 너무 많이 사용하면 트리 구조가 복잡해지고, 과잉 적합의 우려가 있음.
 과잉 적합 문제를 해결하기 위한 방편으로 트리가 너무 복잡해지지 않도록 사전/사후 가지치기 (Pruning) 방법이 사용됨.
 일반화 특성과 정확도를 향상시키기 위해서는 훈련 데이터를 여러 개로 분할하고, 분할된 데이터 마다 트리를
구성한 후 결과를 종합하는 랜덤 포레스트 (Random Forest) 방법이 사용됨.
x >= a
y Test 데이터가
이 곳에 있으면 Yes No
5/7 의 확률로
Class = 2 로 분류함
y >= A -8개
-1개
Decision Tree Yes No

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)와 최적의 분할 선택 기준 (분리 기준)
엔트로피

 각 노드의 불순척도 : 엔트로피, 지니지수 등


 불순척도가 작아지도록 (순도가 높은) 분할 기준을 선택함.
 분할 전 부모 노드의 불순척도보다 분할 후 자식 노드의 불순척도가 높을수록 좋음. (Information gain) 지니 지수

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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-8


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

Decision Tree의 특징

 분류나 예측의 근거를 알 수 있으므로 결정 과정을 쉽게 이해할 수 있음.


 데이터의 차원이 높아져도 (Feature가 많아져도) 분류에 덜 중요한 Feature들은 분류 기준에서 제외되므로 Feature 선정에 크게 신경 쓸 필요가 없음.
 Feature 마다 분류에 영향을 미치는 정도를 파악할 수 있음. 중요한 Feature들을 찾아볼 수 있음.  중요도 분석
 Decision Tree를 과도하게 분할할 경우 Tree가 복잡해지고 과잉적합 (Overfitting) 문제가 발생함.
 트리가 복잡해 질수록 아래 쪽 노드에 포함되는 데이터가 작아지므로 통계적으로 의미있는 결정을 내리기 어려움.  데이터 단편화 (Data fragmentation)
 트리 안에 동일한 서브 트리 (Sub Tree)가 반복해서 복제되어 나타날 수 있음. 서브 트리는 Decision Tree를 복잡하게 만들고 이해하기 어렵게 만듬.
 트리가 복잡해지고, 과잉적합 문제를 개선하기 위해서는 트리가 더 이상 커지지 않도록 하는 정지기준 (Stopping rule)과 가지치기 (Pruning) 방법이 있음.
 정지기준은 트리의 깊이 (Depth)를 지정하거나, 마지막 노드의 데이터 수가 임계치 이하로 떨어지지 않도록 지정하는 방법이 있음.
 가지치기는 사전 가지치기와 사후 가지치기 방법이 있음.

가지치기 (Pruning)

 트리가 너무 복잡해지지 않도록 단순화 시킴  일반화 특성을 향상 시킴.


 평가용 데이터 (Validation Data)를 이용하여 일반화 특성이 좋아지는 지점에서 트리 성장을 멈추거나, 데이터 전문가에 의해 타당성이 없는 규칙은 제거함.
 사전 가지치기 (Pre-pruning)
- 조기 정지 규칙에 의해 트리 성장을 멈춤. 정지 규칙으로는 트리의 깊이, 마지막 노드의 최소 데이터 수, 불순 척도 등의 임계치를 이용하는 방법 등이 있음.
 사후 가지치기 (Post-pruning)
- 초기에는 트리를 최대 크기로 만듦. 마지막 노드의 불순 척도가 최소가 되도록 분할함. 복잡도 (Complexity)가 최대가 됨.
- 완전히 성장한 트리를 위쪽 방향으로 다듬어가는 절차를 수행함.  Trimming
- Cross Validatation (CV) 시험 오차가 최소가 되는 분할 수준으로 트리를 줄임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-9


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

Decision Tree 를 이용한 주가의 방향 예측 실습 : (1 단계) – 트리를 최대한 크게 성장 * 실습 파일 : 4-3.DecisionTree.R

 기술적 분석 지표들을 학습하여 내일 주가의 방향을 예측함. (기술적 분석 지표 : ATR, SMI, ADX, Aroon, Bollinger Band, OBV, MACD)
 1 단계 : 복잡도를 증가시켜 (cp를 작게 설정함) 트리를 최대한 크게 성장 시킴. (과잉 적합인 상태임)

삼성전자 주가의 방향을 예측함.

복잡도를 증가시킨 트리 (과잉 적합)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-10


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

Decision Tree 를 이용한 주가의 방향 예측 실습 : (2 단계) – CV 오차가 최소인 복잡도 선정 * 실습 파일 : 4-3.DecisionTree.R

 복잡도 (cp)는 트리가 커질수록 Penelty를 부여할 때의 penalty 상수로 정의함. cp 가 작을수록 penalty 효과가 작아지므로 트리의 복잡도가 증가함.
 2 단계 : CV 오차가 최소가 되는 cp (=0.003268) 를 선정함. rpart는 자체적으로 CV를 수행하므로, validation 세트를 sampling 으로 인해 실행할 때마다 달라짐.

복잡도가 증가할수록 CV 오차는


감소하다가 다시 증가함

CV 오차가 최소인 지점
CV 오차가 최소인 지점

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-11


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

Decision Tree 를 이용한 주가의 방향 예측 실습 : (3 단계) – 가지치기 (Pruning) 및 성능확인, 예측 * 실습 파일 : 4-3.DecisionTree.R

 선정된 cp 를 이용하여 가지치기를 수행한 후 테스트용 데이터 세트를 이용하여 성능을 확인함.
 예측용 데이터를 이용하여 내일 주가의 방향을 예측함.

가지치기 (Pruning) 후의 트리
CV 오차가 최소인 깊이를
가진 트리임.

정확도 : 훈련용 데이터로 생성한 트리로 시험용 데이터를 맞출 확률

내일 주가는 56.8%의 확률로 상승할 것으로 예상됨.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-12


4. 분류 기법 (Classification) – 의사결정 나무 (Decision Tree)

참고 : Decision Tree 예시 (cp를 높여서 더 단순하게 생성한 트리. Underfitting)

이 지점은
100% 확률로
내일 주가가
하락할 것으로
예상.

이 지점은
57% 확률로
내일 주가가
상승할 것으로
예상.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-13


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘의 기본 아이디어

 분리 (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 이동 시키면 여기서
만남.
선형 분리

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-14


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 가능한 경우

 아래 그림에서 평행한 두 직선의 거리 (d)를 최대화 하는 문제임.  w를 최소화하는 문제와 동치임.


 제한 조건이 있는 상태에서 w를 최소화하기 위해 Lagrange 를 이용함.  λ를 알 수 없으므로 Dual Lagrange로 변환함
 Dual Lagrange 에서 λ 를 구한 후 (Quadratic Programming) 식 (8)로 w를 계산하고, 제한 조건에서 b 를 계산함.

d 를 최대화 = w 를 최소화
x (2) yi = +1

제한 조건
d
w

(2)

yi = -1 (1)
(3)
x (1) Primal Lagrange
(최소화)

Dual Lagrange
(최대화)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-15


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 가능한 경우 (예시)

 그림과 같이 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 를 찾음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-16


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 가능한 경우 (예시)

 식 (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

1 2 3 x (1) Decision Boundary

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-17


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 불가능한 경우 – (1) Soft Margin SVM

 경계를 벗어난 데이터를 허용함. Slack 변수를 추가하여 경계에 대한 제한 조건을 완화함. (식 24)
 목적 함수에 (식 25) Loss에 대한 Penalty 항을 추가함. C는 모형의 복잡도를 조절하는 상수로 분석자가 지정함.
 Dual Lagrange는 식 (10)과 동일하므로 (제한 조건만 다름) 선형 분리가 가능한 경우와 동일하게 (Quadratic Programming) λ 를 구할 수 있고, 식 (27)로 w 를
구할 수 있음. (나머지 변수는 KKT 조건으로 구할 수 있음.)

x (2) yi = +1

yi = -1 제한 조건

x (1)

 Dual Lagrange(최대화) – 선형 분리 가능한 경우와


- Slack 변수 ( )를 추가하여 경계를 벗어나는 것을 허용. 동일함.
- 점 A와 B는 경계를 벗어나 있음.  제한 조건만 다름

- 이라면, 가
되어 제한 조건에 위배되지 않을 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-18


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 불가능한 경우 – (2) 비선형 SVM : Kernel Trick

 아래 그림에서 직선 A 보다 곡선 B로 구분하는 것이 타당함.  비선형 SVM 문제


 원래의 공간 (좌측)에 있는 데이터들을 선형 분리가 가능한 좌표 공간 (우측)으로 변환시키면 선형으로 구분할 수 있음.
 변환된 공간에서, 선형 분리가 가능한 경우와 동일하게, Dual Lagrange (LD) 의 최적화로 λ 를 구한 후 w와 b를 결정함.
 선형 분리가 가능한 변환 함수 Φ(x)를 결정하는 것이 관건이며, 이론적으로는 무한 차원으로 보내면 선형 분리가 가능함.
 적절한 변환 함수를 알고 있어도 차원이 높아지면 엄청난 계산량이 요구됨.  차원의 저주
 변환된 공간에서 Dual Lagrange 는 변환 함수 자체가 아닌, 변환 함수들 간의 내적 (Inner product)만 알면 되기 때문에 원래 공간에서 데이터들의 내적을 구하고
g(uㆍv), 이것을 변환 공간으로 보낼 수 있다면 계산량을 줄일 수 있음.  K(u, v) = Φ(u)ㆍΦ(v) = g(uㆍv)  K(u, v) : Kernel function  이런 기법을 Kernel
Trick 이라 함.

x2 Φ(x2)
원래 공간 변환 공간
B yi = +1 C yi = +1
A
변환

Φ(x)

yi = -1 yi = -1
x1 Φ(x1)

변환 함수들의 내적 (Φ(x1) . Φ(x2)) 을 계산하면 LD 를 계산할 수


있음. 원래의 공간에서 x1 과 x2 의 내적을 구한 후 결과를 변환된
공간으로 보냄.  Kernel Trick

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-19


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-4.svm.xlsm
SVM 알고리즘 : 구현 예시 (VBA)

 20개의 학습 데이터 (훈련 데이터) 세트 및 이진 클래스 (+1 or -1)에 대해 의사 결정면 (Decision boundary)을 결정함.
 선형 분리가 가능한 경우의 예시임. Support Vector는 모두 3개이며, Support Vector의 라그랑지 승수는 0 보다 큼.
 의사 결정면 (Decision boundary)은 Support Vector 까지의 마진이 최대가 되는 지점임.

Decision boundary

Support Vector

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-20


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-4.svm.xlsm
SVM 알고리즘 : 구현 예시 (VBA)

 선형 분리가 불 가능한 경우의 예시임. 경계 조건을 위반한 사례가 2건 있음.  이 사례를 허용하여 의사 결정면을 결정함.
 경계 조건을 위반한 사례들을 허용하도록 조건을 완화하면, Boundary가 위반 사례 쪽으로 이동하는 모습을 볼 수 있음.
 의사 결정면의 최대 마진이 커지고 (Support Vector가 뒤로 물러남), 마진 범위 내에 일부 데이터가 존재하게 됨.

Decision boundary

경계 조건을
위반한 데이터

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-21


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-4.svm.xlsm
SVM 알고리즘 : 구현 예시 (VBA 코드)
 CS 229, Autumn 2009, The Simplified SMO Algorithm (Andrew Ng) 의 Pseudo-Code를 VBA로 구현하였음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-22


4. 분류 기법 (Classification) – SVM (Support Vector Machine)

SVM 알고리즘 : 선형 분리가 불가능한 경우 – (2) 비선형 SVM : Kernel Trick


 Kernel function 으로 Radial Basis function (RBF)을 사용한 경우의 예시
 관련된 파라메터는 Penelty 상수 C 와 RBF 의 Gamma 임. Gamma는 가우시안 분포의 분산의 역수로, Gamma가 작을수록 분포의 폭이 큼. 즉, 경계에서 멀리
있는 점들의 영향을 많이 받아 경계면이 완만해지고, Gamma가 클수록 경계면이 꾸불꾸불 함 (Overfitting 가능성).

C = 1, Gamma = 0.1 C = 10, Gamma = 0.1 C = 100, Gamma = 0.1

C = 10, Gamma = 0.3 C = 10, Gamma = 0.6 C = 10, Gamma = 0.9

RBF kernel function

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-23


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-5.svm(1).R
SVM 알고리즘 : 선형 분리가 불가능한 경우 – (2) 비선형 SVM : Kernel Trick

 Kernel function 으로 Radial Basis function (RBF)을 사용한 경우의 예시 – C과 Gamma를 변화시켜가면서 특성을 비교함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-24


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-6.svm(2).R
SVM 알고리즘 : 삼성전자의 내일 주가의 방향 예측 (실습)

 RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 (C = 100, Gamma = 0.1)

정확도 45% : 훈련용 데이터로 생성한 SVM 모델로 시험용 데이터를 맞출 확률

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-25


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-6.svm(2).R
SVM 알고리즘 : 삼성전자의 내일 주가의 방향 예측 (실습)

 RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 – CV 오차가 최소가되는 C와 Gamma를 선택함.

Gamma, C 를 조합하여 CV 오차가 최소인 지점을 찾음. (범위를 더 넓힐 필요가 있음  시간이 오래걸림)

CV 오차가 최소가 되는 Gamma 와 C

CV 오차가 최소인 지점

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-26


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-6.svm(2).R
SVM 알고리즘 : 삼성전자의 내일 주가의 방향 예측 (실습)

 RBF 커널 함수를 이용하여 삼성전자의 내일 주가의 방향을 예측함 – CV 오차가 최소가되는 C와 Gamma를 선택함.

* 참고 사항 : cost = 1, gamma = 0.1 의 경우 정확도가 58.6%가


나오지만 신뢰할수는 없음.  testData 에 따라 달라짐.

정확도 49.6% : 약간 증가하였으나, 여전히 정확도가 낮음.  더 개선이 필요함 (How ?)

내일 주가는 49.6%의 정확도이지만 (일단) 상승할 것으로 예상됨.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-27


4. 분류 기법 (Classification) – SVM (Support Vector Machine)
* 실습 파일 : 4-7.svm(3).R
SVM 알고리즘 : 삼성전자의 내일 주가의 방향 예측 (실습)

 일반적으로 SVM의 성능은 우수한 것으로 알려져 있으나, 기술적 지표로 Feature 데이터를 구성한 경우에는 성능이 좋지 않음.
 그 이유는 분석에 사용된 데이터 세트가 분류에 적당한 데이터가 아니기 때문임. 더 나은 데이터 세트를 만들기 위해서는 금융 이론과 조화를 이루어야 함.

ATR 과 MACD 만으로 그린 2차원의 모습. 경계면을 결정하기가 어려움.

MACD

ATR

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 4-28


R을 활용한 금융 데이터 마이닝

5. 군집 분석 (Clustering)

5-1. K-Means Clustering


5-2. 계층 군집 분석 (Hierarchical Clustering : H-Cluster)
5-3. [실습] K-Means Clustering을 이용한 주가의 패턴 분석
5-4. [실습] H-Cluster를 이용한 주가의 패턴 분석

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-1


5. 군집 분석 (Clustering) – K-Means Clustering

K-Means Clustering 알고리즘


 비 지도학습 (Unsupervised Learning)으로 훈련 데이터들을 K 개 그룹 (Cluster)으로 나눔.
 K개 클러스터 (ex : K = 4)의 중점 (Centroid)을 임의로 부여한 후 각 중점과 가까운 점들을 찾음. (ex : 점 p는 중점 A에 가까움)
 중점과 가까운 점들의 평균 지점 (무게 중심)을 계산하여 각 클러스터의 새로운 중점으로 사용함.
 새로운 중점과 가까운 점들을 다시 찾고, 평균 지점을 계산하여 또 새로운 클러스터의 중점으로 사용함. 클러스터의 중점이 변하지 않을 때까지 반복함.

중점을 변경함

p
A

점 p는 중점 A에 가까움

중점을 변경함

중점을 변경함

4개 클러스터의
중점을 찾았음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-2


5. 군집 분석 (Clustering) – K-Means Clustering

K-Means Clustering 알고리즘 구현 (예시) * 실습 파일 : 5-1.K-means.xlsm

 20개의 훈련 데이터를 4개의 클러스터로 분류함.


 최초 4개의 랜덤 좌표를 생성하여 초기 클러스터의 중점으로 사용하고, 한 스텝씩 진행하면서 중점을 업데이트함.

초기 중점을 한 스탭씩 거리를


랜덤하게 부여함 계산하면서 중점을
업데이트함.

K-Means 알고리즘은 중점과의 거리가 최소가 되도록 동작하는데,


초기 값에 따라 전역이 아닌 지역 최소 값을 찾을 수도 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-3


5. 군집 분석 (Clustering) – K-Means Clustering

K-Means Clustering 알고리즘 구현 예시 : 주가의 캔들스틱 차트 군집화 * 실습 파일 : 5-2.K-means(Candle).xlsm

 캔들스틱의 형태를 4개로 분류하여 4가지 유형으로 군집화 함. 예 : 군집-(1) = 큰 양봉 (장대 양봉), 군집-(2) = 큰 음봉 등.
 K-Means 알고리즘으로 4개의 초기 중심 좌표를 설정하고, 각 캔들에서 중심 까지의 거리가 최소가 되도록 중심을 조절함.

캔들 차트 (원본 데이터)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-4


5. 군집 분석 (Clustering) – K-Means Clustering

K-Means Clustering 알고리즘 구현 예시 : 주가의 캔들스틱 차트 군집화 * 실습 파일 : 5-2.K-means(Candle).xlsm

 K-Means 알고리즘은 아래와 같이 4개로 구분하였음.


 큰 음봉과 큰 양봉은 군집-(1) 과 군집-(2) 로 할당하고, 작은 음봉 과 작은 양봉은 군집-(3) 과 군집-(4)로 할당하였음.

군집-1 (Class = 1) 군집-3 (Class = 3)

군집-2 (Class = 2) 군집-4 (Class = 4)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-5


5. 군집 분석 (Clustering) – K-Means Clustering

K-Means Clustering 알고리즘 구현 예시 : 주가의 캔들스틱 차트 군집화 – 사람과 K-Means 알고리즘의 인식의 차이

 사람은 캔들스틱의 모양을 인식하고, 모양 별로 분류하려고 할 것임.


 K-Means Clustering (기계) 알고리즘은 캔들의 정보를 4차원 공간 (시가, 고가, 저자, 종가)에 뿌려 놓고, 공간 상의 위치를 인식하여, 각각의 중심까지의 거리가
최소가 되도록 분류함. (우리는 4차원 이상의 공간을 인식하지 못함)
 4차원 공간에서 각 점들은 유사도가 높은 것들끼리 모여있음. (유사도 척도는 유클레디이언 거리를 이용할 수도 있고, 코사인 거리를 이용할 수도 있음.)

2 차원

4 차원

1 차원

3 차원

중심까지의 거리 ? 다차원 공간에서 한 점의 위치로


큰 양봉 ? 작은 양봉 ? 패턴의 모양을 인식하고
인식하고 분류함.
분류함

기계
사람 K-Means Clustering

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-6


5. 군집 분석 (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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-7


5. 군집 분석 (Clustering) – [실습] 주가의 패턴분석

* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (20일 주가를 8개의 유사 패턴으로 분류함)

 K-Means 알고리즘으로 학습 데이터를 분석하여 유사 패턴 8개를 찾음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-8


5. 군집 분석 (Clustering) – [실습] 주가의 패턴분석

* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (1번 유사 패턴 확인)

 1 번 패턴 그룹에 속한 몇 개의 패턴을 확인함. 오차는 있지만 모두 횡보하다가 상승하는 경향을 보임.

모두 횡보하다가 상승하는 모습을 보임

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-9


5. 군집 분석 (Clustering) – [실습] 주가의 패턴분석

* 실습 파일 : 5-3.K-means(Pattern).R
K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (최근 유사 패턴 차트 확인)
 최근 100 기간의 종가 차트 위에 패턴 번호를 표시함. 최근에는 주로 1, 4, 5 번 패턴이 발생했음.

패턴 번호로 그린 최근 삼성전자 주가 차트

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-10


5. 군집 분석 (Clustering) – [실습] 주가의 패턴분석

K-Means Clustering 알고리즘 구현 예시 : 주가의 패턴 분석 (최근 패턴 테이블 작성) * 실습 파일 : 5-3.K-means(Pattern).R

 최근 100 기간 동안 발생한 패턴의 비율을 확인함. 4, 5 번 패턴이 주로 발생하였음 (Multinomial 분포). 패턴 번호는 실행할 때마다 달라짐.
 군집 분석 (Unsupervised)의 결과물은 Supervised Learning의 입력이 될 수도 있고, Bayesian Inference 같은 방법으로 Next likelihood pattern 분포 등을 추론해
볼 수도 있음.  패턴 분석의 과제임.

최근 패턴 발생 횟수 분포
4번, 5번 패턴이
많이 발생하였음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-11


5. 군집 분석 (Clustering) – 계층 군집 알고리즘 (Hierarchical Clustering : H-Cluster)

H-Clustering 알고리즘 개요 * 실습 파일 : 5-4.HCluster.xls

 각 점들간의 거리 행렬을 작성한 후 가장 거리가 짧은 두 점을 그룹으로 묶고 평균 좌표를 계산함.


 한 개의 그룹이 남을 때까지 위의 단계를 계속 반복함.  병합형 (Agglomerative)
 K-Means는 사전에 그룹수 (k)를 결정하지만, H-Cluster는 그룹을 다 나눈 후에 몇 개의 그룹을 선택할 것인지를 결정할 수 있음.  Dendrogram을 보고 결정함.

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을 작성함. (전체는 복잡하게 보이므로, 일부만 작성함)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-13


5. 군집 분석 (Clustering) – 계층 군집 알고리즘 (Hierarchical Clustering : H-Cluster)

* 실습 파일 : 5-5.Hcluster(Pattern).R
H-Clustering 알고리즘 구현 실습 : 주가의 패턴 분석 (1번 유사 패턴 확인)
 1 번 패턴은 하락하다가 등락을 거듭하는 모습임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-14


5. 군집 분석 (Clustering) – 계층 군집 알고리즘 (Hierarchical Clustering : H-Cluster)

* 실습 파일 : 5-5.Hcluster(Pattern).R
H-Clustering 알고리즘 구현 실습 : 주가의 패턴 분석 (1번 유사 패턴 확인)
1 번 패턴은
 최근 하락하다가
100 기간의 등락을
종가 차트 위에거듭하는 모습임.
패턴 번호를 표시함. 최근에는 주로 2, 3번 패턴이 발생했음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 5-15


R을 활용한 금융 데이터 마이닝

6. 연관 분석 (Association)

6-1. 연관 규칙 (Association Rule)


6-2. 연관 규칙의 강도 척도 (지지도, 신뢰도, 향상도)
6-3. Apriori 알고리즘 개요
6-4. [실습] Apriori 알고리즘을 이용한 외국인, 기관, 개인의
거래 패턴 연관 분석 실습
6-5. 분석의 문제점과 확장 (안)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-1


6. 연관 분석 (Association) - 연관 규칙

연관 규칙 (Association Rules)

 연관 분석은 데이터 집합에 있는 항목들 간에 숨겨진 유용한 관계 (Rules)들을 찾아내는 분석임.


 예를 들면 마켓에서 고객들이 구입한 목록 데이터 (장바구니 트랜젝션)를 분석하여 고객들의 구매 성향을 분석할 수 있음.
 [그림-1]은 외국인 투자자가 구매한 종목 데이터임. 1일차에는 삼성전자와 한국전력을 매수하였고, 2일차에는 삼성전자, 네이버, POSCO, S-OIL을 매수하였음.
 [그림-1]에서 네이버를 구매할 때는 POSCO도 같이 구매하는 경향을 보임. 네이버와 POSCO 사이에 존재하는 강한 연관관계를 제시함.  연관 규칙

연관 규칙 #1 : { 네이버 }  { POSCO }

 네이버를 구매한 일 수는 4일이고, 그 중에 POSCO를 같이 구매한 경우는 3일이었음.


 [그림-2]는 [그림-1]의 트랜젝션 데이터를 이진 행렬로 표시한 것임 (Item Matrix). 구매 종목을 “Buy” or “Not” 으로만 표시함.
 주식 시장에 적용하기 위해서는 이진 행렬이 아닌 “Buy” or “Sell” 같이 범주형 (Categorical)이나 얼마만큼 구매했거나 팔았는지 (순거래량 혹은 순거래금액) 같이
연속형 속성 (Quantitative association rules)에 대한 연관 규칙으로 확장이 필요함.

[ 그림 – 1] 외국인 일일 구매 목록 (예시) [ 그림 – 2] 이진 목록 행렬 (Item Matrx in sparse format)

* 참조 : Introduction to Data Mining (데이터 마이닝), p 320 ~, (by 용환승, 나연묵, 박종수 등)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-2


6. 연관 분석 (Association) - 연관 규칙의 강도 척도 : 지지도, 신뢰도, 향상도

지지도 카운트, 지지도 (Support), 신뢰도 (Confidence) 및 향상도 (Lift)

 지지도 카운트 : 특정 종목 집합을 포함하는 트랜젝션의 개수. 예) { 네이버, POSCO } 의 지지도 카운트는 3이고, { 한국전력, POSCO }는 2 임.
 표기 : X = { 네이버, POSCO } 일 때 σ (X) = 3, Y = { 한국전력, POSCO } 일 때 σ (Y) = 2 , σ (X ∪ Y) = σ { 네이버, POSCO, 한국전력 } = 2
 연관 규칙은 X  Y 으로 표시하고, 한 연관 규칙의 강도는 지지도 (Support)와 신뢰도 (Confidence), 향상도 (Lift)로 측정할 수 있음. (N : 트랜젝션 개수)

: 이 규칙이 주어진 데이터 집합에서


Support : 얼마나 자주 발생하는지를 측정함.

XY 라는 규칙에 상관없이 원래 Y가 많이 나올수도 있음. 이런


경우 XY 라는 규칙은 신뢰할 수 없음. 즉, Y는 X에 상관없이
: Y 에 속한 종목들이 얼마나 빈번하게 많이 나올수도 있으므로 신뢰도를 Y 발생 비율로 나눈 척도임.
Confidence : X를 포함한 트랜젝션에 나타나는지를 측정함. Lift는 1보다 클수록 XY 규칙에 의미가 있고, 1에 가까울수록
X와 Y는 독립적임.

 지지도가 낮을수록 우연히 발생할 가능성이 높아짐. 지지도는 유용하지 않은 규칙들을 제거하는데 사용할 수 있음.
(예시)
 신뢰도가 높을수록 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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-3


6. 연관 분석 (Association) – Apriori 알고리즘 개요

연관 규칙 검색 알고리즘 : Apriori 알고리즘의 기본 원리

 데이터에서 연관 규칙을 찾는다는 것은 지지도와 신뢰도가 임계치 이상인 모든 규칙을 찾는 것을 의미함. (임계치 : 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
 빈발 항목 집합에 불필요한 부분 집합이 포함되지 않도록 가지치기가 필요함.

 Apriori의 원리 : 만약 한 항목 집합이 빈발하면, 그 것의 모든


부분 집합들 역시 빈발함. 지지도 기반 가지치기
(Support based pruning) ab ac ad bc bd cd

 예시: 우측 그림은 a, b, c, d 아이템 (종목)으로 구성된 모든 항목 집합임.


 만약 { b, c, d }가 빈발하다면, 그 부분 집합도 모두 빈발함.
 { b }, { c }, { d }, { b, c }, { b, d }, { c, d } 모두 빈발함. abc abd acd bcd
 만약 { a, b }가 빈발하지 않다면 (지지도가 임계치보다 낮으면),
{ a, b }를 포함한 모든 조합도 빈발하지 않음.
 { a, b, c }, { a, b, d }, { a, b, c, d } 도 빈발하지 않음
 이 것들에 대해서는 지지도를 계산할 필요가 없음. abcd
 후보 빈발 항목 집합에서 제외함. (가지치기)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-4


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-1.MakeBasket.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석 (원시 데이터) * 실습 파일 : 6-2.수급Rule.R
 약 1년 간 코스피 대형주 20 종목을 대상으로 외국인, 기관, 개인의 구매 패턴 (매수, 매도)의 연관 규칙을 분석함.
 분석 기간 및 종목 수를 늘려서 분석할 필요가 있음 (예 : 10년 간 코스피 200 종목 대상).  분석 결과의 일반화 특성 향상.

원시 데이터 분석 대상

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-5


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-2.수급Rule.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석 (학습 데이터 생성)

 원시 데이터로 외국인이 매도한 장바구니 트랜젝션 데이터를 구성함. (Market basket transaction)

원시 데이터로 장바구니 트랜젝션 데이터를 구성함


Item Matrix (이진 목록) 시각화
Item Matrix

장바구니 트랜젝션 데이터


(외국인, 매도 목록)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-6


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-2.수급Rule.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석 (학습 데이터 확인)

 외국인이 매도한 종목들의 비중을 확인함.

외국인 거래 종목별 비중

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-7


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-2.수급Rule.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석 (연관 규칙 검색)

 Aprior 알고리즘으로 외국인이 매도한 종목들에 대한 연관 규칙을 검색하고, 결과를 확인함.

지지도 임계치 = 0.1


신뢰도 임계치 = 0.1
최소 항목 개수 = 3개

Lift 순으로 정렬함

외국인은 POSCO, 네이버, 케이티엔지 를 매도한 날은 삼성전자도


같이 매도하는 경향이 있었음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-8


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-2.수급Rule.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석

 Aprior 알고리즘으로 외국인이 매수 (Buy)한 종목들에 대한 연관 규칙을 시각화 함.

{A,B}  C
C

그래프가 S-OIL, SK이노베이션, 한국전력, LG화학,


네이버로 많이 집중됨. (분석 기간에 한정)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-9


6. 연관 분석 (Association) – [실습] 외국인, 기관, 개인의 거래 패턴 (Rule) 분석
* 실습 파일 : 6-2.수급Rule.R
연관 규칙 검색 알고리즘 : [실습] Apriori 알고리즘을 이용한 기관, 외국인 수급 패턴 분석 (시각화 : 연관 규칙 네트워크)

 Aprior 알고리즘으로 외국인이 매도 (Sell)한 종목들에 대한 연관 규칙을 시각화 함.

그래프가 삼성전자과 POSCO로 집중됨. 외국인은


매도할 때 삼성전자와, POSCO를 동반 매도하는
경향이 있다 ?? (분석 기간에만 국한됨)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-10


6. 연관 분석 (Association) – 분석의 문제점과 확장 (안)

분석의 문제점

 이 분석 결과는 1년 동안 20종목에 대한 분석이므로 일반적인 규칙이라고 볼 수는 없고, 해당 기간의 특수한 상황으로 볼 수 있음.
 일반적인 규칙을 얻기 위해서는 오랜 기간, 많은 종목들을 대상으로 분석해야함. (예 : 10년간 200 종목에 대한 규칙 등)
 금융 데이터는 다른 분야의 데이터보다 랜덤 성분이 강하기 때문에 이런 규칙을 얼마나 신뢰할 수 있는지는 의문임. 즉, 고객들의 구매 성향은 비교적 Static한 반면,
투자자의 구매 성향은 Dynamic 함 (변덕이 심함). 그래도 참조할 만한 결과를 얻을 수는 있을 것임.

확장 (예시-1) – 범주형 분석으로 확장

 이진 분석은 매수, 혹은 매도에 한정해서 분석한 것이나, 범주형 분석을 이용하면 매수와 매도를 동시에 분석할 수 있음.
 금융 데이터의 경우는 고객들 (투자자들)이 매수와 매도, 즉, 양방향으로 구매하기 때문에 이것을 동시에 분석해야 더 의미있는 규칙을 찾을 수 있을 것임.
 예를 들어, 어떤, 어떤 종목들을 매수할 때 어떤 종목들을 매도하는지에 대한 규칙을 만들어 볼 수 있고, 이런 규칙에서 더 많은 정보를 얻을 수 있음.

확장 (예시-2) – 시차 분석으로 확장

 이진 분석이나 범주형 분석은 동일한 날짜에 구매한 목록들을 분석하는 것이지만, 시간의 흐름에 따른 구매 성향을 분석해 보는 것도 유용할 것임.
 예를 들어 어느 날 어떤 종목들을 매수하면, 그 다음 날은 어떤 종목들을 매수하거나, 매도하는 경향이 있는지 등을 분석해 볼 수 있음.
 이 규칙을 이용하면 내일의 구매 경향을 추정할 수 있으므로 투자 의사결정에 도움이 될 것임.
 X  Y 라는 규칙에서 X는 과거 목록의 부분집합이고, Y는 미래 목록의 부분집합임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 6-11


R을 활용한 금융 데이터 마이닝

7. 앙상블 기법 (Ensemble)

7-1. 과잉적합 문제와 Regularization 2

7-2. Cross validataion 시험


7-3. 앙상블 기법 (배깅, 부스팅, 랜덤포레스트)
2
7-4. [실습] 앙상블 기법을 활용한 주가의 방향 예측 실습

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-1


7. 앙상블 기법 (Ensemble) – 과잉적합 (Overfitting)

과잉적합 (Overfitting) 문제와 Regularization

 모형이 복잡하거나 학습이 과도하면 훈련 데이터 자체는 정확히 설명할 수 있으나, 학습에 사용되지 않은 시험 데이터에 대해서는 설명력이 떨어질 수 있음.
 과잉적합 문제 (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 (교차 검증)

Cross Validation (교차 검증) 시험

 훈련 데이터로 학습한 후 동일한 훈련 데이터를 평가하면 당연히 좋은 성과가 나옴. 훈련 데이터로 학습한 결과를 학습에 전혀 사용되지 않은 시험 데이터에
적용해서 적용한 모형의 성과를 측정해야 함.
 전체 데이터를 훈련 데이터 세트와 시험 데이터 세트로 구분함. 훈련 데이터와 시험 데이터가 골고루 분산되도록 구분함.
 K-fold Cross Validation : 전체 데이터를 K 구간으로 나눈 후 각 구간에서 시험 데이터 하나씩 할당함. 시험 데이터를 제외한 데이터 (훈련 데이터)로 학습하고,
제외했던 시험 데이터에 결과를 적용해서 정확도, 오류 율 등을 확인함.
 아래 예시는 전체 데이터를 4 구간으로 나누어 Cross Validation을 적용한 것임.
 Cross Validation은 알고리즘 간 성능 비교에 사용될 수 있고, 동일 알고리즘 내에서도 정확도 평가를 위해 사용됨.

1 2 3 4

1번 구간에서는 첫 번째 부분을 시험 데이터로 사용하고 나머지 부분은 훈련


1 시험 데이터 훈련 데이터
데이터로 사용함.

2번 구간에서는 두 번째 부분을 시험 데이터로 사용하고 나머지 부분은 훈련


2 훈련 데이터 시험 데이터 훈련 데이터
데이터로 사용함.

3 훈련 데이터 시험 데이터 훈련 데이터

4 훈련 데이터 시험 데이터

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-3


7. 앙상블 기법 (Ensemble) – Confusion Matrix

Confusion Matrix 방식에 의한 분류 알고리즘의 성능 측정

 훈련 데이터로 학습한 후 시험 데이터의 목적 패턴을 얼마나 정확하게 맞히는가를 계량화함.


 Confusion Matrix는 시험 데이터에 포함된 실제 목적 패턴 (실측 값)과 학습을 통해 예측된 패턴 (추정 값)으로 구성됨.
 F11 은 실제는 Class 1 인데 Class 1 로 올바르게 예측한 개수. F12 는 실제는 Class 1 인데 Class 2로 잘못 예측한 개수.
 F21 은 실제는 Class 2 인데 Class 1 로 잘못 예측한 개수. F22 는 실제는 Class 2 인데 Class 2로 올바르게 예측한 개수
 올바를 예측을 위해서는 정확도가 최대이거나 오류 율이 최소인 학습 기법을 찾음.

Confusion 예측된 클래스 Confusion 예측된 클래스


Matrix 2 Matrix 2
1 1

1 F11 F12 1 2,043 1,043


실제 실제
클래스 클래스
2 F21 F22 2 1,676 2,247

 정확도 = 정확히 예측한 개수 / 총 예측 개수  정확도 = 정확히 예측한 개수 / 총 예측 개수


= (F11 + F22 ) / (F11 + F12 + F21 + F22 ) = (2043 + 2247) / (2043 + 1043 + 1676 + 2247)
 오류율 = 1 - 정확도 = 61.29%
 오류율 = 1 – 정확도 = 38.71%

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-4


7. 앙상블 기법 (Ensemble) – 배깅, 부스팅 (Bagging, Boosting)

앙상블 기법 (Ensemble or Classifier Combination) – 성능 개선 방법 : 배깅, 부스팅

 단일 분류 알고리즘을 사용하는 것보다 여러 알고리즘을 사용한 후 결과를 종합하는 것이 좋음.  정확도, 일반화 특성 증가
 훈련 데이터를 여러 개의 서브 훈련 데이터로 나눈 후 (샘플링) 각 서브 훈련 데이터를 서로 다른 알고리즘으로 학습한 후 결과를 종합함. 각 알고리즘 결과의
다수결로 결정함.
배깅 (Bagging or Bootstrap Aggregation)

 (균일한 확률분포로) 훈련 데이터를 반복적으로 샘플링하여 서브 훈련 데이터를


훈련 데이터 만듦. (BootStrap : 단순복원 임의추출)
 각각의 서브 훈련 데이터는 원본 훈련 데이터와 같은 크기를 갖음.
 데이터 중복을 허용함.

훈련 데이터를
 결과의 분산 (변동)이 감소함 .
서브 서브 ... 서브
데이터 데이터 데이터 여러 개로 나눔
(균등 분포) 부스팅 (Boosting)

 배깅과 마찬가지로 서브 훈련 데이터 샘플을 만듦.


학습 학습 ... 학습 (여러) 분류기로
알고리즘 알고리즘 알고리즘 각각을 학습함  처음 샘플링은 모든 데이터에 동일 가중치를 두어 샘플링함.
 샘플링된 서브 훈련 데이터로 학습함.
 분류가 잘못된 데이터의 가중치를 높이고 다시 샘플링함.
 잘못 분류된 패턴은 선택될 확률이 높아짐.
결과 학습 결과를
종합함  새로운 샘플링으로 다시 학습함. 이를 반복하면 점차 분류하기 어려운 패턴들이
종합
많이 선택됨.
 분류가 어려운 패턴에 더욱 집중하여 정확도를 높이는 방법.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-5


7. 앙상블 기법 (Ensemble) – 랜덤 포레스트 (Random Forest)

앙상블 기법 (Ensemble or Classifier Combination) – 성능 개선 방법 : 랜덤 포레스트 (Random Forest)

 랜덤 포레스트는 Decision Tree를 위해 특별히 만들어진 앙상블 기법임.


 랜덤 포레스트는 다수의 Decision Tree의 예측을 종합하여 분류함.
 배깅과 동일하게 훈련 데이터에서 n-개의 서브 데이터를 샘플링하고 (중복 허용, 균등 분포), 각 서브 데이터마다 Decision Tree를 구축함.
 서브 데이터는 훈련 데이터로부터 랜덤하게 추출되므로, 서브 트리들은 약간씩 다르게 구성됨.
 약간씩 다른 트리의 결론을 종합하므로 분산이 감소하고 일반화 특성이 향상됨.

트리-1 시험 데이터 트리-2


훈련 데이터

서브 서브 ... 서브 훈련 데이터를
데이터 데이터 데이터 여러 개로 나눔
(균등 분포)

(여러) 분류기로 2 1 2 2
트리-1 트리-2 ... 트리-n
각각을 학습함

 서브 데이터로 여래 개의 트리를 생성함. (서브 트리)


 시험 데이터를 각 서브 트리에 적용하여 분류하고 다수의 트리가 분류하는 결과를 따름.
종합 학습 결과를  예) 트리-1 은 2, 트리-2는 1 이라고 분류하고, 트리-3,4 는 2라고 분류하면
결과 종합함
최종으로 2라고 분류함. (다수결)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-6


7. 앙상블 기법 (Ensemble) – [실습] 배깅 (SVM)
* 실습 파일 : 7-1.baggingSVM.R
앙상블 기법 (Ensemble) – [실습] SVM Bagging 에 의한 주가의 방향 예측 실습

 훈련 데이터를 여러 개로 나눈 후 각각에 대해 SVM 모형을 적용하고, 결과를 종합하여 예측함.

훈련 데이터에서 서브 데이터를 샘플링함.

서브 데이터를 SVM으로 학습함


학습 결과로 테스트 데이터를 시험함. 결과를 cbind()로 누적함.

누적한 결과를 확인함. (10 개만 확인함)

첫 번째 테스트 데이터 시험 결과 :
- 1번 서브 데이터는 class = 2로 분류하였고
- 3번 서브 데이터는 class = 1로 분류하였음.
- Class = 1이 4개, class = 2가 6개 이므로
- 다수결에 의해 2로 분류함.
- 기술적 분석 지표로 구성된 훈련 데이터의
경우는 5 : 5 가 발생하는 경우가 많아
좋은 성능을 기대하기는 어려움.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-7


7. 앙상블 기법 (Ensemble) – [실습] 배깅 (SVM)
* 실습 파일 : 7-1.baggingSVM.R
앙상블 기법 (Ensemble) – [실습] SVM Bagging 에 의한 주가의 방향 예측 실습

 훈련 데이터를 여러 개로 나눈 후 각각에 대해 SVM 모형을 적용하고, 결과를 종합하여 예측함.

각 서브 데이터를 학습한 결과를 다수결에 따라 분류

다수결로 확정된 분류에 따라 Confusion Matrix 작성

Confusion Matrix 에서 정확도를 측정함

정확도는 약 53.5 % : 단일 SVM 분류기에 비해 성능이 향상되었다고 볼 수 있는가 ?

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-8


7. 앙상블 기법 (Ensemble) – [실습] 부스팅 (Decision Tree)
* 실습 파일 : 7-2.boostingDT.R
앙상블 기법 (Ensemble) – [실습] Decision Tree Boosting에 의한 주가의 방향 예측 실습 (AdaBoost : 에이다 부스트 알고리즘 사용)

 훈련 데이터를 Boosting 방식으로 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함 (서브 트리의 가중치가 다름).

분리 기준으로 중요도를 가진 기술적 지표 확인

부스팅으로 Decision Tree를 학습함.

정확도는 약 48.16 % : 단일 DT 분류기에 비해 성능이 향상되었다고 볼 수 있는가 ?

Aroon 지표는 분리 기준으로 잘 사용되지 않았음.


예측에 기여하는 중요도가 작음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-9


7. 앙상블 기법 (Ensemble) – [실습] 부스팅 (Decision Tree)
* 실습 파일 : 7-3.RandomForest.R
앙상블 기법 (Ensemble) – [실습] Random Forest에 의한 주가의 방향 예측 실습

 훈련 데이터를 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함. (트리 개수에 따른 오차의 변화 관찰)

서브트리 개수 별 훈련 데이터 오차
트리 개수가 많아질수록 서서히 감소함

Down

OOB

Up

서브트리 개수 별로 측정된 오차

* OOB : 샘플링되지 않은 데이터 세트에 적용시 오차

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-10


7. 앙상블 기법 (Ensemble) – [실습] 랜덤 포레스트 (Random Forest)
* 실습 파일 : 7-3.RandomForest.R
앙상블 기법 (Ensemble) – [실습] Random Forest에 의한 주가의 방향 예측 실습

 훈련 데이터를 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함. (트리 개수에 따른 오차의 변화 관찰)

Down

OOB

1. OOB Error 계산 (잘못 분류된 비율 계산) Up

OOB = (526 + 492) / (546 + 526 + 492 + 641)


= 46.17 %

2. Down Error = 526 / (546 + 526) = 49.07%


nTree = 50 일 때의 오차

3. Up Error = 492 / (492 + 641) = 43.42%

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-11


7. 앙상블 기법 (Ensemble) – [실습] 랜덤 포레스트 (Random Forest)
* 실습 파일 : 7-2.boostingDT.R
앙상블 기법 (Ensemble) – [실습] Random Forest에 의한 주가의 방향 예측 실습
 훈련 데이터를 여러 개로 나눈 후 각각에 대해 Decision Tree를 구축하고, 결과를 종합하여 예측함. (중요 속성 관찰)

분리 기준으로 중요도를 가진 기술적 지표 확인

Aroon 지표는 분리 기준으로 잘 사용되지 않았음.


예측에 기여하는 중요도가 작음.

정확도는 약 48.57%

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 7-12


R을 활용한 금융 데이터 마이닝

8. 인공신경망 (Artifitial Neural Network) 0 1 0

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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-1


8. 인공신경망 (Artifitial Neural Network) – 기본 개념

인공신경망의 기본 개념 출력 결과는 0 ~ 1 0~1


* 입력 데이터에 대해 원하는
사이의 값.
관측치 출력이 나오도록 연결 가중치
y (활성 함수에 좌우)
(w)를 결정하는 것이 핵심.
OLS 에 의한 회귀직선 f(Σ)  활성 함수
 데이터를 “학습“ 한다는 의미
 w를 결정하는 규칙이 필요함
(학습 규칙)
Σ  S = (입력값 * w) 의 총합

이 길이의 합이
각 뉴런의 w1 w3
최소가 되는
직선을 찾음. 출력 계산 w2
x Out 방법
출력 값  x y z
임계치
0 활성 함수
출력층 

w7 w9
Σ
w8 Sigmoid
그래프 표현
확장  은닉층
C w2 w5
w1 w2 비선형
w1 w4  신경 세포 (Neuron)
w3 w6

 연결 (Connetion)
 입력층

관측 데이터 W  연결 가중치 (Weight)


X Y
X Y  입력 데이터
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-2
8. 인공신경망 (Artifitial Neural Network) - 역사

개략적인 인공신경망의 역사 : 중요 사건 중심

1947 1949 1951 1956 1957 획기적 업적

Warren, Mcculloch Donald Hebb Marvin Minsky Dartmouth 학회 Frank Rosenblatt


Walter Pitts 헤브의 학습 규칙 “Snark” 여러 사람 참여 델타 학습 규칙
신경망 – 본능 기계적 학습장치 단층 신경망
학습 개념 없음 실용화 안됨 Perceptron

1969 침체기 (70 ~ 80 년대) 1974 1986 전성기 1990’s 암흑기

Marvin Minsky Kohonen David Rumelhart Issue:


Seymour Papert - Instar 학습 규칙 다층 퍼셉트론 (MLP) Big Data
저서 – “Perceptron” Paul Werbos - Back propagation 수 만의 Neuron
Perceptron은 선형 분리 불가 - Back propagation - 민스키의 한계 극복 수 백만의 Connection
XOR 문제도 풀지 못함을 학습 규칙 Global Optima 문제
증명 주목 받지 못함

SVM Kernel,
2006 Deep Learning 전성 시대
GP 등이 인기

Geoffrey Hinton Big Data와 잘 맞음


“A fast learning Algorithm “Deep Learning” 대량, 병렬 처리
for deep beliefs Nets” (CUDA, GPU)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-3


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (예시)

* 실습 파일 : 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를 결정함.

입력 패턴을 학습한
결과임.

입력 패턴을
학습하면서
가중치를
초기 연결 가중치를 랜덤하게 부여함
업데이트 함.

학습 알고리즘은 오류 역전파
(일반화된 델타 규칙) 방식을
사용하였음.

학습이 완료된 가중치


(최종 지식)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-4


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (델타 규칙)

참고 사항 : 델타 학습 규칙 (Delta Rule) – 학습 알고리즘 생성

 Supervised Learning을 위한 학습 규칙 중 널리 사용되는 알고리즘임.


 단층 퍼셉트론에 사용할 수 있으며, 출력층 뉴런의 활성값과 (actual output) 목적값 (desired output)의 오차가 (error) 작아지도록 각 뉴런의 연결 가중치
(weighting)를 조절함
 연결 가중치를 조절하는 방법은 일반적으로 Gradient Descent 방법이 사용됨.

Desired output Actual output

 Sigmoid 함수의 미분

 출력층

 하위 뉴런의 출력 * weight

 Gradient Descent

 학습률 (Learning rate)


(범위 : 0.0 ~ 1.0)

 입력층  델타 학습 규칙 (Delta rule)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-5


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (델타 규칙)

참고 사항 : 델타 학습 규칙 (Delta Rule) – 적용 (예시)

 신경망이 왼쪽 상태에 있으면 총 오류 (MSE)는 0.1938 임.


 입력 패턴이 들어오면 각 델타 학습 규칙에 의해 연결 가중치를 조절 함.
 변경 결과 총 오류는 0.1691로 0.0247 만큼 감소하였음.
 오류가 더 이상 감소하지 않을 때까지 아래 과정을 반복하면 각 연결 가중치는 최적화된 값을 갖게 됨. 원하는 결과 (desired output = {1,1})에 다가감.
 오류가 더 이상 감소하지 않거나, 일정 수준 이하로 내려가면 학습이 완료된 것으로 볼 수 있음.

1. 현재 신경망 2. 가중치 변경 후의 신경망


새로운 가중치 계산
|E| = 0.1938 ( α = 0.7 ) |E| = 0.1691
w0 = 0.8 + 0.7 * 0.3143 *
e3 = 0.3143 e4 = 0.5374 * 0.6857 * (1-0.6857) e3 = 0.2847 e4 = 0.5071
d3 = 1 d4 = 1 * 0.9 d3 = 1 d4 = 1
= 0.8426
a3 = 0.6857 a4 = 0.4626 a3 = 0.7154 a4 = 0.4929
w1 = 0.2 + 0.7 * 0.3143 *
* 0.6857 * (1-0.6857)
출력층 2 3 * 0.7 2 3
= 0.2332

w2 = 0.3 + 0.7 * 0.5374 * w1 = 0.2332


w0 = 0.8 w1 = 0.2
* 0.4626 * (1-0.4626)
w3 = -0.6 * 0.9 w0 = 0.8426 w3 = -0.5345
= 0.3842
w2 = 0.3 w2 = 0.3842
a0 = 0.9 a1 = 0.7 w3 = -0.6 + 0.7 * 0.5374 * a0 = 0.9 a1 = 0.7
* 0.4626 * (1-0.4626)
입력층 0 1 * 0.7 0 1
= -0.5345
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-6
8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (델타 규칙)

참고 사항 : 델타 학습 규칙 (Delta Rule) – 의미 분석

 델타 학습 규칙 (Delta rule)

 학습률이 (α) 클수록 연결 가중치가 크게 변경되고, 학습률이 작으면 가중치가 작게 변경됨.


 오류가 (ek ) 크면 연결 가중치가 크게 잘못되었을 가능성이 크므로, 가중치를 많이 변경함.
 오류가 없으면 (ek = 0) 연결 가중치를 변경할 필요가 없음. 출력층 뉴런의 활성값이 목적값과 동일함.
 입력층 뉴런의 활성값이 0 인 경우 (aj = 0), 연결 가중치를 변경할 필요가 없음. 입력값이 0 이면 출력층에서 에러가 발생하는데 전혀 기여한 바가 없기 때문에
해당 연결 가중치는 변경할 필요가 없음.
 입력층 뉴런의 활성값인 aj 가 크고 오류가 발생한 상태이면 연결 가중치는 크게 변경됨. 이것은 aj 가 오류 발생에 큰 책임이 있기 때문임.
 ak(1-ak) 항은 출력층의 활성화 함수를 Sigmoid 형태로
사용한 경우의 활성화 함수의 미분 값임. 즉, 활성화
함수의 기울기를 의미함. 이 값은 출력 뉴런의 활성값
(ak) 이 0.5 일 때 0.25로 최댓값을 갖음. 출력층에 전달된
가중치 * 입력값의 합이 0 에 가까울수록 이 미분값은
최대가 되므로, 연결 가중치도 크게 변경됨.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-7


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (일반화된 델타 규칙)

참고 사항 : 일반화된 델타 규칙 (Generalized Delta Rule) – Error Backpropagation (오류 역전파)

 출력층의 오류 (에러)가 가중치가 곱해져서 하위 뉴런으로 역전파 됨.


 하위 뉴런에서는 역전파된 오류 (에러)가 작아지는 방향으로 자신의 연결 가중치를 변경함.

 출력층의 연결 가중치 변경. (델타 규칙)


 출력층

 은닉층의 연결 가중치 변경.


(Gradient Descent)

 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 패턴) 로 분류함.

0.61 0.16 0.646 0.16 0.6496 0.16 0.1631 0.60149

0.1 0.1 0.1693


0.1
0.8

0.7 0.79 0.8 0.799 0.8 0.799 0.7307

0.5 0.14 0.104 0.104

0.8 0.1 0.8 0.1 0.8 0.1 0.1 0.8

1) winner 뉴런 = 1번 1) winner = 1번 1) winner = 2번


2) 가중치 변경 2) 가중치 변경 2) 가중치 변경
w  w + α (a – w)
w1 = 0.7 + 0.9 * (0.8 – 0.7) = 0.79 w1 = 0.79 + 0.9 * (0.8 – 0.79) = 0.799 w3 = 0.793 + 0.9 * (0.1 – 0.793) = 0.1693
α = 학습률 w2 = 0.5 + 0.9 * (0.1 – 0.5) = 0.14 w2 = 0.14 + 0.9 * (0.1 – 0.14) = 0.104 w4 = 0.107 + 0.9 * (0.8 – 0.107) = 0.7307
a = 하위 뉴런의 출력값
O1 = 0.8 * 0.79 + 0.1 * 0.14 = 0.646 O1 = 0.8 * 0.799 + 0.1 * 0.104 = 0.6496 O1 = 0.1 * 0.799 + 0.8 * 0.104 = 0.60131
O2 = 0.8 * 0.1 + 0.1 * 0.8 = 0.16 O2 = 0.8 * 0.1 + 0.1 * 0.8 = 0.16 O2 = 0.1 * 0.1693 + 0.8 * 0.7307 = 0.60149

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-9


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (Instar 와 자기 조직 지도 모델 SOM)

Neural Network (인공 신경망) 알고리즘 – Instar 및 자기 조직 지도 모델 (Self Organizing Map model : SOM) – Kohonen 모델

 경쟁학습모델은 활성값이 가장 큰 뉴런을 승자 뉴런에 (Winner-take-all) 대해서만 연결 가중치를 조절하였음.


 SOM은 활성값이 가장 큰 뉴런의 이웃들 (동일 Plane 내의) 까지도 연결 가중치를 조절하고, 학습이 진행될수록 이웃의 범위를 좁혀나감. 이웃의 범위가 자기
자신이 될 때까지 반복함.
 이웃한 뉴런들 끼리 유사한 패턴에 반응하도록 하는 원리임 (예 : 시신경, 청신경 세포의 원리). 망막에 다소 불분명한 상이 맺혀져도 이것에 자극을 받은 시신경
세포들은 서로 경쟁함. 조금아리도 더 밝은 빛은 받아 승자가 된 시신경 세포들은 자신으로 부터 멀리 떨어진 신경세포들의 활성을 억제하여, 밝은 부분과 어두운
부분의 명암차를 더욱 크게함.

이웃의 범위 (+) 경쟁 : 서로 활성화됨


(-) 경쟁 : 활성화 되지 못하도록 억제함

클래스 = 1 클래스 = 4
(-) 경쟁

(+) 경쟁 (+) 경쟁
(+) 경쟁
1 2 3 4 5 6

[1] 멕시코 모자 [2] 스토브 파이프 모자 [3] 주방장 모자

패턴 인식 : 2, 3, 4 를 구별함

입력 뉴런 수
= 10 X 20 pixel
시가 고가 저가 종가

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-10


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (예시)

* 실습 파일 : 8-2.ANN(Clustering).xlsm
Neural Network (인공 신경망) 알고리즘 (예시 - Clustering) – Instar 및 SOM 학습 규칙
 훈련 데이터 (입력 패턴)를 4개의 클러스터로 군집화. 학습 규칙은 Grossberg의 Instar 규칙과, Kohonen의 Self-Organized Map (SOM) 규칙을 사용하였음.

Instar 규칙으로 학습 SOM 규칙으로 학습

K-Means 군집화와
유사한 결과임.

학습 결과 가중치
클러스터의
중심을 의미함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-11


8. 인공신경망 (Artifitial Neural Network) – 학습 규칙 (예시)

참고 사항 : Neural Network (인공 신경망) 알고리즘 (VBA 코드)

* 실습 파일 : 8-1.ANN(Classfication).xlsm
* 실습 파일 : 8-2.ANN(Clustering).xlsm

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-12


8. 인공신경망 (Artifitial Neural Network) – Global Optima 문제

Global Optimization 문제

 통계, 수치해석, 데이터 마이닝 등 최적화를 다루는 많은 분야에서 Global min. (or max) 값을 찾는 문제는 대단히 중요함.
예 : argmin (MSE) – Mean Square Error가 최소일 때의 조건을 찾음.
 Error 공간 (다차원 공간)에서 Error의 지역 최소점이 여러 군데 존재하는 경우 초기값에 따라 지역 최소점을 찾을 수도 있음.
 1) 번의 경우는 지역 최소점을 찾을 수 있고, 2) 번의 경우는 전역 최소점을 찾을 수 있음. Error 함수가 다차원 공간에 있고 찾을 범위가 넓은 경우 전역 극소점을
찾는 것은 쉬운 문제가 아님.
 해를 찾는 가장 일반적인 방법은 곡면의 경사를 타고 내려가면서 최소점을 찾는 방식 (Gradient Descent : GA) 이지만, 이 방법은 초기값에 따라 지역 최소점을
찾을 수도 있고, 전역 최소점을 찾을 수도 있음.

Global optimization 알고리즘 (예시)

 Simulated Annealing (SA) 알고리즘.


- 처음에는 큰 폭으로 움직이면서 검색하다가, 점차 움직이는 폭을
1) 초기값을 여기서 줄여나가면서 극소점을 찾는 방식.
부터 시작하면 2) 초기값을 여기서
지역 최소점을 찾음 부터 시작하면 - 온도가 높을 때는 금속의 분자 운동이 활발하다가 온도가 서서히 낮아지면
전역 최소점을 찾음 분자 운동 폭이 점차 줄어듦.
- 지역 최소점에서 전역 최소점으로 넘어가기는 쉬우나, 전역 최소점에서
지역 최소점으로 넘어가기는 어려움.

지역 최소점
 Particle Swam Optimization (PSO) 알고리즘.
(Local Min.)
전역 최소점 - 새 때나, 물고기 때가 몰려다니면서 먹이를 찾는 과정에 착안하여 전역
(Global Min.)
최소점을 찾음.
- 처음에 랜덤 위치에서 여러 Particle을 놓고 서로 통신하면서 점차 전역
찾고 싶은 위치
최소점으로 몰려가서 극소점을 찾음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-13


8. 인공신경망 (Artifitial Neural Network) – Global Optima 문제
* 실습 파일 : 8-3.GlobalOptima.xlsm
참고 사항 : Global optimization 문제 – GA, SA, PSO 알고리즘 실행 결과 비교 VBA (예시)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-14


8. 인공신경망 (Artifitial Neural Network) – [실습] 당일 종가(Close)의 방향 예측 실습
* 실습 파일 : 8-4.neuralnet(2).R
[실습] 당일 시가(Open)에 대한 기술적지표로 당일 종가 (Close)의 방향 예측 실습

 당일 시가를 대상으로 기술적지표 (RSI, EMA cross, MACD signal, BBand,)를 학습하여 당일 종가의 방향을 예측함.

 Feature 데이터 세트 시가를 기준으로 기술적 지표를 계산함 당일 종가 – 당일 시가


 훈련 데이터 세트

0 ~ 1 사의의 값으로
Normalization
 훈련 데이터 세트

학습
인공신경망
 시험 데이터 세트

학습 결과 (Weighting)를 이용하여
시험 데이터의 pchg를 예측함

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-15


8. 인공신경망 (Artifitial Neural Network) – [실습] 당일 종가(Close)의 방향 예측 실습
* 실습 파일 : 8-4.neuralnet(2).R
[실습] 당일 시가(Open)에 대한 기술적지표로 당일 종가 (Close)의 방향 예측 실습

0.005

주의 : Backpropagation은 Local min. 을 찾고, 초기


weight는 랜덤하게 부여하므로, 실행할 때마다 결과가
달라짐. neuralnet의 경우 랜덤 초기값 때문에 해를 못찾는
경우도 있음. 이 때는 다시 실행함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-16


8. 인공신경망 (Artifitial Neural Network) – [실습] 다중 클래스 분류
* 실습 파일 : 8-5.neuralnet(3).R
[실습] 다중 클래스 분류 실습 (Multi Classification)

 Class 3개를 갖는 데이터의 경우는, 출력 뉴런의 값은 0 ~ 1 사이의 값이므로, 출력 뉴런 1개로 구분할 수 없음.
 출력 뉴런의 개수를 3개로 설정함. 3개의 출력 데이터 중에 가장 큰 뉴런의 번호가 예상 Class 임. 해당 뉴런의 활성화 정도가 가장 크기 때문임.
 예) 출력 데이터 = 0, 1, 0  2번째 출력이 가장 크므로 Class = 2 임.

 훈련 데이터 세트 Class = 2 로 구분함 0 1 0

 { 0, 0, 1} Out-1 Out-2 Out-3


 { 0, 1, 0}

출력 뉴런을 3개로  출력층


구성함
 { 1, 0, 0}
w13 w21

 은닉층

w1 w2
Class 3개 w11 w12

 입력층

a b c d

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-17


8. 인공신경망 (Artifitial Neural Network) – [실습] 당일 종가(Close)의 방향 예측 실습
* 실습 파일 : 8-5.neuralnet(3).R
[실습] 당일 시가(Open)에 대한 기술적지표로 당일 종가 (Close)의 방향 예측 실습

클래스 3 개  출력 뉴런이 3개로 구성됨

출력층 뉴런이 3개 임

데이터 품질이 좋으면 정확히 분류해 냄.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 8-18


R을 활용한 금융 데이터 마이닝

9. 은닉 마코프 모델 (Hidden Markov Model)

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)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-1


9. 은닉 마코프 모형 (Hidden Markov Model) - 개요

은닉 마르코프 모델 (HMM) 개요 Hidden Markov Model (HMM)

Markov Chain 0.4 0.6

0.6
π Z1 Z2 Z3 Z4
0.4

0.4
X1 X2 X3 X4

X1 X2 X3 X4
0.4

 X : 관측 데이터 (주가, 수익률 …)


 X : 관측 데이터 (주가, 수익률 …)  관측 데이터에 직접 나타나지 않는 은닉 상태 (Hidden State)가 있음.
 X는 직전 데이터에만 의존함 (1차 Markov Chain)  Z : 은닉 상태
 X는 전전 상태에만 의존함 (2차 Markov Chain)  X는 동일 시점의 상태 (Z)에 의존함 (출력 확률 : Emission Probability)
 이전 데이터는 다음 데이터에 대한 정보를 가짐.  Z는 이전 상태에 의존함 (상태 전이확률 : Transition Probability)
 현재 데이터를 알면 다음 데이터를 예측할 수 있음 (가정 사항)  오늘의 주가 (수익률)는 어제의 주가 (수익률)에 직접 의존하는 것이 아니고,
 전이 확률 : 단계 1 에서 2로 전이할 확률 = 0.4 오늘의 상태에 의존함. 오늘의 상태는 어제의 상태에 의존함.
 데이터 X 를 학습하여 전이 확률을 추정함.  X를 관찰 (학습) 하여 가장 가능성있는 상태의 시퀀스 (Z1 ~ Zn)를 추론함.
 전이 확률을 알면 다음 단계를 확률적으로 예측할 수 있음. (확률 모형)  오늘 상태와 전이행렬을 추정하면, 다음 상태를 추정할 수 있고, 내일 주가
(수익률)에 대한 정보 (확률 분포)를 얻을 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-2


9. 은닉 마코프 모형 (Hidden Markov Model) - 주가 (수익률)와 은닉 상태

은닉 마르코프 모델 (HMM) 개요 : 주가 (수익률)와 은닉 상태

 주가나 수익률은 상태 공간 상에서 상태 별로 군집화 되어있는 것으로 생각할 수 있음.


 주가는 시간에 따라 상태 공간 상을 움직임. 동일 상태 그룹내에서 움직일 때도 있고, 다른 상태로 넘어갈 (전이) 수도 있음.
 예를 들어 상태 (1)은 변동성이 작고 정규분포 수익률 특성을 갖고, 상태 (2) 는 변동성이 크고 우측이 두터운 수익률 분포, 상태 (3)은 변동성이 크고 좌측이
두터운 수익률 분포 특성을 갖을 수 있음. 일정 기간 동안의 주가 수익률 (X)을 학습하여 각 수익률이 어떤상태 (Z)로 부터 발생했는지 (Emission) 추론할 수 있음.
 주가를 시간 순서로 관찰하면 우측 그림과 같은 주가 차트로 관찰됨. 즉, 눈에 보이는 주가는 잠재 상태 (Hidden or Latent State)의 변화가 발현 (Emission) 된
것에 불과함.  HMM 의 시각
 관측치 (X)가 연속이면 (주가 수익률의 경우) 상태 Z 에서 X가 발현될 확률 P(X | Z)은 연속확률 분포로 (Gaussian) 나타남.
 주가 수익률을 학습하여 Gaussian 형태의 잠재 상태와 전이확률을 추정하고, 다음의 잠재상태를 추론하여, 미래 수익률의 분포를 추정함.  우리의 목표

은닉 상태

상태 (1) 상태 공간
주가 상태 전환점
상태 (1)
수익률 상태 (2) (Change point)

상태 (2) 시간 순서로 배열
Emission

수익률

상태 (3) 상태 (3) 상태 (1) 상태 (2)


상태 (3) 시간
수익률

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-3


9. 은닉 마코프 모형 (Hidden Markov Model) - 은닉 상태의 주사위 추론 예시

은닉 마르코프 모델 (HMM) : 은닉 상태를 가진 주사위 추론 예시

 주사위 게임에서 딜러가 공정하지 못한 주사위를 던지는 경우를 생각해 봄.


 딜러가 사용하는 주사위는 2 종류가 있음. L (Loaded) 은 6의 눈이 많이 나오도록 조작된 주사위이고, F (Fair)는 조작되지 않은 공정한 주사위임.
 L 주사위는 1 ~ 5 까지는 1/10 의 확률로 나오고, 6 은 1/2 의 확률로 나옴 (6이 많이 나옴). F 주사위는 1 ~ 6 까지 모두 1/6 씩 균등하게 나옴 (Emission Prob.).
 게임 참여자는 딜러가 어떤 주사위를 던지는지 모르고 (은닉 상태), 주사위를 던져서 나온 숫자만 알 수 있음. (Z 는 모르고, X 만 관측 가능)
 딜러가 주사위를 3번 던져서 1, 6, 6 의 눈이 나왔다면 매 번 어떤 주사위를 던졌는지 추정할 수 있을까?
 가정 : L 다음에 또 L 을 사용할 확률 = 0.7, F 다음에 L을 사용할 확률 = 0.3 으로 알고 있다고 가정함 (Transition Probability).
 주사위를 L, L, L 을 사용했을 확률 = P(1,6,6 | L,L,L) = 1/2 * 1/10 * 7/10 * 1/2 * 7/10 * 1/2 = 0.0061  처음에 L 을 선택할 확률은 1/2 로 가정함 (초기 상태)
 주사위를 F, F, F 를 사용했을 확률 = P(1,6,6 | F,F,F) = 1/2 * 1/6 * 1/2 * 1/6 * 1/2 * 1/6 = 0.0005787
 P(1,6,6 | L,L,L) > P(1,6,6 | F,F,F) 이므로 L,L,L 을 사용했을 확률이 더 큼.
 이런 방식으로 모든 조합 (예 : Z = { LFL, LFF, LLF, … } )에 대한 확률을 계산하면 딜러가 어떤 주사위를 사용했는지 추정할 수 있음.
 그러나 주사위를 수 백, 수 천번 던지는 경우, 주사위의 조합은 굉장히 많이 나오기 때문에 일일이 계산할 수가 없음  추론 알고리즘이 필요함.

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 ..... 중에 가장 가능성이 높은 시퀀스를 추정함.

3. X 만 주어진 경우 π , A, E, Z 모두를 추론함. (Learning Question)  Baum-Welch 알고리즘


 주사위 결과만으로 딜러가 사용했던 주사위의 유형을 알아냄 (초기상태와 전이확률을 먼저 추정해야함). 그러면 다음에 사용할 주사위도 추정할 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-4


9. 은닉 마코프 모형 (Hidden Markov Model) – 다항분포 샘플링

다항 분포: 확률분포 (이항, 3항, 다항 분포)

 삼항분포 (예시)
 이항분포 (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  순서가 바뀔 수 있음.

 삼항분포 (Trinomial Distribution)

> dmultinom(c(3,2,5), prob=c(1/6, 2/6, 3/6))


[1] 0.04050926

 다항분포 : 주사위 던지기 실혐

~ 어떤 주사위가 왼쪽과 같은 분포를 가지고 있고, 이 분포가 다항분포를 따른다고 할 때


이 주사위를 10번씩 3회 던질 때 나오는 주사위 눈을 시뮬레이션 함.
 다항분포 (Multinomial Distribution) 0.35

> theta <- c(0.05, 0.15, 0.25, 0.35, 0.05, 0.15)


0.25
> rmultinom(3, size=10, prob=theta)
0.15 0.15
[,1] [,2] [,3]
[1,] 0 0 0
0.05 0.05 1번 실험에서는 3 이 6번, 4가 4번 나왔음.
[2,] 0 0 1
[3,] 6 3 0 2번 실험에서는 3 이 3번, 4가 4번, 6이 3번 나왔음.
[4,] 4 4 3 3번 실험에서는 2가 1번, 4 가 3번, 5가 3번, 6이 3번 나왔음.
1 2 3 4 5 6 [5,] 0 0 3
* 3, 4 가 나올 확률이 높음
주사위
[6,] 0 3 3

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-5


9. 은닉 마코프 모형 (Hidden Markov Model) – 은닉 상태 주사위 실험
* 실습 파일 : 9-1.주사위실험.R
은닉 마코프 모델 (HMM) : 은닉 상태의 주사위 실험

 두 개의 은닉 상태 (L, F)를 갖는 주사위 30회를 던지는 실험을 수행함. 실험의 결과로 나타난 주사위 눈을 학습하여 이 실험에 사용한 전이행렬 등을 추론함.

“6” 의 눈이 가장
많이 나왔음.

딜러가 L, F 주사위를 바꿔가면서 30번 던짐

은닉 상태 시뮬레이션 (Z)

은닉 상태의 발현
시뮬레이션 (X)
(다항 분포)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-6


9. 은닉 마코프 모형 (Hidden Markov Model) – 은닉 상태 주사위 추론

은닉 마코프 모델 (HMM) : 은닉 상태의 주사위 추론 * 실습 파일 : 9-2.주사위추론.R

 실험 결과로 나온 주사위 눈을 관찰 학습하여 은닉 상태의 정보 (전이행렬, 상태 시퀀스 등) 를 추론함.

실제 전이행렬을
잘 추정하고 있음.

추정한
상태 시퀀스 (Z)

추정한 상태 시퀀스의 정확도

출력 창

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-7


9. 은닉 마코프 모형 (Hidden Markov Model) – 주식 시장의 은닉 상태 * 실습 파일 : 9-3.주가시뮬레이션.R

은닉 마코프 모델 (HMM) : 주식 시장에 던져지는 주사위


 주식 시장에 던져지는 주사위의 상태가 아래와 같이 3 가지 있음. 1번 주사위는 Drift가 매우 높고, 변동성이 약간 높음. 2번 주사위는 Drift가 매우 낮고 변동성이
낮음. 3번 주사위는 Drift가 약간 높고 변동성이 높음. 이런 주사위를 던졌을 때 발현 (Emission) 될 수 있는 주가 (X)를 시뮬레이션 해 봄.
 주가 시뮬레이션은 금융공학의 몬테카를로 시뮬레이션을 이용함. (MCMC 아님)
 역으로 주가 데이터를 관찰하면 이 시장에 던져진 주사위의 상태를 추론할 수 있음.  우리의 목표

3번 주사위
2번 주사위
1번 주사위 Transition Transition

Emission Emission Emission

상승하는
1번 주사위를 던졌을 때 발생할 수 경우가 많음
있는 주가 시뮬레이션.
- 전부 상승함.

하락하는
경우가 많음

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-8


9. 은닉 마코프 모형 (Hidden Markov Model) – [실습] 주가의 은닉 상태 추론

은닉 마코프 모델 (HMM) : [실습] 삼성전자 주가의 은닉 상태 추론 실습 (분석기간 : 2007.1.2 ~ 2017.1.9) * 실습 파일 : 9-5.주가의은닉상태추론.R

1번 주사위

2번 주사위

3번 주사위
3가지 은닉 상태를 가정함.
1번 주사위가 계속 사용될 확률 = 47.6%
2번 주사위가 계속 사용될 확률 = 72.3%
2번 주사위를 바꿀 확률 = 27.7%

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-9


9. 은닉 마코프 모형 (Hidden Markov Model) – 은닉 상태 주사위 추론

은닉 마코프 모델 (HMM) : [실습] 삼성전자 주가의 은닉 상태 추론 실습 (분석기간 : 2007.1.2 ~ 2017.1.9) * 실습 파일 : 9-5.주가의은닉상태추론.R

은닉 상태 (Z) 시퀀스
어떻게 해석하면 좋을까 ?

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-10


9. 은닉 마코프 모형 (Hidden Markov Model) – Bayesian Change Point (BCP)
* 실습 파일 : 9-6.BCP.R
Bayesian Change Point (BCP)

 주가같은 시계열 데이터에서 확률구조에 변화가 생기면 (평균, 분산의 특성이 달라지면) 그 지점을 주가의 변환점 (Change Point)로 판단하여, 변환점의
위치와 확률을 추론함 (Bayesian Inference). 아래 예시는 삼성전자 (2016.1.1 ~ 2017.1.6 : 1년간) 주가의 변환점을 추론한 것임.

변환점

변환점

변환점의 위치들

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-11


9. 은닉 마코프 모형 (Hidden Markov Model) – Bayesian Change Point (BCP)
* 실습 파일 : 9-6.BCP.R
Bayesian Change Point (BCP)

 변환점의 사후 확률 (Posterior)이 p % 이상인 변환점이 며칠에 한 번씩 발생하는지 날짜를 계산해 보고, 날짜의 분포를 확인함.
 아래 예시는 삼성전자 (2007.7.26 ~ 2017.1.6 : 9년간) 주가의 사후 확률이 50% 이상인 변환점의 경우 평균 27.35일에 한 번씩 발생하는 것을 의미함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-12


9. 은닉 마코프 모형 (Hidden Markov Model) – 지수 분포

지수 분포의 특징
시간 (t1) 시간 (t2) t : 지수 분포
 포아송 분포 : 단위 시간 당 일어나는 사건의 횟수에 대한 확률분포.
 지수 분포 : 발생하는 사건 사이의 시간 간격에 대한 확률분포.
 발생 사건 사이의 평균 시간 간격은 평균 대기시간임.
 주가의 변환점을 일종의 사건으로 생각하면, 변환점이 발생하는 기간이
사건 (X1) 사건 (X2) 사건 (X3) X : 포아송 분포
지수 분포를 따른다고 가정할 수 있음.
 지수 분포를 이용하면 1개월 이내에 변환점이 발생할 확률을
계량화 해 볼 수 있음.
예시
 이 확률은 향후 발생할 위험의 확률로 간주할 수 있음.
 Early Warning Signal로 활용
 Posterior 확률이 50% 이상인 주가 변환점이 평균 27.35일에 한 번씩 발생하고 있음.
 향후 1개월 (31 일) 이내에 이 정도의 주가 변환점이 발생할 확률은?

 이 결과는 향후 발생할 변환점에 대한 확률이므로 일종의 Early Warning Signal로 생각할 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 9-13


R을 활용한 금융 데이터 마이닝

10. 텍스트 마이닝 (Text Mining)

10-1. 텍스트 마이닝 개요 및 용어


10-2. [실습] TF-IDF 척도를 이용한 웹문서 검색 순위 결정 예시
10-3. [실습] 트위터 검색 및 워드 크라우드
10-4. 토픽 모델 (Topic Model)
10-5. [실습] 문서 집합과 토픽 분포 추론 예시
10-6. Latent Dirichlet Allocation (LDA) 모형
10-7. [실습] 문서 생성 과정 실습
10-8. [실습] 토픽 추론 과정 실습
10-9. [실습] 트위터 검색 및 토픽 추론 과정 실습
10-10. 금융 뉴스분석 트레이딩 시스템 사례

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-1


10. 텍스트 마이닝 (Text Mining) - 개요

텍스트 마이닝 개요

 텍스트 마이닝은 텍스트로 구성된 다수의 문서에서 특징들을 (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차적으로 정형화함. (예 : 문서 작성일, 작성자, 내용 등)

 Unigram : 개별 단어. 각 단어들은 서로 독립적임.

 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, 단어-문서 행렬) : 문서별로 사용된 단어의 빈도를 행렬 형태로 표시함.

 Bag of words (단어 집합) : 여러 문서에 등장하는 단어들을 모아 놓은 집합체.

 Term frequency (TF) : 어떤 문서에 등장하는 단어의 빈도수. TF가 높으면 이 문서에서 이 단어는 중요하다고 판단함.

 Document frequency (DF) : 어떤 단어가 얼마나 많은 문서에 등장하는지에 대한 지수. DF가 높을수록 범용적인 단어이므로 중요도가 낮음.

 Inverse document frequency (IDF) : DF의 역수. IDF가 높을수록 중요도가 높음.

 TF-IDF : TF와 IDF의 곱. 단어의 중요도를 나타내는 척도.  단어의 중요도 지수

 Similarity Measure (문서의 유사도) : 문서 간의 유사도를 평가함. TDM 공간에서 TF-IDF 간의 (코사인) 거리를 측정함.  Vector Space Model

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-3


10. 텍스트 마이닝 (Text Mining) – TF-IDF
* 실습 파일 : 10-1.tf-idx.xlsx
텍스트 마이닝 : TF-IDF 척도를 이용한 웹 문서 검색 순위 결정 (예시)

 아래와 같은 검색문으로 세 개의 문서 (#1, #2, #3)를 검색할 때 검색문과 가장 유사한 문서가 상위에 검색되도록 함.
 검색문과의 유사도는 TF-IDF 간의 코사인 거리를 이용함. (두 벡터의 내적이 클수록 유사도가 높음.)  상세 계산 과정은 첨부 파일 (엑셀)의 수식 침조
 분석 결과 문서 #2가 가장 상위에 랭크되고 이어서 #3, #1 이 나옴. 문서 #2 의 경우 “silver”가 2개, “truck”이 1개로 검색문과의 유사도가 가장 높음.
 TF-IDF 는 정보검색, 인덱싱, 유사도 계산에 유용하지만 문서와 단어 개수가 많아지면 너무 많은 시간이 소요되고, 최신 트랜드를 반영하기 어려운 단점이 있음.
 최신 트랜드를 반영한 문서의 범위를 정하는 것도 어렵고, 신조어가 있는 신기술 문서인 경우 특정 단어가 포함된 문서가 많아 오히려 중요도가 낮아지는 현상이
발생함. 트랜드 분석을 위해서는 특정 키워드가 연도별로 얼마나 중요한지 가중치를 부여함.  TF-DI (Term frequency – Data index)

Term-Document Matrix (TDM)


3개의 문서 중 검색문과 유사한 문서를 상위에 Rank 시키려고 함.

문서 #2  문서 #3  문서 #1 순으로 Rank 됨.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-4


10. 텍스트 마이닝 (Text Mining) – [실습] 문서 검색 및 분류
* 실습 파일 : 10-2.문서검색분류.R
텍스트 마이닝 : [실습] TF-IDF를 이용한 웹 문서 검색 순위 결정 실습
 아래와 같은 검색문으로 10 개의 문서에서 검색할 때 검색문 (query)과 가장 유사한 문서가 상위에 검색되도록 함.

TF-IDF 기반의 Term-Document Matrix

9번째 문서가 가장 상위에 랭크 되었음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-5


10. 텍스트 마이닝 (Text Mining) – [실습] 문서 검색 및 분류
* 실습 파일 : 10-2.문서검색분류.R
텍스트 마이닝 : [실습] TF-IDF를 이용한 웹 문서 검색 순위 결정 실습
 TF 와 TF-IDFT 효과 비교 : “삼성"과 “전자” 는 거의 모든 문서에 등장함. TF 에서는 중요하게 평가되고, TF-IDF에서는 중요하지 않게 평가됨.

TF-IDF TF

* “삼성전자”를 사전에 등록하지 않았으므로, “삼성”과 “전자"가 따로 분석되고 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-6


10. 텍스트 마이닝 (Text Mining) – [실습] 문서 검색 및 분류
* 실습 파일 : 10-2.문서검색분류.R
텍스트 마이닝 : [실습] TF-IDF를 이용한 웹 문서 검색 순위 결정 실습
 TF-IDF 의 유사도 (거리) 를 측정하여 문서들을 3개의 클러스터로 분류함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-7


10. 텍스트 마이닝 (Text Mining) – [실습] 트위터 검색
* 실습 파일 : 10-3.트위터검색.R
텍스트 마이닝 : [실습] 트위터 검색 및 워드 크라우드
 트위터 로그인 후 자신의 API Application을 생성해야 함.
 트위터 검색 API를 이용하여 트윗 내용을 수집하고 빈도수가
 높은 단어들로 워드 크라우드를 작성함.
 트위터 검색을 위해서는 우측과 같이 인증 절차가 필요함.

2015년 이후, 삼성전자가


포함된 문서 1000개를
검색함.

검색된 트윗 문서들

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-8


10. 텍스트 마이닝 (Text Mining) – [실습] 트위터 검색

텍스트 마이닝 : [실습] 트위터 검색 및 워드 크라우드 * 실습 파일 : 10-3.트위터검색.R

 트위터 검색 API를 이용하여 트윗 내용을 수집하고 빈도수가 높은 단어들로 워드 크라우드를 작성함.

Token 분리가 잘 이루어지지 않았음.

- 제일모직 이 “제일”과 “모직” 으로


따로 분리 됨.
- “제일”과 “모직"이 사전에 있고,
“제일모직"은 없기 때문임.
- “제일모직“ 을 사전에 등록해야 함.
- 한글은 형태소를 정확히 분리하는
것이 어려움.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-9


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model)

토픽 모델링 : 토픽 집합과 문서의 토픽 분포

 문서는 토픽 집합에 속한 단어들로 구성되고, 한 문서에 등장하는 단어들은 여러 토픽들과 연계되어 있음.  토픽 분포
 아래 문서의 주제는 (토픽) 기업 실적과 관련된 것으로 추론할 수 있음.

토픽 집합
1. 실적 2. 수주 3. 이슈 문서
분기 수주 주가
매출 계약 약세 삼성전자는 연결기준으로 매출 47.82조원, 영업이익
영업이익 발주 하락 5.2조원의 2016년 3분기 실적을 발표했다. 매출은 전년
영업외이익 호재 부정적 동기 51.68조원 대비 7.5% 감소했고, 영업이익은 전년 동기 실적

실적 기대 악화 7.39조원 대비 29.7% 감소했다.


증가 매출 예상
감소 실적 감소 부품 사업에서는 메모리와 디스플레이가 전반적인
대비 증가 우려 가격안정화 속에서 고부가 제품의 판매가 확대됐다. 이슈

세트 사업에서는 노트7의 판매 중단 영향으로 IM 부문 외환


4. 외환 5. 증자 6. 리포트 실적이 하락했지만, CE 부문은 SUHD TV와 프리미엄 가전 수주 리포트
원화 자본 증권사 확판 등으로 전년 대비 성장세가 지속됐다.
환율 신주 주가 한편, 원화가 달러·유로화 등 주요 통화 대비 강세를
영업이익 발행 애널리스트 보이면서 부품 사업을 중심으로 전분기 대비 약 7,000억원 1 2 3 4 5 6
매출 발행가액 적정가격 수준의 부정적 환영향이 발생했다.
보통주 영업이익 토픽 분포
강세
약세 기준일 실적 기타 영업외 이익은 약 5,400억원 수준이며, ASML 등
달러 배정 기대 투자자산 처분 이익의 영향이 컸다.
유로화 주주 수주

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-10


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model)

토픽 모델링 : 문서집합에서 토픽 분포 등을 추론

 문서 집합 (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월

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-11


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : 토픽 추론 예시
* 실습 파일 : 10-4.토픽모델(예시).R
토픽 모델링 : 문서집합에서 토픽 분포를 추론하는 간단한 예시

4개의 문서를 2개의 주제로 분류하고, 토픽별


단어 분포와 문서별 토픽 분포를 추론함.

Kitten 은 토픽-1 에서 약
14% 사용되었고, 토픽-2
에서는 8.2% 사용되었음.

문서 1 (Doc-1)은 토픽 1의 단어들이 약 50.6 % 사용되었고,


토픽 2 의 단어들은 약 49.4% 사용되었음.
 문서 1 은 토픽-1 에 해당하는 문서임.
(문서가 짧아 정확히 추론되지는 않았음.)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-12


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : LDA 모형

토픽 모델링 : 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
토픽 토픽 토픽 단어 단어 단어

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-13


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : LDA 모형

토픽 모델링 : LDA 알고리즘의 목표

샘플링
 와 를 알고 있다면 해당 분포에 어울리는 단어를 생성할 수 있음.
 생성한 단어로 특정 주제에 대한 문서를 생성할 수 있음.

 와 를 모르는 상태임. 문서 집합 (학습 데이터) 에서 를


추론 (Sampling based Inference) 관측하여 가장 그럴듯한 와 를 추론함.
?  와 를 알면 주제 별로 문서를 분류할 수도 있고, 어떤 문서가 어떤
주제를 가졌는지도 추정할 수 있음.
LDA 알고리즘의  ex) 어떤 기업에 대한 뉴스가 발생했을 때 뉴스에 등장하는 단어들로부터 이
목표
뉴스가 어떤 주제를 가진 문서인지, 혹은 악재성 뉴스인지 호재성 뉴스인지 등을
추정할 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-14


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : 문서 생성 예시
* 실습 파일 : 10-5.문서생성(예시).R
토픽 모델링 : 문서 생성과정 (예시) - 와 가 주어진 경우

 토픽 추론을 이해하기 위해 반대로 문서가 생성되는 과정을 이해함.


 아래와 같은 주제 분포를 갖는 문서 #1 을 생성하려고 함.
 문서 #1은 특정 주제에 대한 토픽 분포를 가지고 있음. (토픽 확률 분포)
 각 토픽은 단어 목록을 가지고 있고, 해당 토픽에 해당하는 확률을
가지고 있음.
 토픽 분포와 단어 목록 분포를 사전에 알고 있으면, 해당 주제에 대한
문서를 생성해 볼 수 있음.
0.40

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의 확률이 높게 나올 것임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-15


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : 토픽 추론 예시
* 실습 파일 : 10-6.토픽분류(예시).R
토픽 모델링 : 토픽 추론과정 (예시) - 와 를 모르는 상태에서 추론

 theta1 = {0.05, 0.15, 0.60, 0.10, 0.10} ~ 토픽 #3의 확률이 가장 높음


 theta2 = {0.05, 0.05, 0.20, 0.10, 0.60} ~ 토픽 #5의 확률이 가장 높음
 위의 토픽 분포로 각각 100개씩 문서를 생성한 결과를 읽어서,
총 200개 문서에 있는 단어들 만을 관찰하여 2개의 토픽으로 분류함.
 문서 1~100 까지는 토픽 1, 101~200 까지는 토픽 2로 잘 분류됨.

토픽 #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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-16


10. 텍스트 마이닝 (Text Mining) – 토픽 모델 (Topic Model) : 토픽 추론 예시

토픽 모델링 : [실습] 트위터 검색 주제 (토픽) 추론 실습 * 실습 파일 : 10-7.트위터주제추론.R

* 아래 결과와 같이 3개의 주제로 분류해 보았음.

트위터 검색어

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-17


10. 텍스트 마이닝 (Text Mining) – 금융 뉴스 분석 트레이딩 시스템 사례

금융 뉴스 분석 트레이딩 시스템 사례 (1) - NewsCATS

 Marc-André Mittermayer, 2004, Forecasting Intraday Stock Price Trends with Text Mining Techniques
 금융 관련 뉴스와 주가 데이터를 스스로 학습하여 뉴스를 3 가지 부류로 구분해 놓음 (Good News, Bad News, No Movers).  SVM
 새로운 뉴스가 발생하면 이 뉴스가 어느 부류에 속하는지 판단하여 거래를 수행함.

 Document Preprocessing Engine : 뉴스 전처리 과정, 높은 TF-IDF 를 가진 단어들로


속성 (Features)을 구성함.
 Categorization Engine : SVM 을 이용하여 3 부류로 분류함. 뉴스 발생 후 60분 이내의
주가 변화로 Good News 인지 Bad News 인지 판단함.
 Trading Engine : Buy, Sell, Hold를 결정함.
 성과 예시 : 시험 결과 아래와 같은 성과를 얻었다고 함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-18


10. 텍스트 마이닝 (Text Mining) – 금융 뉴스 분석 트레이딩 시스템 사례

금융 뉴스 분석 트레이딩 시스템 사례 (2) - AZFinText

 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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 10-19


R을 활용한 금융 데이터 마이닝

11. 기술적 분석 (Technical Analysis)

11-1. 기술적 분석 지표의 특성 분석 및 속성 (Features)


11-2. 다양한 형태의 데이터 속성 추출
11-3. 기술적 지표 Feature의 조합 별 성능 확인
11-4. 학습 성과 개선 방안 예시 (Rule based trading)
11-5. 비 지도학습과 지도학습을 혼합한 학습 모형 (Hybrid)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-1


11. 기술적 분석 – 기술적 분석 지표의 특성 분석

기술적분석 지표 (오실레이터 형)와 정상성 (Stationary)

 대부분 기술적 분석의 매매 신호는 오실레이터 형태로 정상성 시계열의 특징을 갖도록 만들어져 있음.  비정상 시계열을 정상 시계열로 변환하는 과정임.
 매매 신호 자체에 추세가 있다면 의사 결정이 곤란하므로, 정상성의 특징이 나타나도록 만들어진 것임.
 그러나 주가는 비정상성의 특징을 가지므로, 정상 시계열로 비정상 시계열을 설명할 수는 없음.  근본적인 문제임
 오실레이터 형태의 기술적 분석 신호는 대부분 주가에 대한 설명보다는 주가의 평균 수익률에 대해 설명하는 것임.
 주가에 대한 정상 시계열은 수익률 계열이므로, 정상 시계열인 오실레이터 신호는 수익률 계열에 대해서는 설명할 수 있음.

주가의 평균 수익률 (수익률 이동평균)

이동평균 수익률
주가 (비 정상성)

동일 개념

기술적 분석 신호
(오실레이터 형)

이동평균 수익률의 변화와 주가의 변화 (예시)

이동평균 구간
이동평균 수익률 곡선 (빨간색)
+5 +2 과 오실레이터 형의 기술적분석
지표가 유사할 것임.

+5가 없어지고, +2가 유입되면 이동평균 수익률은 하락하지만,


다음 이동평균 수익률은 높아짐 주가는 상승함 (+2).

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-2


11. 기술적 분석 – 기술적 분석 지표의 특성 분석
* 실습 파일 : 11-1.기술적분석신호.R
기술적분석 지표 (오실레이터 형)와 정상성 (Stationary)

 오실레이터 형태의 기술적 분석 신호들을 표준화 (Normalization) 시켜 같이 그려보면 유사한 모습을 보임.
 오실레이터 형태의 시계열 데이터는 정상성 (Stationary)을 갖는 반면, 주가는 비정상성 (Non-stationary)을 갖는 시계열임.
 정상성 시계열로 비정상성 시계열의 방향을 예측하는 것은 어려움. 기계학습으로 기술적분석 지표들을 학습하여 주가의 방향을 예측하면 정확도가 50% 내외임.
 주가의 방향을 예측하는 것 보다는 다른 특성에 대한 유용한 정보를 추출하는 것을 목표로 하는 것이 바람직해 보임.

오실레이터 형태의 기술적 지표들이


유사하게 겹치고 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-3


11. 기술적 분석 – 학습 성과 개선 방안 예시

기술적분석 지표 학습의 정확도 개선

 이전 실습에서 확인해본 바와 같이 주가의 미래 방향을 예측하는 것은 매우 어려운 일임. 정확도가 50 : 50 근처임.


 예측의 정확도를 높이기위해 각 알고리즘 마다 최적의 파라메터를 선택할 수 있었고, Ensemble 기법으로 일반화 특성을 향상시킬 수 있었음.
 근본적으로는 예측에 적합한 데이터 세트를 만드는 것이 중요함. 되도록이면 의사결정 경계면을 분명하게 만드는 데이터 세트가 필요함.
 이 전 장에 실습용으로 선택한 기술적 지표에 의미있는 Feature들을 더 추가하여 성능이 개선되는지 확인해볼 필요가 있음.
 또한, 예측 결과를 해석하고, 일종의 Rule을 정해서 Rul을 충족하는 데이터 만을 선별해서 학습하고 그 결과를 활용하는 것도 의미가 있음.

학습의 정확도 개선 방법 데이터 세트의 품질 향상 방법 결과 해석 및 규칙 생성에 의한 성능 개선

 KNN – 최적 k 값 선정  학습의 성과가 좋게 나오도록 데이터의  예측 결과를 다시 분석하여 어떤 조건일 때


주로 예측이 맞았는지 분석함
 Decision Tree – Pruning 속성 (Feature)들을 효과적으로 선택함.
 SVM – cost, gamma parameter  위의 조건을 일반화 시킬 수 있면 규칙 (Rule)
으로 정함.
 Bagging, Boosting  무엇을 분석할 것인가?
 Randomforest  주식 시장에서는 매 번 거래할 필요가 없음.
위의 Rule이 적용되는 시기에만 거래하는
 Featurre의 중요도 선택  무엇을 예측할 것인가? 것으로 한정함.
 차원 축소
 데이터 세트에서 이 Rule에 위배되는
 Regularization  어떤 속성들을 사용하는 것이 효과적인가? 데이터를 제거한 후 다시 학습함.
 Cress Validation Test


R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-4


11. 기술적 분석 – 다양한 형태의 데이터 Feature 추출

예측과 관련된 다양한 형태의 Features 추출

 훈련 데이터 세트에 다양한 형태의 기술적 지표들을 추가함. 예측을 위해 어떤 지표가 효과적인지 알 수 없으므로 일단 다양하게 추가한 다음 추후에 판단함.
 기술적 지표 이외에도 예측과 관련된 Feature들은 많음. 예를 들어 캔들의 모양이나 변동성 정보도 가까운 미래 주가와 관련이 있을 수 있음.
 다양한 Featurre 들을 개발하려면 금융 이론을 충분히 활용하는 것이 필요함.

기술적분석 지표 Feature : MA Cross (spread), ATR, SMI, ADX, Bollinger Band, MACD, OBV, CCI, RSI …
기타 Feature : Candle 패턴, 변동성 (갭, 장중 변동성), 평균 거래 대금 …

Candle Pattern

 각 캔들의 높, 낮이를 맞추고, 패턴의 모양만 학습함.


(ex : 장대 양봉인지, 장대 음봉인지, Dodge인지 등) 일반 변동성
> candleChart(OHLC(ds$train[1:30,]), TA=NULL, theme='white')

장중 변동성 측정

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-5


11. 기술적 분석 – 학습 성과 개선 방법

예측 대상 및 예측 기간 설정

 주가의 방향 예측은 향후 트렌드를 추정하는 것임. 며칠 후 까지 예측할 것인가를 설정할 필요가 있음.
 현재 주가가 과거 주가에 종속되어 있다고 가정하면, 먼 과거로 갈수록 현재와의 종속 관계가 약해진다고 볼 수 있음. 따라서 현재의 주가도 미래로 멀리 갈수록
종속성이 약해지고 예측의 정확도도 떨어질 것임. 단기 며칠 간의 트렌드 예측을 목표로 함.
 이전 장의 실습에서는 단적으로 내일 주가의 방향을 예측하였으나, 특정 일의 순간 주가는 Noise일 수 있으므로 예측력이 떨어질 것임. 예를 들어 향후 트렌드가
상승해도 내일의 주가는 일시적으로 하락할 수 있음.
 내일 주가의 방향을 예측하는 것보다는 향후 며칠 간의 평균 주가의 방향을 예측하는 것이 합리적 일 수 있음.
 아래 예시는 k = 5 일 후 주가의 수익률을 모두 누적한 예시임. 단, 수익률은 현재 시점을 기준으로 계산함. 미래 수익률이 특정 레벨 이상 오르거나 떨어진 경우만
누적할 수도 있음. 약간 상승하거나 하락한 경우는 변동이 없는 것으로 판단함.
 향후 2일간 하락했다가 3일간 상승하면 누적 수익률은 서로 상쇄되어 0 에 가까워짐.  트렌드가 없는 경우
 상승한 적이 많으면 누적 수익률이 커질 것임.  상승 트렌드
 하락한 적이 많으면 누적 수익률은 작아질 것임 (음수).  하락 트렌드

과거 현재 미래

t-3 t-2 t-1 t t+1 t+2 t+3 t+4 t+5 t+6

현재와 k일 후의 수익률을 계산한 후 모두 누적함

* 참고 자료 : Luis Torgo, 2011, Data Mining with R (Learning with Case Studies), page 109.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-6


11. 기술적 분석 – 학습 성과 개선 방안 예시

데이터 세트 구성 * 실습 파일 : 11-2.FeatureSetTA(2).R

 총 16개의 기술적 지표 Feature를 이용하여 데이터 세트를 구성함. 예측 목표는 향후 5일 간 트렌드임.

총 16개의 Feature로 훈련 데이터 세트를 구성함

향 후 5일간 트렌드 (관측치) 각 수치는 표준화 됨

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-7


11. 기술적 분석 – 학습 성과 개선 방안 예시
* 실습 파일 : 11-3.svmTA.R
SVM 알고리즘 적용 결과
 SVM 알고리즘으로 16개의 기술적 지표 들로 구성된 훈련 데이터를 학습하고, 시험 데이터를 대상으로 예측 결과를 확인함.

실습 파일 :4-6.svm(2).R 과 동일한 조건으로 학습함.

실습 파일 :4-6.svm(2).R 의 결과보다 개선되어 보임. 더 개선할 방법은 ?  16개 Feature 들 중 정확도가 향상되는 특정 조합이 있을까 ?
 전체 조합 별로 데이터 세트를 구성하고 다시 학습해 보기로 함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-8


11. 기술적 분석 – 학습 성과 개선 방안 예시

기술적 지표 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

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-9


11. 기술적 분석 – 학습 성과 개선 방안 예시
* 실습 파일 : 11-4.Feature조합.R
기술적 지표의 Feature 별 조합 별 성능 확인 : 6개 Feature를 사용한 경우 - 462 가지 경우에 대해 시험함.

6개 Feature를 사용한
경우 조합 전체의 평균
정확도는 51.96% 이고
편차는 3.58% 임.

이 조합의 정확도가 가장 높았음. (60.25%).

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-11


11. 기술적 분석 – 학습 성과 개선 방안 예시
* 실습 파일 : 11-4.Feature조합.R
기술적 지표의 Feature 별 조합 별 성능 확인 : 8개 Feature를 사용한 경우 - 165 가지 경우에 대해 시험함.

8개 Feature를 사용한
경우 조합 전체의 평균
정확도는 53.27% 로
6개를 사용한 경우보다
약간 증가하였고, 편차는
3.36% 로 약간 감소
하였음.

이 조합의 정확도가 가장 높았음. (61.07%).

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-12


11. 기술적 분석 – 학습 성과 개선 방안 예시 (Rule based trading)
* 실습 파일 : 11-5.Rulebased.R
예측 결과를 이용하여 거래 규칙 (Rule)을 생성함

 실전 거래에서는 매일 예측해서, 매일 거래하는 것이 아니므로 정확도가


높을 때만 거래하거나, 정확도가 낮을 때는 거래를 피하는 거래 규칙을
생성할 필요가 있음.
 학습 결과를 테스트 데이터에 적용해 보면 Confusion Matrix로 예측의
정확도를 측정해 볼 수도 있고, 또한 어느 조건 때 주로 잘 맞추었는지
관찰해 볼 수도 있음.
 우측의 결과에서 (화면에 보이는데로) 4번은 맞췄고 (Correct), 4번은
맞추지 못했음.
 만약 Correct 일 때와 Incorrect 일 때 각 Feature들의 수준을 관찰해서
어떤 패턴이 존재한다면 (약한 수준이지만) Rule을 생성해 볼 수 있음.
 다음 페이지와 같이 시각화를 통해 패턴을 확인함.

Rule 예시 (조건식) – 육안으로, 대략적으로 파악한 것임.

 MACD < -1.3 or MACD > +1.3


 Bollinger < -1.7
 SMI > +1.3
 -0.3 < ADX < +0.3 or ADX > +1.3
 -1.7 < RSI < -1.3 or +0.8 < RSI < +1.3
 +1.5 < OBV < +2.2 or OBV > +3 etc …
 위의 조건이 충족되는 경우에만 예측 결과를 신뢰하고 거래에 반영함. 예측 결과 Correct가 4번,
Incorrect가 4번임. (화면상)
 이 조건은 단지 한 종목 데이터만으로 판단한 예시에 불과함.
 다수의 종목 데이터를 충분히 학습하여 일반화된 규칙을 생성해야 함.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-13


11. 기술적 분석 – 학습 성과 개선 방안 예시 (Rule based trading)

Correct / Incorrect 비율의 시각화 * 실습 파일 : 11-5.Rulebased.R

 원으로 표시한 부분에서는 Incorrect 보다 Correct의 비율이 높았음. 만약 여러 데이터를 사용했을 때 일정한 패턴을 발견할 수 있으면 하나의 Rule로 사용할 수 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-14


11. 기술적 분석 – 비 지도학습과 지도학습을 혼합한 학습 모형 (Hybrid)

Clustering과 Classfication의 혼합 방안 (Hybrid)


 비 지도학습 (Unsupervised)과 지도학습 (Supervised)을 사용한 혼합형 모형 (Hybrid).
 이전 예시에서는 입력 Feature 들을 사람이 직접 선택하고 계산하여 (예 : 기술적 지표) 지도학습에 의해 주가의 방향을 예측하였음.
 그러나 원시 데이터에서 수많은 Feature들을 사람이 일일이 선택하고 추출하는 것은 한계가 있음.
 비 지도학습은 기계 스스로 데이터에서 유용한 패턴을 추출하는 것이므로, 비 지도학습으로 1차 학습하고, 학습된 결과를 다시 지도학습으로 2차 학습하는 방법을
생각해 볼 수 있음. 즉, 지도학습용 입력 Feature들을 비 지도학습으로 생성하는 것임.
 아래 예시는 원시 데이터에서 기술적분석 지표의 Feature들을 생성하고, 동시에 비 지도학습인 Clustering 기법으로 주가의 최근 패턴 (예 : Head and Shoulder),
혹은 캔들의 패턴 (예 : 장대 양봉, 망치 등)을 자동으로 분류하여 다음 학습의 입력 Feature로 활용하는 모형임.
 참고로 Generative Model로 추론 (Inference)한 결과도 지도학습의 입력 Feature로 활용될 수 있음.

Features Generation Features Aggragation Supervised Learning

Hybrid 모형 예시  MA Cross (spread)


 ATR Ex :기술적
Human  SMI 분석 지표
 ADX
 Bollinger Band Classification
 MACD 등.
 KNN
 Decision Tree
주가 데이터 Unsupervised Learning  SVM
원시 데이터 종합 예측
Clustering Ex : 주가 패턴,  ANN
캔틀 패턴  Random Forest
Machine  K-Means
 H-Cluster  Bagging
 ANN

Generative Model
Ex : 잠재상태,
Inference 변환점
 HMM
 BCP 등

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 11-15


R을 활용한 금융 데이터 마이닝

12. 포트폴리오 최적화 (Portfolio Optimization)

12-1. 포트폴리오 이론 (Portfolio Selection Theory) 개요


12-2. 최적 포트폴리오 구성 방법 (EF, MVP, S/R)
12-3. Regularization에 의한 최적 포트폴리오
12-4. Cross Validation 시험에 의한 최적 포트폴리오

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-1


12. 포트폴리오 최적화 (Portfolio Optimization) – 개요

마코비츠의 포트폴리오 이론 (Portfolio Selection Theory, 1953)

 개별 종목의 위험과 수익률을 측정하여 효율적 투자선을 제안하고, 최적 포트폴리오 구성 방안을 이론적으로 정립함.

수익률
수익률
수익률
지배원리
효율적 투자선 (EF)
무차별곡선
효용 증가 ρ = -0.5
종목-2
ρ=0
MVP ρ=1

위험 위험 종목-1 위험

 위험 감소, 수익률 증대로 효용이 증가함  위험은 작고, 수익률은 높은 종목으로  상관계수에 따라 효율적 투자선과
포트폴리오 구성 각 종목의 투자비율이 달라짐
* MVP : Minimal Variance Portfolio

 행렬 표시

ρ 에 따라 포트폴리오의
위험 (분산)이 달라짐

최소분산 포트폴리오의
투자 비중
공분산 행렬

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-2


12. 포트폴리오 최적화 (Portfolio Optimization) – 시장 데이터 수집

 야후 사이트로부터 코스피 대형주 57 종목 및 Kospi 지수를 읽어와서 수익률 테이블을 구성함. (2010-01-01 ~ 현재) * 실습 파일 : 11-1.Portfolio.R

 구성된 수익률 테이블은 portfolio.csv로 저장됨. 한 번 구성한 후에는 read.csv(“portfilio.csv”)를 사용함.

종목별로 종가를 읽어온 후 일일 수익률 테이블이 자동으로 작성됨

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-3


12. 포트폴리오 최적화 (Portfolio Optimization) – 지배원리

* 실습 파일 : 12-1.Portfolio.R
수익률, 위험 공간의 지배원리
 종목 별로 측정된 수익률과 위험 (변동성)을 마코비츠 공간 상에 배치하여 지배원리를 육안으로 확인함. 버블의 크기는 Sharp Ratio의 크기임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-4


12. 포트폴리오 최적화 (Portfolio Optimization) – 포트폴리오 최적화

* 실습 파일 : 12-1.Portfolio.R
포트폴리오 최적화 – Sharp Ratio가 최대가 되는 최적 투자 비율 산출
 2016 년 데이터로 최적 투자비율을 산출함. 매도가 가능하다고 가정하였음 (w < 0 가능).  Overfitting

* 2016 년 데이터로 분석한 최적 투자 비율 * 최적 투자 비율에 의한 기대 수익률


* 특정 종목의 비중이 과도하게 큰 경향이 있음. * 훈련 데이터를 학습하여 다시 훈련
(Overfitting) 데이터로 시험하였으므로, 당연히
높게 나옴. (잘못된 시험임)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-5


12. 포트폴리오 최적화 (Portfolio Optimization) – Regularization과 Cross Validation Test

분석의 문제점과 개선 방향 : Regularization과 Cross Validation Test

 분석에 사용된 수익률과 위험은 과거 데이터이므로 미래의 성과와는 무관함. 예를 들어 2016년 데이터를 분석해서 최적 비율을 산출한 후 2017년에 투자
집행한다고 해서 2016년 같은 성과가 나올 수 없음. 2016년에는 삼성테크윈의 SR이 높았고, 기아차의 SR은 낮았지만, 2017년에는 다른 상황이 발생할 수 있음.
 일반화의 (Generalization) 오류, 과적합 (Overffiting) 문제점
 기업 분석 등을 통해 미래의 수익률과 위험을 추정할 수 있다면 좋겠지만, 미래를 추정하는 것은 대단히 어려운 일임. 이 경우도 포트폴리오 효과로 추정 오류를
(추정 위험) 줄일 수 있음.
 과거 데이터에 의존하는 경우에는 Regularization 작업을 통해 일반화 오류를 줄이는 방법이 사용될 수 있음. (Penalty 항을 추가하여 특정 w가 커지는 것을 방지)
 일반화 정도를 조절하면서 (조절변수 : λ, ex: Rideg Regerssion or Weight decay ) Cross Validation test로 성과가 좋은 일반화 정도를 채택할 수 있음.

 Cross Validation test에 의한 성과 분석


* k-fold Cross validation (k = 7)  Regularization 방법론 (예시)

1 2010 2011 2012 2013 2014 2015 2016


 Ridge Regularizaiton
2 2010 2011 2012 2013 2014 2015 2016
개선 (Regularization)  Spectral cut-off
3 2010 2011 2012 2013 2014 2015 2016
 Landweber Fridman iterative
4 2010 2011 2012 2013 2014 2015 2016
method
* Regularization 작업을
5 2010 2011 2012 2013 2014 2015 2016 통해 일반화 특성을  LASSO
6 2010 2011 2012 2013 2014 2015 2016 (Generalization)  etc
향상 시킴
7 2010 2011 2012 2013 2014 2015 2016

1. 2011 ~ 2016년 데이터로 최적화를 수행하고, 2010년


데이터에 적용하여 성과 측정. * 참고 문헌 : Marine Carrasco et al, 2010, Portfolio
2. 2010년과 2012 ~ 2016년 데이터로 최적화하고, 2011년 Selection using Regularization
데이터에 적용하여 성과 측정.
...
 종합적으로 성과를 측정함.
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-6
12. 포트폴리오 최적화 (Portfolio Optimization) – Regularization에 의한 포트폴리오 최적화

* 실습 파일 : 12-2.Portfolio(Reg).R
Regularization에 의한 포트폴리오 최적화

 Sharp Ratio를 최대화하기위한 목적 함수에 특정 Weight가 커지지 않도록 Penalty 항을 추가함. (조절변수는 임의 지정)

* 최적 투자 비율에 의한 기대 수익률
* Regularization에 의한 최적 투자 비율 * 훈련 데이터를 학습하여 다시 훈련
* 모든 종목의 비중이 어느 정도 균등해 짐. (대략 6% 이하) 데이터로 시험하였으므로, 당연히
(일반화 특성이 향상됨) 높게 나옴. (아직도 잘못된 시험임)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-7


12. 포트폴리오 최적화 (Portfolio Optimization) – Regularization에 의한 포트폴리오 최적화

* 실습 파일 : 12-2.Portfolio(Reg).R
Regularization에 의한 포트폴리오 최적화
 최적 투자 비율에의한 포트폴리오의 기대 수익률과 변동성을 마코비츠 공간에 표시함. Overfitting 때 보다 기대 수익률 수준은 낮아졌으나, 일반화 특성이 향상됨.

효율적 투자선
(Efficient Frontier)

위험 감소

Overfitting 때 수익률
96.98% 보다는 낮아짐.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-8


12. 포트폴리오 최적화 (Portfolio Optimization) – Cross Validation Test에 의한 포트폴리오 최적화

Cross Validation Test에 의한 포트폴리오 최적화 * 실습 파일 : 12-3.Portfolio(CV).R

 훈련 데이터와 시험 데이터를 분리하여 훈련 데이터로 산출한 Weight을 시험 데이터에 적용하여 성과를 측정함.  조절 변수를 조절해 가면서 시험함.

* 2009년 ~ 2015년 데이터로 최적 투자비율을 산출하였음.


* 모두 매수만 가능한 것으로 하였음. (W > 0)
성과를 개선하기 위해서는 조절변수가 커져야하며,
조절변수가 커질수록 투자 비율이 균등해짐.

* 2016 년 기대 수익률
* Lamda = 10 을 적용한 경우

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-9


12. 포트폴리오 최적화 (Portfolio Optimization) – Cross Validation Test에 의한 포트폴리오 최적화

Cross Validation Test에 의한 포트폴리오 최적화 * 실습 파일 : 12-3.Portfolio(CV).R

 성능을 개선하기 위해 조절변수를 크게 적용함 (Lamda = 100). 투자 비율이 더 균등해 짐.  시장 포트폴리오 (지수 매입)를 구입하는 것과 유사해 짐.

조절변수를
증가할수록
시장 수익률에
가까워짐.

위험 감소

* 2016 년 기대 수익률
* Lamda = 100 을 적용한 경우

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 12-10


R을 활용한 금융 데이터 마이닝

13. 데이터 마이닝과 고빈도매매 (HFT)

13-1. 시장미시구조 (Market microstructure) 개요


13-2. Tick Time과 Volume Time
13-3. Tick Time 및 Volume Time 캔들 차트의 SVM 학습
13-4. 시장미시구조의 정보 모형 (Kyle 모형) 개요
13-5. HMM과 정보기반 거래자의 은닉 상태
13-6. HMM에 의한 정보기반 거래자의 은닉 상태 (비중) 추론
13-7. 호가창의 정적 모형 (SOBI)
13-8. SVM으로 Static Order Book 학습

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-1


13. 데이터 마이닝과 고빈도 매매 (HFT) : 시장미시구조 개요

시장미시구조 (Market microstructure) 개요

 시장미시구조론 : 거래가 이루어지는 시장 (Market)의 미시 구조에 대한 연구 분야임.


 재무관리/금융공학 분야에서는 주가가 생성되는 거래 시장 자체에 대해서는 블랙박스로 취급함. 주가가 형성되는 원리나 과정보다는 이미 형성된 주가를 활용함.
 시장미시구조론은 거래 시장 자체를 연구함으로써 주가가 생성되는 원리, 즉, 주가 형성 과정을 연구함.
 경제학은 수요와 공급의 (거래의) 결과로 나타나는 가격에 관심을 두고, 금융 (Financial)은 자산의 기본 가치에 중점을 두는 반면, 시장미시구조론은 실제 거래의
과정 (Actual trading process, Order flow)을 중시함.
 시장의 거시 세계에서는 주가에 대한 정보, 주가의 상대적 가치에 의한 차익거래 이론, 각종 패리티 (Parity), 균형 가격 등을 연구함. 정보 비대칭성의 해소 속도가
빠른 효율적 시장 (EMH)이고, 진입과 탈퇴가 자유로운 완전 경쟁시장임.
 반면, 시장의 미시 세계는 거시적 측면의 논리 보다는 단기간 내의 주가에 대한 정보, 예를 들어, 호가창의 변화, 주문의 흐름이나 강도 (Intensity), 잔량의 변화
(호가창의 비대칭성) 등의 정보를 이용하며, 정보의 비대칭이 해소되기 전에 새로운 정보로 인해 다시 정보의 비대칭이 발생하므로 효율적 시장으로 보기 어려움.
 재무관리/금융공학은 거래 상품의 구조를 분석하는 반면, 시장미시구조론은 거래 시장에서 참여자 (정보거래자, 유동성거래자, 마켓메이커)들의 행위를 분석함

시장미시구조 (Market Microstructure)

호가창 (Limit Order Book) 일일 주가 차트

Market Factors 재무관리/금융공학


주가
 지정가 주문 유입률 형성  포트폴리오 이론
Bid  시장가 주문 유입률  CAPM/ APT
 취소 주문 유입률  OPM
 유동성 주가  Derivatives
 Depth  Parity/ Arbitrage
 Resiliency  블랙숄즈
Ask
... ...

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-2


13. 데이터 마이닝과 고빈도 매매 (HFT) : 시장미시구조 개요

거시시장 (Macro market) vs. 미시시장 (Micro market)

 거시시장에서는 주가 움직임이 상.하 대칭적이고 독립적이므로 (기술적) 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 분봉 일봉

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-3


13. 데이터 마이닝과 고빈도 매매 (HFT) : Tick time과 Volume time

* 참조 파일 : 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.

E-mini S&P 500 선물 E-mini S&P 500 선물

Tick time based candle chart

Clock time based candle chart

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-4


13. 데이터 마이닝과 고빈도 매매 (HFT) : Tick time 캔트 차트 학습 실습

[실습] Tick time 으로 구성된 캔틀 차트에 기술적 분석 지표를 적용하고 SVM으로 학습하여 미래 주가의 방향을 예측함. * 실습 파일 : 13-1.TickSVM.R

체결 틱이 200개 발생할 때마다


캔들을 구성하였음.

buy.sell : 매수 강도
bid.ask : Bid, Ask 잔량의 비율

* 학습 데이터량이 작음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-5


13. 데이터 마이닝과 고빈도 매매 (HFT) : Volume time 캔트 차트 학습 실습

[실습] Volume time 으로 구성된 캔틀 차트에 기술적 분석 지표를 적용하고 SVM으로 학습하여 미래 주가의 방향을 예측함. * 실습 파일 : 13-2.VolumeSVM.R

거래량이 1500개 발생할 때마다


캔들을 구성하였음.

buy.sell : 매수 강도
bid.ask : Bid, Ask 잔량의 비율

* 학습 데이터량이 작음

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-6


13. 데이터 마이닝과 고빈도 매매 (HFT) : Kyle 모형과 정보기반 거래자 (Informed Trader)

Kyle의 기본 모형 (단일 기간 모형)

 거래 시장에 정보기반 거래자 (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)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-7


13. 데이터 마이닝과 고빈도 매매 (HFT) : HMM 모형과 정보기반 거래자의 은닉 상태

HMM에 의한 정보기반 거래자의 은닉 상태 (비중) 추론

 시장에 유입되는 매수 (Buy), 매도 (Sell) 주문 수량, 혹은 매수 주문 강도 (Buy / Sell)를 관찰하여 정보기반 거래자의 비중을 추론함.
 정보기반 거래자의 참여 비중은 주문 수량의 Hidden 상태로 볼 수 있음. 정보기반 거래자가 호재성 정보를 가지고 있다면 매수 주문이 매도 주문에 비해 많을 것이고,
악재성 정보를 가지고 있다면 매도 주문이 많을 것임. 정보기반 거래자가 없다면 (특별한 정보가 없다면), 시장에는 Noise Trader만 있으므로 매수, 매도 주문이
랜덤하게 발생하므로 B = S 경향을 보일 것임.
 Market microstructure 분야에서 정보기반 거래자의 참여 비중을 추정하는 모형으로 PIN (Probability of Informed Trader), VPIN (Volume Synchronized PIN)
모형이 있음. HMM 으로도 PIN을 추정해 볼 수 있음.

Hidden 상태 (1차원) 정보기반 거래자 상태


관측치 : 매수 수량 (Buy)

Hidden 상태 (2차원)
정보기반 거래자 상태 1차원 상태로
단순화.

관측치 : 매수 강도 * 호재 정보를 가진 정보기반 거래자 비중이 높으면, 매수


강도가 높음. 정보기반 거래자 비중이 낮으면 유동성
관측치 : 매도 수량 (Sell) (Buy/Sell)
거래자 비중이 높으므로 강도는 1 에 가까워 짐 (B = S).

* 그림 출처 : Xiangkang Yin, Jing Zhao, 2012, A Hidden Markov Process


Approach to Informed-Based Trading. (Figure 2)
R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-8
13. 데이터 마이닝과 고빈도 매매 (HFT) : HMM 모형과 정보기반 거래자 상태

* 실습 파일 : 13-3.VolumeHMM.R
[실습] HMM에 의한 정보기반 거래자 상태 (비중) 추론 실습

Euro Currency (DEC16)

Volume based candle chart

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-9


13. 데이터 마이닝과 고빈도 매매 (HFT) : HMM 모형과 정보기반 거래자 상태

* 실습 파일 : 13-3.VolumeHMM.R
[실습] HMM에 의한 정보기반 거래자 상태 (비중) 추론 실습

 추론 결과 정보기반 거래자의 평균 참여 비중은 28.46% 였고, 현재 상태는 정보기반 거래자는 없고, 유동성 거래자만 남아있는 상태임.
 다시 정보기반 거래자가 참여할 확률은 29.0% (Transition matrix) 임.

정보기반 거래자의 상태

매수 강도가 주로 1.0을
초과하고 있음.

정보기반 거래자가
거래했던 시기들

유동성 거래자의 상태

매수 강도가 1.0을 중심으로


좌우 대칭에 가까운 모습

현재는 정보기반 거래자가 없는 상태임


R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-10
13. 데이터 마이닝과 고빈도 매매 (HFT) : 호가창의 정적 모형 (SOBI)

호가창의 정적 모형 - Static Order Book Imbalance (SOBI 전략)

 호가창의 호가 및 잔량이 균형 상태를 이루고 있으면 주가는 어느 한 방향으로 움직이지 못하고 횡보하는 상태가 됨.
 호가창의 호가 및 잔량 상태에 불균형이 발생하면 주가는 치우친 방향으로 움직임.
 호가창의 사건을 호가와 잔량으로만 설명하는 정적 모형 (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)이 없어야 함. 실제 시장에서는 허수 주문이 존재함.

(97*190 + 73*180 + 54*170 + 32*160 + 12*150) / (97 + 73 + 54 + 32 + 12)

(12*150 + 24 * 140) / (12 + 24)

AskVwap 과 BidVwap의 평균 가격

현재 주가 (중간가)는 VWAP의 중간가 보다 저평가 되어 있음.


~ 호가창의 불균형이 유지되는 동안 주가는 오를 가능성이 있음.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-11


13. 데이터 마이닝과 고빈도 매매 (HFT) : HMM 모형과 정보기반 거래자 상태

* 실습 파일 : 13-4.SOBI.R
[실습] SOBI 전략에 의한 (초) 단기 주가의 방향 예측 실습 – SVM으로 Static Order Book 데이터를 학습함.

 추론 결과 정보기반 거래자의 평균 참여 비중은 28.46% 였고, 현재 상태는 정보기반 거래자는 없고, 유동성 거래자만 남아있는 상태임.
 다시 정보기반 거래자가 참여할 확률은 29.0% (Transition matrix) 임.

약 15시간 동안 183,934 개의 호가 데이터가 발생하였음. 잔량 데이터 Ask 4번 호가에서 3개의 주문이 취소되었음.
Ask 1번으로 옮겨 졌을 수도 있음.

초 단기 주가 방향 예측의 정확도가 향상됨. (그러나 초단기 수익률은 대단히 작기 때문에 거래 비용을 고려하면 현실적으로 취하기 어려운 수익임.
HFT 는 매우 작은 수익을 빈번히 취하는 형태이므로 어떻게 이 수익을 취할 것인가는 별개의 문제임.

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-12


13. 데이터 마이닝과 고빈도 매매 (HFT) : HFT 거래 시스템 사례 (해외 선물)

[참고] 증권사 API 서비스를 이용한 HFT 사례 (해외 선물)

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R) 13-13


The End
감사합니다

R을 활용한 금융 데이터 마이닝 (Financial Data Mining using R)

You might also like