Соавторы: Зиланд Кули, Чжоу Ван

Введение

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

Оглавление

  1. "Источники данных"
  2. Очистка данных и проектирование признаков
  3. Исследовательский анализ данных
  4. Моделирование и важность функций
  5. "Этические соображения"
  6. "Заключение"
  7. "Больше информации"

Источники данных

Мы нашли данные о аттракционах и парках Диснейленда с TouringPlans.com (здесь) и данные о аттракционах Диснейленда с DataWorld (здесь). Мы решили ограничить объем нашего проекта аттракционами Magic Kingdom и обнаружили, что 20 из них есть в обоих наборах данных.

  1. Астроорбитальный аппарат
  2. Железная дорога Большой Громовой горы
  3. Космический рейнджер Базза Лайтера
  4. Летающий слон Дамбо
  5. Особняк с привидениями
  6. Это маленький мир
  7. Круиз по джунглям
  8. Безумное чаепитие
  9. Полет Питера Пэна
  10. Пираты Карибского моря
  11. Принц Очаровательный Королевская Карусель
  12. Шахтный поезд семи гномов
  13. Космическая гора
  14. Всплеск горы
  15. Барнстормер
  16. Волшебные ковры Аладдина
  17. Многочисленные приключения Винни-Пуха
  18. Спидвей Tomorrowland
  19. Транспортное управление Tomorrowland PeopleMover
  20. Карусель прогресса Уолта Диснея

Данные TouringPlans для каждой поездки включают дату и время, объявленное время ожидания и фактическое время ожидания. Существуют также метаданные для парка на каждую дату, включая информацию о том, был ли в этот день праздник, часы открытия и закрытия, процент посещаемых школ, когда проходил парад или мероприятие и т. д. Данные DataWorld включают характеристики каждая поездка, например, в какой стране она находится в Волшебном Королевстве, сколько дней она была открыта, какой это тип поездки (вращающаяся, темная, с большими каплями, захватывающая, медленная и т. д.) и как долго длится поездка. Данные охватывают период с 2015 по 2021 год. Точные данные обо всех переменных доступны для просмотра на связанных сайтах.

Одним из факторов, который, по нашему мнению, будет играть важную роль в прогнозировании времени ожидания поездки, является погода. В наборы данных Диснея была включена только средняя температура за каждый день, поэтому нам пришлось изучить внешние данные, чтобы получить более подробные данные о погоде в отношении температуры, осадков, тумана и т. д. Мы смогли получить это из национальных центров. для экологической информации (здесь), где мы указали город (Орландо, Флорида) и диапазон дат (с 2015 по 2021 год). Данные поступают с ближайшей метеостанции, расположенной в международном аэропорту Орландо (который находится всего в 16 милях от Диснейуорлда). Эти данные были агрегированы по часам и содержат информацию о качестве ветра, скорости ветра, качестве облачности, видимости и температуре.

Наконец, поскольку данные охватывают временные интервалы, включающие дни, затронутые Covid, мы решили добавить более конкретную информацию о состоянии Covid для каждого дня. Эти данные мы получили с сайта CDC (здесь). Он содержит данные о количестве случаев и смертей, зарегистрированных по штатам за каждый день, которые мы объединили, чтобы ежедневно собирать количество новых случаев заболевания в США.

Очистка данных и разработка функций

Мы объединили данные, объединив вертикально все наборы данных о поездках и горизонтально объединив метаданные парка, данные Covid и данные о погоде. После объединения всех наборов наш окончательный набор данных содержал 383 столбца и 5 654 849 записей. Мы кратко обсудим, как это было разделено на наборы для обучения и тестирования, в разделе моделирования этого поста.

Наши данные были относительно чистыми, когда мы столкнулись с ними, но было несколько вещей, которые нужно было сделать с определенными переменными, чтобы они работали в модели и чтобы их было легче усваивать, когда мы с ними работали.

Было приложено много усилий, чтобы сделать названия столбцов данных о погоде более читабельными, каждое из них было переименовано с использованием кодовой книги сайта. Это упростило понимание того, какие погодные переменные были важны, когда мы начали выбирать функции. Как упоминалось в предыдущем разделе, нам также приходилось агрегировать эти данные по часам, усредняя и суммируя, где это уместно. Поскольку данные о погоде записывались с часовыми интервалами (или почти), а данные о поездках собирались каждые несколько минут, мы соединили два кадра данных, сопоставив их с ближайшим часом.

Переменные "MONTHOFYEAR", "DAYOFYEAR", "YEAR" и "HOUROFDAY" – это целочисленные переменные, созданные с даты каждой записи. Некоторые значения переменных пришлось изменить, чтобы Python работал с ними корректно. Например, часы закрытия парка были записаны в день открытия парка, поэтому, если Волшебное королевство закрылось в час ночи, время было бы 25:00. Время было преобразовано в правильное военное время для согласованности. Все остальные типы переменных были установлены там, где это необходимо для удобства использования в модели. Это означает, что логические переменные были специально установлены как логические, целочисленные — как целочисленные и т. д.

Исследовательский анализ данных

Исследовательский анализ данных важен в каждом проекте по науке о данных, чтобы иметь предварительное представление о данных и формировать гипотезы о том, какие элементы будут важны в модели. Мы рассмотрели данные за 2018 год для этого исследовательского шага, поскольку это был год с полными данными, прежде чем Covid оценил нормальное поведение времени ожидания поездки в парке.

Во-первых, мы взглянули на распределение фактического времени ожидания и опубликованное время ожидания. Функция .describe() в Python действительно полезна для быстрой проверки базовой статистики количественных переменных. Обратите внимание, что «SACTMIN» — это имя столбца для фактического времени ожидания, а «SPOSTMIN» — это имя столбца для опубликованного времени ожидания в данных.

rideData2018_waits['SACTMIN'].describe()

rideData2018_waits['SPOSTMIN'].describe()

Сразу же в этом EDA мы видим, что фактическое время ожидания в среднем меньше, чем заявленное время ожидания. Что-то полезное, о чем следует помнить, если вы обычно разочаровываетесь, когда видите долгое время ожидания!

Мы также хотели посмотреть на некоторые характеристики поездки, чтобы увидеть, есть ли существенные различия в распределении фактического времени ожидания. Некоторые из этих характеристик включают в себя:

  • Если поездка считается захватывающей
  • Если поездка считается медленной
  • Если в поездке есть небольшие перепады
  • Если в поездке большие перепады
  • Если поездка темная
  • Если поездка вращается
  • Если это водная прогулка

Вот фрагмент кода одного из этих тестов значимости и соответствующие диаграммы в качестве визуального элемента.

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

Мы также решили визуализировать фактическое распределение времени ожидания для каждой поездки, чтобы иметь лучшее представление о том, какие поездки имеют тенденцию к более короткому или более длинному ожиданию.

Из этих диаграмм мы можем очень ясно видеть, что «Карусель прогресса» Уолта Диснея имеет самое короткое среднее и дальнее время ожидания, а аттракцион «Семь гномов» имеет самое большое среднее и самое большое время ожидания дальности. Мы также можем видеть, что среднее время ожидания в сообщениях для многих из них колеблется около 25 минут.

Другие EDA можно просмотреть в нашем репозитории GitHub, ссылка на который приведена в конце этого сообщения в блоге.

Далее мы приступили к моделированию данных.

Важность моделирования и функций

Чтобы предсказать время ожидания аттракциона Magic Kingdom, мы изучили несколько регрессионных моделей, чтобы определить лучшую. Мы пробовали модели регрессии: регрессия хребта, регрессия экстремального градиента, регрессия байесовского хребта, а также несколько моделей на основе деревьев: регрессия случайного леса, регрессия дополнительных деревьев и регрессия дерева решений.

Перед обучением этих моделей необходимо было предпринять несколько дополнительных шагов для подготовки данных для моделирования. Во-первых, нам нужно было разделить данные на наборы данных для обучения и тестирования. Мы решили использовать рандомизированный подход к нашему разделению обучения и тестирования, потому что мы хотели убедиться, что данные до и после COVID были включены как в наборы для обучения, так и для тестирования, чтобы ограничить любые смешанные переменные, связанные с протоколами Covid-19.

У нас также были некоторые недостающие данные. Некоторые функции, такие как время второго парада в день в Волшебном Королевстве, изначально были нулевыми. Нулевые значения в данном случае означали, что в тот день в Волшебном Королевстве не было второго парада. Чтобы справиться с такими ситуациями, мы присвоили нулевым значениям 99 (типичный диапазон составлял 0–23 часа военного времени), чтобы сообщить модели, что это значение резко отличается от других. Мы вменили нулевые значения в оставшиеся столбцы с помощью стратегии обратной засыпки, что означает, что мы взяли предыдущее значение. Чтобы обеспечить успех этой стратегии, мы отсортировали наборы данных по дате и времени, чтобы гарантировать, что значения получаются с близкими датами, которые, вероятно, имеют схожие характеристики. Было несколько столбцов, в которых были большие группы нулей по отношению к более поздним годам (в основном 2021 г.). Любые оставшиеся отсутствующие значения обрабатывались с использованием метода вменения медианы.

Теперь, когда данные были готовы, мы использовали следующие показатели, чтобы определить, насколько хорошо работают модели:

  • Средняя абсолютная ошибка: среднее значение всех абсолютных ошибок собранных данных.
  • Среднеквадратическая ошибка:среднее квадрата разницы между фактическими и расчетными значениями.
  • Среднеквадратичная ошибкаквадратный корень из среднеквадратичной ошибки
  • R-квадрат показывает, насколько изменение зависимой переменной (указанное время ожидания) может быть объяснено независимыми переменными.

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

Для всех трех древовидных моделей мы рассмотрели определенные выше показатели для:

n_estimators = [10, 50, 100]
max_depth = [10, 50, 100]

После этого анализа самой простой моделью, которая лучше всего соответствует нашим данным для прогнозирования времени ожидания поездки, стала регрессор случайного леса с 10 деревьями и максимальной глубиной 50. Наши показатели для этой модели следующие:

MAE: 40.45313127097203
MSE: 22577.2899065588
RMSE: 150.25741215180966
R-SQUARED: 0.7326651661948325

Таким образом, 73% вариаций времени ожидания в опубликованных поездках можно объяснить вариациями в доступных данных о поездках, парках, погоде и Covid. Чтобы лучше понять, какие переменные больше всего влияют на нашу модель, мы провели оценку важности признаков.

Основные характеристики следующие:

  1. Magic Kingdom Extra Magic Hour Evening (Boolean)
  2. Тип езды — Медленный (логический)
  3. Тип езды — Spinning (Boolean)
  4. Тип поездки — Small Drops (логическое значение)
  5. Общее количество часов работы, включая дополнительные волшебные часы для Magic Kingdom (числовое число)
  6. Процент школ, работающих в пределах досягаемости только от Калифорнии (числовое число)
  7. Парковая зона Adventureland (логическое значение)
  8. Максимальная температура Мира Уолта Диснея (числовое)
  9. Magic Kingdom Extra Magic Hour Вчера утром (логическое значение)
  10. Общее количество часов работы, включая дополнительный волшебный час для Царства животных (числовое)
  11. Историческая высокая температура (числовая)
  12. Историческая низкая температура (числовое)
  13. Билет Season Peak (логическое значение)
  14. Название поездки - Шахтный поезд семи гномов (логическое значение)
  15. Общая почасовая пропускная способность, потерянная в этот день в парке (из-за закрытия аттракционов) (числовое)
  16. Волшебное Королевство Дополнительный Волшебный Час Завтра вечером (логическое значение)
  17. Волшебное королевство Extra Magic Hour Evening Yesterday (Boolean)
  18. Процент школ, работающих только в Центральной Флориде (числовое число)
  19. Epcot Extra Magic Hour Morning (логическое значение)
  20. Парковая зона Frontierland (логическое значение)
  21. Название аттракциона — «Карусель прогресса» Уолта Диснея (логическое значение).
  22. Общее количество часов работы за вчерашний день, включая дополнительные часы работы Magic Kingdom (числовое)
  23. Процент школ, работающих в пределах досягаемости только от Флориды (числовое число)
  24. Быстрый проход (логическое значение)
  25. Время 1-го фейерверка Epcot (время)
  26. Тип поездки темный (логический)
  27. Волшебное королевство Событие Disney Злодей в нерабочее время (логическое значение)
  28. Общее количество часов работы за вчерашний день, включая дополнительные волшебные часы для Царства животных (числовое)
  29. Фейерверк Happy Hallowishes в Волшебном Королевстве (логическое значение)
  30. Праздничные пожелания Фейерверк в волшебном королевстве (логическое значение)

Важно отметить большое падение важности от первой функции к следующей. А также с четвертого на пятое и постепенное снижение остальных, где последние 15 из топ-30, похоже, не имеют большого влияния. Как видите, мы были правы в наших прогнозах, что тип езды (медленный, с вращением, падением и т. д.) действительно повлиял на модель. Мы также видим, что всплывают некоторые погодные переменные, а также функции, относящиеся к Magic Hours.

Хотя кажется, что дополнительные часы в Magic Kingdom и общий тип поездки составляют большую часть прогноза модели, трудно делать существенные выводы об идеальном дне в Disney, учитывая эти результаты. Для дальнейшего изучения решений нашей модели мы визуально оценили прогнозируемое время ожидания для каждой поездки, которое можно увидеть в нашем репозитории GitHub.

Этические соображения

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

Поскольку в этом наборе данных нет PII, не было большого риска возникновения этических проблем. Тем не менее, важно рассматривать аудиторию этого проекта не только как людей, интересующихся наукой о данных, но и как людей, знакомых с аттракционами и мероприятиями Disney World и, вероятно, могущих позволить себе посетить Disney World. По этой причине этот проект является несколько исключительным, но мы надеемся, что любой, кто столкнется с ним, все равно найдет его интересным.

Заключение

Мы узнали, что «идеальный» день в Диснейуорлде зависит от множества факторов, и планирование поможет вам только в этом! Тем не менее, мы рады, что наша модель уловила некоторый сигнал с дополнительными часами Magic и общим типом поездки, которые являются довольно важными показателями времени ожидания в Magic Kingdom в данный день.

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

Больше информации

Связанная работа по науке о данных

Если вам понравился этот пост и вы заинтересованы в том, как можно использовать науку о данных для понимания парков Диснея, ознакомьтесь с этими сообщениями в блогах от других исследователей:

"Disney World. Тематический парк или аппарат для массового сбора данных?»

Наука о данных и Disney: анализ будущего

Использование аналитики данных в Диснейленде

Парки Диснея собирают огромное количество данных о клиентах и ​​отслеживают работу своих собственных парков с помощью данных. Аттракционы, на которых люди катаются, товары, которые они покупают, развлечения, которые они потребляют, и т. д. — все это используется Disney для разработки решений, которые оптимизируют впечатления их гостей и помогают повысить общую удовлетворенность клиентов, чтобы их посетители продолжали возвращаться. Мы хотели создать этот проект для текущих клиентов, чтобы они знали, чего ожидать, когда они находятся в Волшебном Королевстве. Это может стать трамплином для дальнейших исследований, которые интересуют клиента, а не прибыль компании.

Репозиторий GitHub

Посетите наш репозиторий GitHub для более подробного понимания проекта:



Техническое задание

Зеланд Кули участвовал в объединении наборов данных, исследовательском анализе данных и исследовании моделей машинного обучения на основе дерева. В частности, работа над горизонтальной конкатенацией наборов данных, визуализация распределения времени ожидания по поездкам и типам поездок, визуализация корреляций времени ожидания с другими количественными переменными и выполнение начального регрессионного исследования для типов моделей «Дерево решений» и «Дополнительные деревья». Она также написала полный первый черновик этого сообщения в блоге.

Кендалл Дайк участвовал в очистке данных и инженерных разработках для подготовки к моделированию. Она также изучила несколько регрессионных моделей и построила окончательный конвейер, Makefile и результирующие сценарии Python на основе выбранной модели Random Forest. Она разработала визуализацию результатов, включая анализ времени ожидания и инженерные диаграммы функций. Кендалл, наконец, обрисовал и написал черновик README, за исключением подробностей о данных о погоде.

Чжоу участвовал в очистке данных и интеграции данных о погоде в набор данных, в некотором исследовательском анализе данных и в некотором моделировании. Он внес свой вклад в вертикальное объединение наборов данных, преобразовав данные о погоде в более читаемый формат и объединив этот набор данных с набором данных о поездках. Он работал над погодными данными файла README.