A análise numérica de dados é um vasto campo da matemática que tornou-se acessível ao público em geral com o barateamento dos computadores.
Livros como A Lógica do Mercado de Ações de John Allen Paulos, e o clássico Análise de Séries Temporais de Morettin & Toloi, ensinam, por exemplo, peripécias matemáticas que podem tanto ajudar à incautos investidores a como tentar prever e evitar as inconstâncias da bolsa de valores quanto a pequenas indústrias ajustarem sua linha de produção com base na previsão de vendas oriundas de tais técnicas.
A essa imensa literatura disponível, tanto física quanto no mundo virtual, soma-se os inúmeros softwares (muitos deles de custo inacessível a maioria dos mortais) que prometem, em rítmo de produção em massa, mastigar números e cuspir informações, estas últimas de valor inegavelmente estratégico para o incremento da eficiencia num mundo multi-conectado e competitivo de hoje.
Nesse contexto, dentro da minha modesta capacidade, tenho nas últimas semanas reservado tempo para estudar o método de programação genética linear como analisador numérico de dados. Como me deparei no programa que desenvolvi com alguns problemas relacionados a lenta convergência dos modelos encontrados para certas amostras (citado no post anterior), pensei em tentar caminhos alternativos para melhorar esse desempenho.
Com essa idéia na cabeça, comecei a desenvolver um novo programa que permite analisar dados numéricos a partir do método de wavelet (ou, em bom português: ondaletas).
O método de ondaletas surgiu como uma alternativa ao velho método da transformada de Fourier para análise de sinais, permitindo, dentre outras vantagens, uma análise temporal das informações escondidas na amostra estudada, coisa que o método de Fourier não permite pois este último analisa apenas as frequências alí contidas, e não o comportamento destas frequências ao longo do tempo.
Ondaletas são adotadas em diversos campos do saber, como a física (dinâmica molecular, astrofísica, geofísica, mecânica quântica), processamento de imagem (análise de EEG e DNA, clima, reconhecimento da fala e visão artificial), compressão de dados (o famoso JPEG 2000 utiliza essa técnica), em geral substituindo a já citada transformada de Fourier.
O algoritmo que utilizei no programa baseia-se no método discreto de Haars (matemático hungaro precursor desse método), que, a grosso modo funciona assim:
-
Lê-se dois itens da amostra;
-
Aplica-se a eles dois filtros de passagem (isto é, duas funções matemáticas pré-definidas, chamadas de low e high-pass);
-
Obtêm-se dois novos valores, onde cada qual é colocado em amostras diferentes, formando assim duas novas sequências da amostra original;
-
Volta-se ao item 1 até chegar ao final da amostra original.
Ao final do processo as duas novas amostras possuirão metade do tamanho da amostra original, sendo que representarão duas ondaletas dispersas ao longo do tempo, as quais estavam escondidas nos dados analisados.
Os filtros de passagem adotados para implementar o método discreto de Haars impressiona pela simplicidade. Estes foram:

Na imagem abaixo temos um exemplo do programa em funcionamento. Na tela, vemos o sinal de uma função senóide - gerada aleatóriamente – sendo quebrada em duas ondas de frequência menores.
Essa quebra pode ser feita em componentes ainda menores, até um limite imposto pelo tamanho da amostra estudada.
No programa inseri também uma função de forecast, permitindo inferir futuros valores que a amostra irá apresentar caso as ondaletas calculadas se mostrem corretas.
O passo seguinte será implementar uma regressão não linear como método adicional de forecast, bem como integrar esse programa ao de LGP que desenvolvi anteriormente e ver se com isso este último passa a gerar modelos mais precisos dos dados analisados.