지난 포스트들에서 다루었던 구조화방정식, 단변량, 다변량 회귀분석 등은 일종의 횡단면적 분석이다. 즉 시계열자료가 가지는 time lag는 고려하지 않고 변수들간의 인과관계를 규명하여 미분방정식을 수립하는 것이 목적이다. 물론 이러한 것도 주가를 예측할 수 있는 하나의 방법론으로 볼 수 있겠으나 문제는 자기자신의 변동에 대한 영향력은 간과할 위험이 크다고 볼 수 있다.(물론 무시할 수 있을 정도의 영향력이라면 상관없겠지만)
시차를 고려한 모델은 지난 포스트에서 다룬 2020.10.19 - [시계열모델링] - ARIMA 모형의 분석절차(확률적 모형분석) 외 ARCH, GARCH 등이 있을 수 있다. 그러나 이러한 모형은 단변량 시계열 모델 즉 오직 자기자신의 회귀에만(Auto Regressive) 영향을 받는다는 가정하에 만들어진 모델이다. 물론 2021.08.19 - [시계열모델링] - Multivariate GARCH(다변량 이분산 모형) 와 같이 다변량을 이용한 조건부이분산을 다룬 모델도 있긴 하다. 그러나 동 모델의 경우 인과관계분석, 변수들간의 우선순위, 영향력에 대해 다루기에는 다소 부족한 면이 있다.
이에 대한 대안으로 가장 적합한 모델이 바로 VAR(Vector Auto Regressive Model)이라고 볼 수 있다. 왜냐하면 VAR 모델의 경우 IR(Impulse Response : 충격반응)분석을 통해 변수들간의 영향력을 고려할 수 있고 그랜저인과과계(Granger Causality) 분석을 통해서 변수의 유의미성 및 우선순위를 파악할 수 있다. 또한 VAR모델의 가장 큰 장점은 이론적 기반이 다소 결여된 경우라도 모델의 설명력은 꽤나 의미있는 경우가 많기 때문에 실무적으로 꽤나 유용한 모델이라는 점이다.
우선 VAR 모형의 분석의 순서를 한번 체크해보자.
1. 예측하고자하는 목적변수를 선정한다. 예 : 환율, 주가지수, 주가, 원자재,,,등
2. 예측하고자하는 목적변수와 연관이 있을 것이라고 생각하는 설명변수들을 선정한다. 예 : 환율이 목적변수일 경우, 금리, 주가지수, 안전자산의 가격,,, 등
3. 설명변수와 목적변수들 간의 IR(충격반응함수)를 분석한다. 예를 든다면 금리가 1% 변한다면 환율에 미치는 영향력이 어느 정도인가? 혹은 금리가 1% 변할 때 환율이 얼만큼 변하고 환율이 1% 변할 때 금(GOLD)의 변동에는 얼마만큼의 충격이 미칠 것인가 등.
4. 만약 IR분석에서 변수들 모두가 서로가 서로에게 충격파가 전달이 되지 않고 특정 변수의 경우 어떤 하나에만 영향을 미치고 나머지에는 영향력이 없다고 한다면 SVAR(Structured VAR) 모델을 이용하여 해당 변수의 영향력에 대해 제약을 가해준다.
5. 그랜저 인과관계분석을 통해서 변수들간의 우선 순위를 정하여 최종적으로 VAR모델을 수립한다. 예를 들면 금리의 변화는 나머지 환율과 주가지수, 금가격의 변동을 그랜저 코즈하는가? if 그렇다 -> 금리를 최상위 변수로, else -> 나머지 변수들에 대해서도 그랜저 분석을 반복 ->.....-> 최종적으로 금리, 주가지수, 원자재, 환율의 순서로 모델을 설정한다.(예시일 뿐 반드시 그렇다는 것은 아니기에 오해없도록)
6. 최종적으로 수립된 VAR 모형의 잔차의 정규성 테스트를 수행하여 잔차에 이분산이 없는가를 고려한다. 만약 존재한다면 VAR + GARCH 모델을 이용하거나 혹은 time_lag 를 변화시키기 위해 모수의 추정방식을 SC, BIC, FPE 등으로 변경해가면서 수행을 해본다. -> 잔차의 이분산에 대한 검정이 유의미한 수준으로 수렴할 경우 모델을 채택
마지막으로는 예측오차의 분산분해를 수행하여 변수들의 상대적 중요성에 대해 최종적인 검토를 수행함으로써 모델의 예측 성능에 대한 성과를 극대화한다. 이 외에도 베이지안 VAR, Kalman Filter Var 등 응용모델은 매우 많으니 직접 참고해보면 좋을 듯 하다.
자 이론적 백그라운드는 이정도로 하고 언제나 그러하였듯 실전으로 돌입해보자. 구글(알파벳), 테슬라, 애플 등 미국시장에 상장된 나스닥, S&P100 에 포함된 종목들을 분석할 건데 이거 처음 단계부터 난관이다. 왜? 위의 1단계에서 목적변수는 정하였지만 2단계 설명변수를 선정하는 것부터 고민이다. 구글에 영향을 미칠만한 설명변수? 얼마나 많을까? 혹은 무엇이 중요한가. 또 이를 정했다고 하여도 모든 변수들에 대해 위 1~6단계를 거치는 것은 굉장히 많은 시간과 노력이 필요할 것이다.
포기할까? 그러지 말고 지난 포스트(2022.07.07 - [인과관계분석] - 구조방정식(SEM : Structural Equation Model) 모형 with R - 응용편2)에서 다루었던 경로분석 모델을 이용하여 개별 주식들과 유의미한 인과관계를 가진다고 볼 수 있는 변수들을 빠르게 추려본 뒤 해당 변수들을 이용해서 바로 VAR 모델을 적용해보자. 우선 항상 데이터를 수집하는 것이 우선순위이기에 아래의 소스코드를 복사하여 그대로 수행하면 Stock_data.csv 파일이 해당 경로에 생성된다. 귀찮은 사람은 첨부된 파일을 이용해도 좋다.
library(Quandl)
library(quantmod)
library(xts)
library(rstudioapi)
CURRENT_WORKING_DIR <- dirname(rstudioapi::getActiveDocumentContext()$path)
code<-c('YM=F', 'NQ=F', 'RTY=F', 'ZB=F', 'ZN=F', 'ZF=F', 'ZT=F', 'GC=F', 'SI=F',
'PL=F', 'HG=F', 'PA=F', 'CL=F', 'HO=F', 'NG=F', 'RB=F', 'ZC=F',
'ZO=F', 'KE=F', 'ZR=F', 'ZM=F', 'ZL=F', 'GF=F', 'HE=F', 'CC=F', 'KC=F',
'CT=F', 'LBS=F', 'SB=F',
'^BUK100P', '^VIX', '^FTSE', '^GDAXI', '^FCHI', '^STOXX50E', '^N100', '^BFX', 'IMOEX.ME', '^N225',
'^HSI', '000001.SS', '399001.SZ', '^STI', '^AXJO', '^AORD', '^BSESN', '^JKSE', '^KLSE', '^NZ50',
'^KS11', '^TWII', '^GSPTSE', '^BVSP', '^MXX',
'EURUSD=X', 'JPY=X', 'GBPUSD=X', 'AUDUSD=X', 'NZDUSD=X','CNY=X', 'HKD=X', 'SGD=X',
'INR=X', 'MXN=X', 'PHP=X','IDR=X', 'THB=X', 'MYR=X', 'ZAR=X', 'RUB=X',
'ATVI', 'ADBE', 'AMD', 'ALGN', 'GOOGL', 'GOOG', 'AMZN', 'AEP', 'AMGN', 'ADI', 'ANSS', 'AAPL', 'AMAT',
'ASML', 'TEAM', 'ADSK', 'ADP', 'BIDU', 'BIIB', 'BKNG', 'AVGO', 'CDNS', 'CDW', 'CERN', 'CHTR', 'CHKP',
'CTAS', 'CSCO', 'CTSH', 'CMCSA', 'CPRT', 'COST', 'CRWD', 'CSX', 'DXCM', 'DOCU', 'DLTR', 'EBAY', 'EA',
'EXC', 'FB', 'FAST', 'FISV', 'FOXA', 'FOX', 'GILD', 'HON', 'IDXX', 'ILMN', 'INCY', 'INTC', 'INTU',
'ISRG', 'JD', 'KDP', 'KLAC', 'KHC', 'LRCX', 'LULU', 'MAR', 'MRVL', 'MTCH', 'MELI', 'MCHP', 'MU',
'MSFT', 'MRNA', 'MDLZ', 'MNST', 'NTES', 'NFLX', 'NVDA', 'NXPI', 'ORLY', 'OKTA', 'PCAR', 'PAYX', 'PYPL',
'PTON', 'PEP', 'PDD', 'QCOM', 'REGN', 'ROST', 'SGEN', 'SIRI', 'SWKS', 'SPLK', 'SBUX', 'SNPS', 'TMUS',
'TSLA', 'TXN', 'TCOM', 'VRSN', 'VRSK', 'VRTX', 'WBA', 'WDAY', 'XEL', 'XLNX', 'ZM', 'ABBV', 'ABT',
'ACN', 'AIG', 'AMT', 'AXP', 'BA', 'BAC', 'BK', 'BLK', 'BMY', 'C', 'CAT', 'CL', 'COF', 'COP',
'CRM', 'CVS', 'CVX', 'DD', 'DHR', 'DIS', 'DOW', 'DUK', 'EMR', 'F', 'FDX', 'GD', 'GE', 'GM',
'GS', 'HD', 'IBM', 'JNJ', 'JPM', 'KO', 'LIN', 'LLY', 'LMT', 'LOW', 'MA', 'MCD', 'MDT', 'MET',
'MMM', 'MO', 'MRK', 'MS', 'NEE', 'NKE', 'ORCL', 'PFE', 'PG', 'PM', 'RTX', 'SO', 'SPG', 'T',
'TGT', 'TMO', 'UNH', 'UNP', 'UPS', 'USB', 'V', 'VZ', 'WFC', 'WMT', 'XOM')
stock <- getSymbols(Symbols='ES=F',
src = "yahoo",
from= "2019-08-27",
to = Sys.Date(), auto.assign = FALSE)
test_row<<-as.data.frame(index(stock[]))
u<-as.data.frame(stock)
test_row <- cbind(test_row,u[,6])
colnames(test_row)[1] <- 's_date'
colnames(test_row)[2] <- 'ES=F'
max_length<<-length(u[,6])
for(i in 1:length(code)){
tryCatch({
stock <- getSymbols(Symbols=code[i],
src = "yahoo",
from= "2019-08-27",
to = Sys.Date(), auto.assign = FALSE)
u<-as.data.frame(stock)
max_length<-length(test_row[,i])
stock_length <- length(u[,6])
if(stock_length > max_length){
start_num <- stock_length - max_length + 1
test_row <- cbind(test_row,u[start_num:stock_length,6])
}else if(stock_length < max_length){
null_num <- max_length - stock_length + 1
test_row <- cbind(test_row[null_num:max_length,],u[,6])
}else{
test_row <- cbind(test_row,u[,6])
}
colnames(test_row)[i+2] <- code[i]
print(test_row)
#Sys.sleep(1)
},finally=NULL)
}
#save excel file
test_row<-test_row[test_row$`CL=F`>0,]
test_row<-na.omit(test_row)
save_txt<-paste(CURRENT_WORKING_DIR,"/stock_data.csv",sep="")
write.table(test_row,save_txt,sep=",",row.names = FALSE)
아래의 소스코드를 간략히 설명하면 우선 글로벌하게 수집된 주가지수, 환율, 원자재, 금리 그리고 주식들의 시계열 데이터를 이용하여 경로분석을 수행 -> 99% 유의수준내에서 유의미한 직접변수(매개효과는 고려하지 않음)를 추려낸 뒤 해당 변수을 이용한 VAR 모델을 구축 -> 미래주가에 대한 예측을 수행하는데 이때 예측일 수는 MAX(해당 모형이 가지는 설명력 * 데이터의 갯수, 5거래일)로 설정했다. 미래에 대한 예측은 딱 모델의 설명력만큼만 신뢰하고 만약 그 신뢰도가 매우 작을 경우는 향후 5거래일 정도만 신뢰하겠다는 뜻이 된다.
library(lavaan)
library(MTS)
library(vars)
CURRENT_WORKING_DIR_S <- dirname(rstudioapi::getActiveDocumentContext()$path)
tCode<-c('ES=F', 'YM=F', 'NQ=F', 'RTY=F', 'ZB=F', 'ZN=F', 'ZF=F', 'ZT=F', 'GC=F', 'SI=F',
'PL=F', 'HG=F', 'PA=F', 'CL=F', 'HO=F', 'NG=F', 'RB=F', 'ZC=F',
'ZO=F', 'KE=F', 'ZR=F', 'ZM=F', 'ZL=F', 'GF=F', 'HE=F', 'CC=F', 'KC=F',
'CT=F', 'LBS=F', 'SB=F',
'^BUK100P', '^VIX', '^FTSE', '^GDAXI', '^FCHI', '^STOXX50E', '^N100', '^BFX', 'IMOEX.ME', '^N225',
'^HSI', '000001.SS', '399001.SZ', '^STI', '^AXJO', '^AORD', '^BSESN', '^JKSE', '^KLSE', '^NZ50',
'^KS11', '^TWII', '^GSPTSE', '^BVSP', '^MXX',
'EURUSD=X', 'JPY=X', 'GBPUSD=X', 'AUDUSD=X', 'NZDUSD=X','CNY=X', 'HKD=X', 'SGD=X',
'INR=X', 'MXN=X', 'PHP=X','IDR=X', 'THB=X', 'MYR=X', 'ZAR=X', 'RUB=X',
'ATVI', 'ADBE', 'AMD', 'ALGN', 'GOOGL', 'GOOG', 'AMZN', 'AEP', 'AMGN', 'ADI', 'ANSS', 'AAPL', 'AMAT',
'ASML', 'TEAM', 'ADSK', 'ADP', 'BIDU', 'BIIB', 'BKNG', 'AVGO', 'CDNS', 'CDW', 'CERN', 'CHTR', 'CHKP',
'CTAS', 'CSCO', 'CTSH', 'CMCSA', 'CPRT', 'COST', 'CRWD', 'CSX', 'DXCM', 'DOCU', 'DLTR', 'EBAY', 'EA',
'EXC', 'FB', 'FAST', 'FISV', 'FOXA', 'FOX', 'GILD', 'HON', 'IDXX', 'ILMN', 'INCY', 'INTC', 'INTU',
'ISRG', 'JD', 'KDP', 'KLAC', 'KHC', 'LRCX', 'LULU', 'MAR', 'MRVL', 'MTCH', 'MELI', 'MCHP', 'MU',
'MSFT', 'MRNA', 'MDLZ', 'MNST', 'NTES', 'NFLX', 'NVDA', 'NXPI', 'ORLY', 'OKTA', 'PCAR', 'PAYX', 'PYPL',
'PTON', 'PEP', 'PDD', 'QCOM', 'REGN', 'ROST', 'SGEN', 'SIRI', 'SWKS', 'SPLK', 'SBUX', 'SNPS', 'TMUS',
'TSLA', 'TXN', 'TCOM', 'VRSN', 'VRSK', 'VRTX', 'WBA', 'WDAY', 'XEL', 'XLNX', 'ZM', 'ABBV', 'ABT',
'ACN', 'AIG', 'AMT', 'AXP', 'BA', 'BAC', 'BK', 'BLK', 'BMY', 'C', 'CAT', 'CL', 'COF', 'COP',
'CRM', 'CVS', 'CVX', 'DD', 'DHR', 'DIS', 'DOW', 'DUK', 'EMR', 'F', 'FDX', 'GD', 'GE', 'GM',
'GS', 'HD', 'IBM', 'JNJ', 'JPM', 'KO', 'LIN', 'LLY', 'LMT', 'LOW', 'MA', 'MCD', 'MDT', 'MET',
'MMM', 'MO', 'MRK', 'MS', 'NEE', 'NKE', 'ORCL', 'PFE', 'PG', 'PM', 'RTX', 'SO', 'SPG', 'T',
'TGT', 'TMO', 'UNH', 'UNP', 'UPS', 'USB', 'V', 'VZ', 'WFC', 'WMT', 'XOM')
mCode<-c('ES=F', 'YM=F', 'NQ=F', 'RTY=F', 'ZB=F', 'ZN=F', 'ZF=F', 'ZT=F', 'GC=F', 'SI=F',
'PL=F', 'HG=F', 'PA=F', 'CL=F', 'HO=F', 'NG=F', 'RB=F', 'ZC=F',
'ZO=F', 'KE=F', 'ZR=F', 'ZM=F', 'ZL=F', 'GF=F', 'HE=F', 'CC=F', 'KC=F',
'CT=F', 'LBS=F', 'SB=F',
'^BUK100P', '^VIX', '^FTSE', '^GDAXI', '^FCHI', '^STOXX50E', '^N100', '^BFX', 'IMOEX.ME', '^N225',
'^HSI', 't000001.SS', 't399001.SZ', '^STI', '^AXJO', '^AORD', '^BSESN', '^JKSE', '^KLSE', '^NZ50',
'^KS11', '^TWII', '^GSPTSE', '^BVSP', '^MXX', '^MERV',
'EURUSD=X', 'JPY=X', 'GBPUSD=X', 'AUDUSD=X', 'NZDUSD=X','CNY=X', 'HKD=X', 'SGD=X',
'INR=X', 'MXN=X', 'PHP=X','IDR=X', 'THB=X', 'MYR=X', 'ZAR=X', 'RUB=X')
#S&P, NASDAQ stockCode
sCode<-c('ATVI', 'ADBE', 'AMD', 'ALGN', 'GOOGL', 'GOOG', 'AMZN', 'AEP', 'AMGN', 'ADI', 'ANSS', 'AAPL', 'AMAT',
'ASML', 'TEAM', 'ADSK', 'ADP', 'BIDU', 'BIIB', 'BKNG', 'AVGO', 'CDNS', 'CDW', 'CERN', 'CHTR', 'CHKP',
'CTAS', 'CSCO', 'CTSH', 'CMCSA', 'CPRT', 'COST', 'CRWD', 'CSX', 'DXCM', 'DOCU', 'DLTR', 'EBAY', 'EA',
'EXC', 'FB', 'FAST', 'FISV', 'FOXA', 'FOX', 'GILD', 'HON', 'IDXX', 'ILMN', 'INCY', 'INTC', 'INTU',
'ISRG', 'JD', 'KDP', 'KLAC', 'KHC', 'LRCX', 'LULU', 'MAR', 'MRVL', 'MTCH', 'MELI', 'MCHP', 'MU',
'MSFT', 'MRNA', 'MDLZ', 'MNST', 'NTES', 'NFLX', 'NVDA', 'NXPI', 'ORLY', 'OKTA', 'PCAR', 'PAYX', 'PYPL',
'PTON', 'PEP', 'PDD', 'QCOM', 'REGN', 'ROST', 'SGEN', 'SIRI', 'SWKS', 'SPLK', 'SBUX', 'SNPS', 'TMUS',
'TSLA', 'TXN', 'TCOM', 'VRSN', 'VRSK', 'VRTX', 'WBA', 'WDAY', 'XEL', 'XLNX', 'ZM', 'ABBV', 'ABT',
'ACN', 'AIG', 'AMT', 'AXP', 'BA', 'BAC', 'BK', 'BLK', 'BMY', 'C', 'CAT', 'CL', 'COF', 'COP',
'CRM', 'CVS', 'CVX', 'DD', 'DHR', 'DIS', 'DOW', 'DUK', 'EMR', 'F', 'FDX', 'GD', 'GE', 'GM',
'GS', 'HD', 'IBM', 'JNJ', 'JPM', 'KO', 'LIN', 'LLY', 'LMT', 'LOW', 'MA', 'MCD', 'MDT', 'MET',
'MMM', 'MO', 'MRK', 'MS', 'NEE', 'NKE', 'ORCL', 'PFE', 'PG', 'PM', 'RTX', 'SO', 'SPG', 'T',
'TGT', 'TMO', 'UNH', 'UNP', 'UPS', 'USB', 'V', 'VZ', 'WFC', 'WMT', 'XOM')
finalspec<-""
for(i in 1:length(mCode)){
data=gsub("[[:punct:]]", "", mCode[i])
modelspec<-as.character(mCode[i])
plustext<-paste(data,"+")
if(i==length(mCode)){
finalspec<-paste(finalspec,gsub("[[:punct:]]", "", data))
}else finalspec<-paste(finalspec,plustext)
}
########### read global time series data ###########
read_txt<-paste(CURRENT_WORKING_DIR_S,"/stock_data.csv",sep="")
in_rows<-read.csv(read_txt,header=TRUE, na.strings = "")
in_rows<-in_rows[2:nrow(in_rows),2:ncol(in_rows)]
diff_in_rows<<-diff(log(in_rows[,1:1]),1)
for(k in 2:ncol(in_rows)){
tryCatch({
diff_in_rows<-cbind(diff_in_rows,diff(log(in_rows[,k:k]),1))
print(k)
},error=function(e){
print(k)
})
}
diff_in_rows<-na.omit(diff_in_rows)
final_result<<-c("stock","fcst","loss","proft")
column_result<<-c(as.character(Sys.Date()))
for(a in 1:length(sCode)){
timev2<-cbind(diff_in_rows[,1:length(mCode)],diff_in_rows[,(72+a):(72+a)])
colnames(timev2)=gsub("[[:punct:]]", "", c(mCode,sCode[a]))
stock_<-paste(sCode[a],"~")
model<-""
model<-paste(stock_,finalspec)
print(c("calculate : ",sCode[a]))
tryCatch({
fit<-sem(model,data=timev2)
bbb<-parameterEstimates(fit)
bbb$pvalue[1:length(mCode)]
timev1<-diff_in_rows[,(72+a):(72+a)]
clnm<-gsub("[[:punct:]]", "", sCode[a])
for(k in 1:length(mCode)){
if(bbb$pvalue[k:k]<0.01){
clnm<-cbind(clnm,bbb$rhs[k])
timev1<-cbind(timev1,timev2[,bbb$rhs[k]])
}
}
total_len = length(timev1[,1])
t_var<-vars::VAR(as.data.frame(timev1),p=1,type="const",lag.max=5,ic="AIC")
t_sum<-summary(t_var)
m_perct<<-t_sum$varresult$timev1$adj.r.squared
f_period<<-min(5,max(ceiling(total_len*m_perct),1))
predict_stock<-predict(t_var, n.ahead = f_period, ci = pnorm(3))
myfcst_stock<<-predict_stock$fcst$timev1
fcstsum_d<-round(sum(myfcst_stock[1:f_period,1:1]),4)*100
fcstmin_d<-round(min(myfcst_stock[1:f_period,2:2]),4)*100
fcstmax_d<-round(max(myfcst_stock[1:f_period,3:3]),4)*100
stock_sum=cbind(sCode[a],fcstsum_d,fcstmin_d,fcstmax_d)
final_result<<-rbind(final_result,stock_sum)
column_result<<-cbind(column_result,fcstsum_d)
},warning=function(e){
stock_sum=cbind(sCode[a],0,0,0)
final_result<<-rbind(final_result,stock_sum)
column_result<<-cbind(column_result,0)
print(c("warning unpredictable stock: ",sCode[a]))
},error=function(e){
stock_sum=cbind(sCode[a],0,0,0)
final_result<<-rbind(final_result,stock_sum)
column_result<<-cbind(column_result,0)
print(c("error unpredictable stock: ",sCode[a]))
},finally=NULL)
}
print(final_result)
save_txt<-paste(CURRENT_WORKING_DIR_S,"/stock.csv",sep="")
write.table(final_result,save_txt,sep=","
,row.names = FALSE,col.names = FALSE)
프로그램을 수행한 경로에 위의 첨부파일과 같이 Stock.csv 파일이 저장이 되고 최종결과는 아래의 그림과 같이 표시된다.
순차적 정렬을 해서 보고 싶다면 첨부된 엑셀파일을 이용하면 된다. 우선 위의 분석결과는 MAR(매리어트호텔), INCY(인사이트 : 제약회사), ADBE(어도비), QCOM(퀄컴) 등이 향후 상승 가능성이 높게 나왔다. 현재 달러가 강세라는 점은 내수시장에 그렇게 좋지 않을 것으로 예상이 되지만 의아하게도 매리어트호텔의 예상 등락률이 가장 높에 나왔다는 점은 한번 의구심을 가져볼만 하다. 제약회사는 켄타우로스 변종 코로나 바이러스가 다시 유행하니 그럴싸한 인과관계가 보이는 것으로 판단이 되고 어도비의 경우 애널리스트의 실적 부진 예측 보고서 이후 주가 급락 -> 과매도로 인한 기술적 반등, 퀄컴의 경우 삼전의 차기 플래그쉽 스마트폰 프로세서의 과점적 공급전망 등으로 그럴싸한 인과관계를 가질 수 있다고 보인다.
그 외 나머지 종목들에 대해서도 계량적 분석 이후 이 결과가 과연 신뢰할 만 것인가에 대해 정성적 자료들을 검토해볼 필요가 있다. 공급계약, 글로벌 경제현황, 전망 등을 통해서 계량분석 결과에 대한 근거를 찾으면 그나마 예측 결과에 대해 신뢰할 수 있는 이유가 한 가지는 더 생기는 셈이니까. 직접 해보면 많은 도움이 될 것이라 판단하며 이번 포스트를 마친다.
매일 업데이트 되는 경제분석 자료가 궁금하다면 무료채널 입장!
'시계열모델링' 카테고리의 다른 글
[데이터로 보는 미래] 경제 순환을 반영한 삼성전자 주가 예측, Prophet 모델 활용! (0) | 2024.04.11 |
---|---|
국면전환(Regime-Switching)모형을 이용한 코스피추세 예측 (0) | 2021.08.20 |
Multivariate GARCH(다변량 이분산 모형) (0) | 2021.08.19 |
다이나믹 모델링 : 칼만필터(Kalman Filter)를 이용한 주가예측 (2) | 2021.06.28 |
확률 미분방정식(SDE)을 이용한 주가 시뮬레이션 (0) | 2021.06.22 |
댓글