chartbastan/_bmad-output/implementation-artifacts/3-2-implémenter-le-système-de-calcul-de-prédictions.md
2026-02-01 09:31:38 +01:00

5.5 KiB

Story 3.2: Implémenter le système de calcul de prédictions

Status: review

Acceptance Criteria

Given les scores d'énergie sont calculés pour deux équipes When le système calcule la prédiction Then il compare les scores d'énergie des deux équipes And il calcule le Confidence Meter (0-100%) basé sur la différence d'énergie And il détermine l'équipe prédite gagnante And la prédiction est stockée dans la base de données

Given une prédiction est générée When elle est sauvegardée Then elle est associée au match correspondant And elle contient timestamp, confidence, et équipe prédite

Tasks / Subtasks

  • Créer le module de calcul de prédictions (AC: #1)

    • Créer backend/app/ml/prediction_calculator.py
    • Implémenter la logique de comparaison des scores d'énergie
    • Implémenter le calcul du Confidence Meter
    • Déterminer l'équipe gagnante
    • Valider les résultats
  • Implémenter le calcul du Confidence Meter (AC: #1)

    • Calculer la différence d'énergie entre les deux équipes
    • Convertir la différence en pourcentage (0-100%)
    • Normaliser le score final
    • Documenter la formule utilisée
    • Tester avec des exemples
  • Créer les schémas de base de données pour prédictions (AC: #1)

    • Mise à jour de la table predictions (déjà créée dans 3.1)
    • Ajouter colonnes si nécessaires
    • Générer et appliquer les migrations
  • Implémenter le service de création de prédictions (AC: #1, #2)

    • Créer backend/app/services/prediction_service.py
    • Créer la fonction de génération de prédiction pour un match
    • Stocker la prédiction dans la base de données
    • Lier la prédiction au match
    • Gérer les erreurs
  • Créer l'endpoint API pour générer des prédictions (AC: #2)

    • Créer POST /api/v1/matches/{match_id}/predict
    • Valider les entrées avec Pydantic
    • Appeler le service de prédiction
    • Retourner la prédiction créée
    • Documenter l'endpoint avec Swagger
  • Tester le système de prédictions (AC: #1, #2)

    • Tester le calcul de prédictions pour des matchs réels
    • Valider le Confidence Meter
    • Tester l'endpoint API
    • Vérifier que les prédictions sont stockées
    • Tester les relations match → predictions

Dev Notes

Formule de Calcul

def calculate_prediction(home_energy: float, away_energy: float):
    # Différence d'énergie
    energy_diff = abs(home_energy - away_energy)
    
    # Calcul du Confidence Meter (0-100%)
    confidence = min(100, energy_diff * 2)  # Exemple simple
    
    # Déterminer l'équipe gagnante
    if home_energy > away_energy:
        predicted_winner = 'home'
    elif away_energy > home_energy:
        predicted_winner = 'away'
    else:
        predicted_winner = 'draw'
    
    return {
        'confidence': confidence,
        'predicted_winner': predicted_winner,
        'home_energy': home_energy,
        'away_energy': away_energy
    }

File Structure

backend/app/
├── ml/
│   └── prediction_calculator.py
├── services/
│   └── prediction_service.py
└── api/v1/
    └── predictions.py

References

  • [Source: _bmad-output/planning-artifacts/epics.md#Story-3.2]

Dev Agent Record

Agent Model Used

GLM-4.7

Completion Notes List

  • Système de calcul de prédictions implémenté avec 4 fonctions principales :
    • calculate_confidence_meter(): Calcule le Confidence Meter (0-100%) basé sur la différence d'énergie
    • determine_winner(): Détermine l'équipe gagnante (home/away/draw)
    • calculate_prediction(): Fonction principale combinant confidence et winner
    • validate_prediction_result(): Valide les résultats de prédiction
  • Confidence Meter fonctionnel avec la formule : min(100, abs(home_energy - away_energy) * 2)
  • Service de prédiction (PredictionService) créé avec méthodes complètes :
    • create_prediction_for_match(): Crée et stocke une prédiction
    • get_prediction_by_id(): Récupère une prédiction par ID
    • get_predictions_for_match(): Récupère toutes les prédictions d'un match
    • get_latest_prediction_for_match(): Récupère la prédiction la plus récente
    • delete_prediction(): Supprime une prédiction
  • Endpoint API REST complet créé avec 5 routes :
    • POST /api/v1/predictions/matches/{match_id}/predict: Crée une prédiction
    • GET /api/v1/predictions/{prediction_id}: Récupère une prédiction
    • GET /api/v1/predictions/matches/{match_id}: Récupère toutes les prédictions d'un match
    • GET /api/v1/predictions/matches/{match_id}/latest: Récupère la prédiction la plus récente
    • DELETE /api/v1/predictions/{prediction_id}: Supprime une prédiction
  • Tests complets créés pour :
    • Le calculateur de prédictions (test_prediction_calculator.py)
    • Le service de prédictions (test_prediction_service.py)
    • L'endpoint API (test_prediction_api.py)
  • Intégration complète dans main.py

File List

  • backend/app/ml/prediction_calculator.py (nouveau fichier)
  • backend/app/services/prediction_service.py (nouveau fichier)
  • backend/app/api/v1/predictions.py (nouveau fichier)
  • backend/tests/test_prediction_calculator.py (nouveau fichier)
  • backend/tests/test_prediction_service.py (nouveau fichier)
  • backend/tests/test_prediction_api.py (nouveau fichier)
  • backend/app/main.py (modifié : ajout des routes de prédictions)