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.

Fase 4 — A Subida de Recuperação · IA e Machine Learning
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

🤖 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.