Neste artigo vamos continuar nosso estudo sobre algoritmos de Data Mining. Desta vez abordaremos o algoritmo que trabalha com a predição de valores em uma série temporal, o algoritmo de Time Series. Para a implementação do exemplo utilizarei o Analisys Services 2005, pois o algoritmo de Data Mining para séries temporais é uma das novas funcionalidades.

Antes de começar a verificar os detalhes do algoritmo, vamos entender como os dados estão organizados em uma série temporal. Geralmente os dados de uma série temporal são indexados por um período de tempo com intervalos fixos como, por exemplo, dados armazenados mensalmente ou diariamente. Em séries de dados temporais é comum encontrar valores que variam no tempo, sendo que a principal característica dos dados de uma série temporal na regularidade dos períodos.

Os dados de uma série temporal podem conter mais de um conjunto de dados. Por exemplo, uma única série temporal pode conter a quantidade de estoque de um produto e a quantidade vendida deste mesmo produto. Os algoritmos que trabalham com a predição de valores de séries temporais geralmente trabalham com apenas um conjunto de dados por vez. Já o algoritmo de séries temporais do Analisys Services 2005 permite que se trabalhe com mais de um conjunto de dados, de modo que a identificação de correlações entre estes conjuntos para ajudar na predição. Este tipo de correlação entre conjuntos de dados de uma série temporal é chamado de cross prediction.

Outro conceito importante sobre séries temporais é a sazonalidade. Este conceito pode ser definido da seguinte maneira: os dados de uma série temporal apresentam padrões de comportamento que se repetem durante os períodos da série. Um exemplo de sazonalidade pode ser o aumento de temperatura nos meses de verão em uma série temporal que armazena a temperatura mês a mês. O aumento de temperatura, neste caso, provavelmente vai se repetir em todos os meses de verão, independente do ano, demonstrando a sazonalidade do aumento da temperatura.

Os algoritmos de Data Mining para séries temporais são utilizados para prever novos dados a partir dos dados históricos da série. Ou seja, o algoritmo vai analisar a quantidade de dados existentes e fornecer uma possível previsão do que pode acontecer nos próximos períodos.

Esta previsão leva em consideração os dados ‘passados’ da série temporal, que se tornam seu conjunto de treinamento. A previsão fornecida pelos algoritmos de Data Mining para series temporais é baseada em regressões não-lineares. Cabe a usuário apenas fornecer a série temporal e especificar quais os períodos o algoritmo deve prever.

Um ponto importante a ser considerado é a qualidade da predição. Podemos utilizar este algoritmo para prever o valor da cotação de uma determinada empresa e ficarmos ricos? Infelizmente a resposta é não.

A qualidade da predição é um assunto delicado quando se fala em algoritmos para séries temporais. É importante lembrar que a previsão é apenas UMA possibilidade e que geralmente os algoritmos de séries temporais tendem a apresentar previsões razoáveis, previsões estas que levam em consideração diversos fatores como, por exemplo, a correlação com outras séries e a sazonalidade. Estes algoritmos trabalham com modelos para representar os dados e, em algumas situações, é mais recomendado elaborar um modelo específico para a série temporal do que utilizar um algoritmo de Data Mining. No exemplo da cotação faz mais sentido procurar um modelo específico para sistemas caóticos do que utilizar um algoritmo de Data Mining para séries temporais.

Apresentadas estas características, podemos começar a estudar o uso do algoritmo de séries temporais implementado no Analisys Services 2005. Este algoritmo é muito complexo e utiliza outro algoritmo de Data Mining, o algoritmo de árvores de decisão. Sem entrar em maiores detalhes do seu funcionamento, um exemplo simples será apresentado para demonstrar como este algoritmo pode ser empregado. Para os leitores que desejarem maiores informações, recomendo uma boa lida no artigo que explica os detalhes do funcionamento do algoritmo.

Prevendo a quantidade de venda de vinhos

A uma série temporal do nosso exemplo traz a quantidade de litros de um determinado tipo de vinho (em milhares de litros) vendidos mês a mês durante janeiro de 1950 e julho de 1995. Estes dados foram retirados da biblioteca de séries temporais criada por Rob Hyndman.

A série temporal utilizada neste exemplo contém apenas um conjunto de dados: a quantidade de litros de vinho vendida. A Figura 1 apresenta um gráfico com os valores da série temporal.

Gráfico com as vendas de milhares de litros de vinho por mês
Figura 1. Gráfico com as vendas de milhares de litros de vinho por mês

O objetivo do uso do algoritmo para séries temporais é prever qual será a quantidade de litros de vinho vendida nos últimos meses de 1995 e nos anos de 1996 e 1997. Apesar de contar com dados antigos, esta série temporal apresenta boas informações para um exemplo didático.

Vamos utilizar o algoritmo de séries temporais do Analisys Services 2005 para elaborar a previsão desejada. É importante lembrar que este algoritmo pode ser utilizado apenas nas edições Standard e Enterprise do SQL Server 2005 e que é necessária a instalação do SQL Server 2005 e do Analisys Services 2005 para o uso deste algoritmo.

O primeiro passo é armazenar os dados em uma tabela do SQL Server 2005. Vamos supor que todos os dados desta série temporal estão armazenados em uma tabela chamada TB_VENDAS_VINHO, que contém as colunas DATA e QTD_VENDIDA, e que esta tabela está armazenada no banco de dados chamado DB_TIME_SERIES. No final do artigo serão disponibilizados para download os dados e os scripts utilizados.

Com os dados já armazenados é necessário configurar o Analisys Services para que ele possa obter os dados por meio de um provider OLE DB. A Figura 2 apresenta a janela de configuração do Analisys Services, obtida a partir do clique com o botão direito do mouse no servidor Analisys Services dentro do Management Studio 2005.

Opções de configuração do Analisys Services
Figura 2. Opções de configuração do Analisys Services

Basta modificar os valores das opções em destaque na Figura 2 para que o Analisys Services possa acessar os dados por meio de um provider OLE DB. A opção AllowedProvidersInOpenRowset deve conter o valor [All] digitado na coluna Value e as demais opções devem conter o valor true. Não se esqueçam de selecionar a caixa de texto Show Advanced (All) Properties para poderem ter acesso a todas as propriedades.

Uma vez que o servidor esteja configurado podemos montar o Modelo de Mineração (Mining Model) que será utilizado pelo algoritmo de séries temporais. Para isso devemos criar uma nova Query DMX (Data Mining Extensions). Estas queries DMX são como a linguagem Transact-SQL, porém o DMX é uma linguagem específica para o uso de Data Mining no SQL Server 2005. Para iniciar uma nova query DMX basta clicar no menu File do Management Studio, escolher a opção New e a sub-opção New Analisys Services DMX Query. Em seguida é necessário fornecer um login e senha para o servidor Analisys Services. Cuidado com as informações fornecidas nesta tela de login: NÃO é um login/senha do SQL Server (engine) e sim um login/senha do Analisys Services!

O próximo passo para a execução do algoritmo é criar o modelo de mineração e importar os dados da tabela TB_VENDAS_VINHO. Para criar o modelo de mineração é necessário utilizar o comando CREATE MINING MODEL. Para importar os dados devemos utilizar a instrução INSERT INTO junto com a função OPENROWSET() que apontará para o servidor que contém o banco de dados TB_TIME_SERIES e a tabela TB_VENDAS_VINHO. Após a criação do modelo e a importação dos dados vamos indicar ao algoritmo que ele deve prever os próximos 29 valores da série temporal, referentes aos 5 próximos meses de 1995 e aos 24 valores dos meses de 1996 e 1997. A função PredictTimeSeries() será utilizada em uma instrução SELECT que acessa os dados do modelo de mineração. A Figura 3 apresenta as instruções para a criação do modelo, a importação dos dados e a query que faz a previsão dos novos valores.

Criação do modelo de mineração, importação dos dados e predição dos valores
Figura 3. Criação do modelo de mineração, importação dos dados e predição dos valores

O resultado da execução da instrução SELECT que faz a predição dos dados é apresentado como uma tabela interna e não como um conjunto de linhas de colunas. Se o desenvolvedor desejar trabalhar com a manipulação destes resultados em uma aplicação basta procurar na documentação do .NET Framework por classes e métodos relacionados ao uso dos algoritmos de Data Mining. Para mais informações sobre estes recursos eu recomendo uma boa lida na documentação do SQL Server 2005, o Books OnLine.

Inserindo no gráfico os dados gerados pela execução do algoritmo de série temporais pode-se fazer uma análise mais detalhada dos novos valores . A Figura 4 apresenta o gráfico contendo os novos valores para a quantidade de vinho vendida.

Vendas de milhares de litros de vinho por mês
Figura 4. Vendas de milhares de litros de vinho por mês

Analisando os dados previstos pelo algoritmo, podemos ver que a previsão segue o padrão de vendas histórico, onde há uma queda significativa nas vendas nos primeiros meses dos anos (Janeiro e Fevereiro) e o crescimento das vendas nos meses da metade do ano (Julho e Agosto). Para uma análise mais detalhada do motivo destas quedas e crescimentos é necessário contar com a ajuda de um especialista no domínio. Contudo, o algoritmo prevê uma continuidade deste comportamento. A previsão forneceu valores aproximados, mas não iguais. Outro detalhe que pode ser observado no gráfico é descontinuidade dos valores entre o que é histórico e o que é previsto. Esta descontinuidade foi deixada de propósito para separar os dados históricos dos dados que foram previstos pelo algoritmo.