Modelagem Estatística na Prática: Criando um Modelo Interativo com Python

Introdução: O Que é Modelagem Estatística?

Olá, pessoal! Sejam bem-vindos ao mundo da Ciência de Dados! Hoje vamos mergulhar em um dos pilares mais importantes dessa área: a Modelagem Estatística.

De forma simples, modelagem estatística é o processo de usar matemática e estatística para criar um “modelo” (uma representação simplificada) da realidade. Esse modelo nos permite:

  • Entender relacionamentos entre diferentes variáveis.
  • Prever resultados futuros com base em dados históricos.
  • Tomar decisões mais informadas, baseadas em dados e não apenas em intuição.

Pense nisso como tentar prever o preço de uma casa. O preço (nossa variável de interesse) pode ser influenciado por outras variáveis, como tamanho, número de quartos, localização, etc. Um modelo estatístico nos ajuda a quantificar exatamente como cada um desses fatores impacta no preço final.

Nosso Projeto Prático: Um Prevendo Preços de Casas

Para sair da teoria e ir para a prática, vamos construir um modelo de Regressão Linear Múltipla. Esse é um dos modelos estatísticos mais fundamentais e amplamente utilizados. Nosso objetivo será prever o preço de uma casa com base em suas características.

E a parte mais legal: vamos embutir esse modelo em um aplicativo web interativo usando Streamlit. Dessa forma, qualquer pessoa, mesmo sem saber programar, poderá inserir os dados de uma casa e obter uma previsão de preço instantaneamente!


Passo a Passo: Construindo o Modelo e o App Interativo

Vamos dividir em duas partes: primeiro, o código Python para criar e treinar o modelo, e depois, a integração com o Streamlit.

Parte 1: O Ambiente Python e a Criação do Modelo

Antes de tudo, você precisa ter o Python instalado (versão 3.7 ou superior). Recomendo usar um ambiente virtual para gerenciar suas bibliotecas.

1. Instalando as Bibliotecas Necessárias:

Abra o seu terminal (ou Prompt de Comando) e execute os comandos abaixo:

bash

pip install pandas scikit-learn streamlit
  • pandas: Para manipulação e análise de dados.
  • scikit-learn: A biblioteca mais popular de Machine Learning para Python. Ela contém a implementação da Regressão Linear.
  • streamlit: O framework que transforma scripts de dados em aplicativos web.

2. O Código do Modelo (Jupyter Notebook ou Script .py):

Vamos criar um script Python, por exemplo, treinar_modelo.py, para treinar e salvar nosso modelo.

python

# treinar_modelo.py
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
import joblib # Para salvar o modelo treinado

# 1. Criar um Conjunto de Dados Simulado
# Em um projeto real, você leria um arquivo CSV, por exemplo.
data = {
    'tamanho': [70, 80, 55, 120, 90, 60, 100, 110, 95, 75],
    'quartos': [2, 3, 1, 4, 3, 2, 3, 4, 3, 2],
    'idade': [10, 5, 2, 20, 15, 5, 25, 30, 18, 8],
    'preco': [300000, 450000, 200000, 750000, 500000, 320000, 620000, 800000, 550000, 380000]
}
df = pd.DataFrame(data)

# 2. Definir Variáveis (Features e Target)
# X: Variáveis independentes (o que usamos para prever)
# y: Variável dependente (o que queremos prever)
X = df[['tamanho', 'quartos', 'idade']]
y = df['preco']

# 3. Dividir os Dados em Treino e Teste
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 4. Criar e Treinar o Modelo
modelo = LinearRegression()
modelo.fit(X_train, y_train)

# 5. Fazer Previsões e Avaliar o Modelo
y_pred = modelo.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f"Erro Médio Absoluto do Modelo: R${mae:,.2f}")

# 6. Salvar o Modelo Treinado para usar no Streamlit
joblib.dump(modelo, 'modelo_preco_casa.pkl')
print("Modelo salvo com sucesso como 'modelo_preco_casa.pkl'!")

# (Opcional) Mostrar os coeficientes do modelo
print(f"Intercepto (Coef. Linear): {modelo.intercept_:.2f}")
print(f"Coeficientes: {modelo.coef_}")

Explicação Rápida do Código:

  • Criamos dados de exemplo.
  • Separamos os dados entre o que é “entrada” (X) e o que é “saída” (y).
  • Dividimos os dados em dois conjuntos: um para treinar o modelo e outro para testar sua eficácia.
  • Instanciamos e treinamos o modelo de Regressão Linear.
  • Calculamos o Erro Médio Absoluto (MAE), uma métrica simples que nos diz, em média, o quanto nossas previsões erram (em R$).
  • Por fim, salvamos o modelo treinado em um arquivo .pkl para ser carregado posteriormente no app.

Execute este script uma vez para gerar o arquivo modelo_preco_casa.pkl.

python treinar_modelo.py

Parte 2: Criando o App Interativo com Streamlit

Agora, a mágica acontece! Vamos criar um novo arquivo, app.py.

python

# app.py
import streamlit as st
import joblib
import pandas as pd

# Configuração da página
st.set_page_config(page_title="Previsor de Preços de Casas", page_icon="🏠")

# Título do App
st.title("🏠 Prevendo o Preço de uma Casa")
st.markdown("""
Use os controles deslizantes abaixo para especificar as características da casa.
Nosso modelo de **Regressão Linear** irá prever o preço automaticamente!
""")

# Carregar o modelo treinado
modelo = joblib.load('modelo_preco_casa.pkl')

# Criando as entradas interativas do usuário (Sidebar)
st.sidebar.header("Especificações da Casa")

tamanho = st.sidebar.slider('**Tamanho (m²)**', min_value=50, max_value=200, value=100)
quartos = st.sidebar.slider('**Número de Quartos**', min_value=1, max_value=5, value=3)
idade = st.sidebar.slider('**Idade da Casa (anos)**', min_value=0, max_value=50, value=10)

# Criar um DataFrame com a entrada do usuário
input_usuario = pd.DataFrame({
    'tamanho': [tamanho],
    'quartos': [quartos],
    'idade': [idade]
})

# Fazer a previsão quando um botão for pressionado
if st.sidebar.button('Prever Preço!'):
    # Fazer a previsão usando o modelo carregado
    previsao = modelo.predict(input_usuario)
    
    # Exibir a previsão de forma destacada
    st.success(f"### 💰 Preço Previsto: R$ {previsao[0]:,.2f}")

# Seção de Informações Extras
st.markdown("---")
st.subheader("ℹ️ Sobre o Modelo")
st.write("""
Este é um modelo de **Regressão Linear Múltipla** treinado com dados simulados.
Ele aprendeu a relação entre **Tamanho, Número de Quartos e Idade** de uma casa e seu **Preço**.
*   **Aviso:** Este é um projeto demonstrativo. Os resultados não refletem o mercado imobiliário real.
""")

Como Executar o Seu Próprio Aplicativo

Agora que você tem os dois arquivos (modelo_preco_casa.pkl e app.py), é hora de ver a mágica acontecer!

  1. Salve ambos os arquivos no mesmo diretório (pasta) no seu computador.
  2. Abra o terminal ou Prompt de Comando e navegue até essa pasta.
    • Exemplo: cd C:\Users\MeuUsuario\Meu_Projeto_Streamlit
  3. Execute o seguinte comando:

bash

streamlit run app.py
  1. Pronto! O Streamlit abrirá automaticamente uma janela no seu navegador padrão com o aplicativo rodando. Agora você pode interagir com os sliders e ver a previsão do preço mudar em tempo real!

Um aplicativo web limpo com o título “Prevendo o Preço de uma Casa”. Na barra lateral esquerda, três controles deslizantes para Tamanho, Quartos e Idade. No centro da página, um grande texto em verde destacando “Preço Previsto.


Conclusão

Espero que este post tenha demonstrado de forma clara e prática o poder da Modelagem Estatística. Começamos com um conceito teórico, implementamos um modelo em Python e, finalmente, democratizamos o acesso a ele através de um aplicativo web interativo.

O Streamlit é uma ferramenta fantástica para cientistas de dados compartilharem seus trabalhos e criarem protótipos rapidamente. As possibilidades são infinitas: dashboards, classificadores, sistemas de recomendação, etc.