Упражнение. Визуализация выходных данных модели

Завершено

В этом модуле вы импортируете библиотеку Matplotlib в записную книжку, с которой вы работали, и настроите записную книжку для поддержки встроенных выходных данных Matplotlib.

  1. Переключитесь на записную книжку Azure, которую вы создали в предыдущем разделе. Если вы закрыли записную книжку, вы можете войти на портал записных книжек Microsoft Azure, открыть записную книжку и использовать ячейку ->Run All для повторного запуска всех ячеек в записной книжке после его открытия.

  2. В новой ячейке в конце записной книжки выполните следующие инструкции. Игнорируйте все предупреждающие сообщения, относящиеся к кэшированию шрифта:

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

    Первая инструкция — это одна из нескольких волшебных команд, поддерживаемых ядром Python, выбранным при создании записной книжки. Это позволяет Jupyter визуализировать вывод Matplotlib в тетрадке без повторных вызовов show. И она должна находиться перед всеми ссылками на саму библиотеку Matplotlib. Последняя инструкция настраивает Seaborn для улучшения выходных данных из Matplotlib.

  3. Чтобы увидеть Matplotlib на работе, выполните следующий код в новой ячейке для построения кривой ROC для модели машинного обучения, созданной в предыдущей лаборатории:

    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. Вы увидите такой результат:

    Кривая ROC, созданная с помощью Matplotlib.

    Кривая ROC, созданная с помощью Matplotlib

Пунктирная линия в середине графика соответствует 50-процентной вероятности получения правильного ответа. Синяя кривая представляет точность вашей модели. Что еще важнее, сам факт существования этой диаграммы доказывает, что вы можете использовать Matplotlib в записной книжке Jupyter.

Вы создали эту модель машинного обучения, чтобы предсказывать, прибудет рейс вовремя или опоздает. В этом упражнении вы напишете функцию Python, которая вызывает модель машинного обучения, созданную в предыдущем задании, для вычисления вероятности того, что рейс прибудет вовремя. Затем вы используете эту функцию для анализа нескольких рейсов.

  1. Введите следующее определение функции в новую ячейку, а затем выполните ячейку.

    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]
    

    Эта функция принимает в качестве входных данных дату и время, коды аэропортов отправления и прибытия и возвращает значение от 0,0 до 1,0, определяющее вероятность того, что рейс прибудет вовремя. Она использует модель машинного обучения, которую вы создали в предыдущем задании, для вычисления вероятности. И для вызова модели она передает кадр данных, содержащий входные значения, в predict_proba. Структура этого кадра данных точно соответствует структуре кадра данных, который мы использовали ранее.

    Примечание.

    Входные данные даты для функции predict_delay представлены в международном формате dd/mm/year.

  2. Используйте приведенный ниже код для вычисления вероятности того, что рейс из Нью-Йорка в Атланту вечером 1 октября прибудет вовремя. Год не имеет значения, так как он не используется в модели.

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

    Убедитесь, что выходные данные показывают, что вероятность своевременного прибытия составляет 60 %:

    Прогнозирование того, будет ли рейс прибыть вовремя.

    Прогнозирование того, будет ли рейс прибыть вовремя

  3. Измените код, чтобы вычислить вероятность того, что тот же рейс, но на следующий день, прибудет вовремя:

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

    Какова вероятность того, что этот рейс прибудет вовремя? Если бы вы у вас был гибкий график, вы бы отложили перелет на один день?

  4. Теперь измените код, чтобы вычислить вероятность того, что утренний рейс из Атланты в Сиэтл в тот же день прибудет вовремя:

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

    Этот рейс прибудет вовремя?

Теперь у вас есть простой способ прогнозирования своевременности прибытия с помощью одной строки кода. Вы можете поэкспериментировать с другими датами, временем, городами отправления и прибытия. Но имейте в виду, что результаты имеют смысл только для аэропортов с кодами ATL, DTW, JFK, MSP и SEA, так как модель обучалась только на этих кодах.

  1. Выполните следующий код, чтобы вычислить вероятность своевременного прибытия вечернего рейса из JFK в ATL в диапазоне дней:

    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. Убедитесь, что выходные данные выглядят следующим образом:

    Вероятность своевременного прибытия для диапазона дат.

    Вероятность прибытия вовремя для диапазона дат

  3. Измените код, чтобы создать аналогичный график для рейсов из аэропорта JFK в MSP в 13:00 с 10 по 16 апреля. Как эти выходные данные соотносятся с выходными данными из предыдущего шага?

  4. Самостоятельно напишите код, чтобы рассчитать вероятность того, что рейсы из SEA в ATL с отправлением в 9:00, в 12:00, в 15:00, в 18:00 и в 21:00 30 января прибудут вовремя. Убедитесь, что выходные данные выглядят следующим образом:

    Вероятность пунктуального прибытия в различные временные интервалы.

    Вероятность прибытия вовремя для диапазона времён

Если вы не знакомы с Matplotlib и хотите узнать больше об этом, вы найдете отличный учебник https://www.labri.fr/perso/nrougier/teaching/matplotlib/. на сайте Matplotlib гораздо больше, чем то, что было показано здесь, что является одной из причин, почему это так популярно в сообществе Python.