Übung: Visualisieren der Ausgabe des Modells

Abgeschlossen

In dieser Lerneinheit importieren Sie Matplotlib in das Notebook, mit dem Sie bis jetzt gearbeitet haben, und konfigurieren das Notebook so, dass es Matplotlib-Inlineausgaben unterstützt.

  1. Wechseln Sie zurück zum Azure-Notebook, das Sie im vorherigen Abschnitt erstellt haben. Wenn Sie das Notebook geschlossen haben, können Sie sich erneut beim Microsoft Azure Notebooks-Portal anmelden, Ihr Notebook öffnen und mit Cell>Run all (Zelle > Alle ausführen) alle Zellen im Notebook nach dem Öffnen erneut ausführen.

  2. Führen Sie dazu den folgenden Code in einer neuen Zelle am Ende des Notebooks aus: Ignorieren Sie Warnmeldungen bezüglich des Zwischenspeicherns von Schriftarten:

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

    Die erste Anweisung ist einer von mehreren magic-Befehlen, die vom Python-Kernel unterstützt werden, den Sie ausgewählt haben, als Sie das Notebook erstellt haben. Mit diesem Befehl kann Jupyter Matplotlib-Ausgaben in einem Notebook rendern, ohne show wiederholt aufrufen zu müssen. Er muss verwendet werden, bevor Verweise auf Matplotlib hinzugefügt werden. Sie letzte Anweisung konfiguriert Seaborn, sodass die Ausgabe von Matplotlib optimiert wird.

  3. Sie können sich die Funktionsweise von Matplotlib ansehen. Führen Sie dazu den folgenden Code in einer neuen Zelle aus, um die ROC-Kurve für das Machine Learning-Modell zu plotten, das Sie im vorherigen Lab erstellt haben:

    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. Dann sollten Sie die folgende Ausgabe sehen:

    ROC curve generated with Matplotlib.

    ROC-Kurve, die mit Matplotlib generiert wurde

Die gestrichelte Linie in der Mitte des Graphen stellt eine 50-50-Chance einer korrekten Antwort dar. Die blaue Kurve ist die Treffergenauigkeit Ihres Modells. Darüber hinaus ist es wichtig, dass dieses Diagramm überhaupt angezeigt wird, denn das bedeutet, dass Sie Matplotlib in einem Jupyter-Notebook verwenden können.

Sie haben ein Machine Learning-Modell erstellt, um vorherzusagen, ob ein Flug pünktlich sein wird. In dieser Übung schreiben Sie eine Python-Funktion, die das Machine Learning-Modell aufruft, dass Sie im vorherigen Lab erstellt haben, um die Wahrscheinlichkeit der Pünktlichkeit des Fluges zu berechnen. Dann analysieren Sie mit dieser Funktion mehrere Flüge.

  1. Geben Sie die folgende Funktionsdefinition in eine neue Zelle ein, und führen Sie diese aus.

    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]
    

    Die Funktion akzeptiert ein Datum und eine Uhrzeit und den Code eines Abflug- und eines Zielflughafens als Eingabe und gibt einen Wert zwischen 0,0 und 1,0 zurück, der die Wahrscheinlichkeit der pünktlichen Ankunft eines Fluges angibt. Sie verwendet das Machine Learning-Modell aus dem vorherigen Lab, um die Wahrscheinlichkeit zu berechnen. Sie ruft das Modell auf, indem Sie eine Datenmatrix mit den Eingabewerten an predict_proba übergibt. Die Struktur der Datenmatrix stimmt genau mit der Struktur der Datenmatrix überein, die wir bereits verwendet haben.

    Hinweis

    Das Datum, das als Eingabe an die predict_delay-Funktion übergeben wird, weist das internationalen Datumsformat dd/mm/year auf.

  2. Mit dem unten stehenden Code können Sie die Wahrscheinlichkeit berechnen, mit der ein Flug von New York nach Atlanta am Abend des 1. Oktobers pünktlich sein wird. Das eingegebene Jahr ist nicht relevant, da es nicht vom Modell verwendet wird.

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

    Die Ausgabe sollte besagen, dass die Wahrscheinlichkeit der pünktlichen Ankunft des Fluges bei 60 % liegt:

    Predicting whether a flight will arrive on time.

    Vorhersagen der Pünktlichkeit eines Fluges

  3. Passen Sie den Code an, um zu berechnen, wie wahrscheinlich der Flug einen Tag später pünktlich sein wird:

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

    Wie wahrscheinlich ist es, dass dieser Flug pünktlich ist? Wenn Sie flexibel reisen können, würden Sie in Erwägung ziehen, Ihre Reise um einen Tag zu verschieben?

  4. Passen Sie den Code an, um zu berechnen, wie wahrscheinlich ein Morgenflug am gleichen Tag von Atlanta nach Seattle pünktlich sein wird:

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

    Wie wahrscheinlich ist es, dass dieser Flug pünktlich ist?

Jetzt können Sie ganz einfach mit nur einer Codezeile vorhersagen, wie wahrscheinlich ein Flug pünktlich sein wird. Probieren Sie auch andere Datumsangaben, Uhrzeiten und Abflug- und Zielflughäfen aus, um sich unterschiedliche Ergebnisse anzusehen. Denken Sie jedoch daran, dass die Ergebnisse nur für die Flughafencodes ATL, DTW, JFK, MSP und SEA aussagekräftig sind, da das Modell nur mit diesen Codes trainiert wurde.

  1. Führen Sie den folgenden Code aus, um die Wahrscheinlichkeit der Pünktlichkeit eines Abendflugs von JFK nach ATL zu plotten:

    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. Vergewissern Sie sich, dass die Ausgabe folgendermaßen aussieht:

    Probability of on-time arrivals for a range of dates.

    Wahrscheinlichkeit der pünktlichen Ankunft mit verschiedenen Datumswerten

  3. Passen Sie den Code an, um ein ähnliches Diagramm für Flüge von JFK nach MSP vom 10. bis zum 16. April zu erzeugen. Wie unterscheidet sich die Ausgabe von der vorherigen Ausgabe?

  4. Schreiben Sie selbstständig Code, um die Wahrscheinlichkeit der Pünktlichkeit von Flügen von SEA nach ATL am 30. Januar um 9:00 Uhr, 12:00 Uhr, 15:00 Uhr, 18:00 Uhr und 21:00 Uhr grafisch darzustellen. Vergewissern Sie sich, dass die Ausgabe folgendermaßen aussieht:

    Probability of on-time arrivals for a range of times.

    Wahrscheinlichkeit der pünktlichen Ankunft mit verschiedenen Uhrzeitwerten

Wenn Sie Matplotlib noch nicht gut kennen und gerne mehr darüber erfahren würden, finden Sie unter https://www.labri.fr/perso/nrougier/teaching/matplotlib/.. Matplotlib hat viele weitere Funktionen, die wir hier nicht besprochen haben, die zu seiner Beliebtheit in der Python-Community beitragen.