Pular para o conteúdo principal

Tutorial de seleção de features em Python: guia para iniciantes

Aprenda os fundamentos de seleção de features e como implementar e investigar diferentes técnicas em Python.
Atualizado 17 de set. de 2026  · 14 min lido

Explorar com IA

ChatGPTClaudePerplexity

banner

Execute e edite o código deste tutorial online

Executar código

Se você quer aprender mais em Python, faça o curso gratuito da DataCamp Intro to Python for Data Science.

Você já se deparou com conjuntos de dados. Às vezes são pequenos, mas muitas vezes são enormes. Processar datasets muito grandes pode ser bem desafiador e facilmente virar gargalo.

O que torna esses datasets tão grandes? As features. Quanto mais features, maior tende a ser o conjunto de dados. Bem, nem sempre. Há datasets com muitas features mas poucas instâncias. Mas esse não é o foco aqui. A pergunta é: com um computador comum em mãos, como processar esse tipo de dataset sem sofrer?

Com frequência, em datasets de alta dimensionalidade, existem features totalmente irrelevantes, pouco significativas e sem importância. Já se observou que a contribuição dessas features costuma ser menor para a modelagem preditiva quando comparadas às features realmente críticas. Em alguns casos, a contribuição é nula. Essas features geram vários problemas que atrapalham uma modelagem preditiva eficiente:

  • Alocação desnecessária de recursos para essas features.
  • Elas funcionam como ruído, piorando bastante o desempenho do modelo de machine learning.
  • O treinamento do modelo fica mais demorado.

Qual é a solução? A alternativa mais econômica é a seleção de features.

Seleção de features é o processo de escolher as variáveis mais relevantes de um determinado dataset. Em muitos casos, ela também melhora o desempenho do modelo de machine learning.

Interessante, né?

Você teve uma introdução informal à seleção de features e sua importância em Data Science e Machine Learning. Neste post, você vai ver:

  • Introdução à seleção de features e por que ela é importante
  • Diferença entre seleção de features e redução de dimensionalidade
  • Diferentes tipos de métodos de seleção de features
  • Implementação de vários métodos de seleção de features com o scikit-learn

Introdução à seleção de features

Seleção de features também é conhecida como seleção de variáveis ou seleção de atributos.

Em essência, é o processo de selecionar as features mais importantes/relevantes de um dataset.

Entendendo a importância da seleção de features

A importância da seleção de features fica mais clara quando você trabalha com um dataset que tem um número enorme de variáveis. Esse tipo de dataset é chamado de dataset de alta dimensionalidade. Com essa alta dimensionalidade, surgem vários problemas: o tempo de treinamento do modelo aumenta bastante, o modelo pode ficar excessivamente complexo e acabar sofrendo de overfitting.

Em conjuntos com muitas features, é comum existirem variáveis redundantes — extensões de outras variáveis essenciais. Essas variáveis redundantes também não contribuem de forma efetiva para o treinamento. Ou seja, é fundamental extrair as features mais importantes e relevantes para obter o melhor desempenho preditivo.

"O objetivo da seleção de variáveis é triplo: melhorar o desempenho preditivo dos preditores, fornecer preditores mais rápidos e econômicos e proporcionar melhor entendimento do processo subjacente que gerou os dados."

-An Introduction to Variable and Feature Selection

Agora vamos entender a diferença entre redução de dimensionalidade e seleção de features.

Às vezes, confundem seleção de features com redução de dimensionalidade. Mas são coisas diferentes. Ambas reduzem o número de atributos no dataset, porém a redução de dimensionalidade cria novas combinações de atributos (também chamada de transformação de features), enquanto a seleção de features inclui ou exclui atributos existentes sem alterá-los.

Alguns exemplos de métodos de redução de dimensionalidade são Análise de Componentes Principais (PCA), Decomposição em Valores Singulares (SVD), Análise Discriminante Linear (LDA), etc.

Resumindo a importância da seleção de features:

  • Permite treinar os algoritmos de machine learning mais rapidamente.
  • Reduz a complexidade do modelo e facilita a interpretação.
  • Pode melhorar a acurácia se o subconjunto correto for escolhido.
  • Reduz o overfitting.

Na próxima seção, você vai estudar os tipos gerais de métodos de seleção de features: métodos de filtro (Filter), de invólucro (Wrapper) e incorporados (Embedded).

Filter methods

A imagem a seguir descreve bem os métodos de seleção de features baseados em filtro:

filter-based feature selection methods

Fonte da imagem: Analytics Vidhya

O método de filtro se baseia nas propriedades gerais dos dados para avaliar e escolher um subconjunto de features, sem envolver nenhum algoritmo de mineração/ML. Ele usa critérios como distância, informação, dependência e consistência. Utiliza técnicas de ranqueamento para selecionar variáveis, por sua simplicidade e capacidade de produzir features relevantes. Com o ranqueamento, as features irrelevantes são filtradas antes mesmo de iniciar a classificação.

Geralmente, métodos de filtro são usados como etapa de pré-processamento. A seleção é independente de qualquer algoritmo de machine learning. As features recebem uma pontuação estatística que mede sua correlação com a variável alvo. Correlação é um conceito contextual e varia de caso a caso. Você pode consultar a tabela abaixo para definir coeficientes de correlação para diferentes tipos de dados (neste caso, contínuos e categóricos).

table for defining correlation coefficients for different types of data

Fonte da imagem: Analytics Vidhya

Exemplos de métodos de filtro incluem o teste qui-quadrado (Chi-squared), o ganho de informação e escores de coeficiente de correlação.

Em seguida, veremos os métodos Wrapper.

Wrapper methods

Assim como nos métodos de filtro, segue um infográfico que ajuda a entender melhor os métodos wrapper:

understand wrapper methods

Fonte da imagem: Analytics Vidhya

Como você vê na imagem, um método wrapper precisa de um algoritmo de machine learning e usa seu desempenho como critério de avaliação. Ele busca o conjunto de features mais adequado ao algoritmo para melhorar o desempenho. Para avaliar, usa acurácia preditiva em tarefas de classificação e medidas de qualidade de agrupamento em clustering.

Alguns exemplos típicos de métodos wrapper são seleção sequencial para frente, eliminação para trás e eliminação recursiva de features, entre outros.

  • Seleção para frente (Forward Selection): começa com um conjunto vazio de features. A melhor feature original é escolhida e adicionada. A cada iteração, a melhor entre as remanescentes é incluída.

  • Eliminação para trás (Backward Elimination): começa com todas as features e, a cada passo, remove a pior do conjunto.

  • Combinação de forward e backward: combina as abordagens, selecionando a melhor e removendo a pior a cada etapa.

  • Eliminação recursiva de features (RFE): faz uma busca gulosa para encontrar o melhor subconjunto. Iterativamente cria modelos e determina a melhor ou pior feature em cada iteração, reconstruindo modelos com as restantes até explorar todas. Depois ranqueia as features pela ordem de eliminação. No pior caso, para N features, o RFE explora combinações em torno de 2N.

Perfeito!

Agora vamos aos métodos embedded.

Embedded methods

Métodos embedded são iterativos no sentido de considerar cada iteração do treinamento e extrair cuidadosamente as features que mais contribuem para aquele ciclo. Métodos de regularização são os mais comuns nessa categoria e penalizam features com base em um limite para os coeficientes.

Por isso, métodos de regularização também são chamados de métodos de penalização: introduzem restrições adicionais na otimização de um algoritmo preditivo (como uma regressão), forçando o modelo a ter menor complexidade (menos coeficientes).

Exemplos: LASSO, Elastic Net, Ridge Regression, etc.

Diferença entre métodos Filter e Wrapper

Pode ser confuso diferenciar filter e wrapper pelos seus funcionamentos. Vamos aos pontos em que divergem:

  • Métodos de filtro não incorporam um modelo de ML para decidir se uma feature é boa ou ruim; métodos wrapper treinam um modelo com as features para decidir se são essenciais.
  • Filter são muito mais rápidos, pois não treinam modelos. Já wrapper são custosos computacionalmente e, em datasets gigantes, podem não ser a opção mais eficaz.
  • Filter podem falhar em encontrar o melhor subconjunto quando não há dados suficientes para modelar correlações; wrapper, por sua natureza exaustiva, tendem a encontrar subconjuntos melhores.
  • Usar, no modelo final, features escolhidas por wrapper pode levar a overfitting, já que o processo as avaliou com o próprio modelo; features vindas de filter, na maioria dos casos, não causam overfitting.

Até aqui você viu a importância da seleção de features e sua diferença para redução de dimensionalidade, além dos principais tipos de métodos. Ótimo!

Agora, alguns cuidados ao executar a seleção de features:

Ponto importante

Você já entendeu o valor da seleção de features em um pipeline de ML e o que ela entrega quando bem integrada. Mas é essencial saber exatamente onde encaixá-la nesse pipeline.

Em termos simples: inclua a etapa de seleção de features antes de alimentar o modelo para treino, especialmente quando usar métodos de estimativa de acurácia como validação cruzada. Isso garante que a seleção aconteça no fold de dados imediatamente antes do treino. Se você fizer a seleção primeiro em todo o dataset e só depois fizer seleção/treino de modelo nas features escolhidas, é um erro grave.

Se a seleção for feita em todos os dados e depois você rodar a validação cruzada, os dados de teste de cada fold já terão sido usados para escolher as features, o que tende a enviesar o desempenho do seu modelo.

Chega de teoria! Vamos ao código.

Um estudo de caso em Python

Neste estudo, usaremos o dataset Pima Indians Diabetes. A descrição está aqui.

O dataset corresponde a uma tarefa de classificação: prever se uma pessoa tem diabetes com base em 8 features.

São 768 observações ao todo. A primeira tarefa é carregar o dataset para seguir adiante. Antes, vamos importar as dependências necessárias. Outras poderão ser importadas conforme o avanço.

import pandas as pd
import numpy as np

Agora que as dependências foram importadas, vamos carregar o dataset Pima Indians em um DataFrame com a biblioteca pandas.

data = pd.read_csv("diabetes.csv")

O dataset foi carregado com sucesso no DataFrame data. Vamos dar uma olhada.

data.head()
Dataframe

Você vê 8 features distintas e o rótulo 1 ou 0, onde 1 indica que a observação tem diabetes e 0 indica que não tem. Sabe-se que o dataset tem valores ausentes. Em particular, há observações faltantes em algumas colunas marcadas como zero. Pelo significado das colunas, é impraticável ter zero para certas medidas (por exemplo, IMC ou pressão arterial).

Para este tutorial, vamos usar diretamente a versão pré-processada do dataset.

# load data
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pd.read_csv(url, names=names)

Os dados foram carregados em um DataFrame chamado dataframe.

Vamos converter o DataFrame em um array NumPy para computação mais rápida. Também vamos separar features e rótulos em variáveis distintas.

array = dataframe.values
X = array[:,0:8]
Y = array[:,8]

Perfeito! Dados preparados.

Primeiro, vamos implementar o teste estatístico qui-quadrado (Chi-Squared) para features não negativas e selecionar 4 das melhores features do dataset. Já vimos que o teste qui-quadrado pertence à classe dos métodos de filtro. Se você quiser entender os detalhes, este vídeo explica muito bem.

O scikit-learn fornece a classe SelectKBest, que pode ser usada com vários testes estatísticos para selecionar um número específico de features — neste caso, qui-quadrado.

# Import the necessary libraries first
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

Bibliotecas importadas. Vamos ver em ação.

# Feature extraction
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X, Y)

# Summarize scores
np.set_printoptions(precision=3)
print(fit.scores_)

features = fit.transform(X)
# Summarize selected features
print(features[0:5,:])
[ 111.52  1411.887   17.605   53.108 2175.565  127.669    5.393  181.304]
[[148.    0.   33.6  50. ]
 [ 85.    0.   26.6  31. ]
 [183.    0.   23.3  32. ]
 [ 89.   94.   28.1  21. ]
 [137.  168.   43.1  33. ]]

Interpretação:

Você pode ver as pontuações para cada atributo e as 4 features escolhidas (as de maior pontuação): plas, test, mass e age. Essas pontuações ajudam a determinar as melhores variáveis para treinar seu modelo.

P.S.: A primeira linha indica os nomes das features. Para o pré-processamento, os nomes foram codificados numericamente.

Em seguida, vamos implementar a eliminação recursiva de features (RFE), um método wrapper.

O RFE funciona removendo recursivamente atributos e treinando um modelo com os atributos restantes.

Ele usa a acurácia do modelo para identificar quais atributos (e combinações) mais contribuem para prever a variável alvo.

Você pode saber mais sobre a classe RFE na documentação do scikit-learn.

# Import your necessary dependencies
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

Vamos usar RFE com Logistic Regression para selecionar as 3 melhores features. A escolha do algoritmo não é tão crítica, desde que seja competente e consistente.

# Feature extraction
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Num Features: %s" % (fit.n_features_))
print("Selected Features: %s" % (fit.support_))
print("Feature Ranking: %s" % (fit.ranking_))
Num Features: 3
Selected Features: [ True False False False False  True  True False]
Feature Ranking: [1 2 3 5 6 1 1 4]

O RFE escolheu as 3 principais features: preg, mass e pedi.

Elas estão marcadas como True no array support e com o valor “1” no array ranking, indicando sua força.

Agora vamos usar Ridge regression, que é uma técnica de regularização e também um método embedded de seleção.

Este artigo traz uma ótima explicação sobre Ridge. Vale conferir.

# First things first
from sklearn.linear_model import Ridge

Em seguida, vamos usar Ridge para ajustar o modelo e analisar os coeficientes (R2 é uma métrica comum para avaliar modelos de regressão).

Também consulte a documentação oficial do scikit-learn sobre Ridge.

ridge = Ridge(alpha=1.0)
ridge.fit(X,Y)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)

Para interpretar melhor os resultados da Ridge, vamos criar uma função helper que imprime os coeficientes de forma amigável.

# A helper method for pretty-printing the coefficients
def pretty_print_coefs(coefs, names = None, sort = False):
    if names == None:
        names = ["X%s" % x for x in range(len(coefs))]
    lst = zip(coefs, names)
    if sort:
        lst = sorted(lst,  key = lambda x:-np.abs(x[0]))
    return " + ".join("%s * %s" % (round(coef, 3), name)
                                   for coef, name in lst)

Agora vamos passar os coeficientes do modelo Ridge para essa função e ver o resultado.

print ("Ridge model:", pretty_print_coefs(ridge.coef_))
Ridge model: 0.021 * X0 + 0.006 * X1 + -0.002 * X2 + 0.0 * X3 + -0.0 * X4 + 0.013 * X5 + 0.145 * X6 + 0.003 * X7

Você vê todos os coeficientes associados às variáveis. Isso ajuda novamente a escolher as features mais essenciais. Alguns pontos a lembrar ao aplicar Ridge:

  • Também é conhecida como L2-regularization.
  • Para features correlacionadas, os coeficientes tendem a ser semelhantes.
  • Features com coeficientes negativos tendem a contribuir menos. Em cenários com muitas variáveis, esse score ajuda bastante na decisão final de seleção.

Com isso, concluímos o estudo de caso. Os métodos acima ajudam você a entender as features de um dataset de forma abrangente. Alguns pontos-chave:

  • Seleção de features é parte do pré-processamento — geralmente a etapa mais demorada de um pipeline de ML.
  • Essas técnicas permitem uma abordagem mais sistemática e amigável ao ML, facilitando a interpretação das variáveis.

Encerrando

Neste post, você viu um dos temas mais estudados em estatística: seleção de features. Também conheceu suas variações e as aplicou para identificar quais variáveis são importantes em um dataset.

Você pode levar este tutorial adiante incorporando uma medida de correlação em um método wrapper e comparar o desempenho. Nesse caminho, talvez você crie seu próprio mecanismo de seleção. É assim que se constrói a base para uma pesquisa sua. Pesquisadores também usam princípios de soft computing para seleção. Isso por si só é um campo inteiro de estudo. Além disso, experimente os algoritmos existentes em diferentes datasets e tire suas próprias conclusões.

Por que esses métodos tradicionais ainda funcionam?

Pergunta justa. Existem arquiteturas de redes neurais (por exemplo, CNNs) capazes de extrair features relevantes dos dados, mas elas também têm limitações. Usar uma CNN em um dataset tabular comum, que não tem propriedades típicas de imagens (translações, bordas, posição, contornos etc.), não é a melhor decisão. E quando há pouco dado e poucos recursos, treinar uma CNN em dados tabulares pode ser desperdício. Nesses cenários, os métodos que você estudou são extremamente úteis.

Alguns recursos para se aprofundar no tema:

Referências usadas para escrever este tutorial:

Fique à vontade para deixar suas dúvidas nos comentários!

Tópicos
Python

Cursos de Python

Curso

Introdução ao Python

4 h
7M
Domine os fundamentos da análise de dados com Python em quatro horas e explore pacotes populares.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Tutorial de seleção de colunas em Python

Use o Python Pandas e selecione colunas de DataFrames. Siga nosso tutorial com exemplos de código e aprenda diferentes maneiras de selecionar seus dados hoje mesmo!
DataCamp Team's photo

DataCamp Team

7 min

Tutorial

Tutorial do Python pandas: O guia definitivo para iniciantes

Você está pronto para começar sua jornada com os pandas? Aqui está um guia passo a passo sobre como você pode começar.
Vidhi Chugh's photo

Vidhi Chugh

15 min

Tutorial

Funções em Python: como chamar e escrever funções

Descubra como escrever funções em Python reutilizáveis e eficientes. Domine parâmetros, instruções de retorno e temas avançados como funções lambda. Organize melhor seu código com main() e outras boas práticas.
Karlijn Willems's photo

Karlijn Willems

14 min

Tutorial

21 ferramentas essenciais do Python

Aprenda sobre as ferramentas Python essenciais para o desenvolvimento de software, raspagem e desenvolvimento da Web, análise e visualização de dados e aprendizado de máquina.
Abid Ali Awan's photo

Abid Ali Awan

6 min

Tutorial

Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python

Aprenda os truques comuns para lidar com dados categóricos e pré-processá-los para criar modelos de aprendizado de máquina!
Moez Ali's photo

Moez Ali

14 min

Tutorial

Desenvolvimento backend com Python: guia completo para iniciantes

Este guia completo ensina os fundamentos do desenvolvimento backend com Python. Aprenda conceitos básicos, frameworks e boas práticas para começar a criar aplicações web.
Oluseye Jeremiah's photo

Oluseye Jeremiah

15 min

Ver MaisVer Mais