Окей, Google. Как провести хакатон?
Окей, Google. Уловки для решения задач машинного обучения с высокой точностью.

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

Сегодня мы собираемся пройти реальную задачу по машинному обучению, выпущенную MachineHack в ноябре 2019 года. Задача называется «ПРОГНОЗИРОВАНИЕ ВРЕМЕНИ ДОСТАВКИ ЕДЫ». Она была организована IMS Pro School.
Я беру этот хакатон в качестве справочного примера, потому что когда я прошел через это Задача Я заметил, что это задача среднего уровня с меньшим количеством измерений, высокой способностью интерпретировать и контролируемой формой данных. Запутались? Не волнуйтесь, предстоящее путешествие построено таким образом, что любой новичок может извлечь из него пользу.

Прежде всего, давайте импортируем данные обучения (файл csv), которые у нас есть в сети.

Теперь, перед предварительной обработкой и применением всех причудливых методов к набору данных, всем нужно сделать ПОДОЖДИТЕ .. НАБЛЮДИТЬ .. ПОНЯТЬ .. И даже если вы думаете, что поняли набор данных, затем также подождите, расслабьтесь и понаблюдайте еще раз.

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

Разобравшись в предметной области, давайте сделаем несколько наблюдений.
Вот вам задание. Не прокручивайте и не читайте дальше, сделайте свой собственный набор наблюдений из набора данных и запишите его где-нибудь. Позже посмотрите мою и оцените себя. Если у вас есть какое-то уникальное наблюдение, пожалуйста, укажите его в разделе комментариев, я бы хотел его увидеть.

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

Новичок: удалите префикс «?» от Average_Cost и Minimum_order. Удалите суффикс «минут» из Delivery_Time. Извлечение названия города из полного адреса, так как в противном случае это приведет к перегрузке нашей модели данных.

Средний: удаление запятых в строке "Кухня", а затем удаление пробелов между названиями кухни с несколькими словами (например, "Преобразовать фаст-фуд в FastFood или Fast_Food"). Идея заключается в том, что позже, при преобразовании наших измерений данных в векторную форму, мы будем преобразовывать каждое уникальное название кухни в отдельное измерение / столбец.
Ищем все уникальные значения каждого измерения, чтобы лучше понять.

Дополнительно: удаление столбца "Ресторан", поскольку он бесполезен для прогнозирования и приведет только к перетренированию нашей модели данных.
Поиск всех недостающих значений в наборе данных, а затем заполнить его с помощью методов вменения, и если в столбце есть какое-либо строковое значение с целочисленными значениями, то исправить его соответствующим образом (например, преобразовать 1200 в 1200).

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

Здесь, исходя из графика времени доставки, мы можем сказать, что количество вхождений за 10 минут является самым низким, а за 120 минут - самым высоким.

Похоже, не очень надежная служба доставки еды 😆

Замечательно ... То, что мы сделали на данный момент, называется предварительной обработкой данных и исследовательским анализом данных. Теперь давайте повысим уровень игры. Пришло время преобразовать данные в векторы, а затем применить алгоритмы прогнозирования к нашей модели и, наконец, сделать прогноз.

Но перед этим нам нужно сначала разделить наши данные на данные обучения и данные тестирования. Здесь наша зависимая переменная будет Delivery_Time (обозначенная y), а rest будет независимой переменной (обозначенной X).

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

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

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

Всегда помните одну вещь: для текстовых данных мы векторизуем их, а для числовых данных мы их стандартизируем / нормализуем. Я бы посоветовал вам получить некоторые знания о стандартизации или нормализации, прежде чем продолжить.

После векторизации всех зависимых переменных по отдельности объедините их, чтобы сформировать единый фрейм данных.

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

Вы могли заметить, что каждый хакатон длится около 2–3 недель. То, что каждый кандидат делает в основном в эти сроки, - это применяет различные типы алгоритмов (с уникальным набором лучших параметров) к модели и смотрит, какой из них делает прогноз с минимальными потерями / ошибками.

Вот все используемые мной алгоритмы:

K-Nearest Neighbor
Логистическая регрессия (мой личный фаворит)
SVM
Случайный лес
XGBoost

Внимание !! Теперь я поделюсь с вами секретом / уловкой, которую каждый участник использует для достижения максимальной точности. Это то, с чем знакомы очень немногие из новичков (это здорово, если вы знаете), и этот трюк - ИСПОЛЬЗОВАНИЕ АНСАМБЛЯ.

Ensemble - это французское слово, которое на английском языке означает «Вместе», как и приложение Ensemble.
Пожалуйста, получите некоторые базовые знания об Ensemble, прежде чем продолжить.

В ансамбле мы используем технику наложения.
Как это работает: предположим, что у нас есть независимая переменная X, и мы используем 3 алгоритма, то есть K-NN, Случайный лес и SVM. Таким образом, стек будет передавать некоторую часть X в K-NN, а часть - в Random Forest. Выходные данные этих моделей будут действовать как входные данные для SVM, и нам полностью решать, какой алгоритм мы хотим действовать как базовый алгоритм или главный алгоритм.
Таким образом мы делаем нашу модель надежной и высокоточной.

Ансамбль, хотя и является очень эффективным методом для повышения точности, все же он не используется в реальных проектах.
ЧТО ЗАЧЕМ?
Причина проста. Обучение модели с использованием ансамбля требует много времени и вычислительных ресурсов. В соревнованиях наша забота - это высокая точность, а не время вычислений или оборудование, но в реальном мире это может дорого обойтись бизнесу, поэтому это неосуществимый вариант.

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

Если ваша модель где-то достигла этой идеальной стадии, пора делать прогнозы на Test.csv.

Точно так же, как мы сделали для Train.csv, аналогичным образом выполните загрузку = ›предварительная обработка =› векторизация = ›Модельное приложение =› Ансамбль (наложение), а затем сделайте прогноз.
Итак, работа над Test.csv - это домашнее задание для всех вас, ребята, чтобы проверить свои навыки.

Поздравления…. Вы получили всю необходимую информацию, чтобы делать лучший прогноз на основе данных, представленных в соревновании.

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

И запомни…

Не то, что вы делаете, а то, как вы это делаете, делает вас НАСТОЯЩИМ ГЕРОЕМ.