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 notebook, vous pouvez vous reconnecter au portail Microsoft Azure Notebooks, ouvrir votre notebook et utiliser Cellule –>Exécuter tout pour réexécuter toutes les cellules du notebook après son ouverture.

  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 une des commandes magic prises en charge par le noyau Python que vous avez sélectionné lors de la création du notebook. Elle permet à Jupyter d’afficher la sortie de Matplotlib dans un notebook sans devoir effectuer des appels répétés à show. Elle doit apparaître avant les références à Matplotlib lui-même. La dernière instruction configure Seaborn pour améliorer la sortie provenant de Matplotlib.

  3. Pour voir fonctionner Matplotlib, exécutez le code suivant dans une nouvelle cellule afin de tracer la courbe ROC pour le 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édiction de l’arrivée à l’heure d’un vol.

    Prédiction de l’arrivée à l’heure d’un vol

  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é des arrivées à l’heure pour une plage de dates.

    Probabilité des 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é des arrivées à l’heure pour une plage d’heures.

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

Si vous débutez avec Matplotlib et que vous voulez en savoir plus, vous trouverez un excellent tutoriel ici : https://www.labri.fr/perso/nrougier/teaching/matplotlib/.. Matplotlib peut en faire beaucoup plus que ce qui est montré ici : c’est une des raisons pour lesquelles il est si répandu dans la communauté Python.