146 lines
5.5 KiB
Markdown
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)
|