River: Aprendizado de Máquina Online com Python, uma Introdução Conceitual

No último artigo da série tivemos uma introdução ao aprendizado de máquina online como uma alternativa ao aprendizado de máquina tradicional (também chamado de aprendizado de máquina offline), que funciona com dados em lote.

Hoje, vamos explorar a biblioteca River em nível conceitual, apresentando suas principais características e alguns conceitos básicos que a biblioteca usa ao trabalhar com dados em streaming e modelos de aprendizado de máquina online.

Características do River

As principais características do River são:

  • A biblioteca funciona de forma incremental, podendo ser usada para processar dados em streaming
  • O River é adaptável, permitindo trabalhar em um ambiente em constante mudança
  • É de propósito geral, funcionando para problemas de classificação, de regressão e de clusterização, incluindo aprendizado supervisionado e aprendizado não supervisionado
  • É eficiente e fácil de aprender, possuindo uma API semelhante ao do scikit-learn
  • Tem uma comunidade e mantenedores dedicados
  • Possui conjuntos de dados de fácil acesso que podem ser lidos em forma de streaming para treinamento e avaliação do modelo em um ambiente de estudo. Além de funções para leitura de conjuntos de dados tradicionais em forma de streaming

Entretanto, vale destacar algumas desvantagens que podem ser essenciais para decidir entre essa biblioteca ou outras ferramentas:

  • A biblioteca não está nem na versão 1.0 ainda
  • Poucas pessoas fazem praticamente todo o trabalho, “carregando o projeto nas costas”

Isso abre margem para um receio que o projeto fracasse e seja descontinuado. Entretanto, é ainda a melhor alternativa para se trabalhar com aprendizado de máquina online em Python.

Conceitos Básicos

Antes de colocar a mão na massa, é muito importante conhecer um pouco mais sobre os termos que o River usa para entender melhor quais problemas ele resolve.

Data Streams

No geral, esse ainda é um termo muito vago e não consolidado, entretanto seguindo a documentação oficial do River, um data stream é uma sequência individual de elementos. Mais especificamente é um conjunto de características comumente chamada de features no jargão de aprendizado de máquina, ou seja, é como se fosse uma única linha de um CSV. A biblioteca chama essa linha única de características de “amostra”

Vale destacar que toda amostra pode possuir sempre a mesma estrutura e as mesmas features, mas também features novas podem surgir ou sumir, isso depende da aplicação.

Data Streams Reativos e Proativos

Até mesmo dentro do conceito de data streams é possível classificá-lo de duas formas diferentes. Os data streams reativos são aqueles que veem até a gente e que não possuímos muito ou até nenhum controle sobre eles. Note que quando os dados chegam ao modelo vindos da aplicação, como quando um usuário aperta um botão ou quando ele preenche um formulário, não temos controle sobre quando o dado chega e nem qual a velocidade de chegada de novos dados.

Os data streams proativos, por outro lado são o oposto, como quando estamos lendo um arquivo e controlamos o fluxo de dados. Nesse caso, temos controle sobre a velocidade de leitura e até mesmo da ordem que o arquivo é lido.

Processamento Online

Processamento online é o ato de processar os data stream com uma amostra de cada vez, linha a linha. Esse é o maior diferencial do aprendizado online que se opõe ao aprendizado tradicional, no qual se lê um lote inteiro de dados de uma única vez.

Dessa forma, um modelo online é um objeto stateful e dinâmico. Ele continua sempre aprendendo e não precisa revisitar dados antigos.

Propósito Geral

O aprendizado de máquina busca resolver vários problemas, incluindo classificação, regressão, detecção de anomalias, previsão de séries temporais etc. River busca ser uma biblioteca genérica para resolver qualquer tarefa ou problema envolvendo aprendizado de máquina, mas de uma forma online, ou seja, com dados em streaming. Inclusive, muitos algoritmos clássicos que funcionam com dados em lote já possuem suas versões online.

O River também permite realizar tarefas ainda mais simples, como calcular uma média sobre dados em streaming. Ou seja, ele vai além de uma biblioteca de aprendizado de máquina online e se torna uma biblioteca para processamento de dados em streaming.

Dicionários por toda parte

A biblioteca tem como bloco construtor básico o uso de dicionários. Os mantenedores decidiram seguir essa abordagem porque a vetorização não traz nenhum ganho considerável de velocidade no contexto de aprendizado online. Na verdade, bibliotecas de processamento numérico como numpy e PyTorch trazem muito overhead. Usar dicionários nativos do Python é mais rápido.

Datasets

Uma das grandes vantagens do aprendizado de máquina online usando River é a capacidade de fazer o design de modelos que podem fazer predições ao mesmo tempo que aprendem conforme os dados fluem.

Entretanto, durante o desenvolvimento do modelo, você normalmente não vai ter acesso a esses dados em tempo real para avaliar o seu modelo, portanto a biblioteca disponibiliza conjuntos de dados que já podem ser lidos de forma online, ou seja, com uma amostra de cada vez.

A biblioteca também apresenta funções que convertem um conjunto de dados tradicional, um DataFrame pandas por exemplo, em um conjunto de dados processável via streaming.

Avaliação do Modelo

A avaliação do modelo usando River, com aprendizado de máquina online, difere da sua contraparte em lote. Nessa última, você vai geralmente realizar validação cruzada, com seus dados sendo divididos em um conjunto de treino e outro de teste.

O aprendizado online não utiliza esse processo e a avaliação envolve o aprendizado e a inferência na mesma ordem que ela acontece em um ambiente de produção. Isso permite que você simule um cenário de produção e avalie o seu modelo com uma fidelidade maior que na validação cruzada.

Concept Drift

A principal razão para um modelo offline não performar como esperado em produção é por conta do desvio de conceito. Entretanto isso também é verdade para modelos online.

A grande vantagem dos modelos online em relação aos modelos offline é que eles podem lidar com esse desvio. Na verdade, justamente por continuar sempre aprendendo, esses modelos podem se adaptar ao desvio de conceito de uma forma contínua, diferente de modelos tradicionais que precisam ser restringidos desde o começo.

Falaremos mais sobre desvio de conceito em tutoriais futuros.

Conclusão

Nesse artigo pudemos explorar os principais conceitos que a biblioteca River aborda de forma a nos preparar para os conteúdos de cunho mais prático que virão em futuros artigos. Com essa base de conhecimento é possível colocar a mão na massa e implementar nosso primeiro modelo de aprendizado de máquina online usando a biblioteca River.

Se este conteúdo lhe interessou, não esqueça de avaliá-lo de alguma forma e de me seguir para acompanhar os próximos artigos. Dúvidas, sugestões ou correções são muito bem-vindas na seção de comentários abaixo. Até a próxima

Excelente conteúdo Lucas, como sempre, trazendo muita informação importante e de uma forma bem clara e objetiva. Sucesso sempre!