Skip to content

Latest commit

 

History

History
328 lines (235 loc) · 26.8 KB

README.md

File metadata and controls

328 lines (235 loc) · 26.8 KB

DSWP - DATA SCIENCE WITH PYTHON

0. Avisos, regras e um pouquinho de como eu gostaria que as coisas funcionassem

Ferramentas que usaremos nesse treinamento: Google Colab, Github e Turtoise.

Grupos de trabalho

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!

Alguns avisos

  • 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!

1. Instalar e preparar o ambiente para o treinamento Data Science com Python

1.1. Instalar Anaconda

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.

Sugestões de leitura:

1.2. Jupyter Notebook

JupyterNotebook

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.

Sugestões de leitura:

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.

Sugestões de leitura:

1.4. Github

GitHub Fonte

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.

Sugestões de leitura:

1.5. Docker - NÃO SE PREOCUPEM COM O DOCKER, POIS NÃO VAMOS USAR NESTE TREINAMENTO

Docker

Fonte

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.

Sugestões de leitura:

Turtoise é um client para Git em Windows. Resumidamente, você consegue via Turtoise aplicar todos os comandos do Git usando point-and-click.


2. Download dos dataframes do treinamento

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).


3. Objetivos do Treinamento

3.1. Objetivo Geral:

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.

3.1.1. Neste treinamento vamos estudar e aprender:

  • 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;

Sugestões de leitura:


4. A Lei de Pareto

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;

4.1. Fatos importantes

  • 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.

5. Bibliografia usada neste curso


6. Python

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.


7. CRISP-DM PROCESS

CRISP-DM Fonte

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.

7.1. 1BU - BUSINESS UNDERSTANDING

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.

BusinessUnderstanding

SMART

7.1.1. Quais os principais outputs desta 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;

7.2. 2DU - DATA UNDERSTANDING (Entendimento dos Dados)

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.

DataUnderstanding

7.2.1. EDA - Exploratory Data Analysis (Análise Exploratória de 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.

7.3. 3DP - DATA PREPARATION (Preparação dos Dados)

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.

DataPreparation

7.3.1. 3DP_Feature Engineering (Engenharia de Dados)

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.

7.3.2. 3DP_Missing Values Handling (Lidando com valores faltantes nos dDados)

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.

7.3.3. 3DP_Outliers Handling (Lindando com Outliers nos Dados)

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.

7.3.4. 3DP_Data Transformation (Transformação de Dados)

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:

StandardScaler

MinMaxScaler

MaxAbsScaler

RobustScaler

Normalizer

* 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}).

7.3.5. 3DP_Feature Selection ou Dimensionality Reduction

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.

Sugestão de leitura:

7.4. 4M - MODELING

Algoritmos diferentes podem ser aplicados ao mesmo problema. Sugiro aplicar o maior número de algoritmos possveis e escolher o que entregar melhor resultados.

Modeling

7.4.1. Supervised vs Unsupervised Learning

Supervised_X_Unsupervised

7.4.2. Machine Learning Map

Machine Learning Map Source: Choosing the right estimator

7.4.3. Modeling With Python

  • 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.

Cross-Validation Fonte

  • 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:

X Fonte

  • 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.

Ensemble Source: Building an Ensemble Learning Model Using Scikit-learn

Sugestão de leitura:


7.5. 5MSE - SELEÇÃO E AVALIAÇÃO DOS MODELOS DE MACHINE LEARNING

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.

Evaluation


7.6. 6D - Deployment (ou implantação dos Modelos de Machine Learning)

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

Deployment

Diário de Bordo

Aula 1

  • Set up do Google Colab;
  • Set up do Github;
  • Entender/medir o conhecimento da turma - Kahoot;
  • Fork do Github;

Aula 2

  • Sincronizar o Github individual (Pull Requests);
  • Notebook NB01_01__Getting_Started;
  • Notebook B;
  • ...