PedroBSB / mlRFinance

Machine Learning functions for Finance
11 stars 21 forks source link

Artigo: CAViaR estimation through Support Vector Regression. #7

Open marianamontenegro opened 7 years ago

marianamontenegro commented 7 years ago

O objetivo desse paper é comparar a estimação do CAViaR com o o CAViaR que pode ser obtido pelo SVR. Especificamente, comparar a perfomance de previsão do CAViaR diário entre os diferentes métodos existentes e o CAViaR estimado usando a função SVWQR que é uma Regressão Quantílica usando SVR. Podemos usar dados intraday de ativos usais ou ETF's.

marianamontenegro commented 7 years ago

Demandas

marianamontenegro commented 7 years ago

https://www.overleaf.com/7048858nbnbypvshjrn

PedroBSB commented 7 years ago

Oi @maisa3000 , @monteirogustavo e @matheusfacure , Segue um exemplo de como usar o SVR para Regressão Quantile no nosso pacote: Você precisa de um vetor de variável dependente (por exemplo o retorno de uma ação). Vamos chamar esse vetor de d:

d<-c(-0.5,-0.3,+0.7,-0.1)

Precisamos da ordem de cada elemento também (quem é o primeiro, segundo, etc...):

rank<-order(d)

Por fim, invocamos o SVR para regressão quantílica assim:

svm2<- CSVWQR(d,rank, A, 50,0.05 ,0.5, "Polynomial", c(2,1)) svm2

onde A é uma matriz com as variáveis independentes (por exemplo retorno no período t-1, t-2,...), custo C=50 (igual no SVR) , 0.05 é o quantil de interesse (5% por exemplo), 0.5 é o parâmetro gamma de suavização (olhem a metodologia que eu escrevi).

Os últimos dois são o nome do kernel e os parâmetros dele... Qualquer dúvida é só falar. Grande abraço. Pedro

PedroBSB commented 7 years ago

Para fazer a previsão basta usar o comando: PredictedCSVWQR(CSVWQR, X, Xprev) O primeiro argumento é o resultado da função (CSVWQR) que no exemplo anterior é svm2. O segundo argumento é a matriz de variáveis independentes (no exemplo é o objeto A) e Xprev é a matriz de variáveis independentes que se deseja fazer a previsão.

maisa3000 commented 7 years ago

Bom dia, Pedro! Engle2004 fez: "To implement our methodology on real data, a researcher needs to construct the historical series of portfolio returns and to choose a specification of the functional form of the quantile. We took a sample of 3,392 daily prices from Datastream for General Motors (GM), IBM, and the S&P 500, and computed the daily returns as 100 times the difference of the log of the prices. The samples range from April 7, 1986, to April 7, 1999. We used the first 2,892 observations to estimate the model and the last 500 for out-of-sample testing."

Peguei a base do Pedro Alexandre e pensei em nos basearmos no artigo de Engle. Pegarmos o intervalo de 1jan2000 até 25ago2016, e disso pegar 70% para avaliação e 30% para teste. Temos os dados da General Motors e da IBM. Pegamos os dessas duas mesmo e de alguma outra? Sugere outras empresas? Na base temos mais de 500. O que acha?

Att. Maísa Aniceto (61 81150802)

Em 25 de janeiro de 2017 10:39, Maísa maisa.c.aniceto@gmail.com escreveu:

Obrigada, Pedro!

Att. Maísa Aniceto (61 81150802)

Em 22 de janeiro de 2017 21:16, Pedro Albuquerque < notifications@github.com> escreveu:

Para fazer a previsão basta usar o comando: PredictedCSVWQR(CSVWQR, X, Xprev) O primeiro argumento é o resultado da função (CSVWQR) que no exemplo anterior é svm2. O segundo argumento é a matriz de variáveis independentes (no exemplo é o objeto A) e Xprev é a matriz de variáveis independentes que se deseja fazer a previsão.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/PedroBSB/mlRFinance/issues/7#issuecomment-274368416, or mute the thread https://github.com/notifications/unsubscribe-auth/AWAa9eKgR0CXhQUtrd4Pk64IDPQL0WIbks5rU-NXgaJpZM4LC6GV .

PedroBSB commented 7 years ago

Isso mesmo. Pode fazer assim... Na verdade o ideal é dividir em três partes (70,20 e 10) 70 de treinamento, 20 de validação e os últimos 10 aplicar algum teste de realidade como Diebold e Mariano ou White. Esses testes já estão implementados no pacote também e no wiki tem como usar.

monteirogustavo commented 7 years ago

Código para exemplo

#Habilita o pacote quantmod
library(quantmod)

#Cria um novo ambiente para armazenar os dados
stockData <- new.env()

#Especifica as datas de interesse
startDate = as.Date("2011-01-01")
endDate = as.Date("2011-12-31")

#Obtêm os dados do ativo PETR4 e PETR3
getSymbols("^BVSP", src="yahoo",from=startDate,to=endDate)

#Calcula o log-retorno
retorno<-na.omit(diff(log(Cl(BVSP))))

train <- as.numeric(retorno[1:180])
valid <- as.numeric(retorno[181:216])

#Cria os objetos
y<-train[2:length(train)]
X<-matrix(train[1:(length(train)-1)],ncol=1)

#SVR
# Identificar quais os melhores parâmetros
svm2<- CSVWQR(y, X, 1, 0.05, 1.0, "Gaussian", c(0.5))
svm2

plot(PredictedCSVWQR(svm2, X, X))
PredictedCSVWQR(svm2, X, X)