Classification supervisée du résultat d'une attaque (point / pas point) à partir du contexte de jeu, sur 50 matchs de la MEVZA League Men 2021/2022 scoutés au format DataVolley.
Le projet part de fichiers .dvw bruts — un format propriétaire de scouting sportif — et va jusqu'à
un modèle évalué proprement : parsing, nettoyage, construction de variables métier, sélection,
entraînement et ajustement du seuil de décision.
Projet universitaire — M1 Mathématiques et Applications, Sorbonne Université (UE Bases d'Analyse de Données, mai 2026).
| Modèle | Features | Seuil | AUC-test | Accuracy | F1 |
|---|---|---|---|---|---|
| Baseline (classe majoritaire) | — | — | — | 52,8 % | — |
| Régression logistique | 4 | 0,50 | 0,676 | 62,6 % | 0,581 |
| Régression logistique + seuil | 4 | 0,45 | 0,676 | 63,0 % | 0,616 |
| KNN (K = 97) | 6 | 0,50 | 0,681 | 61,9 % | 0,540 |
| KNN (K = 97) + seuil optimal | 6 | 0,46 | 0,681 | 63,9 % | 0,626 |
Meilleur modèle : KNN + seuil ajusté — AUC 0,681, accuracy 63,9 %, soit 11 points au-dessus de la baseline.
Le résultat métier le plus net vient de la régression logistique, directement interprétable : la qualité de réception est le levier dominant, avec un odds ratio de 1,61 — chaque niveau de qualité supplémentaire multiplie par 1,61 la cote de marquer le point.
Résultat contre-intuitif : à réception égale, mener au score fait légèrement baisser la probabilité de marquer (OR = 0,87). La corrélation brute positive (r = 0,23) était un artefact de la qualité des équipes — les meilleures équipes mènent au score et reçoivent mieux. Le modèle sépare les deux effets ; la corrélation ne le pouvait pas.
La réception conditionne l'attaque. Le taux de point passe de 37,8 % après une réception négative à 56,6 % après une réception parfaite — près de 19 points d'écart.
Réception et phase de jeu sont complémentaires, pas redondantes. La phase améliore le taux de point à chaque niveau de réception sans exception. Une réception négative en side-out vaut une réception décalée en transition : une meilleure position collective rattrape en partie la qualité du premier contact.
Une hypothèse écartée par les données. À bas niveau, certaines rotations du passeur offrent de meilleures configurations offensives. À haut niveau, l'effet disparaît : moins d'un pourcent de variation entre les six positions. La variable a été exclue du modèle.
1. Parsing et construction du jeu de données
Les 50 fichiers .dvw sont lus via la librairie datavolley, patchée pour la rendre compatible avec les
versions récentes de NumPy et Pandas (voir datavolley/NOTICE.md). Après suppression
des métadonnées (timeouts, substitutions) et des marqueurs de fin de rallye, on obtient 37 152 lignes,
filtrées sur skill = 'Attack' pour ne garder que les 9 224 attaques modélisables.
Taux de base de la cible : 46,9 %.
2. Algorithme de matching attaque → réception Le format DataVolley décrit des actions successives, pas des attaques contextualisées. Pour chaque attaque, on remonte la séquence à la recherche de la dernière action défensive alliée du même rallye (même match, même set, même rallye, même équipe, antérieure à l'attaque) afin d'en récupérer l'indicateur de qualité.
3. Construction des variables
Six variables issues du contexte de jeu : qualité de réception (encodée ordinalement 0–4), phase de jeu
(side-out / transition), situation au score, numéro de possession dans le rallye, période du set.
Une variable binaire has_defensive_action lève une ambiguïté du codage : réception négative et
absence de réception recevaient toutes deux la valeur 0.
4. Protocole de validation
Les attaques d'un même match partagent un contexte — mélanger les lignes créerait une fuite de données.
Le découpage se fait donc par match : 40 matchs en entraînement (7 621 attaques), 10 en test (1 603),
avec validation croisée StratifiedKFold à 5 folds sur le train uniquement.
5. Modélisation KNN (K = 97 choisi par validation croisée) et régression logistique. Un test du rapport de vraisemblance montre que deux variables sont redondantes avec la qualité de réception : le modèle logistique final en retient 4. Le seuil de décision est optimisé par le critère de Youden sur des prédictions out-of-fold, jamais sur le test.
6. Effet joueur Ajout du taux historique de point par joueur, lissé bayésiennement (α = 10) pour éviter qu'un joueur observé 4 fois soit surévalué. Le gain est net en validation croisée mais ne généralise pas sur le test : 40 matchs ne suffisent pas à estimer des profils joueurs stables.
- La qualité de la passe est absente des données. C'est l'action qui précède immédiatement l'attaque, donc probablement le prédicteur le plus fort qui manque au modèle.
- Le format DataVolley capture le contexte d'une attaque, pas la qualité intrinsèque du geste (puissance, précision, lecture du bloc). Une part irréductible de la variance est hors de portée.
- L'effet joueur demanderait plusieurs saisons pour être exploitable.
- Des données positionnelles (tracking, caméras) seraient nécessaires pour franchir le plafond actuel.
prediction_point_volleyball.ipynb Notebook complet (sorties et figures conservées)
download_matches.py Récupération des .dvw depuis le site de la fédération
datavolley/ Librairie de parsing .dvw, version patchée
docs/rapport.pdf Rapport détaillé
docs/presentation.pdf Support de soutenance
figures/ Figures principales
Match/ Fichiers .dvw (non versionnés — voir Match/README.md)
pip install -r requirements.txt
jupyter lab prediction_point_volleyball.ipynbLes 50 fichiers de match sont publiés par la Middle European Volleyball Zonal Association sur sa page de téléchargement publique. Ils ne sont pas redistribués ici — ils restent la propriété de la fédération — mais un script les récupère depuis la source officielle :
python download_matches.pyLe notebook est publié avec l'ensemble de ses sorties et de ses figures : il se lit intégralement sans être exécuté et sans les données.
Python · pandas · NumPy · scikit-learn · Matplotlib
Uday Sicard — M2 Ingénierie Mathématique, parcours SCDI (Sorbonne Université × ISUP) github.com/Usicard



