Engenharia de Software para Ciência de Dados Um guia de boas práticas com ênfase na construção de sistemas de Machine Learning em Python
Marcos Kalinowski, Tatiana Escovedo, Hugo Villamizar, Hélio LopesConteúdo
Livro finalista do Prêmio Jabuti Acadêmico 2024.
Os avanços recentes na área de Ciência de Dados - em especial em Machine Learning - têm tornado viável e de relevância prática novas soluções de software, que podem aprender a partir de dados e realizar predições inteligentes. Entretanto, para que esses sistemas tenham sucesso, devem ser construídos considerando as boas práticas da área de Engenharia de Software para atenderem de fato às necessidades dos clientes. Este livro vem para consolidar a área de Engenharia de Software para Ciência de Dados e capacitar profissionais interessados ou atuantes em Ciência de Dados na construção de sistemas baseados em Machine Learning, ao mostrar como construir esses sistemas end-to-end, adaptando e aplicando as melhores práticas para esse contexto.
Você entenderá como aplicar abordagens ágeis para a engenharia de sistemas inteligentes e aprenderá a especificar e desenvolver sistemas baseados em Machine Learning na prática em Python, utilizando os principais algoritmos de classificação e regressão, seguindo princípios de projeto e boas práticas de codificação. Você verá como realizar o controle de qualidade de sistemas inteligentes, além de conhecer alternativas para essa arquitetura, com diferentes formas de implantação de modelos, incluindo na nuvem. Por fim, conhecerá conceitos de gerência de configuração e DevOps, comumente empregados neste tipo de projeto. O livro compila evidências científicas e experiências práticas de formação dos autores, que em 2021 criaram o primeiro curso de extensão em Engenharia de Software para Ciência de Dados do país, formando centenas de alunos em diversas turmas oferecidas pela PUC-Rio, tanto abertas quanto in-company.
A sinergia natural – e ainda relativamente inexplorada – entre as áreas de Engenharia de Software e Ciência de Dados nos fascina e hoje é um de nossos tópicos de interesse de pesquisa prioritários. A relevância prática da combinação entre essas áreas se tornou evidente nas dezenas de projetos de inovação entregues pela iniciativa ExACTa PUC-Rio para empresas parceiras.
As pesquisas e a aplicação nos projetos têm permitido consolidar conhecimentos teóricos e práticos relevantes em uma área estratégica para a inovação das empresas – e, como professores, nos vemos obrigados a compartilhá-los com a sociedade. Em 2021, criamos o primeiro curso de extensão em Engenharia de Software para Ciência de Dados do Brasil, o qual já capacitou centenas de profissionais que, de forma unânime, reconhecem a utilidade e a relevância dos assuntos tratados.
O propósito deste livro é ajudar a formar profissionais essenciais para a inovação e a transformação digital das empresas, capazes de construir sistemas de software inteligentes com agilidade e qualidade.
Sumário
Parte I – Introdução à Engenharia de Software e à Ciência de Dados
- 1 Introdução à Engenharia de Software
- 1.1 Precisamos de Engenharia de Software?
- 1.2 Precisamos de Engenharia de Software para Ciência de Dados?
- 1.3 Processo de Engenharia de Software
- 1.4 Práticas de Engenharia de Software
- 2 Introdução à Ciência de Dados
- 2.1 Banco de dados ou "bando" de dados?
- 2.2 Aplicações de Ciência de Dados
- 2.3 Knowledge Discovery in Databases (KDD)
- 2.4 Tipos de dados
- 2.5 Tipos de problemas
- 2.6 Esquema básico de um projeto de Ciência de Dados
- 3 Abordagens para a engenharia de sistemas inteligentes
- 3.1 O Manifesto Ágil e princípios ágeis
- 3.2 Visão geral do Scrum
- 3.3 Estimativa e velocidade
- 3.4 Scrum em projetos de Ciência de Dados
- 3.5 Produção just-in-time — Lean e Kanban
- 3.6 Métodos ágeis escalados — o framework SAFe
- 3.7 SAFe em projetos de Ciência de Dados
- 3.8 BizDev, DevOps e experimentação contínua
- 3.9 MLOps e DataOps
- 3.10 Abordagem Lean R&D
- 4 Especificação de sistemas de software inteligentes
- 4.1 Conceitos básicos de Engenharia de Requisitos
- 4.2 Tipos de requisitos
- 4.3 Requisitos em contextos de transformação digital e ágeis
- 4.4 Requisitos de sistemas de software inteligentes
- 4.5 ML Canvas
- 4.6 PerSpecML — Especificação baseada em perspectivas
- 5 Introdução à linguagem Python
- 5.1 Primeiro programa
- 5.2 Variáveis
- 5.3 Strings
- 5.4 Coleções
- 5.5 Condições
- 5.6 Loops
- 5.7 Funções
- 5.8 Leitura e escrita de arquivos
- 5.9 Conexão com banco de dados
- 6 Orientação a Objetos em Python
- 6.1 Classes e objetos
- 6.2 Métodos
- 6.3 Atributos
- 6.4 Exemplos práticos
- 6.5 Os 4 pilares da Orientação a Objetos
- 7 Boas práticas de projeto e construção de sistemas
- 7.1 Princípios SOLID
- 7.2 Guia de estilos
- 7.3 Clean code
- 8 Análise exploratória e visualização de dados
- 8.1 Estatística Descritiva
- 8.2 Medidas de tendência central
- 8.3 Gráficos para visualização de dados
- 8.4 Bibliotecas Python para análise exploratória
- 8.5 Exemplo prático
- 9 Pré-processamento de dados
- 9.1 Técnicas de pré-processamento de dados
- 9.2 Exemplo prático
- 10 Algoritmos de Machine Learning para classificação e regressão
- 10.1 Problemas de classificação
- 10.2 Problemas de regressão
- 10.3 Algoritmos de Machine Learning
- 10.4 Exemplos práticos
- 11 Recursos avançados de Machine Learning
- 11.1 Ensembles
- 11.2 Feature selection
- 11.3 Pipelines
- 11.4 Otimização de hiperparâmetros
- 11.5 Exemplos práticos
- 12 Implantação de modelos de Machine Learning
- 12.1 Formas de implantação de modelos de Machine Learning
- 12.2 Armazenamento de modelos de Machine Learning em arquivos
- 12.3 Implantação de modelos de Machine Learning embarcados
- 12.4 Implantação de modelos de Machine Learning como serviço separado na nuvem
- 13 Arquitetura de sistemas de software inteligentes
- 13.1 Conceitos básicos de arquitetura de software
- 13.2 Considerações sobre arquitetura de sistemas de software inteligentes
- 13.3 Arquiteturas para diferentes tipos de predição de Machine Learning
- 13.4 Otimização das predições dos modelos de Machine Learning
- 14 Projeto de sistemas de software inteligentes
- 14.1 Conceitos básicos de projeto de software
- 14.2 Princípios SOLID aplicados a Machine Learning
- 14.3 Padrões de projeto aplicados a Machine Learning
- 14.4 Code smells, dívida técnica e refatorações em sistemas de Machine Learning
- 15 Controle da qualidade de sistemas de software inteligentes
- 15.1 Reprodutibilidade de notebooks
- 15.2 Análise estática
- 15.3 Revisões de código modernas
- 15.4 Teste de sistemas de software inteligentes
- 16 Gerência de configuração, DevOps e MLOps em sistemas inteligentes
- 16.1 Conceitos de gerência de configuração
- 16.2 DevOps e MLOps no contexto de sistemas inteligentes
- 16.3 Controle de versões de artefatos de Machine Learning
- 16.4 Integração contínua (CI)
- 16.5 Implantação contínua (CD)
- 17 Referências bibliográficas
Parte II – Abordagens e especificação de sistemas inteligentes
Parte III – Programação com boas práticas de projeto e construção
Parte IV – Tópicos de Ciência de Dados
Parte V – Arquitetura, Projeto e Controle da Qualidade
Autores
Marcos Kalinowski
Marcos Kalinowski Professor do Quadro Principal do Departamento de Informática da PUC-Rio, onde orienta pesquisas de mestrado e doutorado e coordena projetos de pesquisa e desenvolvimento junto a diversas empresas nas áreas de Engenharia de Software e Ciência de Dados através da iniciativa ExACTa PUC-Rio. Doutor e mestre em Engenharia de Sistemas e Computação na área de Engenharia de Software e bacharel em Ciência da Computação, todos pela UFRJ. Atuou por mais de 10 anos na indústria de software antes de se tornar professor (como desenvolvedor, consultor e diretor). É bolsista de produtividade do CNPq e possui mais de 150 artigos publicados nos principais veículos da sua área de atuação.
Tatiana Escovedo
Tatiana Escovedo Professora do Departamento de Informática da PUC-Rio, onde coordena cursos de pós-graduação lato sensu e colabora com pesquisas nas áreas de Ciência de Dados e Engenharia de Software. Gerente da área de Tecnologia, Gestão de Dados e Conhecimento da diretoria de Comercialização e Logística da Petrobras. Doutora em Engenharia Elétrica, na área de Métodos de Apoio à Decisão, Mestre em Informática na área de Engenharia de Software e bacharel em Sistemas de Informação, todos pela PUC-Rio. Autora de diversos livros e artigos na sua área de atuação.
Hugo Villamizar
Hugo Villamizar Professor de cursos de extensão e doutorando do Departamento de Informática da PUC-Rio, orientado pelo Professor Dr. Marcos Kalinowski. Formado em Sistemas de Informação pela Universidade Nacional da Colômbia e mestre em Informática pela PUC-Rio na área de Engenharia de Software, com dissertação premiada. Analista de Pesquisa e Desenvolvimento na iniciativa ExACTa PUC-Rio, atuando como engenheiro de software para sistemas habilitados em aprendizado de máquina, desde a especificação até sua implantação na nuvem.
Hélio Lopes
Hélio Lopes Professor do Quadro Principal do Departamento de Informática da PUC-Rio, onde orienta pesquisas de mestrado e doutorado e coordena projetos de pesquisa e desenvolvimento junto a diversas empresas na área de Ciência de Dados através da iniciativa ExACTa PUC-Rio. Doutor em Matemática, mestre em Informática e Engenheiro da Computação, todos pela PUC-Rio. Tem mais de 30 anos de experiência coordenando projetos de pesquisa e desenvolvimento junto a diversas empresas, tendo registrado patentes e acumulado premiações nesse contexto. É bolsista de produtividade do CNPq e possui mais de 150 artigos publicados nos principais veículos da sua área de atuação.
Dados do produto
- Número de páginas:
- 476
- ISBN:
- 978-85-5519-334-7
- Data publicação:
- 05/2023