Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Mão na massa

# Definindo y e X
y = hoteis['Preco']
X = hoteis.drop(columns = 'Preco')

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 230)

df_train = pd.DataFrame(data = X_train)
df_train['Preco'] = y_train

X_train = sm.add_constant(X_train) 

# Criando o modelo de regressão (sem fómula): saturado
modelo_1 = sm.OLS(y_train,
                  X_train[['Estrelas', 'ProximidadeTurismo', 'Capacidade']]).fit()

# Modelo sem a ProximidadeTurismo
modelo_2 = sm.OLS(y_train,
                  X_train[['Estrelas','Capacidade']]).fit()

# Modelo sem as ProximidadeTurismo e Capacidade 
modelo_3 = sm.OLS(y_train,
                  X_train[['Estrelas']]).fit()

print("Modelo 1: ", modelo_1.rsquared)
print("Modelo 2: ", modelo_2.rsquared)
print("Modelo 3: ", modelo_3.rsquared)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu vi que diverge um pouco da resposta do instrutor e dos colegas, eu errei em alguma parte, tem como melhorar?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

Oi William! Tudo certo?

O seu código está correto no raciocínio, mas a diferença em relação ao que o instrutor apresentou está na constante (o intercepto do modelo).

Você chegou a usar sm.add_constant(X_train), mas na hora de selecionar as colunas para o OLS usou apenas:

X_train[['Estrelas','ProximidadeTurismo','Capacidade']]

Ou seja, a coluna 'const' não entrou de fato no modelo. Quando isso acontece, o statsmodels avisa que o R² está sendo calculado “uncentered” (R² is computed without centering (uncentered) since the model does not contain a constant.), porque o modelo foi ajustado sem intercepto. Isso altera o valor do R² e os coeficientes, por isso seus resultados ficaram diferentes dos do instrutor e dos colegas.

Já o instrutor faz o add_constant depois de escolher cada subconjunto de variáveis e passa esse DataFrame completo para o OLS. Assim, a constante sempre está presente no ajuste.

No seu caso, basta incluir 'const' junto com as variáveis, por exemplo:

modelo_1 = sm.OLS(y_train,
                  X_train[['const','Estrelas','ProximidadeTurismo','Capacidade']]).fit()

Dessa forma seus resultados vão bater com os do instrutor.

Espero ter ajudado.

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!
solução!

Ajustado, obrigado.