Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Engenharia de software: princípios básicos

Engenharia de software: princípios básicos

Apresentando os princípios da Engenharia de Software - Apresentação

Apresentando o curso e a instrutora

Olá! Sejam muito bem-vindos ao curso de Engenharia de Software para Cientistas de Dados. Meu nome é Ana Clara, sou instrutora e, atualmente, cientista de dados sênior, e estarei com vocês nesta jornada.

Audiodescrição: Ana Clara é uma mulher branca, de olhos castanhos, com cabelo loiro e ondulado de comprimento médio. Ela veste uma camiseta azul marinho com a palavra "Alura" no centro. Ao fundo, há uma estante iluminada com uma luz arroxeada.

Descrevendo o cenário de trabalho em ciência de dados

Vamos imaginar que nós, como cientistas de dados, acabamos de ser contratados por uma empresa de e-commerce. Nessa empresa, recebemos a missão de revisar os modelos de churn atualmente utilizados. Como bons cientistas, perguntamos onde estão os documentos, os dados, o notebook, as apresentações e as regras de negócio. E recebemos o seguinte cenário: nossa liderança nos passa experimentos, notebooks e dados. Temos uma apresentação do time de dados, uma apresentação do time de produtos, dados corretos 1, dados corretos 2, dados de teste-amostra, dados de treino, treino e teste, e assim por diante. Precisamos identificar quais são os dados corretos, qual é o notebook correto e como seguir com a manutenção desses modelos. Este é um exemplo local.

Agora, imaginemos se estivéssemos lidando com um ambiente na nuvem. Teríamos também algumas amostras de dados, tabelas, e notebooks de treinamento e retreinamento, como V1 final, V1 final 1, V1 final 2. Como seguiríamos com a manutenção e revisão desses modelos? Pode parecer um pouco absurdo, mas isso é mais comum do que parece.

Aplicando princípios de engenharia de software

Uma forma de contornar esses problemas e trazer organização, clareza e uma manutenção mais viável para esse projeto, garantindo um longo prazo para o modelo de churn, seria aplicando os princípios de engenharia de software a este projeto de ciência de dados. E isso será abordado durante todo o curso.

Na primeira aula, vamos explorar os princípios da engenharia de software. Quais são as regras por trás da engenharia de software? Como podemos entender esses princípios para aplicá-los no nosso dia a dia e nos modelos de machine learning? Na próxima aula, também discutiremos as boas práticas de código e como estruturar os projetos.

Estruturando dados e modularizando código

Na análise inicial, observamos que os dados estão desorganizados, sem distinção clara entre treino e teste, e sem uma estrutura definida para pastas de dados, testes unitários e notebooks para construção do pipeline. Precisamos estabelecer essa organização, o que será abordado na Aula 2.

Na Aula 3, discutiremos a modularização e reutilização do código. Para manter um código limpo, é essencial criar funções de forma individualizada e em blocos que possam ser reutilizados em outros projetos. Isso pode ser útil tanto para o projeto atual de churn quanto para futuros projetos, permitindo reaproveitar pré-processamentos e seleções de variáveis.

Focando em documentação, testes e reprodutibilidade

Na Aula 4, focaremos na documentação e nos testes, aspectos fundamentais para qualquer projeto. Avaliaremos se as funções estão operando corretamente e se há planos para lidar com dados inesperados. Discutiremos como tratar diferentes tipos de dados para evitar falhas em produção, garantindo que o sistema seja robusto e adaptável.

A reprodutibilidade também será um tema importante. Precisamos assegurar que os experimentos realizados em notebooks sejam consistentes em diferentes ambientes, como máquinas pessoais, ambientes de produção, desenvolvimento e homologação. A consistência em todas as etapas do pipeline é crucial.

Abordando versionamento e colaboração

Por fim, na Aula 5, abordaremos o versionamento utilizando Git e workflows colaborativos. Discutiremos como garantir a qualidade do que produzimos, incluindo revisões de código e verificações de versões. Analisaremos se variáveis e tabelas estão corretas e se houve alguma falha no processo de revisão. O uso de Git e GitHub permitirá controlar versões e implementar melhorias contínuas.

Todo esse conteúdo será explorado ao longo do curso, visando evitar problemas como os apresentados inicialmente. Vamos começar?

Apresentando os princípios da Engenharia de Software - Por que aplicar engenharia em projeto de dados?

Discutindo a importância da engenharia de software em projetos de dados

Olá, pessoal! Dando continuidade ao nosso curso, vamos discutir a importância de aplicar a engenharia de software em projetos de dados. Para começar, vamos trazer algumas definições. O que é a engenharia de software? A engenharia de software é um conjunto de princípios que orientam ações para auxiliar no planejamento, aplicação de metodologias e uso de ferramentas, sempre com foco na qualidade do desenvolvimento do software.

Talvez nos perguntemos: qual é a relação entre o desenvolvimento de software tradicional e sistemas de machine learning (aprendizado de máquina)? Para responder a essa dúvida, apresentamos três casos reais que demonstram como a engenharia de software e seus princípios podem auxiliar sistemas de machine learning a evitar falhas e alcançar sucesso em produção.

Analisando o caso Google FluTrends

O primeiro caso é o Google FluTrends. Por volta do final de 2018 e início de 2019, a Google desenvolveu um sistema de machine learning focado em prever surtos de gripe com base nas buscas realizadas em diferentes regiões. Como bons cientistas, sabemos que de todo dado gerado podemos extrair algum valor ou entendimento. O objetivo do Google era identificar padrões de comportamento de pessoas com gripe ao redor do mundo e prever onde os surtos ocorreriam, permitindo que o sistema de saúde atuasse com antecedência para evitar a propagação de uma epidemia de gripe, especialmente nas épocas do ano em que isso ocorre com maior frequência.

No entanto, em meados de 2013, o sistema previu casos de gripe muito acima do que o sistema de saúde dos Estados Unidos, o CDC (Centro de Controle e Prevenção de Doenças), estava prevendo. O modelo previu uma quantidade muito maior de casos do que realmente estava acontecendo. É importante lembrar que esse modelo funcionava em tempo real, adaptando-se e aprendendo padrões à medida que as buscas eram realizadas.

Identificando falhas no Google FluTrends

O sistema Google FluTrends estava sendo considerado um sucesso, mas acabou aprendendo dois tipos de comportamento: o comportamento do paciente, que realmente estava doente, e o comportamento da pessoa curiosa, que buscava mais informações sobre o assunto. Isso acabou enviesando o modelo. Além disso, durante o período dessa falha, houve um conflito de informações entre o que o Google FluTrends mostrava e o que o sistema de saúde registrava. Os desenvolvedores identificaram também um problema de entendimento da doença e de como adaptar essas características e comportamentos de gripe ao meio dinâmico das buscas. O sistema de busca está em constante mudança; o que é uma tendência hoje pode não ser amanhã. Compreender a complexidade desse problema foi uma grande falha.

Outro ponto importante foi a questão da validação. Havia um entendimento até certo ponto, mas faltou uma compreensão mais aprofundada da sazonalidade e das características da gripe. Faltou uma validação mais detalhada. Além disso, houve um problema de entendimento do negócio. Os desenvolvedores da época reconheceram que faltou uma compreensão melhor da sazonalidade específica da gripe e de como se adaptar a esse meio dinâmico, considerando que o comportamento humano é imprevisível. Podemos buscar informações sobre o Google FluTrends e, ao mesmo tempo, procurar um curso na Alura. O comportamento é muito dinâmico.

Explorando a relação entre requisitos e validação

Aqui, temos uma associação clara com requisitos, um ponto importante dentro da engenharia de software, que exploraremos mais adiante no curso. A questão da validação envolve testes, verificação e a validação de que os dados estão funcionando corretamente e prontos para serem colocados em produção.

Junto com a complexidade dos problemas, temos o entendimento do negócio. Por que estamos fazendo isso? Isso faz sentido para o nosso usuário final? Esses tipos de questionamento estão muito relacionados à questão da engenharia de software.

Examinando o caso Amazon Hiring Tool

O próximo caso que trazemos é o Amazon Hiring Tool. Um grupo de engenheiros da Amazon estava trabalhando neste projeto, que tinha como ideia um sistema de recrutamento para a seleção dos melhores currículos. No entanto, em 10 anos de currículos, a grande maioria era de homens. O que aconteceu? O modelo começou a apresentar um problema e penalizar todos os currículos associados a mulheres ou que tinham alguma palavra feminina presente, que poderia ter esse direcionamento ao gênero feminino. O modelo não chegou a ir para a produção; o projeto começou em torno de 2014 e foi abandonado em 2018.

Vemos vários problemas. O primeiro deles é o viés dos dados. Precisamos entender não só o problema, mas o cenário em que estamos presentes. Não houve equilíbrio, não houve um estudo adequado. Como eles tentaram contornar? Chegaram a criar uma pontuação mais neutra para o sistema, porém, a quantidade de dados ainda era muito desproporcional. O modelo não tinha padrões suficientes para diferenciar os currículos femininos e masculinos, embora isso nem devesse ser considerado. Também vemos uma questão de entendimento do negócio.

Abordando a interpretabilidade e explicabilidade no Amazon Hiring Tool

Outro ponto importante, que os próprios engenheiros trouxeram, é a interpretabilidade e a explicabilidade desses modelos. Eles não estavam conseguindo entender por que o modelo de IA desenvolvido estava indo na direção de penalizar o gênero feminino, não apenas pela quantidade, pois desenvolveram uma pontuação neutra, mas ainda não estava sendo justo o suficiente. Faltou entendimento, interpretabilidade, código limpo e organização da informação, que também são problemas que devemos ter muita atenção.

Investigando o caso McDonald's e IA no drive-thru

O terceiro e último caso que apresentamos é o do McDonald's e IA no drive-thru. Em torno de 100 drive-thrus nos Estados Unidos foram desativados em 2024, porque o sistema de IA que eles estavam tentando automatizar nesses drive-thrus estava com dificuldade de compreensão e reconhecimento de voz. Esse caso ganhou grandes proporções, aparecendo até no TikTok, porque os clientes estavam tentando fazer pedidos e coisas absurdas aconteciam. Por exemplo, um casal que foi comprar nuggets acabou pedindo 260 nuggets. Outra pessoa queria um sorvete com calda de caramelo, mas o sistema colocou bacon com sorvete.

Foi identificada a falta de entendimento dos sotaques, a falta de reconhecimento dos diferentes tons de voz e a questão do ruído. Havia muito barulho no drive-thru, como de carros e da rua, e o sistema não conseguia diferenciar esse ruído. Vemos que é um problema de qualidade dos dados no treinamento. Faltou um entendimento maior dessas peculiaridades que, quando trabalhamos com a voz, exigem muita atenção.

Destacando a importância da validação e robustez no McDonald's

Outra questão é a validação. Como os drive-thrus já estavam funcionando, consideramos que estavam em produção. O usuário final estava tendo contato, mesmo que em testes. Faltou uma validação mais aprofundada desses pontos, das questões dos dados e do projeto, considerando essas minúcias em relação ao reconhecimento de voz. Por fim, houve falta de robustez. Não houve testes adicionais, planejamento ou um plano B. Estando em produção, como lidar com isso?

Concluindo com a aplicação dos princípios de engenharia de software

Todos esses problemas que apresentamos, com casos reais de sistemas de Machine Learning e IA, poderiam ser resolvidos e evitar falhas com uma boa aplicação dos princípios de engenharia de software. Veremos isso nas próximas aulas.

Apresentando os princípios da Engenharia de Software - Princípios da engenharia de software: 1° ao 3°

Introduzindo os princípios de engenharia de software

Olá! Vamos dar continuidade ao curso de Engenharia de Software para Cientistas de Dados, abordando agora os princípios de Engenharia de Software. Antes de mais nada, gostaríamos de compartilhar a fonte de onde extraímos esses princípios e baseamos nosso conteúdo. Nossa referência é o livro "Engenharia de Software: Uma Abordagem Profissional" de Roger Pressman e Bruce Maxine. Esta obra oferece uma visão atualizada dos princípios, métodos e um guia de boas práticas para aplicar a Engenharia de Software. É uma leitura que recomendamos, pois certamente agregará valor ao dia a dia.

Vamos agora aos princípios. Apresentaremos os sete princípios fundamentais da Engenharia de Software, que oferecem uma visão mais abstrata, abordando tanto o lado dos processos quanto o lado prático. Esses sete princípios foram criados e apresentados por David Hooker, uma grande referência na ciência da computação e na Engenharia de Software.

Explorando o princípio da "razão de existir"

O primeiro princípio é a "razão de existir". Devemos sempre nos perguntar: qual a motivação por trás do sistema que estamos desenvolvendo? O que a empresa e os usuários ganharão com isso? Qual é o propósito do que estamos fazendo? Este princípio destaca a importância de agregar valor para os usuários e para a empresa. Devemos sempre nos questionar se uma nova funcionalidade, a escolha de um novo parâmetro, modelo ou dados fará alguma diferença no que estamos desenvolvendo.

Por exemplo, imagine que somos cientistas de dados recém-contratados por um e-commerce e recebemos a responsabilidade de revisar o modelo de churn da empresa. Aplicando o princípio da "razão de existir" a este projeto, devemos nos perguntar: qual é a motivação por trás do sistema de churn? O que a empresa ganha ao entender a propensão de um cliente a deixar de ser cliente? A primeira motivação é a retenção. Entender um cliente que pode ficar insatisfeito ou não se identificar mais com a marca nos permite trabalhar em um relacionamento mais adequado, compreendendo a dor do cliente e os motivos que o levam a deixar de ser cliente. Assim, a razão de existir de um sistema de churn é clara.

Aplicando o princípio do KISS

Agora, vamos para o segundo princípio, que é baseado no KISS (Keep It Simple, Stupid), ou seja, mantenha as coisas simples, não complique.

Baseamos nossa abordagem na simplificação, mas não de forma simplista. É importante destacar que estamos falando de simplificação da complexidade, e não de tornar um projeto simplista, sem robustez. O objetivo é reduzir a complexidade na manutenção do código e criar soluções elegantes, evitando improvisações. Este é o segundo princípio que seguimos.

Retornando ao nosso caso de churn, entendemos a razão de existir do projeto e como podemos evitar complicações. Ao analisarmos as pastas, observamos a presença de vários notebooks, como retreinamento, retreinamento V11 e treinamento final. Como poderíamos simplificar essa situação? Encontramos o notebook correto em meio ao caos e agora analisamos o código. Como podemos modificar esse código para que não se torne complicado? Talvez criando uma função única para tratamento dos dados, uma seleção robusta das variáveis, ou, por exemplo, em vez de realizar a mesma leitura de tabela várias vezes, criar uma função que leia todas as tabelas necessárias. Esses detalhes tornam o processo simples, sem improvisações, mas com soluções objetivas. Muitas vezes, precisamos parar e refletir sobre nosso código e problema de negócio, revisando várias vezes até chegar a uma solução final. A consequência disso é um sistema mais fácil de manter e menos propenso a falhas.

Mantendo a visão do projeto

Vamos para o terceiro princípio. Segundo David Huck, o terceiro princípio é manter a visão. O que isso significa? Significa ter um projeto bem conceituado e entendido, o que se relaciona com o primeiro princípio: manter a visão e o motivo de existir. Ter esse conceito bem definido e uma arquitetura bem desenhada do sistema ajuda a evitar que o projeto se torne uma colcha de retalhos. Quando surgem novas demandas de melhoria ou necessidades de produtos, é comum adicionar novas funcionalidades. No entanto, essa junção de várias coisas pode levar até mesmo um excelente projeto a falhar e quebrar em produção. Portanto, é crucial manter a visão, o conceito e a arquitetura bem estruturada do início ao fim, sem construir e modificar de forma que afete a integridade conceitual. Isso é essencial para que o sistema não falhe.

Como aplicamos esse princípio no nosso projeto de churn? Estamos revisando a arquitetura e entendendo quais são as tabelas, desenhando o fluxo de entrada desses dados, pois percebemos que não temos essa informação documentada. Precisamos entender a entrada desses dados: quais são as bases que o modelo está consumindo atualmente? De onde elas vêm? O modelo trabalha com um produto específico do e-commerce? Como podemos detalhar esse fluxo de dados? Após descobrir as tabelas, passamos para a próxima etapa: como foi feito o tratamento? Existe uma dinâmica nessas tabelas? Por exemplo, pode ocorrer de rodar em um dia e não no outro? O tempo é diferente do modelo? Como o modelo está rodando? Começamos a levantar esses questionamentos e aplicar esse princípio no projeto de churn.

Concluindo a aula e introduzindo a próxima

Na próxima aula, continuaremos com os próximos princípios.

Sobre o curso Engenharia de software: princípios básicos

O curso Engenharia de software: princípios básicos possui 213 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Escolha a duração do seu plano

Conheça os Planos para Empresas