Упражнение. Визуализация выходных данных модели
В этом модуле вы импортируете библиотеку Matplotlib в записную книжку, с которой вы работали, и настроите записную книжку для поддержки встроенных выходных данных Matplotlib.
Переключитесь на записную книжку Azure, которую вы создали в предыдущем разделе. Если вы закрыли записную книжку, вы можете войти на портал записных книжек Microsoft Azure, открыть записную книжку и использовать ячейку ->Run All для повторного запуска всех ячеек в записной книжке после его открытия.
В новой ячейке в конце записной книжки выполните следующие инструкции. Игнорируйте все предупреждающие сообщения, относящиеся к кэшированию шрифта:
%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.