Implementando e Avaliando Regressão Linear em Python: Um Guia Abrangente
Introdução à Regressão Linear
A regressão linear é um dos algoritmos mais fundamentais e amplamente utilizados em aprendizado de máquina e análise de dados. Ela modela a relação entre uma variável dependente e uma ou mais variáveis independentes ajustando uma equação linear aos dados observados. Neste guia, vamos guiá-lo na implementação da regressão linear em Python usando a biblioteca scikit-learn, comparando resultados reais versus previstos e avaliando o desempenho do modelo usando a métrica R-quadrado.
Quer você seja um entusiasta de ciência de dados ou um profissional experiente, este tutorial abrangente fornecerá o conhecimento e as habilidades práticas para construir e avaliar um modelo de regressão linear de forma eficaz.
Índice
- Visão Geral do Conjunto de Dados
- Configurando Seu Ambiente
- Importando as Bibliotecas Necessárias
- Carregando e Explorando os Dados
- Visualizando os Dados
- Preparando os Dados para Treinamento
- Construindo o Modelo de Regressão Linear
- Fazendo Previsões
- Comparando Resultados Reais vs. Previstos
- Avaliando o Modelo com R-quadrado
- Conclusão
- Leitura Adicional
Visão Geral do Conjunto de Dados
Para este tutorial, usaremos o conjunto de dados Renda Per Capita do Canadá do Kaggle. Este conjunto de dados fornece informações sobre a renda per capita anual no Canadá ao longo de vários anos, permitindo-nos analisar tendências de renda e construir um modelo preditivo.
Configurando Seu Ambiente
Antes de mergulhar no código, certifique-se de ter o Python instalado em seu sistema. Recomenda-se usar um ambiente virtual para gerenciar as dependências do seu projeto. Você pode configurar um ambiente virtual usando venv
ou ferramentas como conda
.
1 2 3 4 5 6 |
# Using venv python -m venv linear_regression_env source linear_regression_env/bin/activate # On Windows: linear_regression_env\Scripts\activate # Install necessary packages pip install numpy pandas matplotlib seaborn scikit-learn |
Importando as Bibliotecas Necessárias
Vamos começar importando as bibliotecas essenciais necessárias para manipulação de dados, visualização e construção do nosso modelo de regressão.
1 2 3 4 5 6 7 8 9 10 |
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score # Set seaborn style for better aesthetics sns.set() |
Carregando e Explorando os Dados
Em seguida, vamos carregar o conjunto de dados em um DataFrame do Pandas e dar uma olhada preliminar em sua estrutura.
1 2 3 4 5 |
# Import Data data = pd.read_csv('canada_per_capita_income.csv') # Preview the first few rows of the dataset print(data.head()) |
Saída:
1 2 3 4 5 6 |
year per capita income (US$) 0 1970 3399.299037 1 1971 3768.297935 2 1972 4251.175484 3 1973 4804.463248 4 1974 5576.514583 |
A partir da saída, podemos observar que o conjunto de dados contém duas colunas: year
e per capita income (US$)
.
Visualizando os Dados
A visualização ajuda a entender os padrões e relacionamentos subjacentes nos dados. Vamos criar um gráfico de dispersão para visualizar a relação entre o ano e a renda per capita.
1 2 3 4 5 |
sns.scatterplot(data=data, x='per capita income (US$)', y='year') plt.title('Renda Per Capita ao Longo dos Anos no Canadá') plt.xlabel('Renda Per Capita (US$)') plt.ylabel('Ano') plt.show() |
O gráfico de dispersão revela a tendência de aumento da renda per capita ao longo dos anos. No entanto, a relação pode não ser perfeitamente linear, indicando potencial variabilidade nos dados.
Preparando os Dados para Treinamento
Antes de treinar nosso modelo, precisamos preparar os dados separando as características (variáveis independentes) da variável alvo (variável dependente).
1 2 3 |
# Define features and target variable X = data.iloc[:, :-1] # All columns except the last one Y = data.iloc[:, -1] # The last column |
Neste caso, X
contém a coluna year
, e Y
contém a per capita income (US$)
.
Construindo o Modelo de Regressão Linear
Agora, vamos dividir os dados em conjuntos de treinamento e teste para avaliar o desempenho do nosso modelo em dados não vistos.
1 2 |
# Train-test split X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20, random_state=1) |
Explicação:
- X_train & y_train: Usados para treinar o modelo.
- X_test & y_test: Usados para testar o desempenho do modelo.
- test_size=0.20: 20% dos dados são reservados para teste.
- random_state=1: Garante a reprodutibilidade da divisão.
Agora, vamos instanciar e treinar o modelo de Regressão Linear.
1 2 3 4 5 6 7 8 |
# Initialize the Linear Regression model model = LinearRegression() # Fit the model to the training data model.fit(X_train, y_train) # Output the model details print(model) |
Saída:
1 |
LinearRegression() |
Fazendo Previsões
Com o modelo treinado, agora podemos fazer previsões no conjunto de teste.
1 2 3 4 5 |
# Make predictions on the test data y_pred = model.predict(X_test) # Display the predicted values print(y_pred) |
Saída:
1 2 3 |
[20349.94572643 18613.49135581 33373.35350612 29900.44476487 1248.94764955 2117.17483487 24691.081653 27295.76320894 38582.716618 22086.40009706] |
Esses valores representam as previsões do modelo de renda per capita com base nos anos de entrada no conjunto de teste.
Comparando Resultados Reais vs. Previstos
Para avaliar quão bem nosso modelo está performando, vamos comparar os valores reais (y_test
) com os valores previstos (y_pred
).
1 2 3 4 5 6 7 |
# Create a DataFrame to compare actual and predicted values comparison = pd.DataFrame() comparison['Actual'] = y_test comparison['Predicted'] = y_pred # Display the comparison print(comparison) |
Saída:
1 2 3 4 5 6 7 8 9 10 11 |
Actual Predicted 24 15755.820270 20349.945726 22 16412.083090 18613.491356 39 32755.176820 33373.353506 35 29198.055690 29900.444765 2 4251.175484 1248.947650 3 4804.463248 2117.174835 29 17581.024140 24691.081653 32 19232.175560 27295.763209 45 35175.188980 38582.716618 26 16699.826680 22086.400097 |
Análise:
- Boas Previsões: Entradas onde os valores
Actual
ePredicted
estão próximos indicam que o modelo está performando bem. - Discrepâncias: Diferenças significativas destacam áreas onde o modelo pode precisar de melhorias ou onde a relação não é perfeitamente linear.
Por exemplo, enquanto a maioria das previsões está razoavelmente próxima dos valores reais, algumas discrepâncias, como um valor real de 4.251,18 versus um valor previsto de 1.248,95, sugerem variabilidade que o modelo não conseguiu capturar.
Avaliando o Modelo com R-quadrado
Para avaliar quantitativamente o desempenho do modelo, usaremos a métrica R-quadrado (R²). O R-quadrado representa a proporção da variância da variável dependente que é explicada pela(s) variável(is) independente(s) no modelo.
1 2 3 4 |
# Calculate R-squared score r2 = r2_score(y_test, y_pred) print(f"R-squared Score: {r2:.2f}") |
Saída:
1 |
R-squared Score: 0.80 |
Interpretação:
- Um valor de R-quadrado de 0.80 indica que 80% da variância na renda per capita é explicada pelo ano.
- Embora 80% seja uma indicação forte de um bom ajuste, também implica que 20% da variância permanece inexplicada, possivelmente devido a outros fatores não considerados no modelo ou variabilidade inerente dos dados.
Entendendo os Valores de R-quadrado:
- 1: Ajuste perfeito. O modelo explica toda a variabilidade.
- 0: Nenhum poder explicativo. O modelo não explica nenhuma variabilidade.
- Valores Negativos: Indica que o modelo está performando pior do que uma linha horizontal (média da variável alvo).
Conclusão
Neste guia, implementamos com sucesso um modelo de Regressão Linear em Python para prever a renda per capita do Canadá ao longo dos anos. Seguindo esses passos, você pode:
- Carregar e Explorar Dados: Entender a estrutura do conjunto de dados e as tendências iniciais.
- Visualizar Relacionamentos: Usar gráficos de dispersão para identificar relacionamentos potenciais lineares.
- Preparar Dados: Dividir os dados em conjuntos de treinamento e teste para uma avaliação imparcial.
- Construir e Treinar o Modelo: Utilizar o
LinearRegression
do scikit-learn para ajustar o modelo. - Fazer Previsões: Gerar previsões usando o modelo treinado.
- Comparar Resultados: Analisar quão bem os valores previstos alinham-se com os dados reais.
- Avaliar Desempenho: Utilizar o R-quadrado para quantificar o poder explicativo do modelo.
Embora o modelo apresente um valor de R-quadrado louvável, há espaço para melhorias. Explorar características adicionais, transformar variáveis ou empregar algoritmos mais complexos pode potencialmente melhorar o desempenho preditivo.
Leitura Adicional
- Documentação do Scikit-learn
- Entendendo o R-quadrado
- Assunções da Regressão Linear
- Melhorando o Desempenho do Modelo
Iniciar esta jornada de regressão linear equipa você com habilidades fundamentais aplicáveis em diversos domínios orientados por dados. Continue praticando com conjuntos de dados variados para aprofundar sua compreensão e proficiência em aprendizado de máquina.
#LinearRegression #Python #MachineLearning #DataScience #ScikitLearn #R2Score #DataVisualization #PredictiveModeling #PythonTutorial