--- title: Curso de Machine Learning em Projetos image: https://i.imgur.com/li84a5S.png --- # CURSO MACHINE LEARNING EM PROJETOS Esse é o site básico de descrição do curso, reservado para os alunos inscritos. O material do curso, com as transparências, cadernos jupyter e atividades se encontram no site próprio da turma (seja Google ClassRoom ou Moodle). Em caso de problema ou dúvida, mande uma mensagem pelo WhatsApp no grupo do curso, para o qual todos os alunos inscritos serão convidados! ## Atividades prévias ao início das aulas Abaixo duas sugestões que podem melhorar seu aproveitamento do curso: **1. Verifique seu domínio de python e pandas** Para quem não tem familiaridade com python e pandas recomendamos que realizem previamente dois mini-cursos gratuitos do Kaggle: [Python](https://www.kaggle.com/learn/python) (estimado em 5h) [Pandas](https://www.kaggle.com/learn/pandas) (estimado em 4h) Python é a linguagem de programação que utilizaremos durante o curso. Não é necessário se tornar um exímio programador em python pois utilizaremos a linguagem apenas como uma "cola" para conectar os diversos módulos já existentes em bibliotecas próprias de Machine Learning, como scikit-learn. Ainda assim é desejável ter alguma familiaridade com a sintaxe da linguagem, para ser mais produtivo. A parte mínima do python que será utilizada durante o curso será amplamente demonstrada e praticada nas atividades do curso. Pandas é uma biblioteca python especializada para ciência de dados, com dados tabulares, ou seja, em formato de tabela (como uma planilha no Excel), em que cada linha é uma observação e cada coluna uma variável relacionada às observações. Pandas ajuda na importação, limpeza, visualização, criação de variáveis derivadas, cálculos estatísticos, etc. utilizando tais dados tabulares. *É extremamente útil estar familiarizado com a **sintaxe de pandas**, para seleção de linhas, colunas, filtragem, agrupamento, aplicação de funções, tipos de dados, dados faltantes, etc.* **2. Definição de projeto para o curso** Faz muita diferença no seu aproveitamento do curso estar envolvido no desenvolvimento de um projeto de aplicação de ML em algum tema ou conjunto de dados que te interessa! Caso não tenha a menor ideia do que desenvolver como projeto durante o curso, passaremos um protótipo de projeto, que vocês poderão personalizar, utilizando dados do ENEM 2019 publicados pelo [Inep](http://inep.gov.br/web/guest/microdados), que possuem informações de alta qualidade sobre milhões de alunos que prestaram a prova do Enem, como desempenho individual nas diversas provas e vários metadados sobre cada aluno, como escola de origem e 22 variáveis de um questionário sócioeconômico sobre a família de cada aluno. Essa rica base de informações pode ser utilizada (e cruzada/complementada com outras bases como a de características das escolas, dados dos municípios e estados, etc.) para responder a perguntas complexas como "quais escolas mais agregam desempenho no Enem para seus alunos" ou "quais os determinantes do desempenho no Enem". Melhor ainda, se você conseguir especificar um projeto próprio que suscite seu interesse e ajude a motivá-lo a investir as dezenas de horas necessárias para desenvolver um projeto impactante, do qual você possa se sentir orgulhoso! Mas encontrar um "bom projeto" para aplicar suas técnicas de ML em desenvolvimento não é algo simples e requer pesquisa, criatividade, avaliação crítica dos determinantes do projeto e uma estratégia de seleção e priorização de projetos candidatos! Considerando o pouco tempo até o início das aulas, o rítmo rápido do curso, com bastante conteúdo técnico em apenas um mês de aula (em 10 encontros de 4h) é fundamental que o seu projeto seja viável nessas circunstâncias. Para isso, indicamos os elementos mais importantes que devem estar bem definidos no seu projeto: 1º **Disponibilidade imediata dos dados**: para ser viável para o curso é preciso dispor de uma cópia dos dados que pretende utilizar, desde os primeiros dias de aula! A primeira causa de fracasso de um projeto de ML está quase sempre relacionada a limitações na disponibilidade dos dados. Assim é *imprescindível* que você já disponha de uma cópia desses dados nos primeiros dias de aula! Considerando que é um fator preponderante, recomendo que pesquise possíveis projetos já em função de que dados você tem disponíveis. Idealmente, recomenda-se utilizar uma base de dados com a qual já esteja familiarizado ou que suscite seu interesse. 2º **Formato dos dados, tabulares ou textuais**: outra limitação dessa introdução ao ML é que trabalharemos unicamente com dados tabulares (em formato de tabela, como uma planilha no Excel, em que cada linha é uma observação e cada coluna uma variável relacionada às observações) ou textuais. Sendo possível combinações de dados tabulares e textuais, com colunas de texto, de números ou de categorias (por exemplo, sexo ou estado de residência). É possível, porém mais complexo, lidar com dados em outros formatos, como imagens, sons, vídeos, dados cartográficos não tabulares, séries temporais não tabulares, etc. No entanto, esses demais formatos estão fora do nosso escopo inicial. 3º **Dados anotados ou rotulados**: a sua tabela de dados precisa estar associada a uma coluna especial que será a variável dependente do seu conjunto de dados. Tecnicamente estaremos focado no curso em **aprendizado supervisionado** em que procuraremos prever os valores dessa coluna especial (chamada de variável dependente, anotação ou rótulo) em função dos demais dados presentes. Para isso, precisamos ter pelo menos algumas centenas dessas anotações já disponíveis nos nossos dados de treinamento para construir modelos preditivos. Essa variável dependente (ou variável objetivo ou ainda *target*, do inglês) é aquilo que o seu modelo preditivo irá procurar prever em função das demais variáveis do seu conjunto de dados. Geralmente, o *target* é o resultado de maior importância para o negócio e que procuraremos relacionar com as demais variáveis disponíveis. O *target* frequentemente é o resultado do processo que estamos modelizando e que pode ter sido criado por anotações manuais realizadas por pessoas ou pelo registro de resultados do passado. Por exemplo, em um projeto de avaliação de risco de financimento, as variáveis independentes podem ser dados cadastrais de cada cliente (idade, profissão, sexo, estado civil, renda, anos no emprego, volume de investimentos, etc.) e a variável dependente (*target*) pode ser o resultado do financiamento, ou seja se dado cliente pagou um determinado empréstimo ou tornou-se inadimplente. O registro histórico fornece esse resultado de adimplência/inadimplência para clientes do passado e queremos construir um modelo preditivo que possamos utilizar para suporte a decisão de concessão de novos financiamentos para clientes do presente, baseando nossa análise de risco de inadimplência nos resultados do modelo preditivo que extraiu padrões nas características dos clientes inadimplentes passados. Assim, para realizar esse projeto é preciso ter tanto os dados cadastrais de clientes passados e presentes, como o resultado de inadimplência dos clientes passados, para então prever o mais provável resultado de adimplência dos clientes presentes. Outro exemplo da importância dos dados anotados, seria para classificação de sentimento em texto. Além de dispor de um conjunto de dados com textos que manifestam algum sentimento positivo ou negativo, é preciso ter esse resultado já conhecido para algumas centenas de exemplos anotados. Essas anotações de quais sentimentos estão presentes nos dados de treinamento é que guiarão a otimização do modelo que irá classificar novos textos, cujo sentimento queremos classificar automaticamente. A **disponbilidade de dados anotados é o principal limitante** à aplicação de ML. Muitas vezes gostaríamos de prever um resultado, mas não dispomos de uma base de treinamento com esses resultados anotados, seja com base no passado ou por anotações manuais por especialistas no negócio. Existem outras técnicas de ML para essas situações (aprendizado não supervisionado) mas fora do escopo do curso. Assim, é muito importante definir com clareza qual a tarefa que se espera realizar com o projeto, quais são as variáveis independentes e qual a variável dependente que se deseja prever com base nas independentes e dispor de pelo menos algumas centenas de exemplos anotados (de preferência milhares de exemplos, mas esse número mínimo de exeplos anotados depende da complexidade da tarefa, que abordaremos durante o curso). É importante ressaltar que, com dados tabulares, em princípio, qualquer coluna pode ser interpretada como a variável dependente a ser prevista a partir das demais colunas. No entanto, algumas dessas relações de dependência fazem sentido e outras não. Daí a importância de conhecer do negócio! Por exemplo, com os dados do Enem, podemos procurar prever seu desempenho na prova com base nas respostas do questionário sócio-econômico, mas também poderíamos tentar prever qual a sua escola ou qual o seu estado de residência, com base nos demais dados, ou ainda prever a renda familiar com base nas demais respostas ao questionário socioeconômico. Se houver uma relação clara de dependência da variável target com as demais, o algoritmo de aprendizado irá extrair esse padrão. Mas se não houver essa relação de dependência, então o algoritmo permanecerá perdido! Como encontrar dados anotados disponíveis que possam te interessar é a parte mais limitante para construir seu projeto, forneço algumas indicações que podem ajudar: - Painel de projetos de alunos de turmas passadas do curso de ML em Projetos (com descrição suscinta, gravação da apresentação de mais de 80 projetos e, em alguns casos, código publicado): https://datastudio.google.com/u/0/reporting/fc8c5035-8650-4478-ac85-2e7d551bd2a9/page/blzXB Observação: não se preocupem de início com os detalhes técnicos de como os alunos anteriores realizaram o projeto, mas apenas na descrição do problema de negócio e das fontes de dados utilizadas. Ao final do curso vocês também serão capazes de desenvolver projetos nesse nível de complexidade técnica! - Lista de descrições de projetos bem sucedidos na Administração Pública: https://docs.google.com/document/d/172j3IrzSIPM-U26faB4Qtkg3XCfZRaZP9I6-qoX9mec/edit?usp=sharing - Painel colaborativo com fontes de dados: https://funretro.io/publicboard/bJT50t6W4pgLc0bu29AtFDHroVf1/ec9a6b50-4513-4853-9ac0-a433989e49cc Recomendo vividamente, que **invista algum tempo explorando as três listas acima, para estimular sua imaginação e despertar seu interesse por alguma aplicação ou base de dados!** Finalmente, nos primeiros dias de aula teremos uma fase de validação de seus anteprojetos, com *feedback* dos instrutores quanto à viabilidade para o curso. Sugiro assim que elabore sua própria lista com algumas alternativas, mas, caso não consiga pensar em nada, ainda assim teremos o projeto do Enem para lhe fornecer. ## Cronograma das aulas As aulas ocorrerão todas as segundas, quartas e sextas-feiras, das 8h30 às 12h30, por transmissão ao vivo com interação com os alunos. | aula| conteúdo | | -------- | -------- | -------- | | 1 | Conceitos, ambiente e ferramentas | | 2 | Classificação com KNN e regressão logística | | 3 | Avaliação e otimização de modelos, pré-processamento, validação cruzada | | 4 | Regressão linear, variáveis categóricas, busca de hiperparâmetros | | 5 | Projeto dirigido, balanceamento de classes, dados faltantes | | 6 | Árvore de decisão: construção, visualização e interpretação | | 7 | Processamento de Linguagem Natural (NLP): bag-of-words, tf-idf e classificação de textos | | 8 | Combinação de modelos: ensemble. Random Forest | | 9 | Pipeline com dados mistos (categóricos, numéricos e textuais). Interpretação de modelos | | 10 | Apresentações dos projetos, feedback | As aulas são transmitidas por videoconferência, com atividades em cadernos jupyter executados em ambiente gratuito em nuvem (Google Colaboratory https://colab.research.google.com/), com a linguagem Python e bibliotecas pandas e scikit-learn. O curso é focado em aprendizado supervisionado, tanto com dados tabulares quanto textuais, com a aplicação sistemática dos principais conceitos e técnicas de machine learning: validação cruzada, métricas, pré-processamento dos diversos tipos de dados (categóricos, numéricos e textuais), engenharia e seleção de features, otimização de hiperparâmetros, ensemble, interpretação de resultados e modelos treinados, primeiros passos em Processamento de Linguagem Natural (NLP), com classificação temática de textos e análise de sentimentos em português. ## Recomendação de leitura A parte técnica do curso traz bibliografia própria, mas para um mergulho inicial em Machine Learning acho desejável ter uma motivação clara dos benefícios esperados do conhecimento dessas técnicas. Nesse sentido, recomendo que leiam o recém-publicado livro do Daniel Kahneman, ***Noise: A Flaw in Human Judgment***. ![](https://www.littlebrown.com/wp-content/uploads/2021/06/9780316451383-1.jpg?fit=436%2C675) O livro é realmente excelente: escrito de forma simples e convincente, muito bem pesquisado, trazendo ótimas referências e resultados de estudos em áreas psicológicas, médicas e judiciais. Acredito que possa ter uma influência significativa na percepção cultural de falhas no julgamento humano e oportunidades de uso de algoritmos. Para quem ainda estiver reticente em empreender essa leitura, seguem apresentações em vídeo do livro: (4 min) https://www.littlebrown.com/titles/daniel-kahneman/noise/9780316451383/ (44 min) https://www.youtube.com/watch?v=V9-VkegRtjA ## Matemática e Estatística necessárias A parte matemática e estatística para Machine Learning é um universo próprio e sem fim, fascinante, mas de aplicabilidade não imediata. No curso, desenvolveremos intuições baseadas em analogias e, sobretudo, experimentos computacionais que reforçarão a compreensão de um fenômeno, suas propriedades e limitações, sem necessariamente passar por uma formulação matemática, geral, abstrata e demonstrável. Essa abordagem tende a produzir resultados aplicados mais rápidos e ser mais divertida para quem ainda não possui uma extensa e sólida bagagem matemática. Quando tiverem concluído seus primeiros projetos e estiverem familiarizados com propriedades de alguns dos algoritmos mais comumente utilizados, vocês poderão sentir curiosidade em ter um quadro geral explicativo mais amplo e sólido, pesquisando então as partes estatísticas necessárias para os próximos passos. Aqui a analogia é que em vez de explicarmos toda a teoria termodinâmica do funcionamento abstrato e geral de qualquer motor, começaremos utilizando veículos prontos e construindo variações de motores clássicos, produzindo trabalho útil e imediatamente aplicável, para que vocês se tornem *bons motoristas* mais do que *designers de motores* e, assim, consigam ir rapidamente para onde quiserem com seus projetos, com maior autonomia! Essa abordagem não é a que adotamos apenas por efetividade didática, mas também por que a prática em ML e DL avançou mais rapidamente que a teoria, nos últimos anos. Assim, vemos machine learning mais como uma área aplicada de engenharia do que um desdobramento teórico de matemática e estatística. No entanto, se você procura uma abordagem inversa, com um forte embasamento teórico antes de considerações práticas de aplicabilidade típicas da engenharia, recomendo o ótimo curso e livro de Yaser Abu-Mostafa (https://work.caltech.edu/telecourse), o livro de refência em Deep Learning de Goodfellow e Bengio (https://www.deeplearningbook.org/) e a "Bíblia da IA", de Russel e Norvig (http://aima.cs.berkeley.edu/) ## Instrutores ![](https://i.imgur.com/0OmkBTM.jpg =100x) **ERICK MUZART FONSECA DOS SANTOS** Graduado em computação, especializado em análise de dados e Deep Learning (DL). Egresso do Deep Learning Summer School da Université de Montreal, Canadá, em 2017, onde teve contato com o estado da arte de DL e com alguns dos melhores pesquisadores mundiais da área. Auditor e cientista de dados no Tribunal de Contas da União (TCU), lotado no Centro de Pesquisa e Inovação onde atua no programa de capacitação dos auditores em análise de dados. Um dos fundadores do grupo de estudo em DL de Brasília, tendo sido instrutor em mais de uma dezena de cursos, presenciais e à distância, e na pós-graduação em ciência de dados do TCU. ![](https://i.imgur.com/KD2YrsC.jpg =100x) **FERNANDO LUIZ BRITO DE MELO** Cientista de dados do Senado Federal, é bacharel em Administração e possui especialização em Inteligência Artificial pela Johns Hopkins University. Com experiência de mais de 20 anos em projetos de análise de dados, é co-organizador do grupo meetup Machine Learning Brasília com mais de 1.800 participantes. Co-organizador do Grupo de Estudos Deep Learning Brasília, onde atua como professor voluntário com o objetivo de popularizar o uso da Inteligência Artificial e organizar cursos abertos à toda a comunidade de Brasília. Foi instrutor em pelo menos 8 cursos de machine learning e deep learning, ministrados presencialmente no Centro de Treinamento ISC-TCU e remotamente pela ENAP e TCU. ## Referências ao material da chamada O site aberto com a descrição do curso continua disponível no endereço original: [informações sobre o curso para quem ainda não é aluno](https://hackmd.io/@emfs/H1Br3I8UP) Todos querem os resultados incríveis criados com **Inteligência Artificial** (IA), mas apenas poucos conseguem desenvolver sozinhos programas que realmente aproveitam o poder da IA. Aprenda conosco de forma prática e guiada por instrutores experientes que já conseguiram levar centenas de pessoas como você a vencerem seus primeiros desafios com Machine Learning (ML), realizando projetos de sucesso e ganhando autonomia para novas aplicações! Nesse curso on-line de 40h, em 10 encontros, você desenvolverá a habilidade de alavancar ML, para substituir código que explicitamente define os passos a serem executados pelo computador, por modelos preditivos que extraem automaticamente padrões dos seus dados de exemplos. Desde as primeiras aulas você irá desenvolver modelos úteis com aplicação no mundo real e ao longo do curso irá construir um projeto completo! As aulas serão gravadas e ficarão à disposição dos alunos que não puderam comparecer no horário do encontro interativo. ### *Live* de apresentação do curso Realizamos uma apresentação do curso para tirar dúvidas dos interessados, com gravação publicada no [YouTube](https://youtu.be/BiyMPMLWE_I). Slides da apresentação: [GDrive](https://drive.google.com/file/d/1ZuaBiPuqP1wOMdUccWJbRnC-u-DhEsoO/view?usp=sharing) ou [DropBox](https://www.dropbox.com/s/ssqbk1z2eynu264/Apresenta%C3%A7%C3%A3o_Live_MLprojetos_Outubro_2020.pptx?dl=0) ### Pré-requisitos Para melhor aproveitamento do curso, recomendamos que os interessados já tenham alguma experiência em programação pois desenvolveremos código em python utilizando bibliotecas próprias para ciência de dados, como pandas e scikit-learn. Indicaremos referências para consolidar a sintaxe básica de python e pandas antes do início do curso. A fluência com essas bibliotecas e ferramentas será desenvolvida ao longo do curso. Não há pré-requisito em matemática ou estatística, pois desenvolveremos a intuição dos conceitos por meio de experimentação computacional. Espera-se um nível de inglês suficiente para extrair informações de textos técnicos, como a documentação de bibliotecas de software, como a principal biblioteca que utilizaremos, [scikit-learn](https://scikit-learn.org/stable/index.html). Em caso de problema ou dúvida, [](comment:_envie_um_email_para_cursoMLprojetos@gmail.com_ou_melhor_ainda) mande uma mensagem pelo WhatsApp no grupo do curso (para o qual todos os alunos inscritos serão convidados). ![Auditório cheio em turma anterior, presencial](https://i.imgur.com/8w0lj8N.jpg)