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

146 lines
5.5 KiB
Markdown

# 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
- [x] Créer le module de calcul de prédictions (AC: #1)
- [x] Créer `backend/app/ml/prediction_calculator.py`
- [x] Implémenter la logique de comparaison des scores d'énergie
- [x] Implémenter le calcul du Confidence Meter
- [x] Déterminer l'équipe gagnante
- [x] Valider les résultats
- [x] Implémenter le calcul du Confidence Meter (AC: #1)
- [x] Calculer la différence d'énergie entre les deux équipes
- [x] Convertir la différence en pourcentage (0-100%)
- [x] Normaliser le score final
- [x] Documenter la formule utilisée
- [x] Tester avec des exemples
- [x] Créer les schémas de base de données pour prédictions (AC: #1)
- [x] Mise à jour de la table `predictions` (déjà créée dans 3.1)
- [x] Ajouter colonnes si nécessaires
- [x] Générer et appliquer les migrations
- [x] Implémenter le service de création de prédictions (AC: #1, #2)
- [x] Créer `backend/app/services/prediction_service.py`
- [x] Créer la fonction de génération de prédiction pour un match
- [x] Stocker la prédiction dans la base de données
- [x] Lier la prédiction au match
- [x] Gérer les erreurs
- [x] Créer l'endpoint API pour générer des prédictions (AC: #2)
- [x] Créer `POST /api/v1/matches/{match_id}/predict`
- [x] Valider les entrées avec Pydantic
- [x] Appeler le service de prédiction
- [x] Retourner la prédiction créée
- [x] Documenter l'endpoint avec Swagger
- [x] Tester le système de prédictions (AC: #1, #2)
- [x] Tester le calcul de prédictions pour des matchs réels
- [x] Valider le Confidence Meter
- [x] Tester l'endpoint API
- [x] Vérifier que les prédictions sont stockées
- [x] Tester les relations match → predictions
## Dev Notes
### Formule de Calcul
```python
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)