Extraction de connaissances à partir de données structurées et non structurées

Séance 6 : Modélisation supervisée via régression

Utilisation de python

Librairies utilisées

Toujours dans le module sklearn, et particulièrement le sous-module linear_model

Données utilisées

Données wine

Données adult

Régression linéaire

Pour cela, nous allons utiliser les données wine.

Réalisation simple

La fonction LinearRegression() (ainsi que LogisticRegression()) nécessite de séparer la variable à prédire et les variables explicatives. Pour cela, nous créons ici 2 objets :

Réalisation avec un modèle à 3 variables

Prédiction

On peut obtenir les prédictions sur les données d'apprentissage avec la fonction predict(). Bien évidémment, si on veut prédire sur d'autres données, on pourra utiliser la même fonction.

On peut ainsi croiser les données observées (en abcisses ici) et les valeurs prédites (en ordonnées donc).

Régression logisitique

Ici nous allons utiliser les données adult, dans lesquelles nous allons n'utiliser que certaines variables.

Réalisation

Pour la régression logisitique, nous allons devoir créer un encodage disjonctif complet (aussi appelé one-hot encoding) des variables qualitatives. Par exemple, d'une variable à 2 modalités, nous allons créer 2 variables binaires. Pour cela, nous avons besoin de la fonction OneHotEncoder() du sous-module preprocessing.

Voici un petit exemple de comment elle fonctionne

Pour créer reformater notre jeu de données, nous appliquons cela sur l'ensemble des variables qualitatives explicatives. Et à chaque fois, nous concaténons le résultat aux variables quantitatives.

Nous pouvons maintenant créer notre modèle.

Prédiction

On peut obtenir les prédictions sur les données d'apprentissage avec la fonction predict(). Bien évidémment, si on veut prédire sur d'autres données, on pourra utiliser la même fonction.

Nous avons aussi accès aux probabilités de prévision pour chaque individu.

On peut ainsi croiser les données observées (en colonnes ici) et les valeurs prédites (en lignes donc).

Courbes et critères de qualité

ROC

Precision/Recall

Exercice

Nous allons sur des données de détection de spam (assez anciennes pour information), disponible sur cette page.

Comme vous pouvez le voir, ces données n'ont pas de noms de variables. Ceux-ci sont disponibles dans un fichier spambase.names (cf page web des données), à partir de la ligne 34. Nous les importons donc, pour les ajouter à notre DataFrame.

On ajoute la variable spam qui indique si le mail est un spam (1) ou non (0). Et on a au final notre DataFrame correctement configuré.

A faire

Vous devez donc réaliser les étapes suivantes :

On peut se poser la question de la pertinence de prendre autant de variables. Il est souvent intéressant de regarder la performance des modèles à 1 variable explicative. Cela peut amener parfois à des modèles, certes moins performants, mais de peu et surtout moins gourmand en temps de calcul et en contraintes.