Planejar projetos de ML é diferente de planejar projetos típicos de engenharia de software. Os projetos de ML são tipicamente não lineares e têm graus variados de incerteza. Eles exigem uma abordagem iterativa e uma mentalidade experimental.
Incerteza do projeto
O planejamento nos estágios iniciais pode ser difícil porque a melhor abordagem normalmente não é aparente no início de um projeto. Essa incerteza inerente dificulta a estimativa de cronogramas.
Uma competição recente da Kaggle ilustra a incerteza dos projetos de ML. Nas primeiras semanas de uma competição, 350 equipes participaram. Algumas equipes conseguiram aumentar a qualidade da previsão do comparativo de mercado de 35% para 65%. Durante as próximas duas semanas, o número de equipes trabalhando no problema aumentou de 350 para 1.400. No entanto, o melhor modelo só alcançou 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.
Figura 3. Em um período de duas semanas, o número de equipes trabalhando 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 de dados, arquiteturas e hiperparâmetros, só conseguiram produzir um modelo com 68% de qualidade de previsão.
Um exemplo do setor ilustra a não linearidade de 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 preparar o modelo 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 requer uma mentalidade científica e de engenharia.
Abordagem experimental
Na maioria dos casos, o desenvolvimento de ML se assemelha mais à realização de experimentos do que à prática tradicional de engenharia de software. O ML exige o teste de diferentes recursos, o teste de várias arquiteturas e o ajuste correto dos hiperparâmetros. Por definição, não é garantido que os experimentos sejam bem-sucedidos. Por isso, é melhor planejar usando uma estrutura experimental.
Vamos analisar um plano típico de engenharia de software para ver como ele é diferente de um plano de projeto de ML.
Planejar projetos de engenharia de software
Em um plano típico de engenharia de software, você define os requisitos, delineia os componentes, estima o esforço e programa o trabalho. Existe um caminho claramente 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 atende às especificações de design.
Quando eles preveem o tempo que levará para concluir uma tarefa, podem estimar o trabalho com base em projetos semelhantes. Embora ocorram desafios invariavelmente, como dependências desconhecidas ou mudanças de requisitos, 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.
Planejar projetos de ML
Para a maioria dos projetos de ML, você encontrará a melhor solução testando várias abordagens em um processo de tentativa e erro. Normalmente, você não sabe 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 possivelmente uma árvore de decisão. Apenas testando cada abordagem é possível descobrir a melhor solução.
Essa ambiguidade dificulta o planejamento. Conforme discutido anteriormente, é difícil prever o esforço que um projeto de ML vai exigir. Ao tentar resolvê-lo, é possível ter uma noção melhor da quantidade de tempo e recursos que uma solução pode exigir.
Estas são as estratégias recomendadas para planejar o trabalho de ML:
Defina o horário do trabalho. Defina prazos claros para concluir tarefas ou tentar uma solução específica. Por exemplo, você pode alocar duas semanas para determinar se pode 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, designe duas semanas a mais para tentar uma rede neural. No final de cada período, você terá mais informações para determinar se vale a pena aplicar recursos ao problema.
Defina o escopo dos 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 planejar tentar uma solução muito simples. Depois, nos trimestres subsequentes, você pode planejar melhorar a solução de forma iterativa. Implementar uma solução de ML com melhorias incrementais em um horizonte de tempo mais longo tem sido a maneira como muitas equipes chegaram a soluções de ML impactantes.
Projeto de estagiário ou Noogler. Direcionar e orientar um estagiário ou Noogler a tentar uma solução de ML pode ser uma boa maneira de começar a explorar um novo espaço com resultados desconhecidos. Após o término do projeto, você terá uma noção melhor do esforço que uma solução de ML exigirá e de abordagens potencialmente promissoras a serem seguidas ou se os recursos devem ser colocados em outro lugar.
Com qualquer estratégia, é sábio falhar rápido. Primeiro, tente abordagens com os custos mais baixos, mas potencialmente com o maior retorno. Se a abordagem funcionar, você encontrou uma boa solução. Caso contrário, você não perdeu 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 será desconhecido. Portanto, não é possível estimar o número de experimentos necessários para encontrar a melhor solução com antecedência.
Planejar abordagens com uma mentalidade experimental ajuda a preparar a equipe para o sucesso. Quando uma abordagem leva a um beco sem saída, em vez de desanimar, os membros da equipe entendem que isso faz parte do processo de encontrar uma solução de ML. Mais importante, ao discutir a incerteza inerente no desenvolvimento de ML com as partes interessadas, você é capaz de definir expectativas mais realistas.
Observação importante
Aprender a planejar várias abordagens de ML provavelmente leva tempo e experiência. O plano de projeto pode exigir atualizações frequentes. Pense nisso como um documento dinâmico em evolução constante à medida que sua equipe testa várias abordagens. Ao focar nas seguintes ideias-chave, você aumentará suas chances de sucesso:
- Estime 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.
- Planejar para falhas.
Às vezes, uma abordagem antecipada leva a uma evolução. Alguém pode descobrir um bug no pipeline de geração de dados ou na divisão de validação de treinamento. Com um bom planejamento e documentação completa, você aumenta a probabilidade de encontrar um modelo que resolva seu problema de negócios mais cedo do que o esperado.