Quiz - Tests et explicabilite
Section A — Tests des systemes IA (10 questions)
Question 1
Pourquoi les tests des systemes IA sont-ils plus difficiles que les tests des logiciels traditionnels ?
- A) Les systemes IA utilisent plus de memoire
- B) Les systemes IA peuvent produire des sorties non deterministes et souffrir de defaillances silencieuses
- C) Les systemes IA necessitent toujours du materiel GPU pour les tests
- D) Les systemes IA ne peuvent pas etre testes avec des frameworks standards
Voir la reponse
B) Les systemes IA peuvent produire des sorties non deterministes et souffrir de defaillances silencieuses
Contrairement aux logiciels traditionnels ou un bug provoque un plantage ou une sortie incorrecte, les systemes IA peuvent produire des predictions subtilement erronees qui passent inapercues. De plus, la meme entree peut produire des sorties legerement differentes en raison du caractere aleatoire du modele, de la precision en virgule flottante ou du comportement dependant des donnees.
Question 2
Dans la pyramide des tests pour l'IA, quel type de test devez-vous ecrire en plus grand nombre ?
- A) Tests de bout en bout
- B) Tests d'integration
- C) Tests unitaires
- D) Tests de performance
Voir la reponse
C) Tests unitaires
La pyramide des tests recommande une repartition 70/20/10 : 70 % de tests unitaires (rapides, peu couteux, nombreux), 20 % de tests d'integration (intermediaires), 10 % de tests de bout en bout (lents, couteux, peu nombreux). Les tests unitaires detectent le plus de bugs au cout le plus bas.
Question 3
Quel est le role de conftest.py dans pytest ?
- A) Configurer l'interpreteur Python
- B) Stocker les fixtures et hooks partages qui sont automatiquement decouverts par pytest
- C) Definir les methodes d'assertion des tests
- D) Configurer le rapport de couverture de code
Voir la reponse
B) Stocker les fixtures et hooks partages qui sont automatiquement decouverts par pytest
conftest.py est un fichier special que pytest decouvre automatiquement. Les fixtures qui y sont definies sont disponibles pour tous les tests du meme repertoire et des sous-repertoires — aucune importation n'est necessaire. Vous pouvez avoir plusieurs fichiers conftest.py a differents niveaux de repertoires.
Question 4
Que fait @pytest.mark.parametrize ?
- A) Il execute un test en parallele sur plusieurs cœurs CPU
- B) Il execute une seule fonction de test avec plusieurs ensembles de donnees d'entree
- C) Il marque un test comme parametre pour qu'il puisse etre ignore
- D) Il configure les parametres des tests dans
pytest.ini
Voir la reponse
B) Il execute une seule fonction de test avec plusieurs ensembles de donnees d'entree
@pytest.mark.parametrize permet de definir plusieurs paires entree/sortie pour une seule fonction de test. Au lieu d'ecrire 10 tests separes pour 10 entrees, vous ecrivez un seul test qui s'execute 10 fois avec des donnees differentes. Exemple :
@pytest.mark.parametrize("input,expected", [(1, 2), (2, 4), (3, 6)])
def test_double(input, expected):
assert input * 2 == expected
Question 5
Quel est le principal avantage d'utiliser TestClient de FastAPI/Starlette pour les tests ?
- A) Il prend en charge l'execution parallele des tests
- B) Il permet de tester les endpoints d'API sans demarrer un vrai serveur HTTP
- C) Il genere automatiquement des cas de test a partir du schema de votre API
- D) Il fournit des capacites de test de charge integrees
Voir la reponse
B) Il permet de tester les endpoints d'API sans demarrer un vrai serveur HTTP
TestClient simule les requetes HTTP en memoire, ce qui rend les tests rapides et fiables. Vous n'avez pas besoin de demarrer uvicorn, gerer les ports ou traiter les problemes reseau. Les tests s'executent de maniere synchrone et deterministe.
Question 6
Quand devez-vous mocker le modele ML dans vos tests ?
- A) Toujours — n'utilisez jamais le vrai modele dans les tests
- B) Lors du test du routage API, de la validation et du format de reponse (pas de la precision des predictions)
- C) Uniquement lorsque le fichier du modele est trop volumineux pour etre inclus dans le depot
- D) Jamais — le mocking va a l'encontre de l'objectif des tests
Voir la reponse
B) Lors du test du routage API, de la validation et du format de reponse (pas de la precision des predictions)
Mockez le modele lorsque vous voulez tester la logique de l'API de maniere isolee : l'endpoint renvoie-t-il le bon code de statut ? Valide-t-il correctement les entrees ? Gere-t-il les erreurs correctement ? Utilisez le vrai modele pour tester la qualite des predictions, la precision et le comportement aux cas limites.
Question 7
Laquelle de ces options n'est PAS un cas limite valide a tester pour une API de prediction IA ?
- A) Valeurs NaN dans les features
- B) Liste de features vide
- C) Features avec des valeurs et types corrects
- D) Valeurs infinies dans les features
Voir la reponse
C) Features avec des valeurs et types corrects
Une entree valide est le chemin nominal (happy path), pas un cas limite. Les cas limites sont des conditions aux limites et des entrees inhabituelles qui peuvent faire echouer votre systeme : NaN, infini, listes vides, valeurs nulles, nombres extremement grands, types incorrects, etc.
Question 8
Que fait pytest --cov=app --cov-fail-under=80 ?
- A) Il execute les tests et genere un rapport de couverture, en echouant si un test prend plus de 80 secondes
- B) Il execute les tests avec couverture de code et fait echouer le build si la couverture est inferieure a 80 %
- C) Il execute seulement 80 % de la suite de tests pour une execution plus rapide
- D) Il definit le nombre maximum d'echecs de tests a 80
Voir la reponse
B) Il execute les tests avec couverture de code et fait echouer le build si la couverture est inferieure a 80 %
L'option --cov=app mesure la couverture pour le package app, et --cov-fail-under=80 definit un seuil minimum. Si la couverture mesuree est inferieure a 80 %, pytest se termine avec un code de sortie non nul, ce qui fait echouer les pipelines CI/CD.
Question 9
Dans un pipeline CI GitHub Actions, quel est l'ordre correct des etapes pour tester une API IA ?
- A) Executer les tests → Installer les dependances → Recuperer le code
- B) Recuperer le code → Executer les tests → Installer les dependances
- C) Recuperer le code → Installer les dependances → Executer les tests → Verifier la couverture
- D) Installer les dependances → Recuperer le code → Verifier la couverture → Executer les tests
Voir la reponse
C) Recuperer le code → Installer les dependances → Executer les tests → Verifier la couverture
L'ordre logique est :
- Recuperer le code depuis le depot
- Installer Python, pip et les dependances du projet
- Executer les tests unitaires et d'integration
- Verifier que la couverture de code atteint le seuil
- (Optionnel) Televerser le rapport de couverture vers un service comme Codecov
Question 10
Quel est le pattern AAA en matiere de tests ?
- A) Authentication, Authorization, Accounting
- B) Arrange, Act, Assert
- C) Analyze, Apply, Approve
- D) Automate, Accelerate, Audit
Voir la reponse
B) Arrange, Act, Assert
Le pattern AAA structure chaque test en trois phases :
- Arrange : Preparer les donnees de test et les preconditions
- Act : Executer la fonction ou l'action testee
- Assert : Verifier que le resultat correspond aux attentes
def test_prediction():
features = [5.1, 3.5, 1.4, 0.2, 2.3] # Arrange
result = model.predict([features]) # Act
assert result[0] in [0, 1] # Assert
Section B — Postman (5 questions)
Question 11
Dans Postman, quel est le role des variables d'environnement ?
- A) Stocker les resultats des tests pour les rapports
- B) Basculer entre differentes configurations d'API (local, staging, production) sans modifier les requetes
- C) Definir le langage de programmation pour les scripts de test
- D) Definir la version du protocole HTTP
Voir la reponse
B) Basculer entre differentes configurations d'API (local, staging, production) sans modifier les requetes
Les variables d'environnement permettent de definir des valeurs comme base_url, auth_token et api_version par environnement. Vos requetes utilisent {{base_url}} au lieu d'URLs en dur. Passer du local a la production consiste simplement a selectionner un autre environnement — aucune modification des requetes n'est necessaire.
Question 12
Quelle assertion de test Postman verifie que le code de statut de la reponse est 200 ?
- A)
pm.assert(response.code === 200) - B)
pm.test("Status", () => { pm.response.to.have.status(200) }) - C)
assert(pm.status == 200) - D)
expect(response).toBe(200)
Voir la reponse
B) pm.test("Status", () => { pm.response.to.have.status(200) })
Postman utilise la fonction pm.test() avec des assertions de style Chai. Le premier argument est une chaine de description, et le second est une fonction de callback contenant l'assertion. pm.response.to.have.status(200) est une assertion de style BDD qui verifie le code de statut HTTP.
Question 13
Qu'est-ce que Newman dans l'ecosysteme Postman ?
- A) Un editeur de tests visuel pour Postman
- B) Un outil en ligne de commande qui execute les collections Postman pour l'automatisation CI/CD
- C) Un plugin Postman pour les tests de charge
- D) Un generateur de code qui convertit les requetes Postman en Python
Voir la reponse
B) Un outil en ligne de commande qui execute les collections Postman pour l'automatisation CI/CD
Newman est le compagnon en ligne de commande de Postman. Il execute les collections exportees depuis le terminal, ce qui le rend parfait pour les pipelines CI/CD (GitHub Actions, Jenkins, GitLab CI). Vous pouvez l'executer avec des fichiers d'environnement, des fichiers de donnees et generer des rapports HTML.
newman run collection.json -e environment.json -r htmlextra
Question 14
Quelle est la difference entre un script pre-requete et un script post-reponse dans Postman ?
- A) Le pre-requete s'execute sur le serveur, le post-reponse sur le client
- B) Le pre-requete s'execute avant l'envoi de la requete, le post-reponse apres la reception de la reponse
- C) Le pre-requete definit les variables d'environnement, le post-reponse ne peut pas
- D) Il n'y a pas de difference — ils s'executent en meme temps
Voir la reponse
B) Le pre-requete s'execute avant l'envoi de la requete, le post-reponse apres la reception de la reponse
- Scripts pre-requete : s'executent avant l'envoi de la requete HTTP — utilisez-les pour generer des donnees dynamiques, definir des variables ou enregistrer des informations
- Scripts post-reponse (anciennement « Tests ») : s'executent apres la reception de la reponse — utilisez-les pour valider la reponse, extraire des donnees et definir des variables pour la requete suivante
Question 15
Comment enchainer les requetes dans Postman (passer des donnees d'une requete a la suivante) ?
- A) Utiliser des variables JavaScript globales partagees entre toutes les requetes
- B) Sauvegarder les valeurs de la reponse avec
pm.collectionVariables.set()et y faire reference avec{{variable_name}} - C) ecrire les donnees dans un fichier et les lire dans la requete suivante
- D) Utiliser les cookies HTTP pour persister les donnees entre les requetes
Voir la reponse
B) Sauvegarder les valeurs de la reponse avec pm.collectionVariables.set() et y faire reference avec {{variable_name}}
Dans le script post-reponse de la Requete 1 :
const data = pm.response.json();
pm.collectionVariables.set("prediction_id", data.id);
Dans l'URL ou le corps de la Requete 2 :
{{prediction_id}}
Cela cree un flux de travail ou la sortie d'une requete alimente la suivante.
Section C — Explicabilite des modeles (10 questions)
Question 16
Pourquoi l'explicabilite des modeles est-elle importante selon le reglement europeen sur l'IA ?
- A) Elle aide les modeles a s'entrainer plus rapidement
- B) Les systemes IA a haut risque doivent fournir des explications pour leurs decisions automatisees, avec des amendes pouvant atteindre 35 M€ en cas de non-conformite
- C) C'est optionnel mais ameliore la precision du modele
- D) C'est requis uniquement pour les modeles open source
Voir la reponse
B) Les systemes IA a haut risque doivent fournir des explications pour leurs decisions automatisees, avec des amendes pouvant atteindre 35 M€ en cas de non-conformite
Le reglement europeen sur l'IA classe les systemes IA par niveau de risque. Les systemes a haut risque (sante, finance, recrutement, application de la loi, education) sont legalement tenus de fournir des explications pour leurs decisions. La non-conformite peut entrainer des amendes pouvant atteindre 35 millions d'euros ou 7 % du chiffre d'affaires annuel mondial.
Question 17
Quelle est la difference entre une explication locale et une explication globale ?
- A) La locale s'execute sur votre machine, la globale dans le cloud
- B) La locale explique une prediction specifique, la globale explique le comportement du modele sur toutes les predictions
- C) La locale utilise LIME, la globale utilise SHAP — ils ne sont pas interchangeables
- D) La locale est pour la classification, la globale pour la regression
Voir la reponse
B) La locale explique une prediction specifique, la globale explique le comportement du modele sur toutes les predictions
- Locale : « Pourquoi le modele a-t-il predit ce resultat specifique pour cette entree specifique ? » (ex. : « Ce pret a ete refuse en raison d'un ratio dette/revenu eleve »)
- Globale : « Quelles features sont importantes en general pour toutes les predictions ? » (ex. : « Le revenu et le score de credit sont les deux features les plus importantes globalement »)
LIME et SHAP peuvent tous deux fournir des explications locales. SHAP fournit egalement des explications globales via les graphiques summary et bar.
Question 18
Comment LIME genere-t-il une explication pour une prediction unique ?
- A) Il lit directement les poids internes du modele
- B) Il cree des perturbations de l'entree, obtient des predictions pour chacune, et ajuste un modele lineaire local
- C) Il utilise la descente de gradient pour trouver les features les plus importantes
- D) Il compare la prediction a tous les exemples d'entrainement
Voir la reponse
B) Il cree des perturbations de l'entree, obtient des predictions pour chacune, et ajuste un modele lineaire local
L'algorithme de LIME :
- Prendre l'instance a expliquer
- Generer de nombreuses entrees similaires mais legerement differentes (perturbations)
- Demander au modele boite noire de predire chaque perturbation
- Ponderer les perturbations par proximite a l'instance originale
- Ajuster un modele lineaire simple sur les perturbations ponderees
- Extraire les coefficients du modele lineaire comme contributions des features
Question 19
Quel concept mathematique de la theorie des jeux sous-tend les valeurs SHAP ?
- A) equilibre de Nash
- B) Dilemme du prisonnier
- C) Valeurs de Shapley — repartition equitable du gain entre les joueurs cooperants
- D) Theoreme minimax
Voir la reponse
C) Valeurs de Shapley — repartition equitable du gain entre les joueurs cooperants
SHAP est base sur les valeurs de Shapley (1953, Lloyd Shapley — Prix Nobel d'economie 2012). Dans le contexte du ML : les « joueurs » sont les features, et le « gain » est la prediction. Les valeurs de Shapley calculent la contribution equitable de chaque feature en considerant tous les ordres possibles des features et leurs contributions marginales.
Question 20
Que garantit la propriete de precision locale de SHAP ?
- A) Le modele atteint au moins 95 % de precision
- B) Les valeurs SHAP d'une prediction s'additionnent pour donner la difference entre la valeur de base et la prediction
- C) Les explications locales sont plus precises que les globales
- D) SHAP produit la meme explication que LIME
Voir la reponse
B) Les valeurs SHAP d'une prediction s'additionnent pour donner la difference entre la valeur de base et la prediction
Mathematiquement : base_value + Σ(valeurs SHAP) = prediction
Cela signifie que l'explication explique parfaitement la prediction. Si la valeur de base (prediction moyenne) est 0,50 et la prediction est 0,85, alors les valeurs SHAP totalisent exactement 0,35. Cette propriete est propre a SHAP et ne s'applique pas a LIME.
Question 21
Dans un force plot SHAP, que representent les couleurs rouge et bleue ?
- A) Rouge = prediction correcte, Bleu = prediction incorrecte
- B) Rouge = features poussant la prediction vers le haut, Bleu = features la poussant vers le bas
- C) Rouge = features continues, Bleu = features categorielles
- D) Rouge = donnees d'entrainement, Bleu = donnees de test
Voir la reponse
B) Rouge = features poussant la prediction vers le haut, Bleu = features la poussant vers le bas
Dans un force plot SHAP :
- Rouge (cote gauche) represente les features qui poussent la prediction vers le haut (vers une valeur plus elevee / Classe 1)
- Bleu (cote droit) represente les features qui poussent la prediction vers le bas (vers une valeur plus faible / Classe 0)
- La largeur de chaque barre indique l'ampleur de la contribution de la feature
- La prediction est la ou les forces rouge et bleue s'equilibrent
Question 22
Quelle information fournit un summary plot SHAP ?
- A) Un resume de tous les articles de recherche SHAP
- B) Une vue globale montrant l'importance des features, la distribution des valeurs SHAP et la correlation des valeurs des features
- C) Un resume des hyperparametres du modele
- D) Une comparaison de differentes architectures de modeles
Voir la reponse
B) Une vue globale montrant l'importance des features, la distribution des valeurs SHAP et la correlation des valeurs des features
Le summary plot SHAP affiche :
- Axe Y : Features classees par importance (les plus importantes en haut)
- Axe X : Valeur SHAP (impact sur la prediction)
- Chaque point : Un point de donnees (une prediction)
- Couleur : Valeur de la feature (rouge = valeur originale elevee, bleu = valeur originale faible)
Cela permet de voir a la fois quelles features comptent et comment leurs valeurs affectent les predictions.
Question 23
En comparant LIME et SHAP, quelle affirmation est vraie ?
- A) LIME a des garanties theoriques plus solides que SHAP
- B) SHAP est toujours plus rapide que LIME
- C) SHAP fournit des garanties mathematiques (precision locale, consistance, missingness) que LIME n'a pas
- D) LIME fonctionne uniquement avec les modeles a base d'arbres
Voir la reponse
C) SHAP fournit des garanties mathematiques (precision locale, consistance, missingness) que LIME n'a pas
SHAP possede trois proprietes cles issues de la theorie des valeurs de Shapley :
- Precision locale : Les valeurs totalisent la prediction moins la valeur de base
- Consistance : Si une feature contribue plus dans le modele B que A, sa valeur SHAP est plus elevee
- Missingness : Les features qui n'affectent pas la sortie ont SHAP = 0
LIME n'a aucune de ces garanties formelles. Cependant, LIME est souvent plus rapide pour les predictions individuelles et plus intuitif a comprendre.
Question 24
Un data scientist explique a un regulateur bancaire : « Ce pret a ete refuse car le ratio dette/revenu du demandeur de 0,85 avait une valeur SHAP de -0,28, le score de credit de 580 avait une valeur SHAP de -0,22, et la duree d'emploi de 3 mois avait une valeur SHAP de -0,15. » C'est un exemple de :
- A) Une explication globale
- B) Une explication locale
- C) Un resume du modele
- D) Une analyse d'equite
Voir la reponse
B) Une explication locale
C'est une explication locale car elle explique une prediction specifique pour un demandeur specifique. Elle detaille exactement quelles features ont contribue a cette decision particuliere et dans quelle mesure. Une explication globale decrirait plutot l'importance globale des features pour tous les demandeurs.
Question 25
Vous executez SHAP sur votre modele et constatez que la feature « genre » a une valeur moyenne |SHAP| de 0,15, ce qui en fait la 3ᵉ feature la plus importante. Que devez-vous faire ?
- A) Rien — le modele fonctionne correctement
- B) Supprimer la feature et reentrainer le modele
- C) Enqueter sur un biais potentiel — une caracteristique protegee ayant une importance elevee est un signal d'alerte qui necessite une analyse d'equite
- D) Augmenter le nombre d'echantillons d'entrainement
Voir la reponse
C) Enqueter sur un biais potentiel — une caracteristique protegee ayant une importance elevee est un signal d'alerte qui necessite une analyse d'equite
Lorsqu'une caracteristique protegee (genre, origine ethnique, age, religion) a une importance de feature elevee, cela signifie que le modele l'utilise significativement dans ses decisions. C'est un signal d'alerte de biais qui necessite :
- Analyse d'equite : Verifier si le modele traite differemment les differents groupes
- Tests d'impact disparate : Comparer les distributions de predictions entre les groupes
- Discussion avec les parties prenantes : Decider si la feature doit etre incluse, modifiee ou supprimee
- Conformite reglementaire : Le reglement europeen sur l'IA et de nombreuses reglementations interdisent la discrimination par les caracteristiques protegees
Supprimer simplement la feature (option B) peut ne pas resoudre le probleme — d'autres features correlees peuvent servir de proxies.
Interpretation du score
| Score | Niveau | Recommandation |
|---|---|---|
| 23-25 | 🏆 Excellent | Vous avez une solide comprehension des tests et de l'explicabilite. Pret pour le Module 6 ! |
| 18-22 | 🟢 Bien | Revoyez les concepts manques, en particulier la comparaison LIME/SHAP. |
| 13-17 | 🟡 Acceptable | Relisez les sections theoriques et refaites les labs avant de continuer. |
| < 13 | 🔴 a ameliorer | Reparcourez le contenu du Module 5. Concentrez-vous sur les fondamentaux de pytest et les proprietes de SHAP. |
Ce que vous avez appris dans le Module 5
- Les tests des systemes IA necessitent une attention particuliere en raison du non-determinisme, de la dependance aux donnees et des defaillances silencieuses
- pytest est le framework de tests standard — maitrisez les fixtures, parametrize, les markers et conftest.py
- TestClient permet des tests d'API rapides sans demarrer de serveur
- Postman offre des tests d'API visuels avec assertions scriptees et integration CI/CD via Newman
- LIME explique les predictions individuelles a l'aide d'approximations lineaires locales
- SHAP utilise la theorie des jeux pour fournir des attributions de features mathematiquement rigoureuses
- L'explicabilite n'est pas optionnelle — elle est requise par la reglementation et essentielle pour la confiance
- Combinez tests + explicabilite pour des deploiements IA robustes et dignes de confiance