Export CSV des réponses détaillées des quizzes non exploitable

Est-ce que vous avez déjà eu des problèmes bizarres avec l’export des CSV détaillés (i.e. problem_grade_report et pas grade_report) ? Il y a des 0 dans certaines colonnes qui semblent foireux. Selon moi une grande partie de ces 0 seraient des gens qui n’ont pas répondu à la question plutôt que des gens qui ont eu faux à la question.

Un example détaillé : le Quiz Intro 01. question 3 a presque ~98% de bonnes réponses:

Live results accessibles à l’URL https://lms.fun-mooc.fr/courses/course-v1:inria+41026+session01/fun/dashboard/problem_stats/get_stats/56dd611fa528460888d315c1e8a86323

Si je regarde le CSV du 27/05

Et que je regarde la bonne colonne (avec pandas mais je vous laisse faire avec excel ou autre si vous préférez):

import pandas as pd

data = pd.read_csv(filename)
data['Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Earned)'].value_counts(dropna=False)
NaN    6685
1.0    1319
0.0     736
Name: Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Earned), dtype: int64

On a 1319 qui ont eu 1 point et 736 qui ont eu 0 point. Ça correspond pas du tout au pourcentage de 98% de bonne réponses (on serait plus à ~60%). Il y a un truc foireux, je me dis que parmi ceux qui ont 0 il y a des gens qui n’ont pas essayé le quiz … dans un monde idéal ceux qui n’ont pas essayé aurait NaN (ou N/A dans le fichier CSV) mais ça semble pas être toujours le cas.

Il ne semblerait pas que la colonne “Possible” aide:

# This is not related to the Possible column
data['Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Possible)'].value_counts(dropna=False)
NaN    6685
1.0    2055
Name: Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Possible), dtype: int64

On s’est posé toutes ces questions là avec Arnaud Legrand pour le mooc RR.
Regarde ce script écrit par Arnaud Legrand en R pour la session 1 : https://gitlab.inria.fr/learninglab/mooc-rr/moor-rr-statistiques/-/blob/master/statsRR/export.ipynb. Il explique justement tout ça dans son code.

OK merci, donc l’info que j’avais raté c’était qu’il y avait une différence subtile entre:

  • Possible=“1.0”: la personne a répondu
  • Possible=“1”: la personne a pas répondu

Évidemment quand on charge les données avec pandas, par défaut il interprète ça comme des chiffres et 1.0 == 1 et je suis passé à côté de cette subtilité.

Si je reprends la même question qu’au dessus:

import pandas as pd
filename = 'Bilans/ExportFUN_Exercices/inria_41026_session01_problem_grade_report_2021-05-27-0902.csv'

data = pd.read_csv(filename, dtype=str)

data['Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Earned)'].value_counts(dropna=False)
NaN    6685
1.0    1319
0.0     736
Name: Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Earned), dtype: int64
data['Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Possible)'].value_counts(dropna=False)
NaN    6685
1.0    1343
1       712
Name: Quiz Intro 1: Introducing machine-learning concepts - Question 3 (Possible), dtype: int64

Le nombre de bonne réponse c’est 1319 (Earned == “1.0”). Le nombre de réponse totales c’est 1343 (Possible == “1.0”). Le pourcentage de bonne réponses: 1319 / 1343 qui est aux alentours de 98% ce qui colle avec la page de résultats de cette question (ça colle pas exactement parce que cette page est updatée en continu alors que le CSV provient d’un snapshot).

Comme Arnaud le note dans son notebook, on sait pas très bien ce que Possible=“1” vs Possible=“N/A” veut dire, il fait l’hypothèse que N/A c’est des gens qui ont même pas ouvert la page du quiz? Pourquoi pas, de mémoire j’avais regardé et effectivement toutes les colonnes associées à un
quiz donné avaient N/A ou aucune d’entre elles ne l’avaient …

Effectivement, c’est tordu mais pour le moment c’est le seul moyen de différencier ceux qui ont 0 car ils n’ont pas répondu de ceux qui ont 0 car ils ont tout faux.
Ensuite, de mon côté, je regarde les % d’échec uniquement dans la phase de béta-test et après la 1e session, pour éventuellement reprendre la question s’il y a trop d’échec.
Ensuite, je regarde les quiz pour voir l’avancement des apprenants. Et là, je simplifie : si la note au quiz>0 → je prends l’hypothèse qu’il a répondu. Je fais cette hypothèse car un quiz correspond à plusieurs questions. Du coup, c’est quand même extrêmement rare qu’un apprenant ait faux à toutes les questions.