Accueil / Factory / Algos ML / k plus proches voisins — factory / algos ML / apprentissage supervisé

K PLUS PROCHES VOISINS.

Pour prédire un cas nouveau, on cherche les k cas passés les plus ressemblants et on reprend leur réponse : vote pour une classe, moyenne pour un chiffre. Aucun modèle à entraîner, seulement une distance à bien définir. C'est la méthode des comparables, rendue automatique.

ClassificationRégressionMéthode des comparablesDistanceNiveau : débutant

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceHonnête sur peu de variables, décroche quand elles sont nombreuses
InterprétabilitéChaque prédiction s'appuie sur des cas réels que l'on peut montrer
VitessePas d'entraînement, mais chaque prédiction parcourt la base
Facilité de réglageUn seul vrai réglage, k, à choisir par validation croisée
Tolérance aux données brutesMise à l'échelle obligatoire, sensible aux variables inutiles
EN 30 SECONDES

Un agent immobilier estime un appartement en regardant les ventes récentes de biens similaires dans le quartier.

1. On met les variables à la même échelle

Sans cela, une surface en m² (des centaines) écraserait un nombre de concurrents (quelques unités) dans le calcul de distance.

2. On cherche les k cas les plus proches

Pour le nouveau cas, on calcule sa distance à tous les cas connus, en général la distance euclidienne, et on garde les k plus petits.

3. On reprend leur réponse

En régression, la moyenne de leurs valeurs ; en classification, la classe majoritaire. On peut pondérer par la distance pour donner plus de poids aux plus proches.

LE CAS MÉTIER

réseau de magasins · distribution / franchise / immobilier commercial
EN ENTRÉE

Les magasins existants

Surface, budget publicitaire, nombre de concurrents, zone (centre-ville, périphérie, rural) et chiffre d'affaires annuel. Plus les caractéristiques d'un projet d'ouverture.

EN SORTIE

Un CA estimé et ses comparables

Le modèle propose un chiffre d'affaires et la liste des magasins qui ont servi à l'estimer. Le comité d'investissement peut discuter chaque comparable, ce qu'aucune formule ne permet.

CE QU'ON MESURE

L'erreur moyenne en k€

On mesure l'écart moyen entre CA estimé et CA réel sur des magasins mis de côté. Sur le jeu d'exemple, k = 1 donne l'erreur la plus forte ; k = 10 fait mieux que k = 5 et que k = 20.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Estimation par comparables : magasins, biens immobiliers, profils clients
  • Peu de variables, toutes pertinentes et bien mises à l'échelle
  • Besoin de justifier une prédiction par des exemples concrets
  • Données qui changent souvent : il suffit d'ajouter les nouveaux cas

NON

  • Relation simple et régulière : sur ce jeu, où le CA suit presque une droite, une régression linéaire fait mieux
  • Des dizaines de variables : les distances perdent leur sens, préférer une Random Forest
  • Prédictions en masse et en temps réel sur des millions de lignes : trop lent sans index spécialisé
  • Cas hors du champ observé : k-NN n'extrapole pas au-delà des magasins connus
LES 3 RÉGLAGES QUI COMPTENT

Noms donnés pour R (FNN) et Python (scikit-learn).

k / n_neighbors

Nombre de voisins consultés. Trop petit, la prédiction suit le bruit d'un seul cas ; trop grand, elle se rapproche de la moyenne générale. Se choisit par validation croisée.

Mise à l'échelle : scale / StandardScaler

Centrer et réduire chaque variable avant tout calcul de distance, avec les paramètres calculés sur l'entraînement seulement.

weights

Pondération des voisins. "uniform" donne le même poids à tous, "distance" favorise les plus proches. FNN ne propose que la moyenne simple ; le package kknn permet la pondération.

LE CODE MINIMAL

jeu d'exemple : magasins.csv ↓
# CA d'un projet de magasin : k plus proches voisins en R
library(FNN)

magasins <- read.csv("magasins.csv")
X <- model.matrix(~ surface_m2 + budget_pub_k + nb_concurrents + zone, data = magasins)[, -1]

set.seed(42)
idx <- sample(nrow(magasins), 300)
# Mise à l'échelle avec les paramètres de l'entraînement
X_train <- scale(X[idx, ])
X_test <- scale(X[-idx, ], center = attr(X_train, "scaled:center"), scale = attr(X_train, "scaled:scale"))
y_train <- magasins$ca_k[idx]
y_test <- magasins$ca_k[-idx]

for (k in c(1, 5, 10, 20)) {
  pred <- knn.reg(train = X_train, test = X_test, y = y_train, k = k)$pred
  cat("k =", k, "| erreur moyenne (k€) :", round(mean(abs(pred - y_test)), 1), "\n")
}

# Les 10 magasins comparables du premier projet du jeu de test
voisins <- get.knnx(X_train, X_test[1, , drop = FALSE], k = 10)$nn.index
print(magasins[idx[voisins[1, ]], c("surface_m2", "budget_pub_k", "zone", "ca_k")])

QUESTIONS FRÉQUENTES

Comment choisir k dans l'algorithme des k plus proches voisins ?

Par validation croisée : on teste plusieurs valeurs et on garde celle qui minimise l'erreur sur des données non vues. Un k petit colle aux cas individuels, un k grand lisse vers la moyenne. En classification binaire, un k impair évite les égalités de vote.

Faut-il normaliser les données pour un k-NN ?

Oui, toujours. La distance additionne les écarts de toutes les variables : une variable exprimée en milliers domine celles exprimées en unités. On centre et on réduit chaque variable, avec les paramètres de l'entraînement.

Pourquoi dit-on que le k-NN n'a pas d'entraînement ?

Il ne construit aucun modèle : il garde les données telles quelles et fait tout le calcul au moment de la prédiction. L'entraînement est instantané, mais chaque prédiction doit comparer le nouveau cas à toute la base, ce qui devient lent sur de gros volumes.

LES ALGOS VOISINS

à comparer avant de choisir
la référence à battre

Régression linéaire

Une formule au lieu de comparables. Meilleure quand la relation est régulière, et elle extrapole.

Voir la fiche →
plus robuste

Random Forest

Choisit seule les variables utiles et n'a pas besoin de mise à l'échelle.

Voir la fiche →
le même principe, en recommandation

Filtrage collaboratif

Trouver les clients aux goûts proches pour recommander ce qu'ils ont aimé.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →