Упражнение. Визуализация выходных данных модели
В этом модуле вы импортируете библиотеку Matplotlib в записную книжку, с которой вы работали, и настроите записную книжку для поддержки встроенных выходных данных Matplotlib.
Переключитесь на записную книжку Azure, которую вы создали в предыдущем разделе. Если вы закрыли записную книжку, войдите на портал "Записные книжки Microsoft Azure", откройте свою записную книжку и выберите Ячейка ->Запустить все для повторного выполнения всех ячеек в записной книжке после открытия.
В новой ячейке в конце записной книжки выполните следующие инструкции. Игнорируйте все предупреждающие сообщения, относящиеся к кэшированию шрифта:
%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set()
Первая инструкция является одной из нескольких магических команд, поддерживаемых ядром Python, которое вы выбрали при создании записной книжки. Она позволяет Jupyter подготовить выходные данные Matplotlib к просмотру в записной книжке без повторных вызовов команды show. И она должна находиться перед всеми ссылками на саму библиотеку Matplotlib. Последняя инструкция настраивает Seaborn для улучшения выходных данных Matplotlib.
Чтобы посмотреть на 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')
Вы увидите такой результат:
ROC-кривая, созданная с помощью Matplotlib
Пунктирная линия в середине графика соответствует 50-процентной вероятности получения правильного ответа. Синяя кривая представляет точность вашей модели. Что еще важнее, сам факт существования этой диаграммы доказывает, что вы можете использовать Matplotlib в записной книжке Jupyter.
Вы создали эту модель машинного обучения, чтобы предсказывать, прибудет рейс вовремя или опоздает. В этом упражнении вы напишете функцию Python, которая вызывает модель машинного обучения, созданную в предыдущем задании, для вычисления вероятности того, что рейс прибудет вовремя. Затем вы используете эту функцию для анализа нескольких рейсов.
Введите следующее определение функции в новую ячейку, а затем выполните ячейку.
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
.Используйте приведенный ниже код для вычисления вероятности того, что рейс из Нью-Йорка в Атланту вечером 1 октября прибудет вовремя. Год не имеет значения, так как он не используется в модели.
predict_delay('1/10/2018 21:45:00', 'JFK', 'ATL')
Убедитесь, что выходные данные показывают, что вероятность своевременного прибытия составляет 60 %:
Прогнозирование того, прибудет ли рейс вовремя
Измените код, чтобы вычислить вероятность того, что тот же рейс, но на следующий день, прибудет вовремя:
predict_delay('2/10/2018 21:45:00', 'JFK', 'ATL')
Какова вероятность того, что этот рейс прибудет вовремя? Если бы вы у вас был гибкий график, вы бы отложили перелет на один день?
Теперь измените код, чтобы вычислить вероятность того, что утренний рейс из Атланты в Сиэтл в тот же день прибудет вовремя:
predict_delay('2/10/2018 10:00:00', 'ATL', 'SEA')
Этот рейс прибудет вовремя?
Теперь у вас есть простой способ прогнозирования своевременности прибытия с помощью одной строки кода. Вы можете поэкспериментировать с другими датами, временем, городами отправления и прибытия. Но имейте в виду, что результаты имеют смысл только для аэропортов с кодами ATL, DTW, JFK, MSP и SEA, так как модель обучалась только на этих кодах.
Выполните следующий код, чтобы вычислить вероятность своевременного прибытия вечернего рейса из 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))
Убедитесь, что выходные данные выглядят следующим образом:
Вероятность своевременного прибытия для диапазона дат
Измените код, чтобы создать аналогичный график для рейсов из аэропорта JFK в MSP в 13:00 с 10 по 16 апреля. Как эти выходные данные соотносятся с выходными данными из предыдущего шага?
Самостоятельно напишите код, чтобы рассчитать вероятность того, что рейсы из SEA в ATL с отправлением в 9:00, в 12:00, в 15:00, в 18:00 и в 21:00 30 января прибудут вовремя. Убедитесь, что выходные данные выглядят следующим образом:
Вероятность своевременного прибытия для диапазона времени
Если вы не знакомы с библиотекой Matplotlib и хотите узнать о ней больше, воспользуйтесь превосходным учебником на странице https://www.labri.fr/perso/nrougier/teaching/matplotlib/.. Библиотека Matplotlib умеет гораздо больше, чем мы здесь увидели, поэтому она так популярна в сообществе Python.