Planejamento de projetos de ML

Planejar projetos de ML é diferente de planejar projetos típicos de engenharia de software. Os projetos de ML são caracteristicamente não lineares e têm graus variáveis de incerteza. Eles exigem uma abordagem iterativa e uma mentalidade experimental.

Incerteza do projeto

O planejamento inicial pode ser difícil porque a melhor abordagem normalmente não é evidente no início de um projeto. Essa incerteza inerente dificulta a estimativa de cronogramas.

Uma competição recente do Kaggle ilustra a incerteza dos projetos de ML. Nas primeiras semanas de uma competição, 350 equipes participaram. As melhores equipes conseguiram aumentar a qualidade da previsão de referência de 35% para 65%. Nas duas semanas seguintes, o número de equipes trabalhando no problema aumentou de 350 para 1.400. No entanto, o melhor modelo alcançou apenas uma qualidade de previsão de 68%.

A Figura 3 ilustra a incerteza no desenvolvimento de ML mostrando o aumento significativo no esforço, mas apenas ganhos mínimos na qualidade do modelo.

A imagem mostra o aumento do número de equipes de 350 para 1.400 em duas semanas, mas a qualidade do modelo só melhora 3%.

Figura 3. Em um período de duas semanas, o número de equipes que trabalhavam no problema aumentou quatro vezes, mas a qualidade do modelo permaneceu quase a mesma, destacando a dificuldade em estimar o esforço de uma solução de ML.

Em outras palavras, mais de mil equipes, cada uma experimentando uma variedade de transformações, arquiteturas e hiperparâmetros de dados, conseguiram produzir um modelo com 68% de qualidade de previsão.

Um exemplo do setor ilustra a não linearidade dos projetos de ML, em que a saída não é proporcional às entradas. Duas equipes levaram vários meses para treinar um modelo com 90% de qualidade de previsão. No entanto, várias equipes levaram mais de cinco anos para deixar o modelo pronto para produção com 99,9% de qualidade de previsão.

Esses exemplos destacam que o ML pronto para produção é um processo exploratório, que exige uma mentalidade científica e de engenharia.

Abordagem experimental

Na maioria dos casos, o desenvolvimento de ML é mais parecido com a realização de experimentos do que com a prática da engenharia de software tradicional. O ML exige o teste de diferentes recursos, a tentativa de várias arquiteturas e o ajuste de hiperparâmetros. Por definição, não há garantia de que os experimentos vão ser bem-sucedidos. Por isso, é melhor planejar usando uma estrutura experimental.

Vamos analisar um plano de engenharia de software típico para saber como ele é diferente de um plano de projeto de ML.

Como planejar projetos de engenharia de software

Em um plano típico de engenharia de software, você define os requisitos, descreve os componentes, estima o esforço e programa o trabalho. Há um caminho definido para uma solução. Por exemplo, os engenheiros geralmente sabem com um alto grau de certeza as tarefas que precisam concluir para criar um aplicativo que atenda à especificação de design.

Quando eles preveem o tempo que vai levar para concluir uma tarefa, podem estimar o trabalho com base em projetos semelhantes. Embora desafios inevitáveis ocorram, como dependências desconhecidas ou requisitos em mudança, que podem dificultar a estimativa, normalmente existe um caminho claro para a solução.

Por outro lado, os projetos de ML normalmente não têm um caminho claro para o sucesso.

Como planejar projetos de ML

Na maioria dos projetos de ML, você vai encontrar a melhor solução experimentando várias abordagens em um processo de tentativa e erro. Normalmente, você não sabe qual é a solução ideal para o problema antes de tentar resolvê-lo. Por exemplo, a arquitetura da solução ideal pode ser um modelo linear simples, uma rede neural ou talvez uma árvore de decisão. Só testando cada abordagem é possível descobrir a melhor solução.

Essa ambiguidade dificulta o planejamento. Como discutido anteriormente, é difícil prever o esforço que um projeto de ML vai exigir. Só tentando resolver o problema é possível ter uma ideia melhor da quantidade de tempo e recursos que uma solução pode exigir.

Confira a seguir as estratégias recomendadas para planejar o trabalho de ML:

  • Coloque o trabalho em uma caixa de tempo. Estabeleça prazos claros para concluir tarefas ou tentar uma solução específica. Por exemplo, você pode alocar duas semanas para determinar se é possível ter acesso ao tipo certo de dados. Se você conseguir os dados, poderá designar mais duas semanas para ver se um modelo simples indica que uma solução de ML é viável. Se um modelo simples falhar, você poderá designar mais duas semanas para tentar uma rede neural. No final de cada período, você terá mais informações para determinar se vale a pena continuar aplicando recursos ao problema.

  • Especifique os requisitos do projeto. Se uma solução de ML parecer promissora, mas não for um recurso essencial para seu produto ou serviço, reduza o escopo dos requisitos. Por exemplo, ao planejar o trabalho do próximo trimestre, você pode testar uma solução muito simples. Em trimestres subsequentes, você pode planejar melhorar a solução de forma iterativa. Implementar uma solução de ML fazendo melhorias incrementais em um horizonte de tempo mais longo foi a maneira que muitas equipes encontraram para chegar a soluções de ML impactantes.

  • Projeto de estágio ou de novo contratado. Orientar e direcionar um estagiário ou um recém-contratado para tentar uma solução de ML pode ser uma boa maneira de começar a explorar um novo espaço com resultados desconhecidos. Depois que o projeto terminar, você terá uma ideia melhor do esforço que uma solução de ML vai exigir e de abordagens potencialmente promissoras para seguir, ou se os recursos precisam ser colocados em outro lugar.

Em qualquer estratégia, é sábio falhar rápido. Tente usar abordagens com os custos mais baixos, mas com o maior retorno possível. Se a abordagem funcionar, você terá encontrado uma boa solução. Se não, você não desperdiçou muito tempo e recursos.

À medida que as equipes ganham experiência e exposição à execução de experimentos, elas podem estimar melhor o esforço que um experimento pode exigir, tornando o planejamento mais previsível. No entanto, o resultado de um experimento quase sempre é desconhecido, portanto, o número de experimentos necessários para encontrar a melhor solução não pode ser estimado com antecedência.

Planejar abordagens com uma mentalidade experimental ajuda a equipe a ter sucesso. Quando uma abordagem leva a um beco sem saída, em vez de ficar desanimado, os membros da equipe entendem que isso faz parte do processo de encontrar uma solução de ML. Mais importante ainda, ao discutir a incerteza inerente no desenvolvimento de ML com as partes interessadas, você pode definir expectativas mais realistas.

Teste seu conhecimento

Qual é a vantagem de planejar o desenvolvimento de ML usando uma mentalidade experimental? Selecione todas as opções aplicáveis.
Identificar e gerenciar possíveis riscos.
Para diminuir o tempo e os recursos gastos em abordagens sem sucesso.
Comunicar às partes interessadas a incerteza inerente no desenvolvimento de ML.
Identificar a melhor abordagem e resolver o problema primeiro.
No início, você não saberá qual abordagem será a melhor.

Observação importante

Aprender a planejar várias abordagens de ML de forma probabilística leva tempo e experiência. O plano do projeto pode exigir atualizações frequentes. Pense nele como um documento dinâmico em constante evolução à medida que sua equipe testa várias abordagens. Concentre-se nas seguintes ideias principais para aumentar suas chances de sucesso:

  • Estimar o custo e a chance de sucesso de cada abordagem.
  • Tente um portfólio de abordagens.
  • Identifique as lições aprendidas e tente melhorar o sistema uma coisa de cada vez.
  • Planeje para falhas.

Às vezes, uma abordagem inicial leva a um avanço. Alguém pode descobrir um bug no pipeline de geração de dados ou na divisão de treinamento-validação. Com um bom planejamento e uma documentação completa, você aumenta a probabilidade de encontrar um modelo que resolva seu problema de negócios mais rápido do que o esperado.