Exercice - Visualiser la sortie du modèle

Effectué

Dans cette unité, vous allez importer Matplotlib dans le notebook que vous avez déjà utilisé et vous allez configurer le notebook pour la prise en charge de la sortie de Matplotlib inline.

  1. Revenez au notebook Azure que vous avez créé dans la section précédente. Si vous avez fermé le bloc-notes, vous pouvez vous reconnecter au portail Microsoft Azure Notebooks, ouvrir votre bloc-notes et utiliser la cellule -> pour réexécuter toutes les cellules du bloc-notes après l’avoir ouverte.

  2. Exécutez les instructions suivantes dans une nouvelle cellule à la fin du notebook. Ignorez les messages d’avertissement liés à la mise en cache des polices :

    %matplotlib inline
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    sns.set()
    

    La première instruction est l’une des commandes magiques prises en charge par le noyau Python que vous avez sélectionné lors de la création du notebook. Il permet à Jupyter de rendre la sortie de Matplotlib dans un notebook sans effectuer d’appels répétés à show. Elle doit apparaître avant les références à Matplotlib lui-même. L’instruction finale configure Seaborn pour améliorer la sortie de Matplotlib.

  3. Pour afficher Matplotlib au travail, exécutez le code suivant dans une nouvelle cellule pour tracer la courbe ROC du modèle Machine Learning que vous avez créé dans le labo précédent :

    from sklearn.metrics import roc_curve
    
    fpr, tpr, _ = roc_curve(test_y, probabilities[:, 1])
    plt.plot(fpr, tpr)
    plt.plot([0, 1], [0, 1], color='grey', lw=1, linestyle='--')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    
  4. Vérifiez que vous voyez la sortie suivante :

    Courbe ROC générée avec Matplotlib.

    Courbe ROC générée avec Matplotlib

La ligne en pointillés au milieu du graphique représente une chance 50-50 d’obtenir une réponse correcte. La courbe en bleu représente la précision de votre modèle. Plus important encore, le fait que ce graphique s’affiche montre que vous pouvez utiliser Matplotlib dans un notebook Jupyter.

La raison pour laquelle vous avez créé un modèle Machine Learning est de prédire si un vol arrivera à l’heure ou en retard. Dans cet exercice, vous allez écrire une fonction Python qui appelle le modèle Machine Learning que vous avez créé dans le labo précédent pour calculer la probabilité qu’un vol sera à l’heure. Ensuite, vous utiliserez la fonction pour analyser plusieurs vols.

  1. Entrez la définition de fonction suivante dans une nouvelle cellule, puis exécutez la cellule.

    def predict_delay(departure_date_time, origin, destination):
        from datetime import datetime
    
        try:
            departure_date_time_parsed = datetime.strptime(departure_date_time, '%d/%m/%Y %H:%M:%S')
        except ValueError as e:
            return 'Error parsing date/time - {}'.format(e)
    
        month = departure_date_time_parsed.month
        day = departure_date_time_parsed.day
        day_of_week = departure_date_time_parsed.isoweekday()
        hour = departure_date_time_parsed.hour
    
        origin = origin.upper()
        destination = destination.upper()
    
        input = [{'MONTH': month,
                  'DAY': day,
                  'DAY_OF_WEEK': day_of_week,
                  'CRS_DEP_TIME': hour,
                  'ORIGIN_ATL': 1 if origin == 'ATL' else 0,
                  'ORIGIN_DTW': 1 if origin == 'DTW' else 0,
                  'ORIGIN_JFK': 1 if origin == 'JFK' else 0,
                  'ORIGIN_MSP': 1 if origin == 'MSP' else 0,
                  'ORIGIN_SEA': 1 if origin == 'SEA' else 0,
                  'DEST_ATL': 1 if destination == 'ATL' else 0,
                  'DEST_DTW': 1 if destination == 'DTW' else 0,
                  'DEST_JFK': 1 if destination == 'JFK' else 0,
                  'DEST_MSP': 1 if destination == 'MSP' else 0,
                  'DEST_SEA': 1 if destination == 'SEA' else 0 }]
    
        return model.predict_proba(pd.DataFrame(input))[0][0]
    

    Cette fonction prend en entrée une date/heure, un code d’aéroport d’origine et un code d’aéroport de destination, et elle retourne une valeur entre 0,0 et 1,0 qui indique la probabilité que le vol arrive à l’heure à sa destination. Il utilise le modèle Machine Learning que vous avez créé dans le labo précédent pour calculer la probabilité. Pour appeler le modèle, elle passe un DataFrame contenant les valeurs d’entrée à predict_proba. La structure du DataFrame correspond exactement à la structure du DataFrame que nous avons utilisé précédemment.

    Notes

    L’entrée de date pour la fonction predict_delay utilise le format de date international dd/mm/year.

  2. Utilisez le code ci-dessous pour calculer la probabilité qu’un vol de New York à Atlanta le soir du 1er octobre arrive à l’heure. L’année que vous entrez est sans importance, car elle n’est pas utilisée par le modèle.

    predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')
    

    Vérifiez que la sortie indique que la probabilité d’une arrivée à l’heure est de 60 % :

    Prédire si un vol arrive à l’heure.

    Prédire si un vol arrive à l’heure

  3. Modifiez le code pour calculer la probabilité que le même vol un jour plus tard arrive à l’heure :

    predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')
    

    Quelle est la probabilité que ce vol arrive à l’heure ? Si vos plans de voyage étaient flexibles, pourriez-vous envisager de postposer votre voyage d’un jour ?

  4. Modifiez maintenant le code pour calculer la probabilité qu’un vol le matin du même jour d’Atlanta à Seattle arrive à l’heure :

    predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')
    

    Est-ce que ce vol est susceptible d’arriver à l’heure ?

Vous disposez maintenant d’un moyen simple pour prédire, avec une seule ligne de code, si un vol est susceptible d’arriver à l’heure ou en retard. N’hésitez pas à faire des essais avec d’autres dates, heures, origines et destinations. N’oubliez cependant pas que les résultats sont significatifs seulement pour les codes d’aéroport ATL, DTW, JFK, MSP et SEA, car ce sont les seuls codes d’aéroport avec lesquels le modèle a été entraîné.

  1. Exécutez le code suivant pour tracer la probabilité des arrivées à l’heure pour un vol le soir de JFK à ATL sur une plage de jours :

    import numpy as np
    
    labels = ('Oct 1', 'Oct 2', 'Oct 3', 'Oct 4', 'Oct 5', 'Oct 6', 'Oct 7')
    values = (predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('3/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('4/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('5/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('6/10/2018 21:45:00', 'JFK', 'ATL'),
              predict_delay('7/10/2018 21:45:00', 'JFK', 'ATL'))
    alabels = np.arange(len(labels))
    
    plt.bar(alabels, values, align='center', alpha=0.5)
    plt.xticks(alabels, labels)
    plt.ylabel('Probability of On-Time Arrival')
    plt.ylim((0.0, 1.0))
    
  2. Vérifiez que la sortie ressemble à ceci :

    Probabilité d’arrivées à l’heure pour une plage de dates.

    Probabilité d’arrivées à l’heure pour une plage de dates

  3. Modifiez le code afin de créer un graphique similaire pour les vols quittant l’aéroport JFK pour MSP à 13 h 00 du 10 avril au 16 avril. Comment la sortie se distingue-t-elle de la sortie de l’étape précédente ?

  4. Écrivez vous-même le code pour représenter graphiquement la probabilité que les vols quittant SEA pour ATL à 9 h 00, midi, 15 h 00, 18 h 00 et 21 h 00 le 30 janvier arrivent à l’heure. Vérifiez que la sortie est celle-ci :

    Probabilité d’arrivées à l’heure pour une plage horaire.

    Probabilité d’arrivées à l’heure pour une plage horaire

Si vous débutez avec Matplotlib et que vous souhaitez en savoir plus sur celui-ci, vous trouverez un excellent tutoriel sur https://www.labri.fr/perso/nrougier/teaching/matplotlib/. Il y a beaucoup plus à Matplotlib que ce qui a été montré ici, c’est une raison pour laquelle il est si populaire dans la communauté Python.