Projeto Integrado em Aprendizado de
M´
aquina
Arquitetura
Geanderson Esteves dos Santos
Cronograma
17/09 - Conceitos Fundamentais
27/10 - Arquitetura + Ponto de Controle I
05/11 - Visualiza¸c˜ao + Ponto de Controle II 17/12 - Apresenta¸c˜ao Projeto Final
Distribui¸c˜ao de Pontos
15 - Ponto de Controle I (Aula 2) 15 - Ponto de Controle II (Aula 3) 20 - Apresenta¸c˜ao do Projeto (Aula 4) 20 - Parte Escrita (Aula 4)
30 - Entreg´aveis Projeto (Aula 4)
Pol´ıtica de Atraso: Cada dia de atraso ser´a descontado 20% da nota
Atividades Avaliativas
Ponto de Controle I (27/10) Parte Escrita Vis˜ao Geral
Ponto de Controle II (05/11)
Apresenta¸c˜ao Oral sobre a Prototipa¸c˜ao Apresenta¸c˜ao do Projeto (17/12) Parte Escrita (17/12)
Recursos Contato geanderson@dcc.ufmg.br Site da Disciplina http://homepages.dcc.ufmg.br/~geanderson/piam.html GitHub da Disciplina https://github.com/gesteves91/piam Canvas https://pucminas.instructure.com/courses/6899 4
T´opicos
1. Reportando os Resultados
2. Ferramentas para Aprendizado
3. An´alise Explorat´oria de Dados
4. Pipeline de Aprendizado de M´aquina
5. Ambiente de Desenvolvimento
6. Projeto do Curso
Breve Introdu¸c˜ao ao Tex
O formato tex foi proposto por Donald Knuth em 1978 Inicialmente, o tex foi proposto para facilitar a impress˜ao de equa¸c˜oes matem´aticas em sistemas computacionais
Considerado o sistema tipogr´afico mais sofisticado at´e os dias atuais
´
E um formato muito usado na academia, e n˜ao somente na computa¸c˜ao, mas em outras ´areas do conhecimento
Surgimento do Latex
A partir do tex, em 1984, surgiu o formato LATEX
Foi concebido como um sistema de software para prepara¸c˜ao de documentos
Ao contr´ario do formato .doc, onde “o que vocˆe ver ´e o que vocˆe tem”
No LATEX, vocˆe trabalha com o texto plano (“plain text”)
Muito utilizado devido a facilidade de usar templates pr´e-definidas Assim, evita a preocupa¸c˜ao com normas de escrita (ex. ABNT, APA, etc)
Comandos B´asicos do Latex Input: \documentclass{article} \begin{document} Hello World! \end{document} Output: Hello World!
Referˆencias para Utilizar Latex
Referˆencia Oficial:
https://www.latex-project.org/ Overleaf:
https://www.overleaf.com/project Tutorial:
https://www.latex-tutorial.com/
Sugiro fortemente utilizar o LATEX, se o seu projeto pode virar um
artigo ciˆent´ıfico
IPython
IPython ´e um terminal de linha de comando para computa¸c˜ao interativa
A vers˜ao baseada em navegadores ´e conhecida como interface de Notebook
− Suporte para visualiza¸c˜ao de dados interativos e uso de kits de ferramentas GUI
− Intera¸c˜ao interpret´avel e flex´ıvel − Ferramentas para computa¸c˜ao paralela
Jupyter Notebook
Uma ferramenta muito poderosa para desenvolver interativamente projetos de ciˆencia dos dados
O que ´e um notebook?
Um notebook integra c´odigo e sa´ıda em um ´unico documento que pode conter:
− Visualiza¸c˜ao − Narrativa de texto − Equa¸c˜oes matem´aticas − E outros tipos de m´ıdia
Jupyter Notebook
Uma ferramenta muito poderosa para desenvolver interativamente projetos de ciˆencia dos dados
O que ´e um notebook?
Um notebook integra c´odigo e sa´ıda em um ´unico documento que pode conter:
− Visualiza¸c˜ao − Narrativa de texto − Equa¸c˜oes matem´aticas − E outros tipos de m´ıdia
Jupyter Notebook
Notebooks s˜ao muito utilizados em todo processo de ciˆencia dos dados, mas principalmente no EDA
Jupyter foi pensado para as linguagens Julia, Python, e R ´
E um projeto open-source (como praticamente todos projetos nessa ´area)
Clientes Jupyter
Os clientes mais conhecidos s˜ao: − Jupyter Notebook (Local) − Jupyter Lab (Local)
− Google Colaboratory (Nuvem)
Vocˆe pode usar em editores conhecidos como: − PyCharm
− VS Code
Componentes do Jupyter
Um Jupyter Notebook possui duas estruturas principais: − C´elula: Um recipiente de texto ou c´odigo execut´avel que ´e
exibido em um notebook
− Kernel: O motor computacional que executa o c´odigo contido no notebook
C´elula de um Notebook
Uma c´elula pode conter duas entradas Python e Markdown: − Qualquer c´odigo em Python pode ser executado
interativamente em uma c´elula (.py)
− Qualquer escrita em Markdown pode ser executada em uma c´elula (.md)
A combina¸c˜ao dessas duas estruturas torna o notebook uma fonte muito rica de informa¸c˜ao
O notebook guarda a ordem de execu¸c˜ao das c´elulas
Markdown
Markdown ´e uma linguagem muito simples, f´acil de entender, e que formata texto puro
Sua sintaxe ´e muito parecida com HTML Guia oficial:
Jupyter Kernel
O Kernel ´e o respons´avel por executar as c´elulas ´
E poss´ıvel alterar o Kernel para suportar outros ambientes e at´e outras linguagens de programa¸c˜ao
O Kernel do Jupyter, atualmente, suporta mais de 100 linguagens de programa¸c˜ao
Um Kernel somente executa Notebooks considerados confi´aveis
Scikit-Learn
Extens˜ao do SciPy (Scientific Python) s˜ao conhecidas como Scikits Come¸cou com uma ideia no Google Summer Code (2007)
Caracter´ısticas do Scikit-Learn:
− Algoritmos supervisionados e n˜ao-supervisionados − Utiliza uma estrutura parecida com o Numpy − Python API interface
− ´E relativamente r´apida pois utiliza C no back-end − Open-source
Scikit-Learn Principais Funcionalidades
− Modelos lineares
− SVM, kNN, Bayes, ´Arvores de decis˜ao − Clusteriza¸c˜ao − Valida¸c˜ao Cruzada − Grid Search − Pipeline − Avalia¸c˜ao de Modelos − Transforma¸c˜ao do Dataset − etc 19
Scikit-Learn Estimator
Um estimador ´e um objeto que aprende do conjunto de dados Este objeto pode ser:
− Classificador − Regressor
− Algoritmo de Clusteriza¸c˜ao
− Transformador que extrai e filtra features relevantes
Scikit-Learn Uso B´asico
from sklearn import svm
estimator = svm.SVC(gamma=0.001) estimator.fit(X, y)
Pandas
Pandas ´e uma das ferramentas mais importantes para ciˆencia dos dados em Python
Uma biblioteca open-source, muito r´apida, e f´acil de usar Foi constru´ıda sobre a biblioteca NumPy
Pandas
Trˆes estruturas de dados: − series (1 dimens˜ao) − dataframe (2 dimens˜oes) − panel (3 dimens˜oes)
Prepara¸c˜ao de dados e limpeza de dados ´e um pouco lenta em Pandas
Crescimento muito elevado no comunidade a partir de 2011
Pandas Profiling
Gera um profiling de um dataframe
Basicamente, ele encapsula a fun¸c˜ao cl´assica de describe() do pandas
Adicionando novas funcionalidades e visualiza¸c˜ao
Pandas Profiling Essencial
O que podemos fazer com o Pandas Profiling: - Inferˆencia de tipo: detecta o tipo da coluna - Ocorrˆencia: valores ´unicos, valores faltantes
- Estat´ıstica descriptiva: m´edia, moda, desvio padr˜ao, etc. - Valores mais frequentes
- Histograma - Correla¸c˜oes - etc
Pandas Profiling (EDA)
https://github.com/gesteves91/piam/blob/master/ notebooks/01-pratica.ipynb
Pipelines
Geralmente, uma pipelinedescreve oumodelaum processo de aprendizado de m´aquina
− Escrever c´odigo
− Liberar os releases para produ¸c˜ao − Desempenhar extra¸c˜ao de dados − Treinar os modelos
Estrutura de um Pipeline Data EDA Cleaning Normalize Balance Training Evaluation 29
Escolha do Dado
Data
EDA
- An´alise explorat´oria - Distribui¸c˜oes - Correla¸c˜ao
- Come¸car a modelagem
Escolha da Estrutura e Fonte de Dados Data EDA Cleaning Normalize Balance
- Definir se ser´a criado um fluxo local ou cloud - Modelar os dados em algum banco de dados
Hadoop, SQL, NoSQL, etc ... - Organizar os dados para leitura - Disponibilizar os dados
- Os dados podem estar estruturados ou n˜ao
An´alise Explorat´oria e Modelagem Data EDA Cleaning Normalize Balance
• Utilizar alguma plataforma (ex. Colab) para importar os dados e explor´a-los
• Visualiza¸c˜ao de Dados
• Definir que tipo de an´alise ir˜ao utilizar − Algoritmo supervisionado
- Classifica¸c˜ao - Regress˜ao
− Algoritmo n˜ao-supervisionado - Clusteriza¸c˜ao
Aplica¸c˜ao de T´ecnicas de ML Data EDA Cleaning Normalize Balance Training Evaluation
− Aplicar um conjunto de t´ecnicas da classe escolhida
− Definir as m´etricas que mais fazem sentido - Classifica¸c˜ao: F1, Acur´acia, Precis˜ao,
Revoca¸c˜ao, Curva ROC
- Regress˜ao: R2, MSE, RMSE, MAE - Clusteriza¸c˜ao: An´alise de silhueta, Elbow − Definir quais m´etricas deveriam ser usadas:
e.g., ajustes de parˆametros, ajustes de entrada − Definir como entregar o modelo para os
interessados
Criar a Estrutura do Projeto Data EDA Cleaning Normalize Balance
− Classes abstratas e m´odulos estruturados
− Definir sistema de logs e como estrutur´a-los para o Cientista / Engenheiro de Dados poder dar manuten¸c˜ao
− Alertas: - Treino
- Leitura de dados - Acur´acia
− Definir onde os artefatos ser˜ao armazenados: - Modelo
- M´etricas - Encoding
Ferramentas para Pipelines
Duas ferramentas se destacam para cria¸c˜ao de Pipelines: − Scikit-Learn Pipeline https://scikit-learn.org/stable/modules/ generated/sklearn.pipeline.Pipeline.html − Kedro https://github.com/quantumblacklabs/kedro 35
Sklearn Pipeline
from sklearn.pipeline import Pipeline ... tfidf = TfidfVectorizer(max_features=max_features) lr = LogisticRegression() p = Pipeline([ ("tfidf", tfidf), ("lr", lr) ])
Pipeline
https://github.com/gesteves91/piam/blob/master/ notebooks/02-pratica.ipynb
Kedro
Kedro aplica conceitos de engenharia de software para ciˆencia dos dados
Utiliza para o workflow o conceito de Pipelines e Nodes Projeto open-source
Node do Kedro
from kedro.pipeline import node
def return_greeting(): return "Hello" return_greeting_node = node( func=return_greeting, inputs=None, outputs="my_salutation" ) 39
Pipeline do Kedro
from kedro.pipeline import Pipeline
# Assemble nodes into a pipeline
Conceito de Ambientes de Desenvolvimento
Muito importante para ciˆencia dos dados a medida que precisamos utilizar bibliotecas que n˜ao s˜ao padr˜ao do Python
Atualiza¸c˜oes podem causar falhas inesperadas no seu projeto N˜ao ´e poss´ıvel que uma instala¸c˜ao do Python seja utilizada para todas as aplica¸c˜oes em Python
Principais Ferramentas para Ambientes
Algumas ferramentas que podemos utilizar: − virtualenv
− conda − pipenv
− venv (nativo do Python) − Dentre Outras
Passo-a-Passo Ambientes de Desenvolvimento
Cria um ambiente chamado venv python3 -m venv venv
Ativa ambiente venv source venv/bin/activate
Salva os pacotes do ambiente venv pip3 freeze > requirements.txt
Instala os pacotes de um arquivo chamado requirements.txt pip3 install -r requirements.txt
Prototipa¸c˜ao do Projeto
Prototipa¸c˜ao com registro no GitHub
Apresentar o projeto e a estrutura definida em at´e 15 minutos
− Problema a ser abordado e objetivos do projeto − Classes ou fun¸c˜oes
− Estrutura do banco de dados − Descreva o fluxo do pipeline
− Algoritmos de aprendizado de m´aquina − Dificuldades e aprendizados
Ponto de Controle II
https://homepages.dcc.ufmg.br/~geanderson/listas/ piam/project.pdf
GitHub Princ´ıpios
GitHub ´e uma ferramenta baseada no Git, uma plataforma open-source de versionamento de c´odigo
Linus Torvalds ´e o criador do Git, assim como o Kernel do Linux
GitHub Conceitos
GitHub ´e uma plataforma de desenvolvimento colaborativo Possui concorrentes interessantes como o GitLab e BitBucket ´
E um conceito antigo na computa¸c˜ao, mas que ganhou mais for¸ca com desenvolvimento de software ´agil e colaborativo
N˜ao ´e recomendado fazer um projeto de ciˆencia de dados sem uso do GitHub (ou similares)
GitHub Conceitos
GitHub ´e uma plataforma de desenvolvimento colaborativo Possui concorrentes interessantes como o GitLab e BitBucket ´
E um conceito antigo na computa¸c˜ao, mas que ganhou mais for¸ca com desenvolvimento de software ´agil e colaborativo
N˜ao ´e recomendado fazer um projeto de ciˆencia de dados sem uso do GitHub (ou similares)
GitHub Repo
Um reposit´orio ´e um local onde todos os arquivos de um projeto s˜ao armazenados
Cada reposit´orio recebe um endere¸co ´unico (url)
Com este reposit´orio, podemos fazer diversas opera¸c˜oes: − Push
− Pull − Fork
GitHub Repo
GitHub Branch
Uma branch permite que vocˆe trabalhe em diversas vers˜oes do c´odigo
GitHub Commits
Um commit permite que vocˆe salve suas mudan¸cas no reposit´orio
Cada commit possui uma mensagem associada explicando porque a mudan¸ca ocorreu
A ideia seria que outros desenvolvedores possam entender a mudan¸ca
GitHub Pull Request
Uma Pull Request ´e o n´ucleo de uma colabora¸c˜ao no GitHub Quando vocˆe abre uma Pull Request, vocˆe est´a solicitando uma revis˜ao as suas mudan¸cas
Pull Requests mostram os diffs entre as suas mudan¸cas e o estado atual do reposit´orio
GitHub Merge
Uma Pull Request ´e “mergeada” no branch principal (geralmente master ou develop), ap´os as discuss˜oes sobre a mudan¸ca Depende do fluxo de desenvolvimento de cada empresa
Exemplo
Na Google uma PR precisa de no m´ınimo duas revis˜oes para merge
GitHub Merge
Uma Pull Request ´e “mergeada” no branch principal (geralmente master ou develop), ap´os as discuss˜oes sobre a mudan¸ca Depende do fluxo de desenvolvimento de cada empresa
Exemplo
Na Google uma PR precisa de no m´ınimo duas revis˜oes para merge
GitHub Fork
Uma forma de contribuir para projetos no GitHub, seria por meio de um fork
Um fork permite que vocˆe fa¸ca uma c´opia pessoal de um projeto Depois de fazer as suas mudan¸cas, vocˆe pode fazer um Pull Request para o projeto original
Esse fluxo ´e a base do mundo open-source!
GitHub Fork
Uma forma de contribuir para projetos no GitHub, seria por meio de um fork
Um fork permite que vocˆe fa¸ca uma c´opia pessoal de um projeto Depois de fazer as suas mudan¸cas, vocˆe pode fazer um Pull Request para o projeto original
GitHub Issues
Uma issue ´e uma requisi¸c˜ao de mudan¸ca/melhoria de um projeto Geralmente, times de ciˆencia dos dados usam as issues para guiar o desenvolvimento de software
Muito dependente do fluxo da empresa
GitHub Aspecto Social
GitHub implementa aspectos de redes sociais com elevado sucesso Vocˆe pode por exemplo:
− Seguir e ser seguido por um desenvolvedor de software
− Watch um projeto que tenha interessa (i.e., visualizar as PRs) − Star um projeto que tenha interesse
GitHub Comandos B´asicos
Salva as mudan¸cas git commit
Mostra as branches git branch
Combina duas branches git merge
Atualiza a branch com o estado da branch remota git pull
Atualiza a branch remota com as mudan¸cas locais git push
GitHub Flow
1. Cria um branch
2. Adicione os commits 3. Abra uma Pull Request 4. Discuta e revise o c´odigo 5. Merge o c´odigo
GitHub Flow
1. Cria um branch
2. Adicione os commits
3. Abra uma Pull Request 4. Discuta e revise o c´odigo 5. Merge o c´odigo
6. Deploy o c´odigo
GitHub Flow
1. Cria um branch 2. Adicione os commits
3. Abra uma Pull Request
4. Discuta e revise o c´odigo 5. Merge o c´odigo
GitHub Flow
1. Cria um branch 2. Adicione os commits 3. Abra uma Pull Request
4. Discuta e revise o c´odigo
5. Merge o c´odigo 6. Deploy o c´odigo
GitHub Flow
1. Cria um branch 2. Adicione os commits 3. Abra uma Pull Request 4. Discuta e revise o c´odigo
5. Merge o c´odigo
GitHub Flow
1. Cria um branch 2. Adicione os commits 3. Abra uma Pull Request 4. Discuta e revise o c´odigo 5. Merge o c´odigo
6. Deploy o c´odigo
GitHub Tricks
Recomendado usar o terminal para interagir com o GitHub (curva de aprendizado muito grande)
UI do GitHub fornece quase todas as funcionalidades do terminal Problemas muito complexos podem ser melhor resolvidos com ferramentas
GitHub Documenta¸c˜ao
GitHub usa a linguagem de markdown para documentar reposit´orios
Markdown ´e uma linguagem muito f´acil de usar Usada no GitHub Gists e Jupyter notebooks
Altamente recomendado aprender a usar a linguagem markdown (curva de aprendizado pequena)
GitHub Links Recomendados
https://guides.github.com/
O que ´e Detec¸c˜ao de Anomalia?
Detec¸c˜ao de anomalia (ou detec¸c˜ao de outliers) ´e a identifica¸c˜ao de eventos ou observa¸c˜oes que n˜ao seguem um o padr˜ao esperado O objetivo ´e encontrar essas instˆancias, que s˜ao conhecidas como anomalias
Normalmente, aplicamos esse passo no pr´e-processamento do modelo
Detec¸c˜ao de Anomalia
Premisas de Detec¸c˜ao de Anomalias
Existem mais dados “normais” do que “anormais” em qualquer dataset
Dois padr˜oes mais conhecidos para detec¸c˜ao: − Met´odos Estat´ısticos
Met´odos Estat´ısticos para Detec¸c˜ao de Anomalias
Assume um modelo param´etrico que descreve a distribui¸c˜ao dos dados
Aplica um teste estat´ıstico que depende do: − Distribui¸c˜ao dos dados
− Parˆametro da distribui¸c˜ao (m´edia, variˆancia, etc.) − N´umero de anomalias esperadas (limite de confian¸ca)
Met´odos de Dist˜ancia para Detec¸c˜ao de Anomalias
Dados s˜ao representados como um vetor de features Trˆes aproxima¸c˜oes mais utilizadas:
− Vizinho mais pr´oximo − Densidade
− Cluster
Vantagem de ser n˜ao supervisionado Pesado computacionalmente
Biblioteca para Detec¸c˜ao de Anomalias
No Python, uma biblioteca muito utilizada ´e o PyOD Algoritmos implementados por padr˜ao no PyOD:
− auto encoder − iforest − knn − mcd − pca − etc https://pypi.org/project/pyod/ 67
Ferramenta de Estrutura¸c˜ao
Uma ferramenta que vem ganhando popularidade ´e o Cookiecutter Prop˜oe uma estrutura b´asica para projetos de aprendizado de m´aquina
Importante para projetos comerciais principalmente https:
//github.com/drivendata/cookiecutter-data-science/
Engenharia de Features
Uma das tarefas mais importantes durante o pr´e-processamento de qualquer dataset ´e a engenharia de features
Vocˆe pode, por exemplo, usar o conhecimento espec´ıfico (de especialistas) para guiar a engenharia features
No entanto, em muitos casos, o seu problema pode ser muito complexo, sendo muito dif´ıcil criar um modelo generaliz´avel Uma ferramenta que pode auxiliar nesse momento ´e o Feature Tools
https://www.featuretools.com/
Featuretools Uso
Os dataframes s˜ao conhecidos como entidades no Featuretools entities = {
"customers" : (customers_df, "customer_id"), "sessions" : (sessions_df, "session_id"),
"transactions" : (transactions_df, "transaction_id") }
Featuretools Uso
´
E preciso definir os relacionamentos entre as entidades relationships = [("sessions", "session_id",
"transactions", "session_id")]
Assim a estrutura de Deep Feature Synthesis pode criar features As novas features s˜ao baseadas em primitivos
Exemplo
m´edia, moda, soma, etc.
Referˆencias Bibliogr´aficas
F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel, P. Prettenhofer, R. Weiss, V. Dubourg, J. Vanderplas, A. Passos, D. Cournapeau, M. Brucher, M. Perrot, and E. Duchesnay.
Scikit-learn: Machine learning in Python.
Journal of Machine Learning Research, 12:2825–2830, 2011.