Regressão Linear Múltipla em Python: Um Guia Abrangente

Introdução

A Regressão Linear Múltipla é uma técnica estatística fundamental usada para modelar a relação entre uma variável dependente e várias variáveis independentes. Em Python, ferramentas como scikit-learn e statsmodels fornecem implementações robustas para análise de regressão. Este tutorial irá guiá-lo na implementação, interpretação e avaliação de modelos de regressão linear múltipla usando Python.

Pré-requisitos

Antes de mergulhar na implementação, certifique-se de ter o seguinte:

O que é Regressão Linear Múltipla?

A Regressão Linear Múltipla (MLR) é um método estatístico que modela a relação entre uma variável dependente e duas ou mais variáveis independentes. É uma extensão da regressão linear simples, que modela a relação entre uma variável dependente e uma única variável independente. Na MLR, a relação é modelada usando a fórmula:

Onde:

Exemplo: Prever o preço de uma casa com base em seu tamanho, número de quartos e localização. Neste caso, existem três variáveis independentes, ou seja, tamanho, número de quartos e localização, e uma variável dependente, ou seja, preço, que é o valor a ser previsto.

Pressupostos da Regressão Linear Múltipla

Antes de implementar a regressão linear múltipla, é essencial garantir que os seguintes pressupostos sejam atendidos:

  1. Linearidade: A relação entre a variável dependente e as variáveis independentes é linear.

  2. Independência dos Erros: Os resíduos (erros) são independentes entre si. Isso é frequentemente verificado usando o teste de Durbin-Watson.

  3. Homoescasticidade: A variância dos resíduos é constante em todos os níveis das variáveis independentes. Um gráfico de resíduos pode ajudar a verificar isso.

  4. Sem Multicolinearidade: As variáveis independentes não estão altamente correlacionadas. O Fator de Inflação da Variância (VIF) é comumente usado para detectar multicolinearidade.

  5. Normalidade dos Resíduos: Os resíduos devem seguir uma distribuição normal. Isso pode ser verificado usando um gráfico Q-Q.

  6. Influência de Valores Atípicos: Valores atípicos ou pontos de alta alavancagem não devem influenciar desproporcionalmente o modelo.

Essas suposições garantem que o modelo de regressão seja válido e que os resultados sejam confiáveis. Não atender a essas suposições pode levar a resultados tendenciosos ou enganosos.

Pré-processar os Dados

Nesta seção, você aprenderá a usar o modelo de Regressão Linear Múltipla em Python para prever os preços das casas com base em características do Conjunto de Dados de Habitação da Califórnia. Você aprenderá como pré-processar os dados, ajustar um modelo de regressão e avaliar seu desempenho, abordando desafios comuns como multicolinearidade, outliers e seleção de características.

Passo 1 – Carregar o Conjunto de Dados

Você usará o Conjunto de Dados de Habitação da Califórnia, um conjunto de dados popular para tarefas de regressão. Este conjunto de dados contém 13 características sobre casas nos subúrbios de Boston e seus preços medianos correspondentes.

Primeiro, vamos instalar os pacotes necessários:

pip install numpy pandas matplotlib seaborn scikit-learn statsmodels
from sklearn.datasets import fetch_california_housing  # Importe a função fetch_california_housing de sklearn.datasets para carregar o conjunto de dados California Housing.
import pandas as pd  # Importe o pandas para manipulação e análise de dados.
import numpy as np  # Importe o numpy para computação numérica.

# Carregue o conjunto de dados California Housing usando a função fetch_california_housing.
housing = fetch_california_housing()

# Converta os dados do conjunto de dados em um DataFrame do pandas, usando os nomes das características como cabeçalhos de coluna.
housing_df = pd.DataFrame(housing.data, columns=housing.feature_names)

# Adicione a variável alvo 'MedHouseValue' ao DataFrame, usando os valores alvo do conjunto de dados.
housing_df['MedHouseValue'] = housing.target

# Exiba as primeiras linhas do DataFrame para ter uma visão geral do conjunto de dados.
print(housing_df.head())

Você deve observar a seguinte saída do conjunto de dados:

 MedInc  HouseAge  AveRooms  AveBedrms  Population  AveOccup  Latitude  Longitude  MedHouseValue
0  8.3252      41.0  6.984127   1.023810       322.0  2.555556     37.88    -122.23          4.526
1  8.3014      21.0  6.238137   0.971880      2401.0  2.109842     37.86    -122.22          3.585
2  7.2574      52.0  8.288136   1.073446       496.0  2.802260     37.85    -122.24          3.521
3  5.6431      52.0  5.817352   1.073059       558.0  2.547945     37.85    -122.25          3.413
4  3.8462      52.0  6.281853   1.081081       565.0  2.181467     37.85    -122.25          3.422

Aqui está o significado de cada atributo:

Variable Description
MedInc Renda média no quarteirão
HouseAge Idade média da casa no quarteirão
AveRooms Número médio de quartos
AveBedrms Número médio de quartos
Population População do quarteirão
AveOccup Ocupação média da casa
Latitude Latitude do quarteirão
Longitude Longitude do quarteirão

Passo 2 – Pré-processar os Dados

Verificar Valores Ausentes

Garante que não há valores ausentes no conjunto de dados que possam afetar a análise.

print(housing_df.isnull().sum())

Saída:

MedInc           0
HouseAge         0
AveRooms         0
AveBedrms        0
Population       0
AveOccup         0
Latitude         0
Longitude        0
MedHouseValue    0
dtype: int64

Seleção de Características

Vamos primeiro criar uma matriz de correlação para entender as dependências entre as variáveis.

correlation_matrix = housing_df.corr()
print(correlation_matrix['MedHouseValue'])

Saída:

MedInc           0.688075
HouseAge         0.105623
AveRooms         0.151948
AveBedrms       -0.046701
Population      -0.024650
AveOccup        -0.023737
Latitude        -0.144160
Longitude       -0.045967
MedHouseValue    1.000000

Você pode analisar a matriz de correlação acima para selecionar as variáveis dependentes e independentes para o nosso modelo de regressão. A matriz de correlação fornece insights sobre as relações entre cada par de variáveis no conjunto de dados.

Na matriz de correlação fornecida, MedHouseValue é a variável dependente, pois é a variável que estamos tentando prever. As variáveis independentes têm uma correlação significativa com MedHouseValue.

Com base na matriz de correlação, você pode identificar as seguintes variáveis independentes que têm uma correlação significativa com MedHouseValue:

  • MedInc: Esta variável tem uma forte correlação positiva (0.688075) com MedHouseValue, indicando que conforme a renda mediana aumenta, o valor mediano da casa também tende a aumentar.
  • AveRooms: Esta variável tem uma correlação positiva moderada (0.151948) com MedHouseValue, sugerindo que conforme o número médio de quartos por domicílio aumenta, o valor mediano da casa também tende a aumentar.
  • AveOccup: Esta variável tem uma correlação negativa fraca (-0,023737) com MedHouseValue, indicando que, à medida que a ocupação média por domicílio aumenta, o valor mediano da casa tende a diminuir, mas o efeito é relativamente pequeno.

Ao selecionar essas variáveis independentes, você pode construir um modelo de regressão que captura as relações entre essas variáveis e MedHouseValue, permitindo-nos fazer previsões sobre o valor mediano da casa com base na renda mediana, no número médio de quartos e na ocupação média.

Você também pode plotar a matriz de correlação em Python usando o seguinte:

import seaborn as sns
import matplotlib.pyplot as plt

# Supondo que 'housing_df' seja o DataFrame contendo os dados
# Plotando a matriz de correlação
plt.figure(figsize=(10, 8))
sns.heatmap(housing_df.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()

Você se concentrará em algumas características-chave para simplicidade com base no acima, como MedInc (renda mediana), AveRooms (média de quartos por domicílio) e AveOccup (ocupação média por domicílio).

selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = housing_df[selected_features]
y = housing_df['MedHouseValue']

O bloco de código acima seleciona características específicas do quadro de dados housing_df para análise. As características selecionadas são MedInc, AveRooms e AveOccup, que estão armazenadas na lista selected_features.

O DataFrame housing_df é então subset para incluir apenas essas características selecionadas e o resultado é armazenado na lista X.

A variável alvo MedHouseValue é extraída de housing_df e armazenada na lista y.

Escalonando Características

Você usará a Padronização para garantir que todos os recursos estejam na mesma escala, melhorando o desempenho e a comparabilidade do modelo.

A padronização é uma técnica de pré-processamento que escala características numéricas para ter uma média de 0 e um desvio padrão de 1. Esse processo garante que todos os recursos estejam na mesma escala, o que é essencial para modelos de aprendizado de máquina sensíveis à escala das características de entrada. Ao padronizar os recursos, você pode melhorar o desempenho e a comparabilidade do modelo, reduzindo o efeito de características com grandes intervalos que dominam o modelo.

from sklearn.preprocessing import StandardScaler

# Inicialize o objeto StandardScaler
scaler = StandardScaler()

# Ajuste o scaler aos dados e transforme-os
X_scaled = scaler.fit_transform(X)

# Imprima os dados escalados
print(X_scaled)

Saída:

[[ 2.34476576  0.62855945 -0.04959654]
[ 2.33223796  0.32704136 -0.09251223]
[ 1.7826994   1.15562047 -0.02584253]
...
[-1.14259331 -0.09031802 -0.0717345 ]
[-1.05458292 -0.04021111 -0.09122515]
[-0.78012947 -0.07044252 -0.04368215]]

A saída representa os valores escalados das características MedInc, AveRooms e AveOccup após a aplicação do StandardScaler. Os valores agora estão centrados em torno de 0 com um desvio padrão de 1, garantindo que todos os recursos estejam na mesma escala.

A primeira linha [ 2.34476576 0.62855945 -0.04959654] indica que, para o primeiro ponto de dados, o valor escalado de MedInc é 2.34476576, AveRooms é 0.62855945, e AveOccup é -0.04959654. Da mesma forma, a segunda linha [ 2.33223796 0.32704136 -0.09251223] representa os valores escalados para o segundo ponto de dados, e assim por diante.

Os valores escalados variam de aproximadamente -1,14259331 a 2,34476576, indicando que as características estão agora normalizadas e comparáveis. Isso é essencial para modelos de aprendizado de máquina que são sensíveis à escala das características de entrada, pois impede que características com grandes intervalos dominem o modelo.

Implementar Regressão Linear Múltipla

Agora que você terminou o pré-processamento dos dados, vamos implementar a regressão linear múltipla em Python.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# O modelo 'LinearRegression' é inicializado e ajustado aos dados de treinamento.
model = LinearRegression()
model.fit(X_train, y_train)

# O modelo é usado para prever a variável alvo para o conjunto de teste.
y_pred = model.predict(X_test)


print("Mean Squared Error:", mean_squared_error(y_test, y_pred))
print("R-squared:", r2_score(y_test, y_pred))

A função train_test_split é usada para dividir os dados em conjuntos de treinamento e teste. Aqui, 80% dos dados são usados para treinamento e 20% para teste.

O modelo é avaliado usando Erro Médio Quadrático e R-quadrado. O Erro Médio Quadrático (MSE) mede a média dos quadrados dos erros ou desvios.

O R-quadrado (R2) é uma medida estatística que representa a proporção da variância de uma variável dependente que é explicada por uma variável ou variáveis independentes em um modelo de regressão.

Output:

Mean Squared Error: 0.7006855912225249
R-squared: 0.4652924370503557

O output acima fornece duas métricas-chave para avaliar o desempenho do modelo de regressão linear múltipla:

Erro Médio Quadrático (MSE): 0.7006855912225249
O MSE mede a diferença média ao quadrado entre os valores previstos e reais da variável alvo. Um MSE menor indica um melhor desempenho do modelo, pois significa que o modelo está fazendo previsões mais precisas. Neste caso, o MSE é 0.7006855912225249, indicando que o modelo não é perfeito, mas tem um nível razoável de precisão. Os valores de MSE geralmente devem ser mais próximos de 0, com valores mais baixos indicando melhor desempenho.

R-quadrado (R2): 0.4652924370503557
O R-quadrado mede a proporção da variância na variável dependente que é previsível a partir das variáveis independentes. Ele varia de 0 a 1, onde 1 é uma previsão perfeita e 0 indica ausência de relação linear. Neste caso, o valor de R-quadrado é 0.4652924370503557, indicando que cerca de 46,53% da variância na variável alvo pode ser explicada pelas variáveis independentes usadas no modelo. Isso sugere que o modelo é capaz de capturar uma parte significativa das relações entre as variáveis, mas não todas.

Vamos verificar alguns gráficos importantes:

# Gráfico de Resíduos
residuals = y_test - y_pred
plt.scatter(y_pred, residuals, alpha=0.5)
plt.xlabel('Predicted Values')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.axhline(y=0, color='red', linestyle='--')
plt.show()

# Gráfico de Previsão vs Real
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Predicted vs Actual Values')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=4)
plt.show()

Usando statsmodels

A biblioteca Statsmodels em Python é uma ferramenta poderosa para análise estatística. Ela fornece uma ampla gama de modelos e testes estatísticos, incluindo regressão linear, análise de séries temporais e métodos não paramétricos.

No contexto de regressão linear múltipla, statsmodels pode ser usado para ajustar um modelo linear aos dados e, em seguida, realizar vários testes estatísticos e análises no modelo. Isso pode ser particularmente útil para entender as relações entre as variáveis independentes e dependentes, e para fazer previsões com base no modelo.

import statsmodels.api as sm

# Adicionar uma constante ao modelo
X_train_sm = sm.add_constant(X_train)
model_sm = sm.OLS(y_train, X_train_sm).fit()
print(model_sm.summary())

# Gráfico Q-Q para resíduos
sm.qqplot(model_sm.resid, line='s')
plt.title('Q-Q Plot of Residuals')
plt.show()

Saída:

==============================================================================
Dep. Variable:          MedHouseValue   R-squared:                       0.485
Model:                            OLS   Adj. R-squared:                  0.484
Method:                 Least Squares   F-statistic:                     5173.
Date:                Fri, 17 Jan 2025   Prob (F-statistic):               0.00
Time:                        09:40:54   Log-Likelihood:                -20354.
No. Observations:               16512   AIC:                         4.072e+04
Df Residuals:                   16508   BIC:                         4.075e+04
Df Model:                           3                                        
Covariance Type:            nonrobust                                        
==============================================================================
                coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          2.0679      0.006    320.074      0.000       2.055       2.081
x1             0.8300      0.007    121.245      0.000       0.817       0.843
x2            -0.1000      0.007    -14.070      0.000      -0.114      -0.086
x3            -0.0397      0.006     -6.855      0.000      -0.051      -0.028
==============================================================================
Omnibus:                     3981.290   Durbin-Watson:                   1.983
Prob(Omnibus):                  0.000   Jarque-Bera (JB):            11583.284
Skew:                           1.260   Prob(JB):                         0.00
Kurtosis:                       6.239   Cond. No.                         1.42
==============================================================================

Aqui está o resumo da tabela acima:

Resumo do Modelo

O modelo é um modelo de regressão de Mínimos Quadrados Ordinários, que é um tipo de modelo de regressão linear. A variável dependente é MedHouseValue, e o modelo possui um valor de R-quadrado de 0,485, indicando que cerca de 48,5% da variação em MedHouseValue pode ser explicada pelas variáveis independentes. O valor do R-quadrado ajustado é 0,484, que é uma versão modificada do R-quadrado que penaliza o modelo por incluir variáveis independentes adicionais.

Ajuste do Modelo

O modelo foi ajustado usando o método dos Mínimos Quadrados, e o F-estatístico é 5173, indicando que o modelo é um bom ajuste. A probabilidade de observar um F-estatístico pelo menos tão extremo quanto o observado, assumindo que a hipótese nula é verdadeira, é aproximadamente 0. Isso sugere que o modelo é estatisticamente significativo.

Coeficientes do Modelo

Os coeficientes do modelo são os seguintes:

  • O termo constante é 2,0679, indicando que quando todas as variáveis independentes são 0, o valor previsto de MedHouseValue é aproximadamente 2,0679.
  • O coeficiente para x1 (Neste caso MedInc) é 0,8300, indicando que para cada aumento de unidade em MedInc, o valor previsto de MedHouseValue aumenta aproximadamente 0,83 unidades, assumindo que todas as outras variáveis independentes se mantenham constantes.
  • O coeficiente para x2 (Neste caso AveRooms) é -0,1000, indicando que para cada aumento de unidade em x2, o MedHouseValue previsto diminui aproximadamente 0,10 unidades, assumindo que todas as outras variáveis independentes se mantenham constantes.
  • O coeficiente para x3 (Neste caso AveOccup) é -0,0397, indicando que para cada aumento de unidade em x3, o MedHouseValue previsto diminui aproximadamente 0,04 unidades, assumindo que todas as outras variáveis independentes se mantenham constantes.

Diagnóstico do Modelo

Os diagnósticos do modelo são os seguintes:

  • A estatística de teste Omnibus é 3981,290, indicando que os resíduos não estão distribuídos normalmente.
  • A estatística de Durbin-Watson é 1,983, indicando que não há autocorrelação significativa nos resíduos.
  • A estatística de teste Jarque-Bera é 11583,284, indicando que os resíduos não estão distribuídos normalmente.
  • A assimetria dos resíduos é 1,260, indicando que os resíduos têm assimetria para a direita.
  • A curtose dos resíduos é 6,239, indicando que os resíduos são leptocúrticos (ou seja, têm um pico mais alto e caudas mais pesadas do que uma distribuição normal).
  • O número de condição é 1,42, indicando que o modelo não é sensível a pequenas alterações nos dados.

Tratamento da Multicolinearidade

Multicolinearidade é um problema comum na regressão linear múltipla, onde duas ou mais variáveis independentes estão altamente correlacionadas entre si. Isso pode levar a estimativas instáveis e não confiáveis dos coeficientes.

Para detectar e lidar com a multicolinearidade, você pode usar o Fator de Inflação da Variância. O VIF mede o quanto a variância de um coeficiente de regressão estimado aumenta se seus preditores estiverem correlacionados. Um VIF de 1 significa que não há correlação entre um determinado preditor e os outros preditores. Valores de VIF acima de 5 ou 10 indicam uma quantidade problemática de colinearidade.

No bloco de código abaixo, vamos calcular o VIF para cada variável independente em nosso modelo. Se algum valor de VIF estiver acima de 5, você deve considerar remover a variável do modelo.

from statsmodels.stats.outliers_influence import variance_inflation_factor

vif_data = pd.DataFrame()
vif_data['Feature'] = selected_features
vif_data['VIF'] = [variance_inflation_factor(X_scaled, i) for i in range(X_scaled.shape[1])]
print(vif_data)

# Gráfico de Barras para Valores de VIF
vif_data.plot(kind='bar', x='Feature', y='VIF', legend=False)
plt.title('Variance Inflation Factor (VIF) by Feature')
plt.ylabel('VIF Value')
plt.show()

Saída:

   Feature       VIF
0    MedInc  1.120166
1  AveRooms  1.119797
2  AveOccup  1.000488

Os valores de VIF para cada atributo são os seguintes:

  • MedInc: O valor de VIF é 1.120166, indicando uma correlação muito baixa com outras variáveis independentes. Isso sugere que MedInc não está altamente correlacionado com outras variáveis independentes no modelo.
  • AveRooms: O valor de VIF é 1.119797, indicando uma correlação muito baixa com outras variáveis independentes. Isso sugere que AveRooms não está altamente correlacionado com outras variáveis independentes no modelo.
  • AveOccup: O valor do VIF é 1,000488, indicando nenhuma correlação com outras variáveis independentes. Isso sugere que AveOccup não está correlacionado com outras variáveis independentes no modelo.

De forma geral, esses valores de VIF estão todos abaixo de 5, indicando que não há multicolinearidade significativa entre as variáveis independentes no modelo. Isso sugere que o modelo é estável e confiável, e que os coeficientes das variáveis independentes não são significativamente afetados pela multicolinearidade.

Técnicas de Validação Cruzada

Validação cruzada é uma técnica usada para avaliar o desempenho de um modelo de aprendizado de máquina. É um procedimento de reamostragem usado para avaliar um modelo se tivermos uma amostra de dados limitada. O procedimento possui um único parâmetro chamado k que se refere ao número de grupos nos quais uma determinada amostra de dados será dividida. Como tal, o procedimento é frequentemente chamado de validação cruzada k-fold.

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X_scaled, y, cv=5, scoring='r2')
print("Cross-Validation Scores:", scores)
print("Mean CV R^2:", scores.mean())

# Gráfico de Linha para Pontuações de Validação Cruzada
plt.plot(range(1, 6), scores, marker='o', linestyle='--')
plt.xlabel('Fold')
plt.ylabel('R-squared')
plt.title('Cross-Validation R-squared Scores')
plt.show()

Saída:

Cross-Validation Scores: [0.42854821 0.37096545 0.46910866 0.31191043 0.51269138]
Mean CV R^2: 0.41864482644003276

As pontuações de validação cruzada indicam o quão bem o modelo se sai em dados não vistos. As pontuações variam de 0,31191043 a 0,51269138, indicando que o desempenho do modelo varia em diferentes dobras. Uma pontuação mais alta indica melhor desempenho.

A pontuação média do CV R^2 é de 0,41864482644003276, o que sugere que, em média, o modelo explica cerca de 41,86% da variância na variável alvo. Este é um nível moderado de explicação, indicando que o modelo é ​​um pouco eficaz na previsão da variável alvo, mas pode se beneficiar de melhorias ou refinamentos adicionais.

Essas pontuações podem ser usadas para avaliar a generalização do modelo e identificar possíveis áreas para melhoria.

Métodos de seleção de recursos

O método de Eliminação Recursiva de Recursos é uma técnica de seleção de recursos que elimina recursivamente os recursos menos importantes até que um número especificado de recursos seja alcançado. Este método é particularmente útil ao lidar com um grande número de recursos e o objetivo é selecionar um subconjunto dos recursos mais informativos.

No código fornecido, você primeiro importa a classe RFE de sklearn.feature_selection. Em seguida, cria uma instância de RFE com um estimador especificado (neste caso, LinearRegression) e define n_features_to_select como 2, indicando que queremos selecionar os dois melhores recursos.

Em seguida, ajustamos o objeto RFE às nossas características dimensionadas X_scaled e à variável alvo y. O atributo support_ do objeto RFE retorna uma máscara booleana indicando quais características foram selecionadas.

Para visualizar a classificação das características, você cria um DataFrame com os nomes das características e suas classificações correspondentes. O atributo ranking_ do objeto RFE retorna a classificação de cada característica, com valores menores indicando características mais importantes. Em seguida, você plota um gráfico de barras das classificações das características, ordenadas por seus valores de classificação. Este gráfico nos ajuda a entender a importância relativa de cada característica no modelo.

from sklearn.feature_selection import RFE
rfe = RFE(estimator=LinearRegression(), n_features_to_select=3)
rfe.fit(X_scaled, y)
print("Selected Features:", rfe.support_)

# Gráfico de Barras das Classificações das Características
feature_ranking = pd.DataFrame({
   'Feature': selected_features,
   'Ranking': rfe.ranking_
})
feature_ranking.sort_values(by='Ranking').plot(kind='bar', x='Feature', y='Ranking', legend=False)
plt.title('Feature Ranking (Lower is Better)')
plt.ylabel('Ranking')
plt.show()

Output:

Selected Features: [ True  True False]

Com base no gráfico acima, as 2 características mais adequadas são MedInc e AveRooms. Isso também pode ser verificado pela saída do modelo acima, pois a variável dependente MedHouseValue é principalmente dependente de MedInc e AveRooms.

FAQs

Como implementar regressão linear múltipla em Python?

Para implementar regressão linear múltipla em Python, você pode usar bibliotecas como statsmodels ou scikit-learn. Aqui está uma visão geral rápida usando scikit-learn:

from sklearn.linear_model import LinearRegression
import numpy as np

# Dados de exemplo
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])  # Variáveis preditoras
y = np.array([5, 7, 9, 11])  # Variável alvo

# Criar e ajustar o modelo
model = LinearRegression()
model.fit(X, y)

# Obter coeficientes e interceptação
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)

# Fazer previsões
predictions = model.predict(X)
print("Predictions:", predictions)

Isto demonstra como ajustar o modelo, obter os coeficientes e fazer previsões.

Quais são as suposições da regressão linear múltipla em Python?

A regressão linear múltipla baseia-se em várias suposições para garantir resultados válidos:

  1. Linearidade: A relação entre as variáveis preditoras e a variável alvo é linear.
  2. Independência: As observações são independentes umas das outras.
  3. Homoquedasticidade: A variância dos resíduos é constante em todos os níveis das variáveis independentes.
  4. Normalidade dos Resíduos: Os resíduos têm distribuição normal.
  5. Sem multicolinearidade: Variáveis independentes não estão altamente correlacionadas entre si.

Você pode testar essas suposições usando ferramentas como gráficos de resíduos, Fator de Inflação de Variância (VIF) ou testes estatísticos.

Como interpretar os resultados da regressão múltipla em Python?

Métricas-chave dos resultados da regressão incluem:

  1. Coeficientes (coef_): Indicam a mudança na variável alvo para uma mudança unitária no preditor correspondente, mantendo outras variáveis constantes.

Exemplo: Um coeficiente de 2 para X1 significa que a variável alvo aumenta em 2 para cada aumento de 1 unidade em X1, mantendo outras variáveis constantes.

2.Interceptação (intercept_): Representa o valor previsto da variável alvo quando todos os preditores são zero.

3.R-quadrado: Explica a proporção da variância na variável alvo explicada pelos preditores.

Exemplo: Um R^2 de 0,85 significa que 85% da variabilidade na variável alvo é explicada pelo modelo.

4.Valores p (em statsmodels): Avaliam a significância estatística dos preditores. Um valor p < 0,05 geralmente indica que um preditor é significativo.

Qual é a diferença entre regressão linear simples e múltipla em Python?

Feature Simple Linear Regression Multiple Linear Regression
Número de Variáveis Independentes Uma Mais de uma
Equação do Modelo y = β0 + β1x + ε y = β0 + β1×1 + β2×2 + … + βnxn + ε
Pressupostos Mesmos que na regressão linear múltipla, mas com uma única variável independente Mesmos que na regressão linear simples, mas com pressupostos adicionais para múltiplas variáveis independentes
Interpretação dos Coeficientes A mudança na variável alvo para uma mudança unitária na variável independente, mantendo todas as outras variáveis constantes (não aplicável na regressão linear simples) A mudança na variável alvo para uma mudança unitária em uma variável independente, mantendo todas as outras variáveis independentes constantes
Complexidade do Modelo Menos complexa Mais complexa
Flexibilidade do Modelo Menos flexível Mais flexível
Risco de Overfitting Menor Maior
Interpretabilidade Mais fácil de interpretar Mais desafiador de interpretar
Aplicabilidade Adequado para relacionamentos simples Adequado para relacionamentos complexos com múltiplos fatores
Exemplo Prever os preços das casas com base no número de quartos Prever os preços das casas com base no número de quartos, metragem quadrada e localização

Conclusão

Neste tutorial abrangente, você aprendeu a implementar Regressão Linear Múltipla usando o Conjunto de Dados de Habitação da Califórnia. Você abordou aspectos cruciais como multicolinearidade, validação cruzada, seleção de características e regularização, fornecendo um entendimento completo de cada conceito. Você também aprendeu a incorporar visualizações para ilustrar resíduos, importância das características e desempenho geral do modelo. Agora você pode facilmente construir modelos de regressão robustos em Python e aplicar essas habilidades a problemas do mundo real.

Source:
https://www.digitalocean.com/community/tutorials/multiple-linear-regression-python