Qu'est-ce que le machine learning ?

Première leçon du cours Introduction au machine learning (scikit-learn), en accès libre : environ 15 minutes, 3 exercices et 3 questions de quiz. C'est la leçon de base du catalogue ; dans l'espace étudiant, elle est réécrite pour ton profil.

Objectifs

  • Distinguer apprentissage supervisé et non supervisé
  • Identifier les features (X) et la cible (y) dans un jeu de données
  • Reconnaître un problème de régression et un problème de classification

Machine learningFeatures et variable cibleTypes d'apprentissage

En programmation classique, vous écrivez les règles : « si le montant dépasse 1 000 € et que le pays est inhabituel, alors signaler la transaction ». En machine learning (apprentissage automatique), vous fournissez des exemples et un algorithme apprend la règle à partir des données. C’est utile quand les règles sont trop nombreuses, trop floues ou changent avec le temps.

Le vocabulaire de base

  • Échantillon (ou observation) : une ligne du tableau, par exemple un client ou une fleur.
  • Feature (variable explicative) : une colonne utilisée pour prédire, par exemple l’âge ou la longueur d’un pétale.
  • Cible (target, label) : ce que l’on veut prédire, par exemple « a résilié » ou « prix ».
  • Modèle : la fonction apprise qui relie les features à la cible.

Dans scikit-learn, on note X la matrice des features, de forme (n_échantillons, n_features), et y le vecteur cible, de forme (n_échantillons,).

Supervisé ou non supervisé ?

  • Supervisé : chaque exemple possède une cible connue. Le modèle apprend à la prédire pour de nouveaux exemples.
    • Classification : la cible est une catégorie (spam / pas spam, espèce de fleur).
    • Régression : la cible est un nombre continu (prix d’un appartement, chiffre d’affaires).
  • Non supervisé : pas de cible. On cherche une structure dans les données : groupes de clients similaires (clustering), compression de l’information (réduction de dimension).

Un premier jeu de données

scikit-learn fournit des jeux intégrés, disponibles sans connexion internet. Le plus célèbre est Iris : 150 fleurs décrites par 4 mesures, réparties en 3 espèces.

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data          # tableau numpy 2D : 150 lignes, 4 colonnes
y = iris.target        # tableau numpy 1D : 150 valeurs (0, 1 ou 2)

print(X.shape)               # (150, 4)
print(y.shape)               # (150,)
print(iris.feature_names)    # noms des 4 features
print(iris.target_names)     # ['setosa' 'versicolor' 'virginica']

Vous pouvez aussi obtenir un DataFrame pandas, plus pratique pour explorer :

iris_df = load_iris(as_frame=True)
df = iris_df.frame               # features + colonne 'target'
print(df.head())
X = df.drop(columns="target")   # X : DataFrame 2D
y = df["target"]                # y : Series 1D

Ici la cible est une espèce : c’est donc un problème de classification supervisée à 3 classes.

Ce qu’il faut retenir

Avant d’écrire la moindre ligne de modèle, posez-vous trois questions : quelle est ma cible ? est-elle catégorielle ou numérique ? de quelles features je dispose au moment de la prédiction ? Cette dernière question est essentielle : une feature qui n’existe qu’après l’événement à prédire (par exemple la date de résiliation pour prédire la résiliation) fausse complètement le modèle. On parle de fuite de données (data leakage), et nous y reviendrons tout au long du parcours.

Exercices

Les solutions et les tests restent sur le serveur. Dans l'espace étudiant, ton code est exécuté et corrigé, et le tuteur donne des indices avant la solution.

  1. CodeDifficulté 1Python dans le navigateur2 indices

    Extraire X et y du jeu Iris

    Chargez le jeu Iris avec load_iris(as_frame=True). Créez X, un DataFrame contenant uniquement les 4 features, et y, la Series de la colonne target. Stockez ensuite le nombre d’échantillons dans n_echantillons et le nombre de features dans n_features.

    from sklearn.datasets import load_iris
    
    df = load_iris(as_frame=True).frame
    X = ...
    y = ...
    n_echantillons = ...
    n_features = ...
  2. CodeDifficulté 1Python dans le navigateur2 indices

    Classer des problèmes

    Complétez le dictionnaire types en associant à chaque problème la valeur 'classification', 'regression' ou 'non_supervise'.

    types = {
        "prix_appartement": ...,        # prédire le prix en euros
        "email_spam": ...,              # spam ou non spam
        "groupes_clients": ...,         # trouver des groupes sans étiquette
        "temperature_demain": ...,      # prédire une température
        "espece_fleur": ...,            # setosa, versicolor ou virginica
    }
  3. QCMDifficulté 11 indice

    Forme de X

    Dans scikit-learn, quelle forme doit avoir la matrice X pour 200 clients décrits par 5 variables ?

    • (200, 5)
    • (5, 200)
    • (200,)
    • (1000,)

Quiz de fin de leçon

  1. Prédire si un client va résilier son abonnement (oui/non) est un problème de :

    • Régression
    • Classification
    • Clustering
    • Réduction de dimension
  2. Quelle est la différence principale entre supervisé et non supervisé ?

    • Le supervisé utilise plus de données
    • Le non supervisé n'a pas de variable cible
    • Le supervisé n'utilise pas de features
    • Le non supervisé est toujours plus précis
  3. Pourquoi ne faut-il pas utiliser la ‘date de résiliation’ comme feature pour prédire la résiliation ?

    • Parce que les dates sont interdites dans scikit-learn
    • Parce que c'est une fuite de données : l'information n'existe qu'après l'événement
    • Parce qu'elle prend trop de mémoire
    • Parce qu'elle est catégorielle

La suite du cours

  1. L'API des estimateurs : fit, predict, score15 min
  2. Séparer entraînement et test15 min
  3. Prétraitement : mise à l'échelle des données15 min
  4. Pipelines et premier workflow complet20 min

Introduction au machine learning (scikit-learn) · Intermédiaire · 2 h 20