Pular para o conteúdo
murad.guide

Banco de Dados

Capítulo 29

Árvores e primeiro modelo

3 min de leitura 529 palavras 1 gravura

Neste capítulo você vai treinar um modelo interpretavel no Observatorio. O projeto de estudo é o Observatório do Recife, um núcleo fictício de monitoramento urbano e climático.

Seu ponto de partida

O exemplo deste capítulo é 29-ml-arvores, no pacote que acompanha o volume; pratique sobre uma cópia da pasta inicio/. A raiz do exemplo é a referência desta etapa. Abrir ou rodar localmente não publica nada. Servidor, se precisar, só em 127.0.0.1.

Como praticar

Leia, confira o código, mude uma coisa, preveja, salve, rode de novo e confira. Investigue o erro antes de avançar.

Resultado de referência do capítulo 29

Um resultado antes de outro conceito

O script Python lê dados locais do Observatório e imprime um resultado que você pode conferir.

Faça na sua cópia

A implementação completa está no pacote de exemplos que acompanha este volume.

# Capítulo 29 — arvore de decisao
from pathlib import Path
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

root = Path(__file__).resolve().parent
df = pd.read_csv(root / "dados" / "leituras.csv")
df["classe"] = (df["chuva_mm"] >= 1.0).astype(int)

Mude uma coisa e preveja

Altere um parâmetro (limiar, coluna ou random_state) e preveja a mudança.

Anote o que espera observar antes de salvar e rodar de novo.

Recarregue e confira

A saída no terminal reflete só a mudança pedida.

Se não acontecer

Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.

Ambiente local

Use Python 3 na sua máquina. Pacotes extras só quando o capítulo pedir. Nada de conta cloud obrigatória.

Faça na sua cópia

A implementação completa está no pacote de exemplos que acompanha este volume.

python analise.py

Mude uma coisa e preveja

Rode duas vezes seguidas. A saída deve ser estável (salvo gráficos com relógio).

Anote o que espera observar antes de salvar e rodar de novo.

Recarregue e confira

Scripts determinísticos com random_state fixo ajudam a conferência.

Se não acontecer

Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.

Erro comum

Faltar pacote (pandas, sklearn) ou apontar CSV errado. Instale no venv local e confira dados/.

Faça na sua cópia

A implementação completa está no pacote de exemplos que acompanha este volume.

pip install pandas matplotlib scikit-learn

Mude uma coisa e preveja

Liste os arquivos em dados/ antes de rodar.

Anote o que espera observar antes de salvar e rodar de novo.

Recarregue e confira

Você deve ver bairros, estacoes, leituras e alertas.

Se não acontecer

Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.

Atividades

Responda antes de olhar as respostas comentadas no final.

  1. Qual o objetivo deste capítulo?

  2. Os dados podem ir para produção?

  3. Onde fica a referência pronta?

Antes de avançar

Respostas comentadas

Atividade 1

treinar um modelo interpretavel no Observatorio

Atividade 2

Não — são fictícios e só para estudo.

Atividade 3

Na raiz da pasta do exemplo; pratique em inicio/.

O arquivo completo

Referência do exemplo 29-ml-arvores, reproduzida aqui para que você possa conferir sem sair da página.

analise.py

# Capítulo 29 — arvore de decisao
from pathlib import Path
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

root = Path(__file__).resolve().parent
df = pd.read_csv(root / "dados" / "leituras.csv")
df["classe"] = (df["chuva_mm"] >= 1.0).astype(int)
X = df[["temp_c", "umidade"]]
y = df["classe"]
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.34, random_state=7)
modelo = DecisionTreeClassifier(max_depth=3, random_state=7).fit(Xtr, ytr)
pred = modelo.predict(Xte)
print(classification_report(yte, pred, zero_division=0))