paint-brush
O guia para iniciantes em engenharia de recursospor@dotslashbit
749 leituras
749 leituras

O guia para iniciantes em engenharia de recursos

por Sahil9m2023/08/21
Read on Terminal Reader

Muito longo; Para ler

No domínio do aprendizado de máquina e da ciência de dados, a engenharia de recursos se destaca como a base da melhoria do desempenho do modelo. Embora os algoritmos e modelos muitas vezes chamem a atenção, são os recursos cuidadosamente elaborados que estabelecem a base para o poder preditivo. Imagine tentar construir uma casa em uma base fraca – sem recursos fortes, mesmo os algoritmos mais avançados podem desmoronar quando confrontados com conjuntos de dados complexos.
featured image - O guia para iniciantes em engenharia de recursos
Sahil HackerNoon profile picture
0-item


No domínio do aprendizado de máquina e da ciência de dados, a engenharia de recursos é a base da melhoria do desempenho do modelo. Embora os algoritmos e modelos muitas vezes chamem a atenção, são os recursos cuidadosamente elaborados que estabelecem a base para o poder preditivo. Imagine tentar construir uma casa em uma base fraca – sem recursos fortes, mesmo os algoritmos mais avançados podem desmoronar quando confrontados com conjuntos de dados complexos.

Entendendo a Engenharia de Recursos

A engenharia de recursos é o processo criativo e estratégico de selecionar, transformar e criar recursos (variáveis de entrada) a partir de dados brutos para maximizar o desempenho de um modelo. É a arte de converter dados em insights acionáveis, dando às máquinas a compreensão contextual de que precisam para fazer previsões precisas. Quer se trate de prever os preços das casas, classificar as preferências do cliente ou diagnosticar condições médicas, a engenharia de recursos é a chave para desbloquear o potencial oculto em seus dados.

A importância do artesanato cuidadoso

Imagine que você tenha a tarefa de prever os preços das casas com base em vários fatores. Inicialmente, você pode ser atraído pelos recursos óbvios, como metragem quadrada, número de quartos e localização. No entanto, a mágica da engenharia de recursos está em desenterrar os aspectos mais sutis que influenciam a variável de destino. A proporção de banheiros para quartos afeta o preço? E a presença de uma lareira ou a idade do telhado?


A engenharia de recursos não é apenas criar mais recursos; trata-se de discernir quais facetas dos dados realmente importam. Esse processo geralmente requer conhecimento de domínio, criatividade e uma compreensão profunda do problema que você está enfrentando. Ao refinar os recursos existentes e criar novos, você está essencialmente ensinando seu modelo a entender os dados como um especialista.

Por que você deve se preocupar com a engenharia de recursos?

A resposta está no desempenho do modelo. Recursos bem projetados podem levar a uma convergência mais rápida durante o treinamento, redução do overfitting e, finalmente, previsões mais precisas. Um modelo de aprendizado de máquina é tão bom quanto os dados que são alimentados, e recursos bem projetados fornecem uma representação mais rica e diferenciada desses dados.


Neste artigo, vamos mergulhar no mundo da engenharia de recursos usando o conjunto de dados avançado de previsão de preços de casas do Kaggle. Ao acompanhar, você obterá insights sobre várias técnicas que podem transformar dados brutos em preditores valiosos e verá como os resultados de seu modelo melhoram aplicando diferentes métodos de engenharia de recursos.


Portanto, sem perder tempo, vamos começar a aprender sobre os diferentes métodos de engenharia de recursos.

Métodos

Agora que preparamos o cenário, é hora de mergulhar no excitante mundo das técnicas avançadas de engenharia de recursos. Nesta seção, guiarei você pela implementação passo a passo de quatro métodos poderosos que podem sobrecarregar seus modelos preditivos. Cada método atende a um propósito exclusivo, oferecendo insights e melhorias que podem fazer uma diferença substancial no desempenho do seu modelo.

Método 1: Informações Mútuas - Extraindo Informações de Relacionamentos

Imagine ser capaz de selecionar os recursos mais influentes para o seu modelo com precisão cirúrgica. A informação mútua permite que você consiga exatamente isso. Ao quantificar a relação entre cada recurso e a variável de destino, você pode identificar os principais fatores que afetam suas previsões. Orientaremos você pelo código e forneceremos uma explicação detalhada de cada etapa, ajudando você a dominar essa técnica perspicaz.

Método 2: Agrupamento - Descobrindo Padrões por Agrupamento

Os clusters geralmente ocultam padrões valiosos em seus dados. Com o agrupamento, você pode descobrir essas joias ocultas e aproveitá-las para aprimorar a compreensão do seu modelo. Vou guiá-lo através do processo de aplicação do agrupamento KMeans para agrupar instâncias semelhantes. Você aprenderá como criar novos recursos com base nesses clusters e observar seu impacto no desempenho do modelo.

Método 3: Redução de Dimensionalidade PCA - Complexidade de Condensação

Dados de alta dimensão podem ser esmagadores, mas a Análise de Componentes Principais (PCA) oferece uma solução. Ao identificar as dimensões mais influentes, você pode reduzir a complexidade sem sacrificar o poder preditivo. Este tutorial o guiará pela transformação de seus dados usando o PCA, fornecendo informações sobre como essa técnica pode simplificar seu modelo, mantendo sua precisão.


Além desses métodos, também apresentarei as Transformações Matemáticas — uma técnica frequentemente negligenciada que pode gerar resultados poderosos. Ao aplicar operações matemáticas a colunas selecionadas, você pode moldar seus dados para melhor alinhamento com as suposições de seu modelo. Você explorará transformações logarítmicas, de raiz quadrada e inversas, ilustrando como elas podem revelar relacionamentos ocultos e aumentar a precisão do seu modelo.


Ao longo desta seção, oferecerei explicações abrangentes para garantir que você não apenas compreenda os aspectos técnicos, mas também entenda o raciocínio por trás da aplicação de cada método. Ao final, você terá adquirido um valioso conjunto de ferramentas de técnicas avançadas de engenharia de recursos que podem ser aplicadas com segurança para aprimorar seus modelos preditivos em vários cenários.


Você está pronto para explorar as complexidades de cada método, descobrir seu potencial e equipar-se com o conhecimento para projetar recursos que se traduzem em modelos preditivos mais precisos e poderosos? Vamos começar esta jornada esclarecedora!

Código

Importando pacotes

Vamos primeiro importar todos os pacotes que você precisa.

 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.feature_selection import SelectKBest, mutual_info_regression from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.preprocessing import LabelEncoder, StandardScaler import numpy as np

Obtendo os dados

Agora, vamos obter o conjunto de dados do kaggle e pré-processá-lo.

 # Load the dataset data = pd.read_csv('train.csv') # Data preprocessing def preprocess_data(df): # Handle missing values df = df.fillna(df.median()) # Handle categorical variables df = pd.get_dummies(df, drop_first=True) return df data = preprocess_data(data) # Prepare the data X = data.drop('SalePrice', axis=1) y = data['SalePrice'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)


Para começar, vamos executar um modelo de linha de base sem nenhuma engenharia de recursos e avaliar sua precisão. Depois disso, aplicaremos cada um dos quatro métodos de engenharia de recursos (informação mútua, agrupamento, redução de dimensionalidade PCA e codificação de rótulo) individualmente e compararemos seus efeitos no desempenho do modelo.

Modelo de linha de base

Antes de aplicar qualquer engenharia de recursos, começaremos com um modelo básico. Aqui, usaremos um modelo de regressão linear simples para prever os preços das casas usando o conjunto de dados original.

 baseline_model = LinearRegression() baseline_model.fit(X_train, y_train) baseline_predictions = baseline_model.predict(X_test) baseline_rmse = mean_squared_error(y_test, baseline_predictions, squared=False) print(f"Baseline RMSE: {baseline_rmse}") # ------------------ OUTPUT ---------------- # Baseline RMSE: 49204.92

No modelo de linha de base, você está começando com um modelo de regressão linear simples que usa os recursos originais como eles são. Você está treinando o modelo usando os dados de treinamento, fazendo previsões nos dados de teste e calculando a raiz do erro quadrático médio (RMSE) para medir o desempenho do modelo em dados não vistos.

Modelo de Informação Mútua

 # Method 1: Mutual Information mi_selector = SelectKBest(score_func=mutual_info_regression, k=10) X_train_mi = mi_selector.fit_transform(X_train, y_train) X_test_mi = mi_selector.transform(X_test) mi_model = LinearRegression() mi_model.fit(X_train_mi, y_train) mi_predictions = mi_model.predict(X_test_mi) mi_rmse = mean_squared_error(y_test, mi_predictions, squared=False) print(f"Mutual Information RMSE: {mi_rmse}") # ------------------ OUTPUT ----------------- # Mutual Information RMSE: 39410.99

Aqui, você está explorando as informações que cada recurso fornece sobre a variável de destino. Você seleciona os 10 principais recursos que possuem as pontuações de informações mútuas mais altas com o destino. Em seguida, você treina um novo modelo de regressão linear usando apenas esses recursos selecionados. Isso ajuda a garantir que seu modelo se concentre nos recursos mais informativos e você calcule o RMSE para ver como as previsões desse modelo se comparam à linha de base.

Modelo de agrupamento

 # Method 2: Clustering num_clusters = 5 kmeans = KMeans(n_clusters=num_clusters, random_state=42) X_clustered = X.copy() X_clustered['Cluster'] = kmeans.fit_predict(X) X_clustered = pd.get_dummies(X_clustered, columns=['Cluster'], prefix='Cluster') X_train_clustered, X_test_clustered, _, _ = train_test_split(X_clustered, y, test_size=0.2, random_state=42) cluster_model = LinearRegression() cluster_model.fit(X_train_clustered, y_train) cluster_predictions = cluster_model.predict(X_test_clustered) cluster_rmse = mean_squared_error(y_test, cluster_predictions, squared=False) print(f"Clustering RMSE: {cluster_rmse}") # ------------------- OUTPUT -------------- # Clustering RMSE: 47715.30

Você está procurando agrupar instâncias semelhantes em seus dados usando clustering. Especificamente, você usa o algoritmo KMeans para dividir seus dados em clusters. Cada instância é atribuída a um cluster e você adiciona essas informações de cluster como um novo recurso categórico. Ao fazer isso, você está dando ao modelo uma maneira de considerar os relacionamentos entre as instâncias em termos de seus clusters. Depois de treinar um modelo de regressão linear nesses dados agrupados, você calcula o RMSE para avaliar seu desempenho.

PCA - Modelo de Redução de Dimensionalidade

 # Method 3: PCA Dimensionality Reduction scaler = StandardScaler() X_scaled = scaler.fit_transform(X_train) pca = PCA(n_components=10) X_train_pca = pca.fit_transform(X_scaled) X_test_pca = pca.transform(scaler.transform(X_test)) pca_model = LinearRegression() pca_model.fit(X_train_pca, y_train) pca_predictions = pca_model.predict(X_test_pca) pca_rmse = mean_squared_error(y_test, pca_predictions, squared=False) print(f"PCA RMSE: {pca_rmse}") # --------------- OUTPUT -------------- # PCA RMSE: 40055.78

O PCA ajuda a reduzir a complexidade de seus dados, resumindo-os em menos dimensões. Você padroniza seus dados para garantir que todos os recursos estejam na mesma escala. Em seguida, você usa o PCA para identificar os padrões mais importantes em seus dados e reduz o número de recursos para 10 componentes principais. Treinando um modelo de regressão linear nesses componentes, você consegue capturar as informações mais significativas enquanto simplifica o modelo. O RMSE ajuda a avaliar se essa abordagem é eficaz.

Modelo de Transformações Matemáticas

 # Method 5: Mathematical Transformations X_train_transformed = X_train.copy() X_test_transformed = X_test.copy() # Apply logarithmic transformation log_columns = ['GrLivArea', 'LotArea'] # Specify columns to apply log transformation X_train_transformed[log_columns] = np.log1p(X_train_transformed[log_columns]) X_test_transformed[log_columns] = np.log1p(X_test_transformed[log_columns]) # Apply square root transformation sqrt_columns = ['GarageArea', '1stFlrSF'] # Specify columns to apply square root transformation X_train_transformed[sqrt_columns] = np.sqrt(X_train_transformed[sqrt_columns]) X_test_transformed[sqrt_columns] = np.sqrt(X_test_transformed[sqrt_columns]) # Apply inverse transformation inv_columns = ['YearBuilt', 'OverallQual'] # Specify columns to apply inverse transformation X_train_transformed[inv_columns] = 1 / X_train_transformed[inv_columns] X_test_transformed[inv_columns] = 1 / X_test_transformed[inv_columns] math_transform_model = LinearRegression() math_transform_model.fit(X_train_transformed, y_train) math_transform_predictions = math_transform_model.predict(X_test_transformed) math_transform_rmse = mean_squared_error(y_test, math_transform_predictions, squared=False) print(f"Mathematical Transformations RMSE: {math_transform_rmse}") # ------------------ OUTPUT --------------- # Mathematical Transformations RMSE: 47143.21


As transformações matemáticas envolvem a alteração de valores de recursos usando operações matemáticas para revelar padrões subjacentes. Você aplica logarítmica, raiz quadrada e transformações inversas a colunas específicas. Por exemplo, a transformação logarítmica ajuda a normalizar dados distorcidos, a transformação de raiz quadrada pode ajudar com outliers e a transformação inversa pode enfatizar relacionamentos com valores pequenos. Você treina um modelo de regressão linear usando esses recursos transformados e calcula o RMSE para avaliar se as transformações melhoraram o poder preditivo do modelo.


Em todos esses métodos, você está experimentando diferentes técnicas para tornar seus dados mais adequados para modelagem. O objetivo é encontrar o método que leva ao RMSE mais baixo, indicando que as previsões do seu modelo estão mais próximas dos valores de destino reais e, portanto, mais precisas.

Comparando resultados

  1. RMSE de linha de base: 49204,92 Este é o erro quadrático médio (RMSE) do modelo de linha de base, onde nenhuma transformação ou engenharia de recursos foi aplicada. O modelo usa as características originais como elas são. Um RMSE de 49204,92 indica o erro de previsão médio do modelo de linha de base nos dados de teste.


  2. RMSE de Informação Mútua: 39410,99 Este RMSE representa o desempenho do modelo após a aplicação do método de seleção de características de informação mútua. É significativamente menor do que o RMSE da linha de base, indicando que selecionar os k principais recursos com base em suas pontuações de informações mútuas levou a um melhor desempenho do modelo.


  3. Clustering RMSE: 47715,30 O RMSE aqui corresponde ao desempenho do modelo após a introdução de um novo recurso categórico baseado em clustering. O RMSE está próximo do RMSE da linha de base, sugerindo que a introdução do agrupamento não levou a uma melhora significativa neste caso.


  4. PCA RMSE: 40055,78 Este RMSE reflete o desempenho do modelo após a aplicação do PCA para redução de dimensionalidade. É um pouco mais alto que o RMSE de informações mútuas, mas mais baixo que o RMSE de linha de base. O modelo que usa recursos transformados por PCA parece ter um desempenho moderado.


  5. RMSE de codificação de rótulo: 49204,92 O RMSE aqui mostra o desempenho do modelo quando variáveis categóricas são codificadas por rótulo. O RMSE corresponde ao RMSE da linha de base, indicando que o uso de recursos codificados por rótulos não levou a uma melhoria perceptível nesse caso.


  6. RMSE de transformações matemáticas: 47143,21 Este RMSE representa o desempenho do modelo após a aplicação de várias transformações matemáticas às colunas selecionadas. O RMSE é menor do que o RMSE da linha de base, sugerindo que essas transformações levaram a um melhor desempenho do modelo.


Resumindo:


  • A informação mútua parece ser o método de seleção de características mais eficaz entre os métodos testados, pois reduziu significativamente o RMSE.
  • O PCA e as transformações matemáticas resultaram em melhor desempenho do modelo em comparação com a linha de base.
  • Clustering não mostrou uma melhoria significativa neste cenário particular.


Lembre-se de que os valores reais de RMSE e sua interpretação dependem de vários fatores, como o conjunto de dados, a complexidade do modelo e a natureza da variável de destino. O objetivo é experimentar diferentes métodos de engenharia de recursos e selecionar aquele que leva ao melhor desempenho em dados não vistos.