Fase 4 6 horas Avançado

# A Subida de Recuperação

Depois do salto, a subida exige inteligência — não só força. Aqui você recore ao cérebro artificial para tomar decisões melhores a cada pedalada.

Progresso: 0/8 (0%)

## Objetivos da Fase

#### O que você vai aprender:

- O que é Machine Learning e quando usá-lo
- Árvores de decisão com scikit-learn
- Dados de treino vs. dados de teste
- Listas de dados estruturados (features + labels)
- Avaliação de acurácia de modelos
- Bots inteligentes: tomada de decisão por predição
- Integração de IA no simulador do Circuito

#### O que você vai criar:

- Modelo de classificação de corredores
- Preditor de resultado do salto (buraco/voo)
- Bot que sugere velocidade ideal para a rampa
- Relatório de acurácia com dados históricos

## 4.1 — O Problema que a IA Resolve

Treinar 100 pilotos manualmente é inviável. Mas se tivermos os dados históricos de 6 corridas — peso, velocidade, inclinação, resultado — podemos ensinar uma máquina a decidir.

#### 📊 Dados de treino do Circuito Ferradura

Features (entradas): [velocidade, peso, inclinação_rampa]
Label (saída): 0 = BURACO, 1 = QUASE, 2 = VOOU, 3 = LENDÁRIO

# Dataset do Circuito Ferradura — corridas históricas X_treino = [ [4.5, 65, 15], # velocidade, peso (kg), inclinação (°) [7.0, 70, 20], [9.5, 60, 25], [11.0, 55, 30], [3.0, 80, 10], [8.5, 63, 22], [6.5, 72, 18], [12.0, 58, 35], ] y_treino = [0, 1, 2, 3, 0, 2, 1, 3] # BURACO, QUASE, VOOU, LENDÁRIO CLASSES = ["BURACO", "QUASE", "VOOU", "LENDÁRIO"]

## 4.2 — Treinando o Modelo

from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # Treinar a árvore de decisão modelo = DecisionTreeClassifier(max_depth=4, random_state=42) modelo.fit(X_treino, y_treino) # Prever resultado para um novo piloto novo_piloto = [[8.0, 67, 21]] predicao = modelo.predict(novo_piloto) print(f"Resultado previsto: {CLASSES[predicao[0]]}") Resultado previsto: VOOU # Acurácia no conjunto de treino precisao = accuracy_score(y_treino, modelo.predict(X_treino)) print(f"Acurácia: {precisao:.0%}") Acurácia: 100%

## 4.3 — Bot Inteligente de Corrida

Com o modelo treinado, criamos um bot que analisa as condições da pista em tempo real e sugere a velocidade ideal para o salto.

class BotFerradura: def __init__(self, modelo, classes): self.modelo = modelo self.classes = classes def analisar(self, velocidade: float, peso: float, inclinacao: float) -> str: entrada = [[velocidade, peso, inclinacao]] codigo = self.modelo.predict(entrada)[0] resultado = self.classes[codigo] if codigo == 0: dica = "⚠️ Aumente a velocidade! Risco de buraco." elif codigo == 3: dica = "🏆 Velocidade lendária! Segure o guidão." else: dica = f"✅ Resultado previsto: {resultado}" return dica bot = BotFerradura(modelo, CLASSES) print(bot.analisar(9.0, 65, 25)) ✅ Resultado previsto: VOOU

## ✅ Checklist da Fase 4

Montei o dataset com pelo menos 8 corridas históricas
Treinei o `DecisionTreeClassifier` com scikit-learn
Fiz previsão para pelo menos 3 pilotos novos
Calculei e imprimi a acurácia do modelo
Implementei a classe `BotFerradura` com `analisar()`
Bot exibe dica personalizada para cada nível de resultado
Integrei o bot ao simulador existente do Circuito
Gerei relatório comparativo: predição vs. resultado real

#### 🤖 Projeto da Fase 4

Expanda o dataset para 20 corridas, separe 80% para treino e 20% para teste real, avalie a acurácia no conjunto de teste, e ajuste o `max_depth` para encontrar o modelo mais equilibrado (sem overfitting). Documente os resultados.

🔒 LGPD — Usamos localStorage para salvar progresso.