Backtesting no Excel

O backtesting em modelação refere-se ao teste de um modelo preditivo utilizando dados históricos. O artigo trata da forma de o fazer no Microsoft Excel e não dos fundamentos teóricos do backtesting.

Como é que realizamos o backtesting? Rebobinamos o tempo até ao início da nossa série temporal, calibramos os parâmetros do modelo sujeito utilizando os dados disponíveis até essa instância de tempo e realizamos uma previsão (i.e., forecast) para o período seguinte. Em seguida, avançamos no tempo, recalibramos os valores dos parâmetros e fazemos outra projeção, e assim por diante. No final do nosso exercício, teremos um conjunto de previsões.

Note-se que, em cada ponto, a única suposição que fazemos é a definição geral do modelo (por exemplo, ARMA(1,1)). Ainda assim, calibraríamos os valores dos parâmetros usando apenas as informações disponíveis até aquele momento.

Esta abordagem é coerente com as práticas da vida real: primeiro, partimos de um modelo inicial e efectuamos uma previsão para o período seguinte. O tempo passa. Ocorreu um novo período, pelo que anexamos o novo ponto de dados ao conjunto de dados de entrada atual, recalibramos os parâmetros, efectuamos uma previsão para o período seguinte e repetimos.

O que é que isso me interessa?

Este artigo irá guiá-lo pelos passos necessários no Microsoft Excel para efetuar um backtesting. Utilizaremos principalmente duas poderosas funções incorporadas no Excel: INDEX(.) e SEQUENCE(.), e aproveitar o mecanismo de "Tabela de dados" do Excel para executar os diferentes cenários.

O backtesting gera o que teriam sido os erros de previsão, pelo que pode examinar de perto a série cronológica de erros de previsão para correlação em série, distribuições, outliers e outros, para compreender melhor a precisão e o desempenho do modelo.

Vamos lá!

Para esta questão, estamos a utilizar um conjunto de dados sintéticos estacionários com 200 observações. O conjunto de dados segue um processo ARMA(1,1), como se mostra de seguida.

Esta figura mostra o conjunto de dados sintéticos estacionários com 200 observações

O modelo proposto é o ARMA(1,1)

Esta figura mostra a tabela do modelo ARMA original

Procedimento de backtesting

Para cada iteração, temos de fazer o seguinte: (1) definir o conjunto de dados de entrada (como subconjunto da série temporal original), (2) usando o conjunto de dados em (1), calibrar os valores dos parâmetros do modelo ARMA(1,1), (3) Usando o modelo em (2) e o conjunto de dados em (1), calcular uma previsão para um período à frente.

1. Conjunto de dados de entrada

Para descrever completamente o conjunto de dados de entrada, necessitamos de dois índices: início e fim, depois, utilizando a função SEQUENCE(.), geramos um conjunto de índices entre o início e o fim. Agora, utilizamos a função INDEX(.) para devolver todos os intervalos de células no conjunto de dados original com índices de linha no conjunto de sequência.

Exemplo: 

O conjunto de dados de entrada original é \$A\$3:\$A\$202. Para selecionar as células entre os índices 1 e 50.

=INDEX(\$A\$3:\$A\$202,SEQUENCE(50,1,1,1),1)

Note-se que é possível definir um nome para os dados de entrada e referenciar esse nome em vez do intervalo de células de entrada.

2. Calibrar o modelo

Utilizaremos a função ARMA_PARAM(.) do NumXL e especificaremos o tipo de retorno=2 para os parâmetros calibrados.

Esta figura mostra o modelo ARMA calibrado

Note-se que ARMA_PARAM(.) devolve uma forma compacta dos parâmetros do modelo, pelo que, na figura acima, o processo ARMA é: \[\begin{array}{l} {X_t} = 1.485 + 0.401{X_{t - 1}} + 0.734{a_{t - 1}} + {a_t}\\ {a_t} \sim N(0,1.14) \end{array}\]

3. Previsão

Utilizando o ARMA_FORE(.), o conjunto de dados em (1) e os parâmetros do modelo calculados em 2, podemos calcular os valores de previsão para o período de 1 período seguinte.

Cálculo dos valores de previsão para 1 período de antecedência.

Note-se que gerei a previsão média, o erro de previsão e o intervalo de confiança.

Tabela de dados

Agora, acabámos de completar o cálculo de um passo. Utilizaremos a funcionalidade "Tabela de dados" do Excel para efetuar o mesmo cálculo para os restantes períodos até ao passo 200.

Em primeiro lugar, temos de preparar a tabela de saída:

Configurar uma tabela de dados

Agora, selecione toda a tabela de dados, começando com a linha de saída e incluindo a coluna de índice final, como mostrado abaixo:

Selecionar o intervalo de células da tabela de dados

Em seguida, vá para a barra de ferramentas "Dados" e localize o item "Tabela de dados" em "Cenário de variações hipotéticas".

Esta figura mostra o menu da tabela de dados do Excel

Aparece a caixa de diálogo "Tabela de dados". Localize a "célula de entrada da coluna", introduza uma referência ao índice "final" do conjunto de dados e clique no botão OK.

Esta figura mostra a caixa de diálogo Tabela de dados

A tabela de dados substituirá o valor do índice de chegada pelos valores da nossa tabela de dados e armazenará os resultados.

Esta figura mostra a saída da tabela de dados com erros reais

Note-se que "Std. Error" é gerado pela função ARMA_FORE(.), enquanto a coluna mais à direita ("Error") é o erro entre a previsão e o valor efetivamente realizado.

Análise de backtesting

Primeiro, vamos examinar visualmente os resultados das previsões do backtesting em relação aos valores efetivamente realizados e, em seguida, vamos aprofundar as propriedades estatísticas.

Esta figura mostra o gráfico de dados do backtesting previsão vs real

A área sombreada no gráfico corresponde ao intervalo de confiança de 95% da previsão.

O gráfico mostra um bom ajuste do modelo e, por conseguinte, a exatidão da previsão.

Em seguida, vamos examinar as propriedades estatísticas do erro de previsão (Previsão - Real) utilizando as estatísticas de resumo na barra de ferramentas NumXL.

Esta figura mostra as estatísticas resumidas dos erros de verificações a posteriori

O quadro das estatísticas sintéticas indica que o erro de previsão é um ruído gaussiano com média zero e desvio-padrão de 1,0

Esta figura mostra o Back-testing KDE vs. Gaussian

Em conclusão, o ARMA(1,1) é um modelo de previsão adequado para o conjunto de dados em causa.

O que é que se segue?

Neste momento, deve estar a questionar-se sobre os valores dos parâmetros do modelo? São estáveis?

Primeiro, construímos uma segunda "Tabela de dados", mas na linha de saída estão os valores dos parâmetros do modelo, e executamos a tabela de dados tal como fizemos anteriormente.

Esta figura mostra os parâmetros da tabela de dados

Agora, analise os valores de cada parâmetro como fizemos com o erro de previsão.

Backcasting ARMA (1,1) mu plotBackcasting ARMA (1,1) - sigma plot
Backcasting ARMA (1,1) -phi plotBackcasting ARMA (1,1) - theta plot

Os valores dos parâmetros (exceto theta) apresentam estabilidade e uma tendência para um valor constante. Os valores de theta (coeficiente MA) são mais voláteis, mas situam-se entre 0,6 e 0,9.

Em seguida, deveríamos examinar as estatísticas descritivas e as distribuições subjacentes dos valores dos parâmetros, mas deixaremos esse exercício para si.

Consultar a folha de cálculo em anexo para o conjunto de dados e a análise.

Conclusão

Este artigo demonstrou os passos para efetuar um backtesting para um modelo preditivo com um mínimo ou nenhum cálculo intermédio. Utilizámos as funções incorporadas do Excel: INDEX(.) e SEQUENCE(.) e aproveitámos a funcionalidade "Tabela de dados" para executar o cálculo para todos os índices predefinidos.

Depois de obtermos os resultados do backtesting, passamos à análise estatística e avaliamos as suas propriedades e distribuição para descobrir quaisquer enviesamentos (por exemplo, correlação serial) no resultado.

  Anexos

Comentários

iniciar sessão para comentar.

Este artigo foi útil?
7 de 8 acharam isto útil