• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/04/2024

Manipuler les fonctions de base d'un modèle prédictif

Compétences évaluées

  • Manipuler les fonctions de base d'un modèle prédictif

Description

10 h du matin, -30 degrés et un vent à 140 km/h sur l'île Biscoe dans l'archipel Palmer en Antarctique. Vous n'avez pas vu le soleil depuis 3 mois. Bien camouflé dans la neige, vous observez à la jumelle un groupe de manchots tout en notant rapidement leurs mensurations sur votre tablette. Vous faites partie de l'équipe du Pr Kristen Gorman de la station Palmer et vous adorez les manchots ! Votre travail de recherche porte sur "l'impact de la variabilité de la glace de mer hivernale sur la recherche de nourriture pré-nuptiale des mâles et des femelles manchots". De retour à la station, vous chargez le dataset que vous avez compilé avec vos collègues et vous vous mettez au travail.

Il est composé de 333 échantillons.

Des variables catégoriques :

-  species  (pour les 3 familles de manchots) : Adélie (152), Gentoo (124), Chinstrap (68) ;

-  island  (sur 3 îles) : Biscoe (168), Dream (124), Torgersen (52) ;

-  sex  : 168 mâles et 165 femelles ;

-  year  : collectés entre 2007 et 2009.

Des variables numériques :

-  bill_length_mm  : la longueur du bec ;

-  bill_depth_mm  : la profondeur du bec ;

-  flipper_length_mm  : la longueur des nageoires ;

-  body_mass_g  : le poids en grammes.

Pour charger le dataset en Python :

pip install palmerpenguins
from palmerpenguins import load_penguins
data = load_penguins()

Le dataset est aussi disponible sur le GitHub du cours :

filename = "https://raw.githubusercontent.com/OpenClassrooms-Student-Center/8063076-Initiez-vous-au-Machine-Learning/master/data/palmer_penguins_openclassrooms.csv"
data = pd.read_csv(filename)

Dans la suite nous utilisons cette version du dataset dont les échantillons avec des valeurs manquantes ont été expurgés.

  • Question 1

    Vous allez explorer le dataset en utilisant une régression linéaire. Vous cherchez à comprendre la relation entre les mensurations des animaux (  bill_length  , etc.) et leur poids.

    Dans un premier temps vous réalisez 3 régressions linéaires univariées :

    • body_mass_g ~ bill_length_mm
    • body_mass_g ~ bill_depth_mm
    • body_mass_g ~ flipper_length_mm

    Le code pour la première régression sera donc :

    from sklearn.linear_model import LinearRegression
    reg = LinearRegression()
    X = data['bill_length_mm'].values.reshape(-1, 1)
    y = data['body_mass_g']
    reg.fit(X, y)
    

    En regardant le score donné par le modèle soit le   R2   ,  reg.score()  , quelle est la mensuration la plus prédictive du poids des animaux ?

    • flipper_length_mm

    • bill_length_mm and bill_depth_mm

    • species and island

  • Question 2

    Considérons maintenant la régression du poids sur toutes les variables numériques :

    body_mass_g ~ bill_length_mm + bill_depth_mm + flipper_length_mm

    et faisons en sorte de standardiser les variables prédictrices avec le  MinMax Scaler  :

    from sklearn.preprocessing import MinMaxScaler
    scaler = MinMaxScaler()
    X = scaler.fit_transform(data[['bill_length_mm','bill_depth_mm','flipper_length_mm']])
    

    Entraînez la régression   body_mass_g ~ bill_length_mm + bill_depth_mm + flipper_length_mm  et calculez la RMSE et la MAPE.

    Il vous faut d'abord obtenir les prédictions du modèle avec la fonction  reg.predict(...)  .

    Quelles affirmations sont vraies ?

    Attention, plusieurs réponses sont possibles.
    • La MAPE est petite, le modèle est bon.

    • La RMSE est très grande, le modèle est excellent.

    • La RMSE est trop grande, le modèle est mauvais.

    • La MAPE correspond à une erreur relative. Dans notre cas 7,7 %.

  • Question 3

    On va entraîner la même régression mais cette fois en séparant les espèces. On aura donc 3 modèles différents entraînés sur des données différentes :

    scaler = MinMaxScaler()
    reg = LinearRegression()
    for espece in ['Adelie', 'Gentoo', 'Chinstrap']:
        df = data[data.species == espece].copy()
        y = df['body_mass_g']
        X = scaler.fit_transform(df[['bill_length_mm','bill_depth_mm','flipper_length_mm']])
        reg.fit(X, y)
        print("--\n",espece, reg.score(X, y))
    
        y_pred = reg.predict(X)
        print(f"RMSE: {mean_squared_error(y, y_pred)}")
        print(f"MAPE: {mean_absolute_percentage_error(y, y_pred)}")
    

     Au vu de ces résultats, que pouvez-vous conclure ?

    Attention, plusieurs réponses sont possibles.
    • Adélie et Chinstrap ont des RMSE différentes, la régression ne marche pas aussi bien pour ces 2 espèces.

    • Adélie et Chinstrap ont le même R^2, la régression marche aussi bien pour ces 2 espèces.

    • Gentoo a la plus petite MAPE, la régression est plus pertinente pour cette espèce.

Et si vous obteniez un diplôme OpenClassrooms ?
  • Formations jusqu’à 100 % financées
  • Date de début flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous