1. 빅데이터 분석전문가 6기 4조
(주가변동 분석을 통한 주가예측)
조원: 권오성
곽재원
박상현
박용
신은비
멘토: 안정국
2. 결론
Target: KT
training data set: 2013.1.1~2013.12.31
test data set: 2014.1.1~2014.6.30
분석모델
종속변수(NEXTDAY)
• 3일 선형가중편균(WMA)에 대해 수급량을 고려한 5일 지수
가중평균(DEMA)의 Delta값의 3일 후의 값 예측
설명변수
• Close, High, ROC2, RSI2, RSI4, 2~4일 SMA 등
시뮬레이션 방법
종속변수의 부호에 따라 일괄 매수/매도 포지셔닝
성과
2
true
pred s b
s 46 9
b 15 67
$diag
[1] 0.8248175
$kappa
[1] 0.6419081
$rand
[1] 0.7088879
$crand
[1] 0.4176885
‘14.1.2 ‘14.6.30 ROC
주가 30,900 30,550 -1.1%
투자액 100만 107.6만 +7.6%
7. 분석 개념도(1)
프로젝트 시작 단계 – 모멘텀 장기투자 모형
7
개요
EGARCH
주요 경기
선행지수
(원자재, 환률 등)
KOSPI200
선행지수
SVM
KOSPI200
선행지수 식별
선행지수의 시계열 예측
/ KOSPI200 회귀식
KOSPI200(t)
=a+b1X1+…
REGRESSIO
N
KOSPI200
편입종목
미래 상승 국면
포착
투자 타겟 종목 선정
투자
타겟종목
KOSPI와
상관관계가 크고
AND
변동계수가 높음
AND
시계열 상승예상
AND
거래량 일정 이상
AND
1년 전 상승종목
재무정보 판별식
CORR
투자시점 예측
KRX
재무정보
ARIMA
SUMMARY
ARIMA
8. 모델 Pool
Simulation
Performanc
Analytics
매매전략
수립
Accuracy
Profit Rate
종목 A
분석 개념도(2)
프로젝트 실행 단계 – 기술적 단기투자 모형
8
개요
Quantmod
분석 Pool
- 종목 list
예측변수 선정/
파생변수 후보
생성
Box-Cox
선행지수의 시계열 예측
/ KOSPI200 회귀식
상관관계
시계열
다중회귀
RandomForest
종목별 모델 수립
투자 타겟 종목 선정
EGARCH
SVM
분석 data 수집/확보
FEEDBACK
설명변수 선정
Simulation
Performanc
Analytics
매매전략
수립
Accuracy
Profit Rate
종목 A
Simulation
Performanc
Analytics
매매전략
수립
Accuracy
Profit Rate
종목 A
종목
선택
실전
투자
모델 pool
9. SVM 소개
SVM(Supported Vector Machine)
판별, 회귀분석을 위한 학습모형으로서
범주를 판별하는 hyperplane을 찾아 분류하는 방법
특징
대용량 data와 많은 설명변수를 가지고도 빠르고 쉽게 적용이
가능하다.
R에서는 e1071, kerlab 등의 패키지를 이용할 수 있다.
9
개요
10. SVM의 주요 파라메터
kernel:
hyperplane이 일반적으로 선형이 아니므로,
변수변환을 실행해야 한다.
변수변화을 위한 함수라 생각하면 된다.
linear, polynomial, radial basis and sigmoid 등이
있다.
gamma: parameter needed for all types of
kernels except linear (default: 1/(data
dimension));
cost: cost of constraint violation (default: 1). This
is the ‘C’-constant of the regularization term in
the Lagrange formulation;
10
개요
12. RF의 주요 파라메터
Option을 결정하는 2 개의 random forest object
OOB
Proximity
Tree error 추정방법
training set에서 tree를 추출할 때, 1/3의 자료가 남는다.
tree가 forest에 포함될 때, 남는 자료인 OOB(out-of-bag)
data가 분류오차에 대한 비편향 추정에 사용된다.
또한 변수의 중요도를 추정하는 데도 활용된다.
Proximity
tree가 만들어지면, 모든 data가 각 tree에서 구동되며,
각 자료의 쌍에 대한 proximity가 계산된다.
• 이때, 동일 node에 속하는 자료 쌍의 proximity는 1이 증가한다.
• proximity는 tree의 수만큼 나뉘어 마침내 정규화된다.
이 proximity는 결측치, 이상치를 추정하는데 사용된다.
데이터에 대한 저차원의 뷰를 제공한다.
12
개요
13. 변수의 중요도
숲에 나무가 자라면,
OOB들은 각 나무의 정확도를 voting한다.
각 OOB에 대해 정확한 범주를 voting한 수에서 변수
m을 임의의 값으로 치환한 후, 정확한 범주로 voting한
수를 뺀다.
forest내의 모든 tree에 대해 적용할 때, 이 평균값이
변수 m에 대한 raw importance score이다.
각 tree간에 있어, 변수 m에 대한 값은 독립이라면,
표준 오차는 고전적인 방법으로 구할 수 있다.
많은 data set에 적용해 보았을 때, 상관관계는 매우
낮았다.
Z-score는, 표준오차로 나누어 표준화된 중요도이다.
local importance score
하나의 tree에 대해 OOB가 되는 다른 tree에 대해
score를 구한 값이다.
13
개요
14. 내용
원시 데이터
종목 list: 분석 종목 pool
주가data: OHLC time series
세력(외인/기관) 수급
거시경제 변수
파생 데이터: 설명변수
ROC(Volume; 거시경제변수)
SMA(Close) 등
Transformation
예측 변수
n.day간의 수익률
내일의 상승/하락 시그널
14
2. 데이터마트의 구성
원시 데이터
파생 데이터예측 변수
생성
모델
검증 투입
15. 원시data> 종목 list
종목 list
KOSPI200 편입 종목
증시 테마주
중소형 성장주 (자동차 부품주 등)
수집 방법
수동 수집
자동 수집(crawling)
data 구조
15
2. 데이터마트의 구성
변수명 name code
type char char
설명 종목명 종목코드
예 삼성전자 030200.KS
16. 원시data> 주가 data
주가 data
종목에 대한 OHLC 구조의 time series data
수집 방법 및 data 구조
data 구조
16
2. 데이터마트의 구성
수집방법 수동 R 패키지 crawling
관련 패키지 fImport quantmode quandl XML
데이터 소스 krx 야후금융 야후금융 야후금융 다음증권
데이터 형태 xls, csv xts, csv,
data.frame
xts, csv,
data.frame
xts, csv,
data.frame
data.frame
특징 +세력수
급 정보
Volume이 0인 data도 존재
OHLC의 data만 가능
+세력수급
+외인보유
변수명 Open High Low Close Volume Xvol Yvol
설명 시가 고가 저가 종가 매매량 관순매수 외순매수
17. 원시data> 거시경제 변수
개별 주가에 영향을 미치는 지수
환율, 유가, 반도체 지수 등
수집 방법 및 data 구조
data 구조
17
2. 데이터마트의 구성
수집방법 수동 R 패키지 crawling
관련 패키지 fImport quantmode quandl XML
데이터 소스 한국은행 야후금융 야후금융 야후금융 다음증권
데이터 형태 xls, csv xts, csv,
data.frame
xts, csv,
data.frame
xts, csv,
data.frame
data.frame
특징 일부 국내 증시 개장일과 unmatch 일부
변수명 FXrate sox wto
설명 환율 반도체 유가
18. 파생변수
설명변수의 후보: 약 40여개 점차 증가
주가 및 지수의 모멘텀, 이동평균
주가 수급량, 외인 보유율의 변동
위 두가지 변수들간의 조합 패턴
작성 방법
기술적 변수: quantmode, TTR을 활용한 함수 적용
패턴: 주식 관련 서적 활용한 수동 생성
내용
18
2. 데이터마트의 구성
변수명 ROC SMA MACD Stoch RSI ATR DEMA
설명 - - - - - - -
적용 종가,
지수
종가, 지
수 ROC
종가,
ROC
HLC 종가 HLC SMA
19. 예측변수
투자여부를 결정할 종속변수
주가 변동율을 예측할 연속형 변수
상승, 하락 signal을 가지는 범주형 변수
내용
내일의 ROC 예측 변수
일정기간(주/월) ROC의 합에 대한 예측 변수
19
2. 데이터마트의 구성
변수명 NEXTDAY T.sig
설명 ROC ROC 합
적용 미래 종가 SMA(미래 종가)
20. 분석 절차
20
3. 분석 방법
주가 data 수집
분석 종목 선정
외인/ 기관 data 수집 거시경제 지수 수집
예측 변수 생성 파생변수 생성
예측변수 선정
모델검증을 위한 목적에 적합한가?
- 투기 대상 종목은 회피
자료의 무결성 검증
탐색적 분석/ 이상치 여부
- 시계열, 산점도, 상관계수, 회귀
Random Forest를 이용한
중요 변수 선정
분석모델 선정: SVM
예측도가 가장 높다는 연구보고서
학습데이터, 시험데이터 작성
모델튜닝(커널, gamma, cost 등)
Accuracy, Precision, Specification
실제 주가의 변동량 대비 수익율
분석모델 선정
분석모델 구성
모델 평가
Feed-back
시뮬레이션
21. 데이터마트 생성 조건
Volume > 0 자료만 포함
거래 정지 또는 장이 열리지 않은 자료는 제외
거시경제변수
파생변수의 생성조건
• 장 개시일에 맞게 거시경제 파생변수를 생성
• 장 개시일과 무관하게 거시경제에 대한 파생변수를 생성
– 환률의 폭락이 토요일 관측되더라도, 이 값을 빼고 분석하는 것이
아니다.
생성된 파생변수는 장 개시일만 포함
• 장이 개시되지 않은 날이 길어질 경우 문제가 발생
– 거시경제변수 값 자체를 예측변수로 포함시켜 해결함
국내 주가와 거시경제지표의 장개시일이 틀림
향후 interleaving 방식으로 결합
결측치는 lag값으로 대치
21
3. 분석 방법
22. 파생변수의 생성
TTR 패키지에 있는 기술적분석 변수사용
용어설명:
http://www.fmlabs.com/reference/default.htm?url=
SMI.htm
분석설명:
http://www.fntec.com/uploads/board/uboard.asp?i
d=t3&u=0&u_no=438
함수설명: http://cran.r-
project.org/web/packages/TTR/TTR.pdf
• ATR(average ture range): 변덕지수, 변동이 많으면
높음. 단기지표
• SMI(Stochastics Momentum Index) ....
22
3. 분석 방법
27. 중요변수 선정
specifyModel로 quantmod object 생성
예측변수: T.ind(stock.data)
모든 변수를 포함
randomForest 모델 실행
training set
• 2002-01-02 ~ 2013-12-31(11년간)
importance 변수의 중요도 확인
중요도가 10 이상인 것만 변수에 포함하기로 결정
결과: Allimp.xls
주의
• 실행할 때마다, 기간설정에 따라, 중요도 값이 달라져
• 변수에 대한 변별력이 떨어짐.
• 최근 data로만 변수의 중요도를 설정하는 것이 필요
27
3. 분석 방법
29. 모델 비교 및 피드백
추가사항
volume/ volume rate
거시경제지표
개선할 내용
복합 파생변수를 생성
29
3. 분석 방법
초기 모델
true
pred down up
down 3 12
up 32 73
Volume 추가 모델
true
pred down up
down 0 5
up 35 80
거시경제 추가 모델(n.day=5)
true
pred down up
down 25 20
up 27 42
거시경제 추가 모델(n.day=5)
true
pred down up
down 20 21
up 32 41
cost = 10, gamma=0.1 cost = 11, gamma=0.08
accuracy = 58.8%
<<
accuracy = 63.3%
거시경제 추가 모델(n.day=10)
true
pred down up
down 4 9
up 38 58
cost = 88, gamma=0.03
accuracy = 56.9%
30. 모델의 재구성
설명변수의 축약
randomForest의 결과 중요도로 설명변수 압축
• myMACD(stock.data)는 처음 33개의 값이 결측치
specifyModel로 quantmod object 생성
trainset과 testset을 생성
trainset: (‘2001-01-02', ‘2008-12-31')
testset: ('2000-01-01', '2009-09-15‘)
30
3. 분석 방법
#modelData: Extract from a quantmod object the dataset created for use in
modelling
Tdata.train = as.data.frame(modelData(data.model,
data.window=c(‘2001-01-0 ', ‘2008-12-31')))
#data.window: a character vector of subset start and end dates to return
Tdata.eval = na.omit(as.data.frame(modelData(data.model,
data.window=c('2000-01-01', 2008-12-31'))))
Tform = as.formula('T.ind ~ .')
#xx(yy)형태 함수값이 xx.yy변수명명규칙으로 바뀜..
31. 예측: neural network
scale을 이용한 변수 표준화 ~ N(0,1)
nnet을 이용한 예측 모델링
trainset의 첫 1000개의 data
predict를 이용한 예측
nnet 모델로 trainset의 다음 1000개를 예측
예측값을 신호로 변환
신호
• preds > 0.1: buy
• 0.1 > preds > -0.1: hold
• preds < -0.1: sell
예측결과: 정확도 43%
시뮬레이션 결과: - 수익률
31
3. 분석 방법
> sigs.PR(sigs.nn, true.sigs)
precision recall
s 0.1870748 0.3125000
b 0.1531100 0.1987578
s+b 0.1729622 0.2581602
> table(sigs.nn, true.sigs)
true.sigs
sigs.nn s h b
s 55 182 57
h 81 344 72
b 40 137 32
32. 예측: neural network 2
모델의 변화
기존: T.ind를 예측하고, 예측 결과를 signal로 변환
변경: T.ind를 signal로 변환하고, signal을 예측
결과
precision은 다소 증가하였으나,
• 예상했던 것에 대한 실제(sell, buy)의 비율
recall은 오히려 떨어졌음
• 실제의 발생(sell, buy) 수에 대한 예상의 비율
32
3. 분석 방법
> sigs.PR(preds,
norm.data[1001:2000, 1])
precision recall
s 0.2620321 0.2784091
b 0.1909091 0.2608696
s+b 0.2088452 0.2522255
33. 예측: SVM1
모델구성
train: Tdata.train의 첫1000개
test: train다음의 첫1000개
SVM파라메터
커널: radial
gamma=.001
cost=100
결과
sell, buy이 예측률은 높다.
그러나 대부분을 hold로 예측
튜닝이 필요
33
3. 분석 방법
> sigs.PR(sigs.svm, true.sigs)
precision recall
s 0.5555556 0.08522727
b 0.3000000 0.07453416
s+b 0.4029851 0.08011869
> table(sigs.svm, true.sigs)
true.sigs
sigs.svm s h b
s 15 4 8
h 151 641 141
b 10 18 12
34. 예측: SVM2
모델변경
예측변수의 변경
• T.ind 대신에 signals를 사용
• s, b (hold를 제거)
train: 2013년도 trend가 유지되도록 최근만 활용
test: 2014년도
SVM 대신 ksvm을 사용
커널: radial
gamma=.01
cost=10
결과
약간의 개선
34
3. 분석 방법
35. 삼성전자
35
4. 분석 결과
(+11.10 %)
(+2.40 %)
pred
true diag : 0.638
s b kappa : 0.265
S 52 30 rand : 0.534
B 17 31 crand : 0.069
36. 현대중공업
pred
true diag : 0.469
s b kappa : 0.019
s 9 63 rand : 0.498
b 6 52 crand : -0.006
36
4. 분석 결과
(-28.62 %)
(-2.15%)
37. 아모레 퍼시픽
37
4. 분석결과
pred
true diag : 0.669
s b kappa : 0.280
s 67 7 rand : 0.553
B 36 20 crand : 0.104
(+49.04 %)
(+54.72 %)
38. KT
38
4. 분석결과
pred
true diag : 0.815
s b kappa : 0.627
s 46 9 rand : 0.696
b 15 60 crand : 0.393
(-0.81 %)
(+ 7.59 %)
39. 향후 계획
모델 개선
다양한 패턴을 반영하는 파생변수를 추가한다.
종목당 주기성을 파악하여, 시기별 대상 종목에
편입한다.
종목별/ 시기별 모델 library를 생성한다.
안정적인 모델 구성을 위한 기본적 분석에 충실
직접 투자
모델에 따른 직접 투자를 시도해 볼까?
39
4. 향후 계획