Vamos dividí-los em grupos para trabalhem colaborativamente em busca de soluções para os problemas que serão propostos. Portanto, cada aluno será aleatoriamente atribuído a um grupo.
- Identifique seus parceiros de grupo;
- Se organizem: criem um canal de comunicação no Telegram, WhatsApp, Discord e etc para vosso grupo;
- Definam o líder do grupo;
- O grupo serve para discutirem alternativas/soluções para os problemas que vos serão apresentados!
- Todo o material será entregue digitalmente via Github. Não se preocupe em copiar! Gostaria da sua total atenção, pois temos muito conteúdo. Além disso, seu foco é primordial para aprender os conceitos;
- Faça perguntas! Se alguma coisa (material, explicação e etc) não estiver claro, pergunte-me. Se o material não estiver claro, notifique-me para que eu possa melhorá-lo.
- Esse material é e sempre será um trabalho em andamento com melhoria contínua. Por favor, ajude-me a melhorá-lo porque ele estará disponível aos demais colegas que não tiveram a oportunidade de estar aqui conosco hoje;
- Dependendo do rumo que as coisas tomarem, pode ser que eu não consiga cobrir todo o conteúdo do curso, mas prometo me esforçar para cobrir pelo menos os pontos principais da Ciência de Dados;
- Se você identificar qualquer aplicação deste conhecimento/conteúdo em sua área/departamento, por favor, compartilhe comigo. Mapear as necessidades dos clientes faz parte do processo de melhoria contínua da formação, além de me ajudar a pensar e construir exemplos/estudos de caso/projetos cada vez mais associados à realidade dos clientes;
- Participe e compartilhe conhecimento, não importa quão tímido (a) ou reservada você seja!
- Sua contribuição é muito importante;
- Estou aqui para ajudá-lo, mesmo quando o curso acabar!
- Seu feedback honesto e sincero é um presente pra mim, não importa o quanto você o julgue difícil/duro;
- Estou aqui para aprender também!
Anaconda é uma ferramenta/plataforma para Data Science que permite gerir as distribuições de Python para os sistemas operacionais Windows, Linux e MAC. Então, por favor, instale o Anaconda. Neste tutorial, você vai encontrar os passos necessários para instalar o Anaconda no seu sistema operacional. Ao instalar o Anaconda, você estará instalando um ambiente para Data Science com todas as ferramentas necessárias como Python e suas principais bibliotecas, Jupyter Notebook e Spyder.
- How to Install Python on Windows – Possible Issues after Installation
- Tutorial prático de como instalar Anaconda para utilizar Python/R
- How to check your Anaconda version
Jupyter Notebook é um ambiente computacional web, interativo para criação de documentos “Jupyter Notebooks”. O documento é um JSON com um esquema e contém uma lista ordenada de células que podem conter código, texto, fórmulas matemáticas, plotagens e imagens. A extensão dos notebooks é “.ipynb”. Vamos criar nossos programas Python utilizando principalmente o Jupyter Notebook.
- Jupyter Notebook Tutorial: The Definitive Guide
- Jupyter Notebook for Beginners: A Tutorial;
- Supercharging Jupyter Notebooks;
- Getting Started With Jupyter Notebook for Python
- Bringing the best out of Jupyter Notebooks for Data Science
1.3. Google Colab
Se você tem uma conta do Google, você pode usar o Google Colab para executar seus scripts Python. Esta é uma interessante e rápida alternativa para usar o Python on-line sem qualquer instalação. Adicionalmente, você pode:
- integrar o Google Colab com o GitHub ou Google Drive para guardar seus projetos de Data Science;
- usar o Jupyter Notebook no Google Colab, permitindo que você use a GPU Tesla K80, ou seja, aproximadamente 12 GB de memória RAM;
Neste treinamento, vou utilizar o Google Colab como principal ferramenta de trabalho.
- Getting Started With Google Colab
- Getting the Most Out of Your Google Colab (Tutorial)
- How to use Google Colab
- Mastering the features of Google Colaboratory !!!
1.4. Github
GitHub é uma plataforma de hospedagem de código para colaboração e controle de versão, permitindo que as equipes de desenvolvimento trabalhem juntos. Neste treinamento, vamos usar muito o Github para colaboração e controle de versão dos Notebooks.
1.5. Docker - NÃO SE PREOCUPEM COM O DOCKER, POIS NÃO VAMOS USAR NESTE TREINAMENTO
Docker é uma alternatia mais eficiente à virtualização que garante maior facilidade na criação e administração de ambientes isolados chamados de containers, tendo por objetivo disponibilizar software/soluções para o usuário final de forma mais rápida.
- AFINAL, O QUE É DOCKER?
- What is Docker and why is it so darn popular?
- Learn Enough Docker to be Useful
1.6. Turtoise
Turtoise é um client para Git em Windows. Resumidamente, você consegue via Turtoise aplicar todos os comandos do Git usando point-and-click.
Os dataframes que serão utilizados no treinamento estarão aqui. Faça o download dos dataframes para o seu computador (ou Github ou Google Drive).
Machine Learning é a principal ferramenta para a Inteligência Artificial e é um dos campos científicos mais amplamente estudados atualmente. Uma quantidade considerável de literatura foi publicada sobre Machine Learning. Nosso objetivo neste treinamento é fornecer os aspectos mais importantes do Machine Learning usando o Python.
-
os princípios e técnicas fundamentais de Data Science através de exemplos, casos reais e práticos;
-
Formular uma solução plausível e estratégica para resolver probemas da Ciência de Dados usando o "Data Science Process" incluindo: formulação, EDA (Análise Exploratória de Dados incluindo Feature Engineering), Modelagem (incluindo hyperparameters de tunning e modelos de Machine Learning), Avaliação (incluindo Validação Cruzada), Implantação, Monitoramento e Feedback;
-
Usar EDA para avaliar e entender o impacto das anormalidades de dados (Missing Values e Outliers), bem como aplicar o tratamento apropriado;
-
Usar EDA para identificar variáveis/features redundantes. Nosso objetivo será selecionar as variáveis mais importantes para o modelo e tomada de decisão.
-
Entender o impacto das amostra desequilibradas (Imbalanced samples) nos modelos de Machine Learning;
-
Preparar dataframes (conjunto de dados) para aplicação dos algoritmos de Machine Learning mais apropriados, incluindo a divisão apropriada do conjunto de dados para treinamento, validação e teste;
-
Entender e aplicar as principais transformações de dados;
-
Entender, identificar e aplicar o algoritmo de Machine Learning apropriado para um determinado problema, bem como apresentar os prós e contras de cada algoritmo;
-
Entender, identificar e aplicar adequadamente métricas para avaliação da qualidade dos modelos de Machine Learning;
-
Entender, identificar, evitar e/ou tratar problemas relacionados à overfitting;
- As melhores plataformas de Competição para Cientistas de Dados
- The 5 Sampling Algorithms every Data Scientist need to know
- 150+ Business Data Science Application in Python
Foco no mais relevante e importante primeiro! A ideia do curso é aplicar a Lei de Pareto para que você aprenda e domine 20% dos contúdos de Data Science e Python que lhe permita fazer 80% do trabalho necessário de um CD.
- A seguir, outros exemplos da aplicação da Lei de Pareto:
- 80% da riqueza da Itália pertence a apenas 20% da população;
- 20% dos melhores funcionários geram 80% dos resultados;
- 20% dos consumidores geram 80% das receitas/lucros;
- Dados nunca estão limpos e é no tratamento e preparação dos dados que o Cientista de Dados gasta aproximadamente 80% do seu tempo. Considere que se "entra lixo --> sai lixo". Mais uma: o melhor algoritmo de Machine Learning do mundo não vai resolver o problema caso os dados não tenham qualidade.
- 95% dos problemas não requerem Deep Learning. Veremos alguns exemplos em que os modelos simples e tradicionais entregam ótimos resultados em comparação com modelos mais sofisticados;
- Em 90% dos casos, Generalized Linear Models (GLM) resolve o problema;
- Big Data é somente mais uma ferramenta;
- Sugiro fortemente você abrir a mente para o paradigma Bayesiano;
- Academia e Business são mundos totalmente diferentes;
- Apresentação é a chave - Aprenda a vender suas ideias e domine Powerpoint e Excel;
- Todos os modelos são falsos, mas alguns são úteis. Quotations of George Box
- Não existe (pelo menos até agora) processo automático para Machine Learning, embora existam ferramentas que nos ajudarão a selecionar as melhores variáveis, na maioria das vezes você terá que sujar a mão.
- Python é fracamente tipada. No caso do Python, é tipagem dinâmica, ou seja, posso alterar os tipos das variáveis a qualquer momento.
- Data Science from Scratch
- Hands-On Machine Learning with Scikit-Learn & Tensorflow
- Python for Data Analysis
- Python Data Science Handbook
Guia ou melhores práticas para se escrever códigos mais claros em Python. Em outras palavras, é uma forma de (tentar) padronizar a forma de se escrever Python codes.
Eu recomendo fortemente a investirem um tempo a ler este guia. Porque?
- Escrevemos códigos somente para nós mesmos?
- Trabalhamos sozinhos?
- Quais as vantagens de termos (uma tentativa) códigos códigos?
Algumas vantagens:
- Legibilidade - Escreva e documente códigos Python que lhe permita lembrar o que foi feito, como foi feito e porque foi feito. Isso ajuda quem for ler o seu código. Uma das máximas dos Developers é que é horrível entender o código que outra pessoa escreveu. Portanto, seja claro ao escrever seus códigos;
- Convenções - Explicit is better than implicit (https://www.python.org/dev/peps/pep-0020/). Ao escrever códigos Python você precisa definir variáveis, funções, classes, pacores e etc. Definir nomes claros para funções, variáveis e etc vai te ajudar a economizar tempo e energia no futuro, pois pelo nome da variável (por exemplo), você será capaz de saber o tipo, o que ela guarda e etc. A seguir, algumas convenções:
Tipo | Convenção | Exemplo |
---|---|---|
Funções, variáveis, métodos, módulos | Use letras minúsculas e separe palavras com "_" (underscore). | minha_funcao, soma, minha_funcao, meu_metodo |
Classes | Comece cada palavra com letra maiúscula e separe palavras com "_" (underscore). | Modelo, Soma, Retorna_Soma |
Constantes | Use letras maiúsculas e separe palavras com "_" (underscore). | MINHA_CONSTANTE, STRING_CONSTANTE |
Pacotes | Use letras minúsculas e NÃO separe palavras com "_" (underscore). | meupacote, soma |
No Notebook introdutório NB01_01__Getting_Started.ipynb nós vamos falar um pouco mais sobre isso.
PEP significa Python Enhancement Proposal.
CRISP-DM (Cross-Industry Process for Data Mining) é uma metodologia amplamente utilizada e estruturada para o planejamento e desenvolvimento de um projeto de Data Mining.
Esta fase é dedicada a entender o que se deseja alcançar a partir de uma perspectiva de negócios. O objetivo deste estágio do processo é descobrir fatores importantes que possam influenciar o resultado do projeto. Há várias metodologias que podem ajudá-lo nesta fase. Sugiro a utilização da metodologia SMART para ajudá-lo nesta fase.
- Estebelecer claramente os objetivos do Projeto;
- Produzir o Project Plan (Recursos, limitações, suposições, riscos e etc);
- Definir critérios de sucesso do Projeto;
O foco desta fase está na coleta e exploração dos dados. Lembre-se de que a precisão dos modelos de Machine Learning depende da quantidade e qualidade dos dados.
Também conhecido por EDA, nesta fase nosso foco está na exploração do dataframe, descobrir relações e descrever os dados em geral. Utilize-se das técnicas de Data Visualization para detectar relações relevantes entre as variáveis, desequilíbrios de classes e identificar variáveis mais importantes.
Nesta fase o Cientista de Dados vai investir 80% do seu tempo, pois esta fase é dedicada a coletar, preparar, transformar e limpar dados: remover duplicatas, corrigir erros, lidar com Missing Values, normalização, conversões de tipo de dados e etc.
Nesta fase temos 2 objetivos: corrigir problemas nas variáveis e derivar novas variáveis.
-
É uma atividade que requer muita criatividade, intuição, conhecimento dos dados e do problema a ser resolvido;
-
Não há um guia ou livros para nos ajudar a projetar e selecionar bons atributos;
-
Muitas vezes o Data Scientist deve consultar o Business Analyst para fazer sentido com os dados;
-
O principal objetivo da Feature Engineering é reduzir a complexidade do modelo;
-
Geralmente aplicar transformaçes como "raiz quadrada", "elevar à 3 potência" ou "log" em certas colunas melhora a qualidade das predições uma vez que estas transformações corrigem a distribuição das variáveis.
-
Transfor e alterar tipos das variáveis;
-
Portanto, Feature Engineering tem 2 objetivos/fases:
- Fase 1: O foco desta fase é corrigr possveis problemas de preenchimento das variáveis. Por exemplo, considere a variável 'Sexo' com os seguintes preenchimentos: m, M, Male, Men, Man, mALE, MALE, tudo isso para designar o sexo masculino. Isto é um problema de preenchimento e nesta fase vamos corrigir esses problemas.
- Fase 2: Criar mais atributos a partir dos atributos disponíveis.
Nosso foco nesta fase é identificar e tratar os Missing Values que neste curso são chamados de NaN (Not a Number). A tarefa de tratar os NaN são também chamados de Imputing Missing Values. Quando estamos diante de uma variável com grande número de NaN's (tanto numricas quanto categóricas) uma prática interessante é construir uma variável indicadora para indicar se aquele registro é ou não um NaN. Veremos isso mais tarde na prática.
Nosso foco aqui é identificar e tratar os Outlier. Tratar outliers significa, por exemplo, descartá-lo/deletá-lo ou imputá-lo usando Média/Mediana/Moda. Outra alternativa é aplicar o Máximo para os Outliers superiores e Mínimo para os outliers inferiores. O Gráfico de Boxplot pode ajudar nesta fase. Uma outra alternativa interessante é usar K-Means para agrupar as observaçes da variável. Neste caso, ter-se-à um cluster com os outliers, tanto superiores quanto inferiores.
Significa colocar as variáveis numa mesma escala. Há várias transformações que podem ser aplicadas nesta fase. Principais transformações que podem ser aplicadas nas variáveis:
* Aplica as normas L1 ou L2. A norma L2 é default no scikit-learn.
Obs.: As funções matemáticas desta sessão foram escritas com a ajuda do site: https://www.codecogs.com/eqnedit.php?latex=\mathcal{W}(A,f)&space;=&space;(T,\bar{f}).
Selecionar os melhores atributos/variáveis para o(s) modelo(s) de Machine Learning. Pode-se utilizar Random Forest para avaliar a importância de cada atributo/variável para o modelo.
Algoritmos diferentes podem ser aplicados ao mesmo problema. Sugiro aplicar o maior número de algoritmos possveis e escolher o que entregar melhor resultados.
Source: Choosing the right estimator
- Amostras de treinamento e teste
Nesta fase o Cientista de Dados deve selecionar aleatoriamente as amostras de treinamento e teste (ou validação) dos modelos de Machine Learning. Geralmente usamos 70% da amostra para treinamento e o restante, 30%, para teste/validação. Outras opções são usar os percentuais 80/20 ou 75/25.
- Treinamento do Modelo de Machine Learning
Treinar o modelo com os dados significa encontrar o melhor (ou a melhor combinação de algoritmos de Machine Learning) que explica o fenômeno sob estudo. Vamos discutir esse tópico com mais detalhes mais tarde.
As informaçes do dataframe devem estar convenientemente organizadas da seguinte forma:
- Parameter Tuning (ou otimização dos parâmetros dos modelos de Machine Learning)
Esta fase tem por objetivo otimizar o melhor modelo de Machine Learning da fase anterior. Os hiperparâmetros de modelos podem incluir: número de etapas de treinamento, taxa de aprendizado, valores de inicialização e distribuição, etc.
- Ensemble Methods (ou combinação de modelos de Machine Learning)
Ensemble Methods envolve a utilização de mais de um algoritmo de Machine Learning são treinados para resolver o mesmo problema e combinados para obter melhores resultados.
Source: Building an Ensemble Learning Model Using Scikit-learn
- Ensemble methods: bagging, boosting and stacking
- Ensemble Methods in Machine Learning: What are They and Why Use Them?
- Ensemble Learning Using Scikit-learn
- Let’s Talk About Machine Learning Ensemble Learning In Python
- Boosting, Bagging, and Stacking — Ensemble Methods with sklearn and mlens
- Tune: a library for fast hyperparameter tuning at any scale
Nesta fase identificamos e aplicamos as melhores métricas (Accuracy, Sensitivity, Specificity, F-Score, AUC, R-Sq, Adj R-SQ, RMSE (Root Mean Square Error)) para avaliar o desempenho/acurácia/performance dos modelos de Machine Learning. Treinamos os modelos de Machine Learning usando a amostra de treinamento e avaliamos o desempenho/acurácia/performance na amostra de teste/validação.
Implementa o modelo (ou conjunto de modelos nos casos de Emsembles Methods).
"For every $1 you spend developing an algorith, you must spend $100 to deploy and support it". Tom Davenport
- Set up do Google Colab;
- Set up do Github;
- Entender/medir o conhecimento da turma - Kahoot;
- Fork do Github;
- Sincronizar o Github individual (Pull Requests);
- Notebook NB01_01__Getting_Started;
- Notebook B;
- ...