esumo Direto (Conceitos)
VIF (Multicolinearidade): Serve para ver se uma variável está "copiando" a outra. Se o valor de VIF for maior que 5, o modelo está confuso porque há informação repetida.
Solução: Apagar a variável com VIF alto.
Heterocedasticidade: É quando o erro do modelo não é constante. Se os erros formarem um desenho de "funil" no gráfico, o modelo não é confiável para todos os casos.
Solução: Usar transformações matemáticas (como Logaritmo).
- Código Simplificado (Passo a Passo)
Etapa 1: Calcular o VIF
O objetivo aqui é ver quem é redundante.
import pandas as pd
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 1. Preparar os dados (X são as causas, PE é o efeito/alvo)
X = df.drop(columns=['PE'])
X = sm.add_constant(X) # Obrigatório para o cálculo estar certo
# 2. Calcular o VIF para cada coluna
vif_df = pd.DataFrame()
vif_df["Variavel"] = X.columns
vif_df["VIF"] = [variance_inflation_factor(X.values, i) for i in range(len(X.columns))]
print(vif_df)
Etapa 2: Analisar Resíduos (Gráfico)
Aqui verificamos se o modelo é "estável".
import matplotlib.pyplot as plt
# 1. Treinar o modelo e pegar os erros (resíduos)
modelo = sm.OLS(df['PE'], X).fit()
residuos = modelo.resid
predicoes = modelo.predict(X)
# 2. Plotar o gráfico
plt.scatter(predicoes, residuos)
plt.axhline(y=0, color='red') # Linha de referência no zero
plt.xlabel('Previsão de Energia')
plt.ylabel('Erro (Resíduo)')
plt.show()