1
resposta

Solução Fetures mais importantes

# Importa o visualizador de importância de variáveis do Yellowbrick
from yellowbrick.model_selection import FeatureImportances

# Cria o visualizador de importância de atributos para o modelo Random Forest
# relative=False mostra a importância absoluta
# topn=10 exibe as 10 variáveis mais importantes
viz = FeatureImportances(model_rf, relative=False, topn=10)

# Ajusta o visualizador com os dados de treino
viz.fit(X_train, y_train)

# Exibe o gráfico com a importância das variáveis
viz.show()

# Importâncias brutas
importancias = model_rf.feature_importances_
nomes_features = X_train.columns

# Cálculo da porcentagem
total_importancia = importancias.sum()
porcentagem = (importancias / total_importancia) * 100

# Criação do DataFrame com os dados
df_importancia = pd.DataFrame({
    'Feature': nomes_features,
    'Importância': importancias,
    'Importância (%)': porcentagem
}).sort_values(by='Importância', ascending=False)

# Exibição das top 10 variáveis
print("\nTop 10 variáveis mais importantes:")
print(df_importancia.head(10).to_string(index=False, float_format="%.4f"))

import pandas as pd
from sklearn.ensemble import RandomForestRegressor

# Inicializa um DataFrame para armazenar os resultados das métricas
results_df = pd.DataFrame(index=['RMSE', 'MAE', 'R2'])

# Cria o modelo base com profundidade máxima limitada
model_selected_features = RandomForestRegressor(random_state=42, max_depth=5)

# Loop para testar diferentes quantidades de variáveis mais importantes
for count in [1, 5, 10, 15, 20, 25, 30]:
    
    # Seleciona os 'count' primeiros atributos mais importantes
    selected_features = df_importancia['Feature'].values[:count]

    # Subconjuntos de treino e teste com as features selecionadas
    X_train_selected = X_train[selected_features]
    X_test_selected = X_test[selected_features]

    # Treina o modelo com as features selecionadas
    model_selected_features.fit(X_train_selected, y_train)

    # Faz previsões
    y_pred = model_selected_features.predict(X_test_selected)

    # Calcula as métricas
    metricas = calcular_metricas_regressao(y_test, y_pred)

    # Armazena os resultados no DataFrame
    results_df[count] = list(metricas.values())

# Exibe o DataFrame com os resultados
results_df

import pandas as pd
from sklearn.ensemble import RandomForestRegressor

# Inicializa um DataFrame para armazenar os resultados das métricas
results_df = pd.DataFrame(index=['RMSE', 'MAE', 'R2'])

# Cria o modelo base com profundidade máxima limitada
model_selected_features = RandomForestRegressor(random_state=42, max_depth=5)

# Loop para testar diferentes quantidades de variáveis mais importantes
for count in range(10, 16):
    
    # Seleciona os 'count' primeiros atributos mais importantes
    selected_features = df_importancia['Feature'].values[:count]

    # Subconjuntos de treino e teste com as features selecionadas
    X_train_selected = X_train[selected_features]
    X_test_selected = X_test[selected_features]

    # Treina o modelo com as features selecionadas
    model_selected_features.fit(X_train_selected, y_train)

    # Faz previsões
    y_pred = model_selected_features.predict(X_test_selected)

    # Calcula as métricas
    metricas = calcular_metricas_regressao(y_test, y_pred)

    # Armazena os resultados no DataFrame
    results_df[count] = list(metricas.values())

# Exibe o DataFrame com os resultados
results_df

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

# Seleciona as 13 variáveis mais importantes
selected_features = df_importancia['Feature'].values[:13]

# Subconjunto dos dados com as features selecionadas
X_select_features = X[selected_features]

# Divide os dados em treino e teste
X_train, X_test, y_train, y_test = train_test_split(
    X_select_features, y, test_size=0.2, random_state=42
)

# Cria e treina o modelo com max_depth limitado
model_selected_features = RandomForestRegressor(random_state=42, max_depth=5)
model_selected_features.fit(X_train, y_train)

# Faz as previsões
y_pred = model_selected_features.predict(X_test)

# Calcula as métricas
metricas = calcular_metricas_regressao(y_test, y_pred)

# Exibe as métricas formatadas
print("Desempenho do modelo com as 13 variáveis mais importantes:\n")
for nome, valor in metricas.items():
    print(f"{nome}: {valor:.4f}")
1 resposta

Olá, Paulo! Como vai?

Muito bem! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Observei que você explorou a visualização de importância de atributos com Yellowbrick para analisar os dados, utilizou muito bem o RandomForestRegressor para investigar o desempenho com diferentes conjuntos de variáveis e ainda compreendeu a importância do cálculo e comparação de métricas de regressão para avaliar a qualidade dos modelos.

Uma dica interessante para o futuro é usar SelectFromModel da sklearn para selecionar automaticamente as features mais relevantes com base na importância do modelo. Dessa forma:

from sklearn.feature_selection import SelectFromModel

selector = SelectFromModel(model_rf, threshold="mean", prefit=True)
X_train_selected = selector.transform(X_train)
X_test_selected = selector.transform(X_test)

Resultado: Seleciona automaticamente as variáveis com importância acima da média

Isso faz com que o processo de seleção de atributos seja mais automatizado e eficiente, reduzindo esforço manual e melhorando a generalização do modelo.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!