Skip to content

Commit 5d2d96c

Browse files
add one new question in C01La_confusion
1 parent 2976762 commit 5d2d96c

File tree

1 file changed

+56
-15
lines changed

1 file changed

+56
-15
lines changed

inst/tutorials/C01La_confusion/C01La_confusion.Rmd

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: "Guyliann Engels & Philippe Grosjean"
44
description: "**SDD III Module 1** Matrices de confusion et métriques qui en découlent."
55
tutorial:
66
id: "C01La_confusion"
7-
version: 2.0.0/4
7+
version: 2.0.0/5
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -29,12 +29,42 @@ BioDataScience3::learnr_server(input, output, session)
2929

3030
## Objectifs
3131

32+
Il est possible de créer une multitude de classifieurs. Afin de déterminer le classifieur le plus adapté, nous avons besoin d'évaluer sa qualité. L'approche la plus adaptée est d'employer des métriques comme le taux de reconnaissance globale, la précision, le rappel.... Ces métriques se calculent sur base d'une matrice de confusion. Ces métriques sont également employées afin de comparer les classifieurs entre eux.
33+
34+
Ce tutoriel a pour objectif
35+
36+
- Choisir la bonne métrique
3237
- Appréhender les matrices de confusion.
33-
- Être capable de calculer à la main les principales métriques à partir d'une matrice de confusion 2 x 2.
38+
- Appréhender les principales métriques grâce aux calculs à la main de ces dernières à partir d'une matrice de confusion 2 x 2.
39+
40+
## Choix des métriques
41+
42+
```{r qu_metrics}
43+
#question("Quelle est la métrique la plus adpatée afin de déterminer le nombre d'items d'intéret trouvé parmi l'ensemble des items ?",
44+
# answer("Rappel", correct = TRUE),
45+
# answer("Spécificité"),
46+
# answer("Taux de faux positifs"),
47+
# answer("Précision"),
48+
# answer("Score F"),
49+
# answer("Rappel"),
50+
# allow_retry = TRUE, random_answer_order = TRUE,
51+
#)
52+
53+
question("Quelle est la métrique la plus adpatée afin de mettre en avant le nombre d'items d'intéret trouvé parmi l'ensemble des items ?",
54+
answer("Rappel", correct = TRUE, message = "Le rappel permet de connaitre quelle est la fraction de classe X trouvé par l'ordinatuer parmi l'ensemble des items."),
55+
answer("Précision", message = "La précision permet de connaitre quelle est la fraction effectivement de classe X que l’ordinateur a classé comme X ?"),
56+
answer("Spécificité", message = "La spécificité est l'opposé du rappel. On s'intéresse à la vrai négatif."),
57+
answer("Score F", message = "Il s'agit d'une métrique qui combine la précision et le rappel."),
58+
allow_retry = TRUE, random_answer_order = TRUE,
59+
correct = "Bravo ! Vous avez trouvé la métrique la plus adaptée.",
60+
incorrect = "Attention, Ce n'est pas la bonne métrique.",
61+
submit_button = "Soumettre une réponse",
62+
try_again_button = "Resoumettre une réponse")
63+
```
3464

35-
## Les métriques sur les matrice de confusion
65+
## Le taux de reconnaissance global
3666

37-
### La taux de reconnaissance global
67+
Ces métriques peuvent sembler abstraites. En effectuant un exemple à la main, on peut les appréhender plus facilement. Intéressez-vous pour débuter au taux de reconnaissance globale.
3868

3969
```{r, echo=FALSE, message=FALSE}
4070
mconf <- dtf(
@@ -45,10 +75,10 @@ rownames(mconf) <- c("A", "B", "C")
4575
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
4676
```
4777

48-
Sur base de la matrice de confusion ci-dessus, calculez le taux de reconnaissance global du groupe B.
78+
Sur base de la matrice de confusion fictive ci-dessus, calculez le taux de reconnaissance global du groupe B. Il s'agit de la première étape. Il faut définir les vrais positifs, les faux positifs, les faux négatifs et les vrais négatifs. Ensuite, il faut ensuite calculer la métrique d'intérêt.
4979

5080
```{r conf1_h2, exercise = TRUE}
51-
tp <- _)__ # TRUE POSITIVE, vrai positif
81+
tp <- ___ # TRUE POSITIVE, vrai positif
5282
fp <- ___ # FALSE POSITIVE, faux positif
5383
fn <- ___ # FALSE NEGATIVE, faux négatif
5484
tn <- ___ # TRUE NEGATIVE, vrai négatif
@@ -80,12 +110,19 @@ conf
80110
```
81111

82112
```{r conf1_h2-check}
113+
#grade_result(
114+
# pass_if(~ identical(.result, ((160+440)/(160+90+80+440))),
115+
# "Bien joué, c'est la somme des vrais positifs et négatifs sur le total général."
116+
# )
117+
#)
83118
grade_result(
84-
pass_if(~ identical(.result, ((160+440)/(160+90+80+440))), "Oui, c'est la somme des vrais positifs et négatifs sur le total général.")
85-
)
119+
pass_if(~ identical(.result, ((160+440)/(160+90+80+440)))),
120+
correct = "Bien joué, c'est la somme des vrais positifs et négatifs sur le total général.",
121+
incorrect = "Révise la formule mathématique de taux de reconnaissance"
122+
)
86123
```
87124

88-
### La taux de vrai positif
125+
## Le taux de vrai positif
89126

90127
```{r, echo=FALSE, message=FALSE}
91128
mconf <- dtf(
@@ -96,7 +133,7 @@ rownames(mconf) <- c("A", "B", "C")
96133
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
97134
```
98135

99-
Sur base de la matrice de confusion ci-dessus, calculez le **taux de vrai positifs** du groupe C.
136+
Sur base de cette nouvelle matrice de confusion ci-dessus, calculez le **taux de vrais positifs** du groupe C.
100137

101138
```{r conf2_h2, exercise = TRUE}
102139
tp <- ___
@@ -136,7 +173,7 @@ grade_result(
136173
)
137174
```
138175

139-
### La spécificité
176+
## La spécificité
140177

141178
```{r, echo=FALSE, message=FALSE}
142179
mconf <- dtf(
@@ -147,7 +184,7 @@ rownames(mconf) <- c("A", "B", "C")
147184
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
148185
```
149186

150-
Sur base de la matrice de confusion ci-dessus, calculez la **spécificité** du groupe A.
187+
Sur base de cette matrice de confusion ci-dessus, calculez la **spécificité** du groupe A.
151188

152189
```{r conf3_h2, exercise = TRUE}
153190
tp <- ___
@@ -187,7 +224,7 @@ grade_result(
187224
)
188225
```
189226

190-
### La précision
227+
## La précision
191228

192229
```{r, echo=FALSE, message=FALSE}
193230
mconf <- dtf(
@@ -198,7 +235,7 @@ rownames(mconf) <- c("A", "B", "C")
198235
knitr::kable(mconf, caption = "Matrice de confusion dont les colonnes représentent la classification par ordinateur et les lignes la classification manuelle.")
199236
```
200237

201-
Sur base de la matrice de confusion ci-dessus, calculez la **précision** du groupe B.
238+
Sur base de la matrice de confusion ci-dessus, réaliser un dernier calcul à la main. Calculez la **précision** du groupe B.
202239

203240
```{r conf4_h2, exercise = TRUE}
204241
tp <- ___
@@ -240,12 +277,16 @@ grade_result(
240277

241278
## Conclusion
242279

280+
Même si la réalisation de ces calculs de métrique peut vous sembler simpliste. Ils vous ont permis d'appréhender un peu mieux ces métriques qui sont des éléments cruciaux dans la mise en place d'un classifieur. À chaque fois que vous devrez étudier la qualité d'un classifieur, débuter par définir les métriques les plus pertinentes.
281+
243282
```{r comm_noscore, echo=FALSE}
244283
question_text(
245284
"Laissez-nous vos impressions sur cet outil pédagogique",
246285
answer("", TRUE, message = "Pas de commentaires... C'est bien aussi."),
247286
incorrect = "Vos commentaires sont enregistrés.",
248287
placeholder = "Entrez vos commentaires ici...",
249-
allow_retry = TRUE
288+
allow_retry = TRUE,
289+
submit_button = "Soumettre une réponse",
290+
try_again_button = "Resoumettre une réponse"
250291
)
251292
```

0 commit comments

Comments
 (0)