disciplina: extracção e conhecimento de dados i · 2018-04-12 · 3 introdução e objectivo do...

27
1 Mestrado em Análise de Dados e Sistemas de Apoio à Decisão Disciplina: Extracção e conhecimento de dados I Trabalho nº4: Séries Temporais Data: 26 de Fevereiro de 2005 Aluno: Elisabeth Silva Fernandes Nº 050414012

Upload: others

Post on 23-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

1

Mestrado em Análise de Dados e Sistemas de Apoio à Decisão

Disciplina: Extracção e conhecimento de dados I

Trabalho nº4: Séries Temporais

Data: 26 de Fevereiro de 2005

Aluno: Elisabeth Silva Fernandes

Nº 050414012

Page 2: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

2

Índice

Introdução e objectivo do trabalho………………………………………………………..3

Análise preliminar dos dados…………………………………………………………..4

Modelos para séries não estacionárias………………………………………………..12

Modelo não-

lineares…………………………………………………………………...14

Redes Neuronais……………………………………………………………………….19

Projection pursuit

regression………………………………………………………….21

Modelo de

Kernel………………………………………………………………………22

Conclusão………………………………………………………………………………....2

5

Page 3: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

3

Introdução e objectivo do trabalho

No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta a realização

de um trabalho cujo objectivo é o de tratar uma série temporal de um activo financeiro,

utilizando métodos fornecidos nas aulas, e prever os valores de fecho do índice S&P

500, nos dias 27, 28 de Fevereiro e 1, 2 e 3 de Março.

Page 4: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

4

Análise preliminar dos dados

No gráfico seguinte é apresentada a evolução da séries temporal do valor do fecho do

S&P 500 desde 3 de Janeiro de 1950. Pode observar-se mudanças repentinas do valor

de fecho deste índice, pode ainda constatar-se que a variância evolui ao longo do

tempo (volatilidade) e que existe irreversibilidade no tempo.

0 2000 4000 6000 8000 10000 12000 14000

05

00

10

00

15

00

Index

da

do

s

Figura 1

Uma vez que esta série exibe comportamentos incompatíveis com a formulação de

um processo linear apresento na secção seguinte modelos não-lineares.

Page 5: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

5

Um primeiro problema que se coloca é a escolha dos dados a usar para obtenção dos

modelos. O que a literatura indica é que deve usar-se um conjunto de dados que

tenham um comportamento parecido com a totalidade da série, logo decidi utilizar

aproximadamente os últimos 1000 registos (que corresponde, aproximadamente, à

zona dentro do círculo azul). Parece-me que estes dados têm um comportamento

parecido com o da série completa.

Os valores de fecho deste índice que vão ser considerados são de 6 de Março de 2002

até 23 de Fevereiro de 2006.

data<-read.table('C:/Documents and Settings/Utilizador/Ambiente de

trabalho/trabalho4-series/treino.txt',header=TRUE)

É possível observar o comportamento desta série na figura seguinte:

0 200 400 600 800 1000

80

09

00

10

00

11

00

12

00

13

00

Index

fe

ch

o

Figura 2

Mais uma vez se verificam alterações repentinas nos valores, volatilidade e

irreversibilidade no tempo. Verifica-se ainda alguma tendência.

Algumas estatísticas descritivas dos valores de fecho deste índice:

Page 6: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

6

Min. 1st Qu. Median Mean 3rd Qu. Max.

776.8 983.5 1111.0 1079.0 1185.0 1294.0

O método das diferenças é uma operação simples que transforma uma série não-

estacionária numa série estacionária.

> h.returns<-function(x,h=1){

diff(x,lag=h)/x[1:(length(x)-h)]

}

> h.returns(data[,’Close’])

> plot(h.returns(data[,’Close’],h=1))

0 200 400 600 800 1000

-0

.0

4-0

.0

20

.0

00

.0

20

.0

40

.0

6

Index

h.re

tu

rn

s(d

ad

os, h

=

1

)

Figura 3- Série estacionário

A figura 4 revela uma distribuição simétrica dos valores, com clara presença de

eventos raros o que é de esperar visto que estamos a tratar uma série económica.

Page 7: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

7

-0.04

-0.02

0.00

0.02

0.04

0.06

Figura 4

Uma outra análise que pode ser feita é comparar o histograma da nova série com a

curva gaussiana.

hist(h.returns(data[,’Close’],h=1),prob=T)

lines(density(h.returns(data[,’Close’],h=1)))

Histogram of h.returns(dados, h = 1)

h.returns(dados, h = 1)

De

nsity

-0.04 -0.02 0.00 0.02 0.04 0.06

01

02

03

04

0

Figura 5

Se estimarmos os parâmetros da normal e se sobrepuser a curva ao gráfico anterior,

fazendo:

Page 8: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

8

x<-seq(-0.06,0.06,length=100)

y<-

dnorm(x,mean(h.returns(data[,’Close’],h=1)),sd(h.returns(data[,’Clo

se’],h=1)))

lines(x,y,col="red")

Obtenho o seguinte gráfico:

Histogram of h.returns(dados, h = 1)

h.returns(dados, h = 1)

De

nsity

-0.04 -0.02 0.00 0.02 0.04 0.06

01

02

03

04

0

Verifica-se que o histograma se aproxima muito da distribuição normal.

A função de Autocorrelação fornece-nos uma forma de ver o quanto os valores da

série temporal estão correlacionados com os valores anteriores.

> FECHO<-h.returns(data[,’Close’],h=1)

> acf(FECHO)

Page 9: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

9

0 5 10 15 20 25 30

0.0

0.2

0.4

0.6

0.8

1.0

Lag

AC

F

Series FECHO

Figura 6: h=1

Pela análise deste gráfico podemos concluir que existe alguns valores com correlação

significativa.

0 5 10 15 20 25 30

0.0

0.2

0.4

0.6

0.8

1.0

Lag

AC

F

Series FECHO

Figura 7: h=5

Autocorrelações parciais

pacf(fecho)

Page 10: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

10

0 5 10 15 20 25 30

0.0

0.2

0.4

0.6

0.8

1.0

Lag

Pa

rtia

l A

CF

Series fecho

Filtro Linear – Médias móveis

O termo média móvel é utilizado porque à medida que a próxima observação se torna

disponível, a média das observações é recalculada, incluindo essa observação no conjunto

de observações e desprezando a observação mais antiga.

plot(data[,’Close’])

fecho.1<-filter(data[,’Close’],filter=rep(1/30,30))

lines(fecho.1,col="red")

fecho.2<-filter(data[,’Close’],filter=rep(1/90,90))

lines(fecho.2,col="blue")

Page 11: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

11

0 2 0 0 4 0 0 6 0 0 8 0 0 1 0 0 0

80

09

00

10

00

11

00

12

00

13

00

Ind e xfe

ch

o

Figura 8

0 200 400 600 800 1000

80

09

00

10

00

11

00

12

00

13

00

Index

fe

ch

o

Figura 9

O filtro que melhor se ajusta aos dados é o filtro 1.

Page 12: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

12

Modelos para séries não estacionárias

Nesta secção apresento um modelo obtido para esta série temporal usando modelos

ARIMA(p,d,q).

Uma vez que este tipo de séries não é estacionária faz-se a transformação log à série

e esta passa a ser estacionária. Após esta tranformação já se pode utilizar um modelo

ARIMA(p,d,q).

data<-read.table('C:/Documents and Settings/Utilizador/Ambiente de

trabalho/trabalho4-series/treino.txt',header=TRUE)

> SPteste<-data[999:1002,5]

O modelo que obtive é um ARIMA(1,0,2) e os passos segui para calcular o erro

quadrático médio das previsões da semana de 22 de Fevereiro até 24 de Fevereiro

foram os seguintes:

ARIMA<-arima0(log(data[,5]), order = c(1,0,2))

tsdiag(ARIMA, gof.lag=20)

Pelo teste de Ljung-Box-Pierce posso afirmar que este modelo se adequa à série em

estudo.

Page 13: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

13

Standardized Residuals

Time

0 200 400 600 800 1000

-4

02

40 5 10 15 20 25 30

0.0

0.4

0.8

Lag

AC

F

ACF of Residuals

5 10 15 20

0.0

0.4

0.8

p values for Ljung-Box statistic

lag

p value

predict(arima0(log(SPtreino[,5]), order = c(1,0,2)), n.ahead = 5)

A previsão para a semana de teste é a seguinte:

pred<-exp(c(7.159758, 7.159168 ,7.158585, 7.158003))

> pred

[1] 1286.600 1285.841 1285.091 1284.344

sum((pred-SPteste[,5])^2)/4

[1] 23.13420

Page 14: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

14

Modelo não-lineares

Modelo ARCH- Autocoregressive Conditionally heteroscedastic

O primeiro modelo que fornece uma forma de modelar a volatilidade é o modelo

ARCH proposto por Engle em 1982.

Este modelo assume que a variância dependo dos quadrados dos erros passados, o

modelo é da forma:

ttty εσ=

2

110

2

−+=

ttyαασ

onde t

ε é ruído branco e 01

>α .

O modelo mais simples é o ARCH(1) que é um ruido branco com variância

condicional não constante, e essa variância condicional depende do valor anterior.

Neste caso, o modelo pode ser reescrito como um AR(1) estacionário para 2

ty com

erros não normais que têm média zero e variância não constante.

Page 15: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

15

Se o processo ARCH(1) for estacionário pode mostrar-se que o coeficiente de curtose

é dado por

( )

2

2

31

13

α

ε

=k

que é sempre maior do que 3 ( a curtode da distribuição normal). Os processos

ARCH(1) têm caudas mais pesadas do que a distribuição normal e são portanto

adequados para modelar séries temporais com esta característica.

O modelo ARCH(m) é dado por:

22

110

2

...mtmtt

yy−−

+++= ααασ

Identificação

A variância condicional dos erros comporta-se como um processo autorregressivo,

logo deve esperar-se que os resíduos de um modelo ARMA ajustado a uma série

temporal observada também sigam este padrão característico. Se o modelo ajustado

for adequado então a FAC e a FACP dos resíduos devem indicar um processo

puramente aleatório, no entanto se a FAC dos quadrados dos resíduos tiver um

decaimento característico de uma autorregressão isto é uma indicação de que o

modelo ARCH pode ser apropriado. A ordem m do modelo pode ser identificada

através da FACP dos quadrados dos resíduos.

Modelos GARCH

Uma generalização dos modelos ARCH consiste em assumir que a variância

condicional se comporta como um processo ARMA, isto é, depende também dos seus

valores passados.

O modelo GARCH(m,r) é da forma:

ttty εσ=

∑ ∑= =

−−++=

m

j

r

j

jtjjtjty

1 1

22

0

2

σβαασ

Page 16: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

16

Aplicação na série temporal de fecho do S&P500

O conjunto de dados utilizado para obter este modelo são os valores de 6 de

Março de 2002 até 17 de Fevereiro de 2006.

> data<-read.table('C:/Documents and Settings/Utilizador/Ambiente de

trabalho/trabalho4-series/treino.txt',header=TRUE)

> SPtreino1<- data[1:998,5]

> SPteste<-data[999:1002,5]

Pelas consultas feitas em bibliografia da área conclui que um modelo que se

adequa a esta série temporal é o seguinte:

GARCH(1,1)

2

11

2

110

2

−−++=

ttty σβαασ

G<-garch(x=diff(SPtreino1),c(1,1))

plot(G)

O modelo obtido foi o seguinte:

Page 17: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

17

Coefficient(s):

a0 a1 b1

0.64616 0.03839 0.95440

Aplicando o Garch à série directamente obtenho o seguinte modelo:

Coefficient(s):

a0 a1 b1

1.477e+04 9.851e-01 2.095e-03

Valores previstos do dia 21 de Fevereiro até 24 de Fevereiro.

1284.705

1280.547

1290.053

1285.256

mse<-(sum((prev-SPteste[,5])^2)/4)

MSE=43.07905

Figura 10 – Gráfico da série suavizada e dos

resíduos.

Figura 11- Histograma da série e dos resíduos.

Page 18: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

18

Figura 12 – Gráfico dos quartis.Figura 13 – FAC da série e dos resíduos

Pelos gráficos anteriores é possível verificar que este método modela razoavelmente

a série em estudo, uma vez que não é rejeitada a normalidade dos resíduos e a FAC

dos resíduos a partir do primeiro lag tem todos os valores dentro das bandas de

confiança.

Efectuei outras experiências mas pareceu-me ser este o melhor modelo de entre este

tipo de modelos. De seguida apresento um dos modelos que também me pareceu

razoável: ARCH(2)

A<-garch(diff(SPtreino1), order = c(0,2))

Como é possível observar nos gráficos seguintes os Q-Qplot aproximam-se de

uma recta e o histograma dos resíduos parece aproximar-se de uma Normal, logo este

modelo ajusta-se razoavelmente bem aos dados.

Page 19: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

19

Figura 14

Figura 15

Figura 16

Figura 17

Previsões para os dias 21 de Fevereiro até 24 de Fevereiro:

1284.807

1280.736

1289.650

1285.474

MSE= 41.17191

O modelo que tem maior MSE é o Garch(1,1), logo de entre estes escolheria o

Arch(2) para prever valores futuros.

Redes Neuronais

Page 20: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

20

Uma vez que as séries económicas são (geralmente) não lineares e como as

redes neuronais lidam facilmente com este tipo de casos, a aplicação de Redes

Neuronais para prever valores futuros deste tipo de séries tem sido muito usada.

O conjunto de dados utilizado para obter a rede neuronal, SPtreino , são os

valores de 6 de Março de 2002 até 17 de Fevereiro de 2006.

Os valores utilizados para teste, SPteste, são os valores de 20 de Fevereiro até 24 de

Fevereiro.

SPtreino<-data[1:998,]

SPteste<-data[999:1002,]

O objectivo neste método é obter o melhor modelo de Rede Neuronal, para tal

utilizamos as primeiras 250 observações para obter as diferentes variantes do

modelo, e as restantes são usadas para decidir qual é o “melhor” modelo. Finalmente,

este “melhor” modelo será novamente obtido mas com todos os dados (SPtreino).

train<-data[1:250,]

sel<-data[251:500,]

test<-data[751:1002,]

train.best<-data

library(nnet)

alt<-expand.grid(size=c(10,20),decay=c(0.01,0.001),theil=0)

prevs.ant<-c(train[nrow(train),"Close"],sel[1:(nrow(sel)-1),"Close"])

for(a in 1:nrow(alt)){

nn<-

nnet(Close~.,train[,-1],size=alt[a,"size"],decay=alt[a,"dec

ay"],maxit=1000,linout=T)

prevs<-predict(nn,sel)

alt[a,"theil"]<-sqrt(sum(((sel[,"Close"]-

prevs)/prevs.ant)^2)/sum(((sel[,"Close"]-prevs.ant)/prevs.ant)^2))

}

best<-which.min(alt[,"theil"])

Page 21: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

21

A melhor rede neuronal é a que tiver menor valor da estatística de Theil.

nn<-

nnet(Close~.,data=train.best[,-1],size=alt[best,"size"],decay=alt

[best,"decay"],maxit=1000,linout=T)

prevs<-predict(nn,test)

Previsões para os valores da semana de 21 de Fevereiro até 24 de Fevereiro.

1285.3627

1290.4732

1287.4952

1288.3014

MSE= 2.907016

Page 22: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

22

Projection pursuit regression

O projection Pursuit é um tipo de modelo aditivo com a forma:

= ∑∑==

a

j

iij

F

i

iXfxr

1

,

1

)( α

Isto é, trata-se da soma de funções de combinações lineares dos atributos.

Os passos seguidos para a obtenção deste modelo são os seguintes:

library(modreg)

pp<-ppr(V5~.,data=SPtreino[,-1],nterms=5)

pp.preds<-predict(pp,SPteste)

As previsões obtidas para a semana de teste são:

pp.preds

1288.697

1294.194

1289.575

1289.561

mse<-sum((SPteste[,5]-pp.preds)^2)/4

> mse

[1] 9.410206

Page 23: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

23

Modelo de Kernel

Um outro modelo que decide experimentar é o modelo de Regressão de Kernel, este

modelo faz uma média pesada à volta da vizinhança de cada caso de teste.

Uma função implementada no R para este método é kernapply(), que usei, para ver

o que se obtêm apresento os seguintes gráficos e experiências.

k1 <- kernel("daniell", 15)

x1 <- kernapply(data[,5], k1)

plot(data[,5])

lines(x1, col = "red")

0 200 400 600 800 1000

80

09

00

10

00

11

00

12

00

13

00

Index

da

ta

[, 5

]

Figura 18

Usando o seguinte valor kd para o parâmetro da dimensão de kernel, o modelo obtido

ajusta-se melhor à série em estudo.

kd <- kernel("daniell", c(3,3))

x1 <- kernapply(data[,5], kd)

Page 24: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

24

0 200 400 600 800 1000

80

09

00

10

00

11

00

12

00

13

00

Index

da

ta

[, 5

]

Figura 19

Uma outra função implementada no R é a função loess()no quadro seguinte

apresento os passos efectuados:

Usando 30% da amostra para largura da banda.

> ll0<-loess(Close~.,data=SPtreino[,2:5],degree=0,span=0.3)

> preds.ll0<-predict(ll0,SPteste[,2:5])

> ll1<-loess(Close ~.,data=SPtreino[,2:5],degree=1,span=0.3)

> preds.ll1<-predict(ll1,SPteste[,2:5])

> ll2<-loess(Close ~.,data=SPtreino[,2:5],degree=2,span=0.3)

> preds.ll2<-predict(ll2,SPteste[,2:5])

preds.ll0

[1] 1242.691 1242.525 1243.093 1242.873

> preds.ll1

[1] 1286.186 1292.139 1287.472 1289.680

> preds.ll2

[1] 1286.342 1291.332 1289.350 1289.880

col="red",ylim=range(c(preds.ll1,preds.ll2),na.rm=T))

Cálculo do erro quadrático médio:

> mes.ll0<-mean((preds.ll0-SPteste[,5])^2)

> mes.ll1<-mean((preds.ll1-SPteste[,5])^2)

> mes.ll2<-mean((preds.ll2-SPteste[,5])^2)

> mes.ll0

[1] 2076.796

Page 25: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

25

> mes.ll1

[1] 2.600855

> mes.ll2

[1] 3.848167

Page 26: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

26

Conclusão

Após experimentar os vários métodos, apresentados anteriormente, os dois modelos

que melhor se ajustam à série do fecho do índice S&P500 são:

- Rede neuronal para size=20 e decay=0.001 em que o MSE foi de 2.9.

- Modelo de Kernel para um polinómio de grau 1 em que o MSE foi de 2.6.

Previsão dos valores de fecho do índice S&P500 para os dias 27, 28 de Fevereiro,

1,2 e 3 de Março

27-Fev- 1288.818

28-Fev-1288.278

1-Mar- 1287.755

2-Mar- 1287.233

3-Mar-1286.712

Page 27: Disciplina: Extracção e conhecimento de dados I · 2018-04-12 · 3 Introdução e objectivo do trabalho No âmbito da disciplina de Extracção e Conhecimento de Dados foi proposta

27

Bibliografia

[1]-“Data Mining with R”- Luis Torgo;

[2]-“Time Series Analysis and Its Applications”- Robert H. Shumway- Springer;

[3]-“A Course in Time Series Analysis”- Daniel Peña- Wiley-Interscience

Publication;

[4]-“Non-linear Time Series”- Howell Tong- Oxford Science Publications.