Categorias
Análise de dados Ciência de Dados Machine Learning

Como escolher as features relevantes para o modelo de Machine Learning…

Nesse post, você vai conhecer algumas técnicas para escolher quais são as variáveis relevantes dentro do conjunto de dados e usá-las para o treinamento do algoritmo de Machine Learning e quais variáveis são colineares, para eliminá-las.

“Usamos a seleção de atributos para selecionar aqueles que sejam úteis ao modelo. Atributos irrelevantes podem causar efeito negativo em um modelo. Atributos correlacionados podem deixar os coeficientes de uma regressão (ou a importância de atributos em uma árvore) instáveis ou difíceis de interpretar”. (HARRISON, M., 2020, p. 88)

Além de identificar os atributos relevantes e não correlacionados, não podemos esquecer a “maldição da dimensionalidade”, porque a medida que a dimensão de dados aumenta, mais esparsos ficam os dados, o que gera a dificuldade de encontrar um “sinal” e cálculos de “vizinhança”, gerando a necessidade de coletar mais dados.

Observando o Princípio da Navalha de Occam, se temos que escolher entre dois modelos, que representam o mesmo fenômeno, a preferência é para o mais simples. A razão dessa escolha é bem direta: porque o modelo mais simples vai generalizar melhor.

Para tornar a aprendizagem mais simples em Machine Learning, o conjunto de dados mais simples, depende da quantidade de colunas. E para tornar o conjunto de dados mais simples, podemos identificar as colunas que são Colineares, ou seja, variáveis que explicam a mesma coisa e removê-las, não utilizando-as para o treinamento do modelo. Segue abaixo, alguns tipos de seleção de variáveis.

Tipos de seleção de variáveis: mecanismo, vantagens e desvantagens

a) Seleção Univariada (Filter Methods)

O objetivo da seleção univariada é classificar quais são as variáveis relevantes ou não para o modelo. A relevância é extraída a partir da explicação do fenômeno, ou seja, a feature que melhor explica a variável resposta.

Nesse método, a relevância pode ser explicada pelo Coeficiente de Correlação, que possui um range de -1 a 1. Quanto mais próximo de 1 e -1, mais relevante é a feature.

Esse método tem como vantagens ser simples, rápido e fácil de entender. No entanto, não considera a influência entre as variáveis.

Abaixo, segue um quadro explicativo para escolher o método de correlação de acordo com o tipo de variável:

b) Seleção por importância (Embedded Methods)

É conhecido carinhosamente como método embutido, porque o método de seleção é um subproduto do próprio sistema de aprendizado de um sistema e utiliza a importância como critério de escolha da variável .

Por exemplo, o RandomForest é um algoritmo que funciona bem para fazer previsões em problemas de classificação e para ter alta acurácia precisa das melhores features, então essa seleção por importância já está embutida no processo. Esse algoritmo já utiliza a seleção das variáveis por importância encontrar e selecionar as features, para construir o seu aprendizado.

O Random Forest, Lasso Regression e Ridge Regression são algoritmos que se comportam dessa forma.

A regressão é uma soma ponderada, cada coluna explica um pouco do fenômeno, então a regressão dá um peso para cada uma das variáveis. Variáveis com peso alto são importantes para o aprendizado do modelo. Os pesos demonstram a importância da variáveis. O Lasso e o Ridge utilizam esse sistema.

a) Random Forest (Giny Impurity): Este algoritmo seleciona as variáveis e divide o conjunto de dados original, criando dois grupos mais similares possíveis(homogêneos entre si). A variável que separa esses dois conjuntos similares é uma variável importante.

O resultado que trás a importância das features pode ser plotado em um gráfico, mostrando o percentual de importância. Observa-se que no gráfico abaixo, as features 0, 1 e 2 explicam em torno de 70% do fenômeno:

Fonte: Feature importances with a forest of trees — scikit-learn 1.2.1 documentation

b) Lasso Regression: Funciona a partir da divisão das variáveis em pesos positivos e negativos. Seleciona-se as variáveis como importantes, quando apresentam os maiores pesos positivos e negativos. É possível definir o parâmetro alpha, que atua como um parâmetro de regularização (se o valor de alpha aumenta, menor peso será dados aos atributos que são menos importantes). Como exemplo, no gráfico abaixo, as features Nox, Chas e Indus, não são importantes:

Fonte: Feature Selection with sklearn and Pandas | by Abhini Shetye | Towards Data Science

c) Seleção por Subset (Wrapper Methods)

A seleção de variáveis por Subset, pode ser explicada em uma sequência de passos e o objetivo do processo é determinar a importância das variáveis. Os passos podem ser resumidos da seguinte forma:

  1. Seleção uma única variável (aleatoriamente) + variável resposta
  2. Treinamento do modelo de ML com essas duas variáveis
  3. Cálculo da performance do modelo (acurácia e/ou erro)
  4. Observação se a performance aumentou. Se aumentou, continua o processo
  5. Adição de mais uma variável aleatoriamente (agora são duas variáveis + variável resposta): retreino, recalculo da acurácia/erro e observação se a performance aumentou. Se aumentou, mantém essa variável e o processo continua igual para o restante das variáveis (ou seja, mantém as que estão funcionando bem e acrescenta mais uma). Quando a acurácia não aumentar, remove-se a variável e volta para o fluxo.
  6. Como resultado, o dataset final é menor e contém apenas as variáveis classificadas como importantes. Existem algoritmos que fazem essa sequencia de passos, identificando e trazendo as features mais importantes, por exemplo o Boruta.
O funcionamento do Boruta

O algoritmo Boruta, seleciona duas variáveis aleatoriamente do dataset original e cria duas variáveis shadow (cópia da variável original com as linhas “embaralhadas”). As linhas são misturadas para retirar a correlação entre elas.

Com esse novo conjunto de dados (4 variáveis), o modelo é treinado (normalmente com o Random Forest) e encontra a importância das 4 variáveis. O Boruta seleciona a variável shadow mais importante e compara todas as variáveis originais com ela.

E, organiza uma tabela, chamada Sucess Count (contagem de sucesso), se a variável original tiver uma importância maior que a importância da variável Shadow coloca-se 1, senão coloca zero.

Sobre a tabela Sucess Count, é possível construir uma distribuição binomial, traçando um “limite” e, a partir do cálculo do p-value de cada variável original saber se a variável é ou não importante: se o p-value da variável for menor que o p-value limite, a variável é considerada importante, ao contrário, rejeita essa variável. No final, o dataset é reduzido, apenas com as variáveis importantes.

Nota: O p-value ajuda a definir se uma hipótese é verdadeira ou se deve ser rejeitada.

Iteration: nº de iterações (110 é o nº máximo de iterações)

Confirmed: nº de variáveis escolhidas como relevantes

Tentativas: variáveis “duvidosas”, que não podem ser descartadas ou confirmadas

Rejected: nº de variáveis confirmadas

Neste post tratamos sobre a importância de encontrar as features relevantes para melhorar a performance do modelo de Machine Learning e como a dimensionalidade do conjunto de dados pode afetar esse desempenho. E, para concluir, gostaria de deixar como sugestão de leitura, o capítulo 8, do livro Machine Learning: Trabalhando com dados estruturados em Python, que aborda algumas das técnicas aqui discutidas.

Em um próximo post, vamos discutir essa seleção de importância de atributos sob a perspectiva dos modelos baseados em árvores.

Obrigada pelo seu tempo de leitura.

Meus contatos:

github.com/denisemerazzi
www.linkedin.com/in/denisewmerazzi/

denise.merazzi.com.br/portfolio/

Categorias
Ciência de Dados Git

Conceitos essenciais no Git

O objetivo deste post é apresentar de forma sucinta e concisa o conceito de algumas palavras-chave para entender o funcionamento da ferramenta de versionamento Git.

A ideia é construir uma espécie de Glossário, trazendo o significado de palavras, que são a base para entender o funcionamento desta ferramenta, que é amplamente utilizada por diversos segmentos Techs, incluindo a Ciências de Dados.

Glossário Git
  • COMMIT: A palavra commit do inglês, nos remete à ideia de comprometer, verificar ou confirmar algo. No Git, significa que uma nova alteração feita no código do projeto será submetida para o salvamento no ambiente local. Funciona como uma captura da versão atual do projeto, em que é possível adicionar uma mensagem que “vai contar a história do projeto” durante o seu desenvolvimento.
  • REPOSITÓRIO LOCAL: É o repositório criado dentro da máquina local.
  • REPOSITÓRIO REMOTO: É um repositório que não está localizado na máquina local, por exemplo o GitHub.
  • BRANCH: É um ambiente que possui uma linha de trabalho independente. Permite modificar códigos, sem alterar o que já está funcionando, com mais segurança, autonomia e minimizando os conflitos de merge. Por exemplo, uma equipe está trabalhando em um projeto, onde cada um trabalha de forma independente, em partes diferentes do código do projeto e em uma branch diferente e, conforme as alterações vão sendo realizadas, serão salvas em um único projeto.
  • HEAD: Funciona como um ponteiro que representa a versão que está sendo alterada no momento, ou seja, em qual versão do projeto estamos trabalhando. Utilizando o comando checkout em uma branch, o Git de forma automática coloca a HEAD apontando para a última versão desta branch.
  • MERGE: É a união de commits. Por exemplo, quando um código está sendo testado fora da branch “oficial” e depois de “passar no teste” ele pode ser adicionado à branch “oficial”, através da realização de um merge.
  • CONFLITO DE MERGE: Ocorre quando linhas de código diferentes são salvas no mesmo arquivo e ficam “sobrepostas”. É como se duas linhas de código tentassem ocupar o mesmo espaço. Estes conflitos podem acontecer na união entre branchs e entre commits. O Git não consegue resolver este problema automaticamente, é necessário resolver desfazendo as alterações ou com a utilização de pacotes especiais que auxiliam nessa etapa.

Esses são alguns conceitos básicos para entender o funcionamento do Git que são necessários para um melhor embasamento, quando estamos estudando ou trabalhando com essa ferramenta.

Agradeço o seu tempo para a leitura deste pequeno artigo, espero ter contribuído. E, se você quer saber mais sobre a utilização do Git, seus principais comandos e como trabalhar com essa ferramenta, faça a leitura do artigo listado no link abaixo, onde este tema está mais detalhado. Até logo 😉

Comandos no Git que todo Cientista de Dados precisa saber – My Blog (merazzi.com.br)

Meus contatos:

github.com/denisemerazzi
www.linkedin.com/in/denisewmerazzi/

Categorias
Ciência de Dados Git

Comandos no Git que todo Cientista de Dados precisa saber

Nesse artigo, você vai conhecer os principais conceitos e comandos para utilizar a ferramenta Git nos seus projetos de Data Science, desde a criação de um novo repositório local até os conceitos mais avançados como branchs e merge, que facilitam o trabalho em equipe em um ambiente remoto e colaborativo.

O que é e para que serve?

O Git é uma ferramenta que não pode faltar na formação de um Cientista de Dados, porque permite o controle de versionamento de códigos, organiza as alterações realizadas ao longo do projeto, permite fazer um push e um pull dessas alterações e continuar o desenvolvimento do projeto, com as suas melhorias implementadas.

O ideia do Git é fornecer um repositório local para armazenar o projeto, que pode funcionar offline para um trabalho mais individual e além disso facilita o compartilhamento das alterações do projeto para um trabalho em equipe, organizado em ambiente remoto.

O Git apresenta muitas facilidades que o tornam uma ferramenta indispensável:

  • Segurança e facilidade no controle de versões do Projeto.
  • Construção de branches, que são ambientes seguros para desenvolver e testar, sem impactar no que já está em produção funcionando.
  • É possível ignorar alguns arquivos, através da utilização do .gitignore, para filtrar os arquivos que não fazem parte do código-fonte do projeto.
  • Operações rápidas e fáceis.
  • Capacidade para adicionar ou mover arquivos.
  • É possível entender o histórico das modificações realizadas.
Conhecendo a área de trabalho do Git
  • Staging: onde ficam todos os arquivos alterados e que foram marcados como prontos para terem o seu estado salvo, com um commit. Utilizamos o comando git add <nome_arquivo> para enviar um arquivo para a Staging Area.
  • Repository: área onde ficam todos os arquivos versionados pelo Git, que foram salvos com o comando git commit.
  • Working Directory: área onde ficam todos os arquivos que foram alterados (saíram da área Repository), mas ainda não foram marcados como prontos para serem commitados. Utiliza-se o comando git restore<nome_arquivo> para remover o arquivo de dentro da Working Directory e retornar ao último estado salvo no Repository (a funcionalidade deste comando é desfazer as alterações e voltar para o Repository ).
Alguns comandos essenciais no Git que você não pode deixar de conhecer
Comandos para a visualização do histórico e alteração de commits
Comandos para alteração de commits anteriores
Comandos de recuperação de arquivos deletados
Comandos para trabalhar em equipe em um ambiente remoto – GitHub
Trabalhando com Branchs

A branch permite modificar os códigos de um projeto, sem alterar o que já está funcionando, promovendo a independência no desenvolvimento para testar e alterar antes de enviar para o ambiente de produção. Assim, a equipe pode produzir de forma independente, com mais segurança no projeto, minimizando os conflitos de merge.

Comandos para criar e mover Branchs
Realização do merge

O merge é a união de commits e é muito utilizado quando trabalha-se com branch.

O Git não consegue resolver automaticamente quando ocorre o conflito de merge, ou seja, alterações no mesmo arquivo e/ou linhas de código.

Esses conflitos podem acontecer tanto na união entre branchs quanto entre commits.

Para utilizar o comando git merge, tem-se que estar na branch que irá receber as alterações.

No Diagrama abaixo, observa-se que os dois primeiros commits são feitos na Branch main. Quando a Branch develop for criada, uma cópia do projeto será adicionada à ela. E, esta versão do projeto, após suas alterações, retorna através de um merge para a Branch main, atualizando a sua versão.

Exemplo de Diagrama de Histórico de alterações do Git
Comandos para identificar o conflito de merge dentro do Jupyter Notebook

O Jupyter Notebook é “por baixo dos panos” um arquivo json, o que dificulta bastante na hora de identificar onde está acontecendo o problema.

Para visualizar o arquivo fonte, dentro do Jupyter Notebook e identificar onde aconteceu o conflito de merge, utiliza-se o
Reopen Editor With -> text editor.

Quando ocorre o erro no merge no Jupyter, é mais assertivo desfazer o processo. E para auxiliar na identificação do problema, é possível utilizar o pacote nbdime.

Agora, você é capaz de utilizar a ferramenta Git para desenvolver os seus projetos em Data Science, otimizando o versionamento de códigos de maneira segura, eficiente e organizada.

Se você ficou com alguma dúvida sobre algum conceito importante como branch e head, pode visitar um pequeno post que elaborei no formato de um glossário, trazendo o significado de algumas palavras-chave dentro do Git. Pode ser encontrado neste link:

Finalizando, agradeço o seu tempo dedicado à leitura deste artigo, espero ter contribuído de alguma forma e nos encontramos novamente na leitura de futuros artigos.

Conceitos essenciais no Git – My Blog (merazzi.com.br)

Meus contatos:

github.com/denisemerazzi
www.linkedin.com/in/denisewmerazzi/