Partie 1 – Introduction au Machine Learning et exploration des données
Et si on pouvait annoncer le prix d'une course avant même de monter dans le taxi ? Comment Uber fait-il ?
Programmer ou apprendre ?
Section intitulée « Programmer ou apprendre ? »Programmation classique Machine Learning
Règles ──┐ Données ──┐ ├──► Programme ──► Réponses ├──► Apprentissage ──► Modèle (= les règles) Données ──┘ Réponses ──┘Essayez d’écrire à la main la règle du tarif d’un taxi new-yorkais : 3 $ de prise en charge, 3,50 $ par mile… sauf JFK (forfait 70 $), sauf la nuit, sauf les péages, sauf les embouteillages, sauf… La règle explose. Avec le ML, on montre 120 000 courses avec leur prix et l’algorithme trouve les règles tout seul, exceptions comprises.
Trois idées à garder :
- Un modèle est une fonction apprise à partir d’exemples.
- Il ne « comprend » pas : il repère des régularités statistiques.
- Il n’est jamais meilleur que ses données (garbage in, garbage out).
🔍 Vulgarisation : Comment l'algorithme « devine » la formule du prix sans qu'on la lui programme ?
Prenons 3 courses toutes simples dont on connaît la distance ($x$) et le prix ($y$) :
- Course 1 : 2 miles ➔ 10 $
- Course 2 : 4 miles ➔ 17 $
- Course 3 : 6 miles ➔ 24 $
En programmation classique, un expert doit vous donner la formule : $\text{Prix} = 3 + 3,5 \times \text{distance}$.
En Machine Learning (régression linéaire), l’algorithme part d’une formule au hasard $\text{Prix} = a + b \times \text{distance}$ (par exemple $a=0, b=1$) :
- Itération 1 : il prédit $2$, 4$, 6$$ au lieu de $10$, 17$, 24$$. L’erreur moyenne est énorme ! Il ajuste $a$ et $b$ vers le haut (en lisant les données en RAM).
- Itération 2, 3… 20 : à chaque tour sur les données en mémoire, il réduit l’écart entre sa prédiction et le vrai tarif (descente de gradient).
- Résultat final : il converge tout seul vers $a = 3,0$$ (prise en charge) et $b = 3,50$$/mile ! Et c’est exactement parce que cet entraînement nécessite 10 à 50 passes successives sur les mêmes lignes que Spark en RAM est jusqu’à 100× plus rapide que MapReduce sur disque.
Supervisé ou non supervisé ?
Section intitulée « Supervisé ou non supervisé ? »| Supervisé : on connaît la réponse | Non supervisé : on cherche une structure | |
|---|---|---|
| Données | Des exemples avec une étiquette (le label) | Des données sans étiquette |
| Questions | Régression : prédire un nombre (le montant d’une course). Classification : prédire une catégorie (pourboire oui / non) | Clustering : regrouper ce qui se ressemble (des familles de courses) |
| Algorithmes | Régression linéaire, arbres, Random Forest, SVM | K-means |
| Usages | Prix, risque, churn, diagnostic | Segmentation de clients, détection d’anomalies |
| Analogie | Apprendre avec un professeur qui corrige | Trier une boîte de photos sans légende |
Sur le fil rouge : régression au TP 6, classification au TP 7, clustering au TP 8.
Le cycle d’un projet de Machine Learning
Section intitulée « Le cycle d’un projet de Machine Learning » 1. Question métier → 2. Explorer → 3. Préparer les features → 4. Entraîner → 5. Évaluer → 6. Déployer ▲ │ └───────────────────── on itère ────────────────────────┘Un data scientist passe l’essentiel de son temps sur les étapes 2 et 3, souvent 80 %, pas à entraîner.
| Mot | Définition | Sur le fil rouge |
|---|---|---|
| Features | Les variables d’entrée, connues au moment de prédire | distance, heure, zone, passagers |
| Label | Ce que l’on veut prédire | fare_amount, pourboire oui / non |
| Train / test | 80 % pour apprendre, 20 % pour juger. Jamais mélangés | randomSplit([0.8, 0.2], seed=42) |
| Sur-apprentissage | Le modèle apprend par cœur : excellent en train, mauvais en test | L’élève qui apprend les corrigés par cœur et échoue dès que l’énoncé change |
🔍 Vulgarisation : Le sur-apprentissage (Overfitting), ou l'étudiant qui apprend les corrigés par cœur
Imaginez deux étudiants qui préparent un examen de mathématiques :
- L’étudiant A (bon modèle qui généralise) fait les 80 exercices d’entraînement (
train) en comprenant la méthode. Le jour de l’examen, sur 20 exercices nouveaux (test), il obtient 17/20. - L’étudiant B (modèle en sur-apprentissage / Overfitting, ex. arbre avec
maxDepth=30) a une mémoire photographique : il apprend par cœur « Exercice page 12, si le taxi part à 8h14 avec 2 passagers sous la pluie = 23,40 $ ».- Sur les 80 exercices d’entraînement (
train), il a 20/20 (99 % de réussite) ! - Mais le jour de l’examen (
test), l’heure est 8h15 au lieu de 8h14 : il est perdu et obtient 11/20 (60 %).
- Sur les 80 exercices d’entraînement (
Règle d’or : un score de 99 % sur le jeu d’entraînement (train) ne prouve rien. Seul le score sur les 20 % de test (jamais vus pendant le .fit()) mesure la vraie valeur de votre modèle.
Activité : quel type de problème ?
Section intitulée « Activité : quel type de problème ? »En binômes, puis vote à main levée : R = régression, C = classification, G = groupement (clustering).
1. Estimer la durée d'une course
Régression : un nombre de minutes.2. Repérer les courses au montant anormal
Ça dépend. Avec des exemples de fraudes étiquetées : classification. Sans : non supervisé (détection d'anomalies, clustering). La nature des données décide, pas la question.3. Prédire si un client paiera par carte
Classification : carte ou espèces.4. Regrouper les zones selon leur activité horaire
Clustering : pas d'étiquette, on cherche des groupes.5. Prévoir le nombre de courses demain à 18h
Régression : une série temporelle, que l'on retrouvera demain avec le streaming.6. Dire à un chauffeur où attendre ses clients
Pas un seul modèle : une régression de la demande par zone et par heure, puis une règle métier. La réalité combine souvent plusieurs briques.Visualiser avant de modéliser
Section intitulée « Visualiser avant de modéliser »Deux graphiques réels du fil rouge guident toute la journée :
- Le nuage tarif selon la distance montre une ligne horizontale à 70 $ : le forfait JFK. Une droite ne le verra pas ; un arbre, si.
- La heatmap courses par jour et par heure montre deux pics, 8h et 18h : l’heure sera une bonne feature.
Spark agrège ou échantillonne toPandas() Bibliothèque Python groupBy, sample ──► quelques milliers ──► le graphique des millions de lignes de lignes🧮 Calcul de mémoire : Pourquoi df.toPandas() fait planter le Driver en 3 secondes sur un gros volume ?
Sur un cluster de 10 machines Workers (ayant chacune 32 Go de RAM, soit 320 Go au total), vous manipulez une table de 50 Go sans difficulté car chaque machine n’en porte que 5 Go.
Mais votre Driver (le processus qui exécute votre notebook Jupyter) tourne sur une seule machine avec souvent 4 à 8 Go de RAM :
- Si vous écrivez
df.toPandas()directement sur les 50 Go : vous ordonnez aux 10 Workers d’envoyer leurs 50 Go à travers le réseau dans la mémoire de l’unique Driver →java.lang.OutOfMemoryError: Java heap spaceimmédiat ! - Si vous écrivez d’abord
df.groupBy("heure").count().toPandas(): les 10 Workers calculent les totaux sur les 50 Go en parallèle et n’envoient au Driver qu’un tableau de 24 lignes (une par heure, moins de 2 Ko) ! Matplotlib l’affiche en 10 millisecondes.
| Bibliothèque | Usage |
|---|---|
| Matplotlib | La base, statique |
| Seaborn | Statistique, beau par défaut |
| Plotly | Interactif, web |
| Bokeh | Interactif, tableaux de bord |
Matplotlib et Seaborn pour l’analyse ; Plotly et Bokeh quand on veut zoomer, survoler ou publier un tableau de bord.
À vous de jouer
Section intitulée « À vous de jouer »TP 5 – Explorer avant de prédire (35 min) : quatre graphiques, trois observations qui guideront nos modèles.
Ensuite, pause de 15 minutes, puis la partie 2 : notre premier modèle.
Dépôt des participants : formations2026/formation-spark-ml (branche participants)
Contenu pédagogique © Ambient IT · 140 Avenue Jean Lolive, 93500 Pantin · formation@ambient-it.net · +33 (0)1 48 10 09 46
Organisme de formation enregistré sous le numéro 11 75 54743 75. Cet enregistrement ne vaut pas agrément de l'État.