Todos nós percebemos o quão importante é poder analisar os dados que coletamos e extrair informações úteis deles. O 2UDA é um passo nessa direção e visa unir armazenamento e gerenciamento de dados (PostgreSQL) com mineração e análise de dados (Orange).
pgpredict é um projeto em desenvolvimento e pretende ser o próximo passo que fará com que tudo se complete. Começando com os dados (no nosso caso armazenados em um banco de dados), primeiro precisamos dar acesso a eles para especialistas que possam analisá-los com ferramentas e métodos especializados. Mas depois, quando, por exemplo, eles treinam um modelo preditivo que pode resolver algo importante e benéfico para nós, eles precisam ser capazes de transmitir esses resultados de volta para que possamos explorá-los. É exatamente isso que o pgpredict tenta resolver – implantando modelos preditivos diretamente no banco de dados para uma execução eficiente e em tempo real.
O projeto começou como uma continuação do 2UDA, que já permite que o Orange seja usado para trabalhar com dados armazenados em um banco de dados PostgreSQL. O que era necessário era uma maneira de exportar modelos preditivos treinados, transferi-los para onde são necessários (por exemplo, o servidor de produção) e implantá-los. Portanto, o projeto é dividido em extensões para Orange que podem exportar modelos para arquivos .json e para postgres que podem carregar e executar esses modelos. Como os modelos são armazenados em arquivos de texto, eles podem ser rastreados em um sistema de controle de versão. O formato json também permite que eles sejam facilmente armazenados no banco de dados após o carregamento, fazendo uso dos recursos json do PostgreSQL.
Atualmente existe uma implementação funcional para um número limitado de modelos preditivos e ainda não passou por uma otimização completa. Mas já está se mostrando muito promissor.
Para testar, gerei uma tabela de clientes imaginários com 10M de linhas com algumas variáveis aleatórias independentes (idade, salário, visitas) e uma variável de saída (gastos). O laranja foi então usado para carregar a tabela e obter um modelo preditivo. Por fazer uso de TABLESAMPLE (um recurso do PostgreSQL 9.5) tentar diferentes parâmetros e configurações funciona rapidamente (mesmo para dados muito maiores do que neste teste). O cientista de dados pode, portanto, experimentar interativamente diferentes soluções, avaliá-las e, no final, apresentar um bom modelo. O modelo final de regressão da crista foi então exportado e carregado no banco de dados. Lá, ele pode ser usado em tempo real para prever o valor gasto para novos clientes que aparecem no banco de dados.
Usar o pgbench mostrou que, enquanto a seleção de uma coluna existente para um único cliente da tabela exigia 0,086 ms, era apenas um pouco mais longo para obter as variáveis independentes, e fazer uma previsão para o valor gasto:0,134 ms.
Prever o valor gasto para 10^6 clientes não leva 10^6 vezes mais tempo (134 s) já que a inicialização do modelo é feita pela primeira vez e depois reutilizado. Então, na verdade, levou 13,6 s, tornando-o cerca de 10x mais rápido.
Esses números foram obtidos para um modelo simples, no meu laptop, com código que tem potencial para muito mais otimização. Espere uma avaliação mais rigorosa em breve, quando estivermos prontos para lançar o pgpredict ao público. Mas, mesmo agora, acho que a eficiência exibida e a facilidade de uso seriam uma grande vantagem para a grande maioria dos usuários em potencial que procuram análises preditivas para seus data warehouses com PostgreSQL.