Erreur calcul moyenne avec évaluation de type 2 (2nde session) #811

Open
opened 2023-12-06 14:16:54 +01:00 by pascal.bouron · 3 comments
Contributor

C'est dans le cadre de la gestion des Sportifs de haut niveau. L'étudiant a suivi quelques modules de S3 l'an dernier et je suis en train de reporter ses moyennes dans le semestre 3 actuel. J'ai choisi d'utiliser les évaluations de type "2nde session (remplace toujours)" pour reporter ses moyennes 2022-2023, en configurant cette évaluation de la manière suivante :
image

Jusque là, aucun problème, cela ne perturbe pas les autres étudiants (qui n'ont pas de note dans cette évaluation), et je retrouve parfaitement la moyenne de mon sportif.
Là où cela se complique, c'est dans les modules où il y a des moyennes différentes par UE. J'ai alors créé 1 éval par UE et saisi ses moyennes d'UE de l'an dernier :
image

Dans ce cas, les moyennes de modules par UE sont mal calculées : ( elles semblent dupliquer, en ne prenant que l'une des évaluations)
image

(il a une seule note en UE1 = 6.53 , sa moyenne devrait être de 6.53 et non 8.22).
Données envoyées le 5/12/2023 à 16:19
Il s'agit du bulletin formsemestre_id=25&etudid=475

C'est dans le cadre de la gestion des Sportifs de haut niveau. L'étudiant a suivi quelques modules de S3 l'an dernier et je suis en train de reporter ses moyennes dans le semestre 3 actuel. J'ai choisi d'utiliser les évaluations de type "2nde session (remplace toujours)" pour reporter ses moyennes 2022-2023, en configurant cette évaluation de la manière suivante : ![image](/attachments/8ee5574d-0a07-4601-bfed-841e51171f6d) Jusque là, aucun problème, cela ne perturbe pas les autres étudiants (qui n'ont pas de note dans cette évaluation), et je retrouve parfaitement la moyenne de mon sportif. Là où cela se complique, c'est dans les modules où il y a des moyennes différentes par UE. J'ai alors créé 1 éval par UE et saisi ses moyennes d'UE de l'an dernier : ![image](/attachments/ac48adb7-2a42-4275-93c8-6a7e3f0aace4) Dans ce cas, les moyennes de modules par UE sont mal calculées : ( elles semblent dupliquer, en ne prenant que l'une des évaluations) ![image](/attachments/60c01245-fc98-495c-bbf5-3c6218a1b04a) (il a une seule note en UE1 = 6.53 , sa moyenne devrait être de 6.53 et non 8.22). Données envoyées le 5/12/2023 à 16:19 Il s'agit du bulletin formsemestre_id=25&etudid=475
viennet added this to the ScoDoc 9.6 milestone 2023-12-06 17:40:44 +01:00
viennet added the
bug
BUT
labels 2023-12-06 17:41:14 +01:00
Owner

Résumé

  • l'évaluation de Session2 remplace la moyenne du module.
  • on ne prend en compte qu'une seule évaluation de Session2 par module.
  • c'est OK en classique mais problématique en BUT si on veut avoir des poids vers les UEs.

Solution envisagée

  • considérer l'ensemble des évaluations de Session2: modifier get_evaluation_session2(modimpl)
  • calculer la moyenne pondérée des notes de ces évaluations (comme pour les évaluations standard)
  • remplacer la moyenne de module des étudiants ayant une moyenne session2 valide.
### Résumé - l'évaluation de **Session2** remplace la moyenne du module. - on ne prend en compte qu'une seule évaluation de Session2 par module. - c'est OK en classique mais problématique en BUT si on veut avoir des poids vers les UEs. ### Solution envisagée - considérer l'ensemble des évaluations de **Session2**: modifier `get_evaluation_session2(modimpl)` - calculer la moyenne pondérée des notes de ces évaluations (comme pour les évaluations standard) - remplacer la moyenne de module des étudiants ayant une moyenne session2 valide.
viennet added this to the Final 9.6 project 2024-03-23 07:40:15 +01:00
Owner

Conformité: bug lié

Bug découvert en travaillant sur ce ticket, sera corrigé en même temps.

La conformité d'un module est vérifiée via

def moduleimpl_is_conforme(
    moduleimpl, evals_poids: pd.DataFrame, modimpl_coefs_df: pd.DataFrame
) -> bool

qui est appelé par ModuleImpl.check_apc_conformity(res)
avec evals_poids = modimpl.get_evaluations_poids().

Or get_evaluations_poids renvoie les poids de toutes les évaluations, y compris rattrapage et session2:

load_evaluations_poids charge un DataFrame(columns=ue_ids, index=evaluation_ids, dtype=float).

Bug: actuellement on peut rendre un modimpl conforme en ajoutant une évaluation de session2 avec des poids bien choisis, même si cette dernière n'est pas utilisée dans les calculs.

Solution

  • check_apc_conformity et moduleimpl_is_conforme pourraient avoir un argument indiquant le type d'évaluations à considérer.

  • En APC, les évaluations de rattrapage et session2 ne seraient prises en compte que si le sous-ensemble qu'elles forment est conforme (non orthogonal aux coefs du module).

    • dans ce cas, message d'avertissement sur le tableau de bord moduleimpl_status.
## Conformité: bug lié Bug découvert en travaillant sur ce ticket, sera corrigé en même temps. La conformité d'un module est vérifiée via ```py def moduleimpl_is_conforme( moduleimpl, evals_poids: pd.DataFrame, modimpl_coefs_df: pd.DataFrame ) -> bool ``` qui est appelé par `ModuleImpl.check_apc_conformity(res)` avec `evals_poids = modimpl.get_evaluations_poids()`. Or `get_evaluations_poids` renvoie les poids de toutes les évaluations, **y compris rattrapage et session2**: `load_evaluations_poids` charge un `DataFrame(columns=ue_ids, index=evaluation_ids, dtype=float)`. **Bug**: actuellement on peut rendre un modimpl conforme en ajoutant une évaluation de session2 avec des poids bien choisis, même si cette dernière n'est pas utilisée dans les calculs. ### Solution - `check_apc_conformity` et `moduleimpl_is_conforme` pourraient avoir un argument indiquant le type d'évaluations à considérer. - En APC, les évaluations de *rattrapage et session2* ne seraient prises en compte que si le sous-ensemble qu'elles forment est conforme (non orthogonal aux coefs du module). - dans ce cas, message d'avertissement sur le tableau de bord `moduleimpl_status`.
Owner

Notes techniques

Les évaluations de session 2 sont Evaluation.evaluation_type == Evaluation.EVALUATION_SESSION2.

Le calcul des moyennes BUT en question est effectué dans ModuleImplResultsAPC.compute_module_moy().

Modifier ModuleImplResultsAPC.get_evaluation_session2() pour que cette méthode vérifie la conformité des évals de session2.

Calculer une moyenne pondérée par les poids avant d'affecter etuds_moy_module.

Tests unitaires

  • enrichir test_notes_rattrapage.py pour tester ces cas avec poids.
## Notes techniques Les évaluations de session 2 sont `Evaluation.evaluation_type == Evaluation.EVALUATION_SESSION2`. Le calcul des moyennes BUT en question est effectué dans `ModuleImplResultsAPC.compute_module_moy()`. Modifier `ModuleImplResultsAPC.get_evaluation_session2()` pour que cette méthode vérifie la conformité des évals de session2. Calculer une moyenne pondérée par les poids avant d'affecter `etuds_moy_module`. ## Tests unitaires - enrichir `test_notes_rattrapage.py` pour tester ces cas avec poids.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: ScoDoc/ScoDoc#811
No description provided.