Plusieurs modèles, données disjointes

On cherche à prédire la note d'un vin mais on suppose que cette qualité est dépendante de la couleur et qu'il faudrait appliquer des modèles différents selon la couleur.

données

version manuelle

On cale d'abord un modèle linéaire sur toute la base.

Et maintenant on essaye de caler un modèle différent selon les couleurs.

Il faut agréger pour obtenir les performances sur la base complète.

C'est un petit peu mieux mais l'ensemble est compliqué à mettre en place. Il serait plus simple d'automatiser pour pouvoir faire de la validation croisée.

Automatisation

Au début, j'avais pensé écrire une classe inspirée de l'API de scikit-learn qui apprend plusieurs modèles selon une catégorie indiquée lors de l'apprentissage et de la prédiction.

Mais à moins de changer l'interface des pipeline, il n'y aucun chance pour que cette classe puisse en faire partie. J'ai donc opté pour le design suivant même s'il ne me plaît que moyennement parce qu'il faut gérer plusieurs containers différents (numpy, pandas, ...)

Bref, ça marche...

Exemple sur un jeu articificiel

Comme ce n'est pas très probant... Essayons de vérifier que l'implémentation est correcte en fabriquant un jeu de données où cela doit marcher.

On apprend une régression linéaire.

Le jeu a été construit pour échouer. Voyons avec les couleurs.

L'implémentation fonctionne. Donc cela n'ajoute rien de caler un modèle différent sur vins rouges et blancs s'il est linéaire. Essaysons avec un autre.

C'est légèrement mieux mais cela varie dès qu'on exécute plusieurs fois. A vérifier avec une validation croisée.

Ici cela n'apporte rien du tout.