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

Завершено

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

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

  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 curve generated with 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 %:

    Predicting whether a flight will arrive on time.

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

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

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

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

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

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

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

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

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