FILIÈRE : SCIENCES DES DONNÉES, BIG DATA & IA
MODULE : ALGORITHMES IA ET PRÉDICTION
Prof. Abdellah TAHIRI, Ph.D. Année : 2025-2026
Niveau : Avancé (Bac+4/Bac+5) Durée suggérée : 3h00
Ce document contient un large ensemble de questions d'examen de niveau supérieur couvrant l'intégralité du cours,
avec la section Scripting Python intégrée. Les questions visent à évaluer la compréhension profonde, l'analyse critique
et la capacité d'implémentation des étudiants.
PARTIE 1 — PROBLÈMES DE PRÉDICTION EN IA
1.1 Définition et approche
Q1. Comparez les trois paradigmes d'apprentissage automatique (supervisé, non-supervisé,
par renforcement) et justifiez pour quel type de problème de prédiction chacun est adapté.
Donnez un exemple industriel pour chaque cas.
■ Piste : Référez-vous aux types d'algorithmes : SVM, K-Means, Q-Learning.
Q2. Un data scientist reçoit un problème métier : « Prévoir si un client va résilier son
abonnement dans les 30 prochains jours ». Décrivez l'intégralité de la démarche AI Approach,
de la définition du goal jusqu'au choix du modèle. Quels critères déterminent si ML est
réellement nécessaire ici ?
■ Piste : Pensez aux étapes : goal, ML vs non-ML, données disponibles, actions.
Q3. Expliquez la différence fondamentale entre un problème de prédiction (Predictive ML) et
un système d'IA générative. Quand est-il préférable d'opter pour une solution non-ML ?
Q4. Le cours insiste sur la notion « Predictions vs Actions ». Donnez deux exemples concrets
tirés du cours et expliquez pourquoi une prédiction sans action n'a pas de valeur métier.
Q5. Quelles sont les 6 caractéristiques que doivent posséder les données pour un modèle ML
performant selon le cours ? Pour chaque caractéristique, donnez une conséquence concrète
si elle est absente.
■ Piste : Abundant, Consistent, Trusted, Available, Correct, Representative.
Q6. Dans le contexte du projet « Fake Social Media Profile Detection », quels algorithmes ML
ont été utilisés et pourquoi combiner plusieurs modèles ? Quelle est la logique derrière
l'utilisation de LSTM dans ce cas ?
Q7. Analysez le cas d'usage « Prédiction de la vitesse du vent » présenté dans le cours.
Comparez l'approche Linear Regression, Random Forest et DNN : complexité, interprétabilité,
données nécessaires. Lequel privilégieriez-vous et pourquoi ?
PARTIE 2 — SÉLECTION ET CHOIX DES MODÈLES
2.1 Critères de sélection
Q8. Selon le cours, la règle d'or est de 'commencer par le modèle le plus simple'. Expliquez ce
principe en termes de biais-variance et donnez un exemple où un modèle complexe serait
pourtant obligatoire.
Q9. Le cours distingue les données structurées des données non structurées pour orienter le
choix du modèle. Définissez précisément cette distinction et expliquez pourquoi le Deep
Learning est recommandé pour les données non structurées.
Q10. Expliquez la différence entre modèles paramétriques et non-paramétriques selon le
cours. Donnez les 4 exemples de chaque catégorie mentionnés et analysez les implications
sur les hypothèses sur les données.
■ Piste : Paramétrique : LR, LogR, Naïve Bayes, NN. Non-paramétrique : KNN, DT, RF, SVM.
Q11. Pour un dataset de 50 000 exemples avec des variables mixtes (quantitatives +
qualitatives), quel modèle le cours recommande-t-il ? Justifiez en appliquant les 4 Key Tips du
cours.
Q12. Analysez le dilemme « Cost and Maintenance » lors du choix ML vs non-ML. Quand un
petit gain de performance justifie-t-il l'investissement en ML ? Proposez un framework de
décision en 3 questions.
Q13. Comparez Random Forest et SVM sur les dimensions suivantes : type de données
supportées, sensibilité aux outliers, interprétabilité, scalabilité. Dans quel scénario l'un
surpasse-t-il l'autre ?
PARTIE 3 — PRÉTRAITEMENT DES DONNÉES (DATA
PREPROCESSING)
3.1 Nettoyage et transformation
Q14. Décrivez le workflow complet de preprocessing présenté dans le cours. Pour chaque
étape, indiquez l'outil Scikit-Learn correspondant et son impact sur les performances du
modèle.
Q15. Vous avez un dataset avec 15% de valeurs manquantes dans une colonne numérique clé.
Comparez les stratégies : suppression, imputation par moyenne/médiane, imputation par
modèle predictif. Quand choisir chaque approche ?
Q16. Expliquez la différence entre normalisation et standardisation. Donnez les formules
mathématiques, les cas d'usage, et les algorithmes ML qui requièrent absolument l'une ou
l'autre.
■ Piste : Min-Max Scaling vs Z-score. KNN, SVM requièrent normalisation. LR peut bénéficier des deux.
Q17. Le cours présente 4 méthodes de détection des outliers : box plots, Z-score, IQR,
Isolation Forest, Local Outlier Factor. Comparez leurs hypothèses et leurs limites. Quand ML
est-il nécessaire pour détecter les outliers ?
Q18. Définissez le Feature Engineering. Donnez 3 exemples concrets de création de nouvelles
features qui améliorent la performance d'un modèle ML. Comment éviter le data leakage lors
de cette étape ?
Q19. Expliquez la 'Curse of Dimensionality'. Comment la sélection de features permet-elle de
la combattre ? Quel est le lien avec le théorème de Hughes ?
PARTIE 4 — SÉLECTION DE CARACTÉRISTIQUES (FEATURE
SELECTION)
Q20. Le cours classe les méthodes de feature selection en 3 catégories. Nommez-les,
expliquez le principe de chacune et comparez leurs avantages/inconvénients en termes de
complexité computationnelle.
■ Piste : Filter, Wrapper, Embedded Methods.
Q21. Comparez les Filter Methods et les Wrapper Methods selon le cours. Pourquoi les
Wrapper Methods sont-elles plus précises mais moins scalables ? Quel est le rôle de la
validation croisée dans les Wrapper Methods ?
Q22. Pour un projet de classification sur un dataset de 500 000 observations avec 200
features, quelle méthode de feature selection recommandez-vous ? Justifiez en appliquant les
4 critères de choix du cours.
■ Piste : Taille du dataset, type de modèle, interprétabilité, ressources computationnelles.
Q23. Les modèles tree-based (Random Forest, XGBoost) ont des capacités de feature
selection intégrées. Expliquez le mécanisme d'importance des features dans ces modèles et
comment l'utiliser en pratique.
PARTIE 5 — MÉTRIQUES DE PERFORMANCE
5.1 Métriques de classification
Q24. Expliquez le paradoxe de l'accuracy sur un dataset déséquilibré (99% classe A, 1%
classe B). Quel modèle trivial obtient 99% d'accuracy ? Quelle métrique utiliser à la place et
pourquoi ?
Q25. Dans un système de détection de cancer, expliquez pourquoi maximiser le Recall est
prioritaire sur la Precision. Formulez mathématiquement le coût d'un Faux Négatif vs un Faux
Positif dans ce contexte médical.
■ Piste : FN = patient malade non détecté (danger de vie). FP = patient sain classé malade (stress, examens
supplémentaires).
Q26. Démontrez mathématiquement pourquoi le F1-Score est la moyenne harmonique et non
arithmétique de Precision et Recall. Calculez le F1-Score pour : Precision=0.9, Recall=0.1.
Commentez le résultat.
■ Piste : F1 = 2PR/(P+R). Résultat ≈ 0.18, ce qui pénalise le déséquilibre entre P et R.
Q27. Expliquez la courbe ROC et l'AUC. Quelle est la valeur d'AUC d'un modèle aléatoire ?
Comment interpréter une AUC de 0.95 vs 0.60 ? Quel est le lien entre le seuil de classification
et le point sur la courbe ROC ?
Q28. Pour un problème multi-classe (5 classes), construisez une matrice de confusion 5x5
avec des valeurs fictives. Calculez la Precision, le Recall et le F1-Score macro-averaged et
expliquez la différence avec le micro-average.
5.2 Métriques de régression
Q29. Comparez MAE, MSE et RMSE : sensibilité aux outliers, unités, interprétabilité. Pour un
modèle de prévision de prix immobiliers avec quelques transactions aberrantes, quelle
métrique recommandez-vous ? Justifiez.
Q30. Un modèle de régression obtient R²=0.85. Expliquez précisément ce que cela signifie.
Peut-on avoir un R² négatif ? Dans quelles conditions ? Quelle est la relation entre R² et la
corrélation de Pearson pour la régression linéaire simple ?
■ Piste : R² négatif possible si le modèle est pire que la moyenne. R² = r² uniquement en régression linéaire
simple.
Q31. Distinguez R² et R² ajusté. Pourquoi le R² ajusté est-il préférable lors de la comparaison
de modèles avec différents nombres de features ?
5.3 Métriques de clustering
Q32. Expliquez le Silhouette Score : formule, plage de valeurs, interprétation. Que signifie un
score proche de -1 ? Proposez un algorithme pour choisir automatiquement le K optimal dans
K-Means en utilisant cette métrique.
Q33. Comparez le Silhouette Score et l'Indice de Davies-Bouldin comme métriques
d'évaluation du clustering. L'un remplace-t-il l'autre ? Quelles sont leurs hypothèses
respectives sur la forme des clusters ?
PARTIE 6 — VALIDATION CROISÉE
Q34. Expliquez le problème d'overfitting et comment la validation croisée y répond. Pourquoi
la simple division train/test ne suffit-elle pas pour l'évaluation d'un modèle ?
Q35. Comparez exhaustivement les 5 techniques de validation croisée présentées dans le
cours : Holdout, LOOCV, K-Fold, Stratified K-Fold, Repeated K-Fold. Organisez votre réponse
sous forme d'un tableau comparatif.
■ Piste : Critères : biais, variance, temps de calcul, cas d'usage optimal.
Q36. Pourquoi la Stratified K-Fold Cross Validation est-elle indispensable pour les datasets
déséquilibrés ? Que se passerait-il avec une K-Fold standard sur un dataset avec 95% classe
A et 5% classe B ?
Q37. Pour un dataset de 100 exemples, comparez l'application de LOOCV vs K-Fold(k=10).
Calculez le nombre d'entraînements requis pour chaque méthode. Quand LOOCV est-il justifié
malgré son coût computationnel élevé ?
Q38. Expliquez le concept de 'data leakage' dans le contexte de la validation croisée. Donnez 2
exemples concrets de data leakage lors du preprocessing et expliquez comment les éviter
avec les Pipelines Scikit-Learn.
Q39. Selon le tableau comparatif du cours entre K-Fold et Holdout, dans quel scénario précis
le Holdout est-il préférable malgré son biais plus élevé ? Justifiez en termes de ressources
computationnelles.
PARTIE 7 — TUNING DES HYPERPARAMÈTRES
Q40. Distinguez clairement les paramètres d'un modèle ML (appris pendant l'entraînement)
des hyperparamètres (définis avant). Donnez 3 exemples de chaque pour un réseau de
neurones et un Random Forest.
Q41. Comparez les 4 méthodes de tuning présentées dans le cours : Manual, Grid Search,
Random Search, Bayesian Optimization. Pour chaque méthode, définissez le scénario idéal
d'utilisation et ses limites.
Q42. Expliquez le fonctionnement de l'Optimisation Bayésienne en détail : fonction objectif,
modèle surrogate (Gaussian Process), fonction d'acquisition. Pourquoi est-elle plus efficace
que le Random Search pour un espace d'hyperparamètres large ?
■ Piste : Le surrogate évite d'évaluer des régions peu prometteuses de l'espace de recherche.
Q43. Avec un Grid Search sur 3 hyperparamètres ayant respectivement 5, 4 et 3 valeurs, avec
une 5-fold CV : combien d'entraînements sont nécessaires ? Calculez aussi pour un Random
Search avec n_iter=20.
■ Piste : GridSearch : 5×4×3×5 = 300. RandomSearch : 20×5 = 100.
Q44. Expliquez le problème de l'overfitting sur les hyperparamètres (hyperparameter
overfitting). Comment un ensemble de validation indépendant (nested cross-validation)
permet-il d'y remédier ?
Q45. Dans l'exemple pratique GridSearchCV du cours, expliquez l'intérêt d'utiliser un Pipeline
combinant SelectKBest et un classifieur. Quels problèmes de data leakage cela résout-il ?
Q46. Le cours mentionne le 'learning rate scheduling' et 'early stopping' comme méthodes
dynamiques de tuning. Expliquez ces deux techniques et leur impact sur la convergence d'un
réseau de neurones.
PARTIE 8 — SCRIPTING PYTHON (IMPLÉMENTATION)
8.1 Preprocessing avec Scikit-Learn
Q47. Corrigez et améliorez le code suivant pour gérer les valeurs manquantes de façon
appropriée :
from [Link] import Imputer imp = Imputer(missing_values=0,
strategy='mean', axis=0) imp.fit_transform(X_train) # Le modèle est ensuite appliqué
directement sur X_test sans transformation
Identifiez les 3 erreurs et proposez une version corrigée avec SimpleImputer (API moderne) en utilisant
un Pipeline.
Q48. Écrivez un script complet de preprocessing pour un dataset mixte (numérique +
catégoriel) incluant : imputation, encodage One-Hot, standardisation. Utilisez
ColumnTransformer et Pipeline.
# Structure attendue : from [Link] import Pipeline from [Link]
import ColumnTransformer from [Link] import StandardScaler,
OneHotEncoder from [Link] import SimpleImputer # ... complétez le code
Q49. Analysez ce code de normalisation et identifiez le data leakage :
scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Tout le dataset
X_train, X_test = train_test_split(X_scaled, test_size=0.2) [Link](X_train,
y_train) score = [Link](X_test, y_test)
Expliquez le problème et écrivez la version corrigée.
Q50. Écrivez un script Python pour détecter et traiter les outliers en utilisant la méthode
Z-Score et IQR sur un DataFrame pandas. Comparez les résultats des deux méthodes.
import pandas as pd import numpy as np # Méthode 1 : Z-Score # Méthode 2 : IQR #
Visualisation avec boxplot # ... complétez
8.2 Validation croisée — Scripts
Q51. Le code suivant implémente une K-Fold CV. Identifiez les problèmes et réécrivez-le
correctement :
from sklearn.model_selection import KFold from [Link] import SVC kf =
KFold(n_splits=5) model = SVC() for train_idx, test_idx in [Link](X):
[Link](X[train_idx], y[train_idx]) score = [Link](X[test_idx], y[test_idx])
print('Score final :', score) # Affiche seulement le dernier fold
Proposez une implémentation correcte avec calcul de la moyenne et l'écart-type des scores.
Q52. Écrivez un script complet implémentant une Stratified K-Fold Cross-Validation sur le
dataset Iris, avec affichage des métriques (accuracy, precision, recall, F1) pour chaque fold et
les statistiques globales.
from [Link] import load_iris from sklearn.model_selection import
StratifiedKFold, cross_validate from [Link] import RandomForestClassifier #
... implémentez la CV stratifiée avec 5 folds # Affichez : mean +/- std pour chaque
métrique
Q53. Implémentez une Nested Cross-Validation pour éviter l'overfitting sur les
hyperparamètres. Utilisez une outer loop (5 folds pour l'évaluation) et une inner loop (3 folds
pour le tuning) avec GridSearchCV.
from sklearn.model_selection import cross_val_score, GridSearchCV, KFold # Outer CV :
évaluation du modèle final outer_cv = KFold(n_splits=5) # Inner CV : sélection des
hyperparamètres inner_cv = KFold(n_splits=3) # param_grid = {...} # ... complétez la
nested CV
8.3 Hyperparameter Tuning — Scripts
Q54. Analysez ce script GridSearchCV et calculez manuellement le nombre d'entraînements.
Expliquez ensuite comment l'optimiser avec RandomizedSearchCV :
from sklearn.model_selection import GridSearchCV from [Link] import
RandomForestClassifier param_grid = { 'n_estimators': [50, 100, 200, 500],
'max_depth': [None, 5, 10, 20], 'min_samples_split': [2, 5, 10], 'max_features':
['sqrt', 'log2'] } grid_search = GridSearchCV(RandomForestClassifier(), param_grid,
cv=10) grid_search.fit(X_train, y_train)
Nombre d'entraînements : ___ × cv = ___. Réécrivez avec RandomizedSearchCV (n_iter=50).
Q55. Implémentez une optimisation Bayésienne avec Optuna pour un Random Forest. Le
script doit : définir une fonction objective, utiliser un study Optuna, afficher les meilleurs
hyperparamètres et visualiser l'historique des essais.
import optuna from [Link] import RandomForestClassifier from
sklearn.model_selection import cross_val_score def objective(trial): # Définir
l'espace de recherche n_estimators = trial.suggest_int('n_estimators', 10, 300)
max_depth = trial.suggest_int('max_depth', 2, 32) # ... complétez return # accuracy
CV study = optuna.create_study(direction='maximize') [Link](objective,
n_trials=100)
Q56. Écrivez un script complet Pipeline + GridSearchCV combinant feature selection
(SelectKBest) et classification (SVM) comme vu dans le cours. Incluez : définition du pipeline,
du param_grid, exécution de la recherche, affichage des meilleurs paramètres et évaluation
finale.
from [Link] import Pipeline from sklearn.feature_selection import
SelectKBest, f_classif from [Link] import SVC from sklearn.model_selection
import GridSearchCV, train_test_split from [Link] import load_breast_cancer
# Étape 1 : Charger les données # Étape 2 : Définir le Pipeline # Étape 3 : Définir
param_grid # Étape 4 : GridSearchCV avec cv=5 # Étape 5 : Évaluation et rapport
8.4 Métriques de performance — Scripts
Q57. Écrivez un script Python complet pour calculer et visualiser toutes les métriques de
classification vues dans le cours (accuracy, precision, recall, F1, AUC-ROC, matrice de
confusion) sur le dataset breast_cancer.
import [Link] as plt from [Link] import (accuracy_score,
precision_score, recall_score, f1_score, roc_auc_score, roc_curve, confusion_matrix,
ConfusionMatrixDisplay) # ... script complet avec graphiques
Q58. Implémentez la comparaison de plusieurs modèles (Logistic Regression, Random
Forest, SVM, KNN) sur un même dataset en utilisant cross_validate avec plusieurs métriques
simultanées. Affichez un tableau comparatif formaté.
from sklearn.model_selection import cross_validate scoring = ['accuracy',
'precision_weighted', 'recall_weighted', 'f1_weighted', 'roc_auc_ovr_weighted']
models = { 'LR': LogisticRegression(), 'RF': RandomForestClassifier(), 'SVM':
SVC(probability=True), 'KNN': KNeighborsClassifier() } # ... boucle de comparaison et
affichage
Q59. Écrivez un script Python pour calculer les métriques de régression (MAE, MSE, RMSE,
R²) et affichez une interprétation automatique selon des seuils définis. Appliquez-le sur un
dataset de régression de votre choix.
from [Link] import mean_absolute_error, mean_squared_error, r2_score import
numpy as np def evaluate_regression(y_true, y_pred, dataset_name=''): mae =
mean_absolute_error(y_true, y_pred) mse = mean_squared_error(y_true, y_pred) rmse =
[Link](mse) r2 = r2_score(y_true, y_pred) # ... affichage formaté + interprétation
automatique return {'MAE': mae, 'MSE': mse, 'RMSE': rmse, 'R2': r2}
8.5 End-to-End Pipeline complet
Q60. Implémentez un pipeline ML complet end-to-end incluant : chargement des données,
preprocessing (imputation, encodage, normalisation), feature selection, entraînement avec
GridSearchCV, évaluation avec cross-validation, et sauvegarde du modèle final avec
joblib/pickle.
# Pipeline complet à implémenter : # 1. Chargement et exploration # 2. Séparation
train/test (stratifiée) # 3. ColumnTransformer (num + cat) # 4. Pipeline final :
preprocess + SelectKBest + Classifier # 5. GridSearchCV avec scoring='f1_weighted' #
6. Rapport de classification final # 7. Sauvegarde : [Link](best_model,
'[Link]') import joblib from [Link] import Pipeline # ... complétez
PARTIE 9 — SYNTHÈSE ET ANALYSE CRITIQUE
Q61. Le cours présente CNN pour l'extraction de features d'empreintes digitales. Pourquoi
CNN est-il particulièrement adapté aux données image ? Comparez avec les méthodes
conventionnelles présentées dans ce cas d'usage.
Q62. Décrivez un scénario complet de projet ML de A à Z : définition du problème, collecte des
données, preprocessing, choix du modèle, tuning, évaluation et déploiement. Utilisez
l'exemple de la détection de profils fake sur les réseaux sociaux.
Q63. Un modèle obtient 98% d'accuracy mais un F1-Score de 0.45. Expliquez comment cela
est possible et ce que cela révèle sur le dataset et le modèle. Quelles actions correctives
proposez-vous ?
Q64. Vous avez entraîné un modèle avec un score de validation de 95% mais il ne performe
qu'à 60% en production. Listez les 5 causes possibles (en lien avec le cours) et les solutions
correspondantes.
■ Piste : Data leakage, distribution shift, overfitting, features non disponibles, outliers de production.
Q65. Rédigez un rapport d'analyse comparant Grid Search et Bayesian Optimization sur un
même problème de classification. Définissez les critères d'évaluation, la méthodologie, et les
conclusions attendues.
Total : 65 Questions Parties : 9 Niveau : Avancé (Bac+4/5)
Couvre 100% du cours Scripting : 14 questions Prof. Abdellah TAHIRI, Ph.D.