Leia a Parte I da série aqui.

Na primeira parte dessa série, falamos sobre os princípios da fklearn e como ela pode ser útil para construir pipelines de aprendizado de máquina usando funções puras. No entanto, os benefícios mais significativos do uso da fklearn surgem ao fazer análise e validação de modelos, como veremos a seguir.

Validação extensível

Para modelos que entram em produção, a validação geralmente exige muito mais do que apenas descobrir o valor de alguma métrica em um conjunto de validação ou comparar uma métrica com um benchmark. Muitas vezes queremos responder a perguntas como:

  • Como esperamos que o modelo funcione ao longo do tempo, como seis meses após ter sido treinado?
  • Mais dados ajudariam a melhorar o desempenho?
  • Com que frequência devo retreiná-lo?
  • É melhor usar mais dados ou apenas dados recentes?
  • Ele funciona igualmente bem em todos os segmentos de usuários?

Todas essas perguntas podem parecer muito diferentes, mas podem ser respondidas pelo mesmo algoritmo de validação de modelo generalizado.

Algoritmo de validação de modelo generalizado do fklearn: Primeiro, os dados são divididos em partes, uma função de treinamento é aplicada a algum subconjunto de dados, as previsões são feitas em outro subconjunto e, em seguida, uma função de avaliação é aplicada às previsões. 

Na fklearn, esse algoritmo é implementado pela função validadora:

A função validator em fklearn (dentro de fklearn.validation.validator) implementa o algoritmo de validação generalizado descrito aqui.

  • A função train_fn é de aprendizagem, exatamente como definimos na última postagem do blog.
  • A função split_fn controla como os dados serão divididos em conjuntos de treinamento e teste. Ela recebe DataFrames e retorna listas de índices de treinamento e teste.
  • A função eval_fn define quais métricas serão computadas nos conjuntos de teste. Mais sobre funções de avaliação posteriormente.

O validador retorna um conjunto de registros contendo os resultados de todas as avaliações feitas nos conjuntos de teste. A análise pode então ser feita extraindo os dados desses registros (a fklearn fornece funções auxiliares para fazer isso).

Simplesmente trocando as funções de divisão e avaliação, podemos simular e avaliar muitos cenários da vida real diferentes, o que nos ajuda a responder a essas questões. 

Vejamos um exemplo, usando a função de aprendizagem (learner) que definimos na Parte 1, quando tentamos responder a estas duas questões:

  1. Temos dois segmentos de usuários diferentes, A e B. Qual a diferença de desempenho do modelo entre os dois segmentos?
  2. Esperamos que este modelo continue funcionando por alguns meses após ser treinado. Qual é a redução de desempenho esperada 3, 6 ou 9 meses após o treinamento?

Um exemplo completo de treinamento e avaliação.

Vamos examinar este exemplo mais detalhadamente.

Confira nossas oportunidades de trabalho 

Check our job opportunies

Funções de divisão

No exemplo acima, após definirmos a função de aprendizagem, definimos duas funções de divisão:

  1. Uma função de divisão de validação cruzada K-fold. Ela divide os dados aleatoriamente em k conjuntos separados, e é utilizada para realizar validação cruzada padrão. A validação cruzada é útil para obter uma estimativa básica do desempenho da generalização do modelo ao mesmo tempo em que ele é treinado.
  2. Uma função de divisão de validação de estabilidade. Ela funciona dividindo os dados com base no parâmetro time_column. O modelo será treinado usando dados até training_time_limit, e validado na divisão mensal de dados depois disso. A avaliação da estabilidade é útil para estimar como o modelo irá generalizar depois de um tempo, além do período de treinamento.

A fklearn vem pré-empacotada com muitas funções de divisão para casos de uso comuns (você pode encontrar uma lista completa e descrições de quando elas são úteis aqui). A maioria das funções de divisão são projetadas para simular situações da vida real, onde normalmente os modelos são treinados com dados de um período de tempo, mas aplicados no futuro. A validação cruzada simples muitas vezes é insuficiente para modelos reais.

Avaliação personalizável

Muitas vezes isso surge na avaliação de modelos: métricas únicas e globais muitas vezes não contam a história completa. Podemos querer isolar os efeitos da ordenação e calibração do modelo ou examinar o desempenho em subgrupos específicos de nossa população. Também podemos estar interessados na evolução de uma métrica específica, em vez de apenas numa estimativa pontual.

Para isso, precisamos avaliar simultaneamente múltiplas métricas, divididas em dimensões (por exemplo: tempo e segmento de cliente). A fklearn possibilita isso ao nos permitir definir “árvores de avaliação”, combinando funções de avaliação individuais. Olhando novamente para o nosso exemplo, veja como definimos a função de avaliação:

Exemplo de definição de uma árvore de avaliação.

Esse trecho de código leva à árvore de avaliação mostrada abaixo:

Representação em árvore da função de avaliação definida acima.

Depois que final_eval_fn é aplicada aos dados, toda a árvore de avaliação é executada, e todos os resultados são retornados no registro. Isso significa que as correlações R2 e de Spearman serão calculadas primeiro para todos, e depois separadamente para cada segmento de usuário. Essas “árvores de avaliação” podem ser muito poderosas, permitindo que os cientistas de dados automatizem análises recorrentes.

Analisando resultados

Como você deve ter notado, a maioria das operações da fklearn retorna registros. Esses registros concentram informações valiosas, sejam parâmetros de modelo, metadados de conjuntos de dados ou resultados de validação. A fklearn pode ser muito detalhada com os registros, assim como nos arrependemos de não salvar as informações com frequência.

A fklearn também fornece funções úteis para extrair dados desses registros (eles podem ficar enormes), e é fácil criar gráficos de avaliação usando apenas os registros. Isso nos permite criar um código de avaliação genérico que recebe registros de execuções de treinamento e gera painéis com o desempenho do modelo, agilizando o processo de iteração. Aqui está um exemplo de extração de dados dos registros:

Exemplo de uso dos extratores da fklearn para obter resultados de registros.

Gráfico da curva de estabilidade da amostra, após extrair os dados dos registros. Ele mostra o desempenho do modelo (correlação de Spearman entre previsão e meta) ao longo do tempo, dividido por segmento. Também seria possível plotar a R2 a partir dos mesmos dados.

Felicidade funcional

Como uma observação final sobre o assunto validação, observe que a função de aprendizagem que definimos será usada repetidamente dentro dessas chamadas do validador, treinando vários modelos. Ficamos tranquilos em saber que é uma função pura, então nada que aconteça dentro da validação pode alterar a definição do nosso modelo. Além disso, ao validar nosso modelo, todas as etapas do nosso pipeline estão sendo aplicadas de forma consistente a todos os datafolds. Em última análise, isso significa que o nosso modelo final, que vai para produção, corresponde com precisão aos modelos que passam por todos esses cenários de validação.

Isso vale para ajustes ou seleção de recursos. Para ambos, a fklearn fornece funções com ideia semelhante ao validador: você define como dividir os dados, como avaliar o desempenho do modelo e reutilizar a função de aprendizagem.

Qual é o próximo passo?

Esta postagem conclui nossa breve introdução à biblioteca fklearn. Para mais exemplos dos recursos de validação de modelo da fklearn e outras ferramentas poderosas, verifique a documentaçãoaqui. Também esperamos que isso deixe você animado paratentar aprender fklearn sozinho.

Confira nossas oportunidades de trabalho 

Check our job opportunies