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
- Créer
-
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
- Mise à jour de la table
-
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
-
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
- Créer
-
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'énergiedetermine_winner(): Détermine l'équipe gagnante (home/away/draw)calculate_prediction(): Fonction principale combinant confidence et winnervalidate_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édictionget_prediction_by_id(): Récupère une prédiction par IDget_predictions_for_match(): Récupère toutes les prédictions d'un matchget_latest_prediction_for_match(): Récupère la prédiction la plus récentedelete_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édictionGET /api/v1/predictions/{prediction_id}: Récupère une prédictionGET /api/v1/predictions/matches/{match_id}: Récupère toutes les prédictions d'un matchGET /api/v1/predictions/matches/{match_id}/latest: Récupère la prédiction la plus récenteDELETE /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)