2A.data - Classification, régression, anomalies - énoncé#

Links: notebook, html, python, slides, GitHub

Le jeu de données Wine Quality Data Set contient 5000 vins décrits par leurs caractéristiques chimiques et évalués par un expert. Peut-on s’approcher de l’expert à l’aide d’un modèle de machine learning.

%matplotlib inline
import matplotlib.pyplot as plt
from jyquickhelper import add_notebook_menu
add_notebook_menu()

Les données#

On peut les récupérer sur github…data_2a.

from ensae_teaching_cs.data import wines_quality
from pandas import read_csv
df = read_csv(wines_quality(local=True, filename=True))
df.head()
fixed_acidity volatile_acidity citric_acid residual_sugar chlorides free_sulfur_dioxide total_sulfur_dioxide density pH sulphates alcohol quality color
0 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5 red
1 7.8 0.88 0.00 2.6 0.098 25.0 67.0 0.9968 3.20 0.68 9.8 5 red
2 7.8 0.76 0.04 2.3 0.092 15.0 54.0 0.9970 3.26 0.65 9.8 5 red
3 11.2 0.28 0.56 1.9 0.075 17.0 60.0 0.9980 3.16 0.58 9.8 6 red
4 7.4 0.70 0.00 1.9 0.076 11.0 34.0 0.9978 3.51 0.56 9.4 5 red

Exercice 1 : afficher la distribution des notes#

La fonction hist est simple, efficice.

Exercice 2 : séparation train / test#

La fonction est tellement utilisée que vous la trouverez rapidement.

Exercice 3 : la variable couleur n’est pas numérique#

M… OneHotEncoder.

Exercice 3 : premier classifieur#

Vous trouverez aussi tout seul. Quelques fonctions pourront vous aider à évaluer le modèle confusion_matrix, classification_report.

Beaucoup mieux.

Exercice 4 : courbe ROC#

Quelques aides…

from sklearn.metrics import roc_curve, auc

# labels = pipe.steps[1][1].classes_
# y_score = pipe.predict_proba(X_test)

fpr = dict()
tpr = dict()
roc_auc = dict()
# for i, cl in enumerate(labels):
#     fpr[cl], tpr[cl], _ = roc_curve(y_test == cl, y_score[:, i])
#     roc_auc[cl] = auc(fpr[cl], tpr[cl])
# fig, ax = plt.subplots(1, 1, figsize=(8,4))
# for k in roc_auc:
#     ax.plot(fpr[k], tpr[k], label="c%d = %1.2f" % (k, roc_auc[k]))
# ax.legend();

Exercice 5 : anomalies#

Une anomalie est un point aberrant. Cela revient à dire que sa probabilité qu’un tel événement se reproduise est faible. Un modèle assez connu est EllipticEnvelope. On suppose que si le modèle détecte une anomalie, un modèle de prédiction aura plus de mal à prédire. On réutilise le pipeline précédent en changeant juste la dernière étape.

from sklearn.covariance import EllipticEnvelope

Exercice 6 : régression#

La note est numérique, pourquoi ne pas essayer une régression.

from sklearn.ensemble import RandomForestRegressor

Exercice 7 : intervalle de confiance#

Comment constuire un intervalle de confiance avec un classifieur et un régresseur. Rien de théorique, juste des idées et un peu de bidouille.