Courte introduction au machine learning

Le jeu de données Wine Quality Data Set recense les composants chimiques de vins ainsi que la note d'experts. Peut-on prédire cette note à partir des composants chimiques ? Peut-être que si on arrive à construire une fonction qui permet de prédire cette note, on pourra comprendre comment l'expert note les vins.

Données et première régression linéaire

On peut utiliser la fonction implémentée dans ce module.

Ou on peut aussi récupérer les données depuis le site et former les mêmes données.

J'ai tendance à utiliser df partout quitte à ce que le premier soit écrasé. Conservons-le dans une variable à part.

Quelle est la distribution des notes ?

Les notes pour les blancs et les rouges.

On construit le jeu de données. D'un côté, ce qu'on sait - les features X -, d'un autre ce qu'on cherche à prédire.

On divise en apprentissage / test puisqu'il est de coutume d'apprendre sur des données et de vérifier les prédictions sur un autre.

On cale un premier modèle, une régression linéaire.

On récupère les coefficients.

Puis on calcule le coefficient $R^2$.

Ou l'erreur moyenne en valeur absolue.

Le modèle se trompe en moyenne d'un demi-point pour la note.

Arbre de régression

Voyons ce qu'un arbre de régression peut faire.

L'arbre de régression révèle l'intérêt d'avoir une base d'apprentissage et de test puisque ce modèle peut répliquer à l'identique les données sur lequel le modèle a été estimé. A contrario, sur la base de test, les performances en prédiction sont plutôt mauvaise.

Pour éviter cela, on joue avec le paramètre min_smaple_leaf. Il signifie qu'une prédiction de l'arbre de régression est une moyenne d'au moins min_sample_leaf notes tirées de le base d'apprentissage. Il y a beaucoup moins de chance que cela aboutisse à du sur apprentissage.

On voit que la performance sur la base de test augmente rapidement puis stagne sans jamais rattraper celle de la base d'apprentissage. Elle ne dépasse pas celle d'un modèle linéaire ce qui est décevant. Essayons avec une forêt aléatoire.

Forêt aléatoire

A l'inverse de l'arbre de régression, la forêt aléatoire est meilleure lorsque ce paramètre est petit. Une forêt est une moyenne de modèle, chacun appris sur un sous-échantillon du jeu de données initiale. Même si un arbre apprend par coeur, il est peu probable que son voisin ait appris le même sous-échantillon. En faisant la moyenne, on fait un compromis.

Validation croisée

Il reste à vérifier que le modèle est robuste. C'est l'objet de la validation croisée qui découpe le jeu de données en 5 parties, apprend sur 4, teste une 1 puis recommence 5 fois en faisant varier la partie qui sert à tester.

Ce résultat doit vous interrompre car les performances sont loin d'être stables. Deux options : soit le modèle n'est pas robuste, soit la méthodologie est fausse quelque part. Comme le problème est assez simple, il est probable que ce soit la seconde option : la jeu de données est triée. Les vins rouges d'abord, les blancs ensuite. Il est possible que la validation croisée estime un modèle sur des vins rouges et l'appliquent à des vins blancs. Cela ne marche pas visiblement. Cela veut dire aussi que les vins blancs et rouges sont très différents et que la couleur est probablement une information redondante avec les autres. Mélangeons les données au hasard.

Beaucoup mieux. On peut faire comme ça aussi.

Pipeline

On peut caler un modèle après une ACP mais il faut bien se souvenir de toutes les étapes intermédiaires avant de prédire avec le modèle final.

Ou alors on utilise le concept de pipeline qui permet d'assembler les prétraitements et le modèle prédictif sous la forme d'une séquence de traitement qui devient le modèle unique.

Grille de recherche

De cette façon, on peut chercher simplement les meilleurs hyperparamètres du modèle.

Ce nombre paraît beaucoup trop beau pour être vrai. Cela signifie sans doute que les données de test ont été utilisés pour effectuer la recherche.

Nettement plus plausible.

Enregistrer, restaurer

Le moyen le plus simple de conserver les modèles en python est de les sérialiser : on copie la mémoire sur disque puis on la restaure plus tard.

Prédiction de la couleur

Le fait que la première validation croisée échoue était un signe que la couleur était facilement prévisible. Vérifions.

La matrice de confusion est plutôt explicite.