Для каждого энтузиаста машинного обучения нам сказали перейти на Kaggle. Участвуйте в соревнованиях. Но после этого что дальше? Должен ли он заканчиваться простым прогнозированием тестовых данных и их отправкой? Или нам всегда будут предоставлять листы Excel, чтобы делать прогнозы с помощью модели в реальных сценариях.
Что нам нужно сделать?
Читайте вместе, чтобы узнать, что нужно сделать.
Справочная информация
Банк Kowepe в Нигерии проводил маркетинговые кампании по телефону со своими клиентами. Эти акции побуждают своих клиентов подписаться на конкретный финансовый продукт банка (срочный депозит). Этот опрос был проведен с участием некоторых избранных лиц, которые, по мнению банка, являются лучшими представителями своих клиентов, чтобы свести к минимуму стоимость полного опроса клиентов.
С вами связались как с специалистом по данным, чтобы найти закономерности и построить прогностические модели на основе этого набора данных, чтобы спрогнозировать процент потенциальных клиентов для финансовых продуктов банка.
Цель
Определить клиентов, которые подпишутся или нет.
Для начала вам нужно сначала импортировать свои данные.
Следующим шагом будет небольшое исследование данных. Проверьте пропущенные значения.
Так совпало, что все заполнили анкету целиком, но это компьютерные данные. Он не отображает реальные сценарии, так как у вас могут быть пропущенные значения. Пожалуйста, прочитайте здесь о том, как я обрабатываю пропущенные значения.
Суть исследовательского анализа (EDA) заключается в том, чтобы понять ваши данные. Понимание ваших данных также означает понимание распределения ваших данных. Чтобы понять распределение, нам нужно запустить несколько статистических данных. Об интерпретации этой статистики писал здесь.
Наша описательная статистика показывает наличие выбросов. Это лучше видно визуально. Приведенные ниже коды сделают это за нас.
Я ленивый парень. Вместо того, чтобы писать отдельные коды для построения графика распределения каждой переменной. Я решил написать цикл for, т. е. он перебирает каждый из элементов в моем списке numeric_features, созданном выше, а затем устанавливает блок-график для каждого.
Я сделал то же самое для своих категориальных переменных, но была создана гистограмма.
Еще один быстрый хак для EDA — использовать профилирование pandas. Это создаст что-то вроде приборной панели для вашего EDA.
Не все столбцы необходимы для машинного обучения, даже если они доступны. Вам нужно найти способ определить, какие из них имеют отношение к вашей модели. Один из способов сделать это — использовать корреляцию, то есть те входные переменные, которые коррелируют с вашей целевой переменной. Вместо того, чтобы использовать свою интуицию, я бы дал контроль над статистикой.
Давайте быстро проверим тип данных всех переменных.
Около 11 столбцов имеют тип данных объекта, что означает, что они являются категориальными переменными, но корреляция не работает со строками. Кроме того, модели машинного обучения нельзя создавать со строковыми переменными. Следовательно, нам нужно преобразовать их в числа. Для преобразования используется LabelEncoder(). Это присваивает номера, начинающиеся с 0, элементам в категориальных переменных.
Почему мы не заменили их один за другим с помощью метода replace? Любая догадка
Если вы перемещаете свою модель в производство, любая обработка данных, выполняемая перед обучением модели, также должна выполняться в производстве. Например, одной из категориальных переменных является семейное положение (замужем или холост). Алгоритмы не могут работать со строками; затем мы конвертируем их в 0 и 1. Чтобы иметь возможность использовать это в продакшене, вы не можете просить пользователей вводить 0 и 1 в качестве семейного положения. Таким образом, вам также придется написать строку кода для замены ввода в производстве. Затем строки кода начинают становиться громоздкими.
Но с помощью labelencoder() и присваивания переменной marital_encoder происходит преобразование и сохранение сопоставления. Следовательно, в производстве мне нужно вызвать переменную marital_encoder.
Данные до кодирования
Данные после кодирования
Если мы проверим информацию о данных, мы увидим, что только один столбец имеет тип объекта, который является customer_id, и он будет удален.
Ранее я говорил, что корреляция будет определять, какой столбец будет удален. Итак, давайте построим корреляционную матрицу.
Матрица
Это похоже на часть работы, которую нужно просмотреть, коррелирует она или нет.
Как я уже сказал, я ленивый парень. Итак, давайте определим функцию, которая перечисляет столбцы, чья оценка корреляции более значительна, чем указанная нами.
Мы устанавливаем порог 0,01.
Оценка низкая, не так ли?
Теперь, когда мы определили, какие столбцы имеют существующую связь. Затем мы приступаем к разделению данных для обучения модели. Мы должны сначала отделить функции (x) от вывода (y).
Затем разделите данные на обучающие и тестовые данные.
Определите функцию для проверки производительности модели
Затем самое приятное, обучение моделей.
Логистический регрессор
Во-первых, это логистическая регрессия.
Делаем прогнозы и тестируем производительность
Пожалуйста, взгляните на матрицу и попытайтесь понять, о чем она говорит.
Мы все слышали True Positive, True Negative, False Positive и False Negative. Что это значит? Давайте используем изображение ниже, чтобы разбить его.
Истинный положительный результат: женщина, которая беременна, правильно диагностирована как беременная.
Ложноположительный результат. Мужчина диагностирован как беременный, что не имеет никакого смысла. Также известна как ошибка 1 типа.
Ложноотрицательный результат. Беременной женщине неправильно поставлен диагноз отсутствия беременности, что также известно как ошибка 2-го типа.
Истинно отрицательный — у мужчины диагностировано отсутствие беременности. Это имеет смысл.
Цель состоит в том, чтобы свести к минимуму количество ошибок как первого, так и второго типа в вашей модели.
Случайный лес
Обучаем модель
Оцените производительность модели
Машина опорных векторов (SVM)
Обучение модели
Оценка эффективности
КНН
Обучение модели
Производительность модели
Древо решений
Обучение модели
Производительность модели
Классификатор повышения градиента
Обучение модели
Производительность модели
Из всех моделей Gradient Boost работал лучше. Затем сохраняем модель.
Обратите внимание, что кодировщики, созданные во время предварительной обработки, также были сохранены вместе с моделью.
Давайте проверим модель с данными, которых она раньше не видела. Для этого нам нужно будет загрузить сохраненную модель.
Загружаем тестовые данные.
Тот же набор столбцов, что и при создании модели, необходим и для тестирования модели.
Это захватывающая вещь в том, что не используется replace(). Если бы мы это сделали, нам пришлось бы писать это для каждого столбца заново.
Тестовые данные были преобразованы. Не строки, а числа
Затем просто вызовите model.predict()
Мы смогли экспортировать модель, а затем использовать экспортированную модель для данных, которых она раньше не видела.
Но это еще не все. Модель, оставленная в вашем блокноте, менее полезна. Целью построения модели машинного обучения является решение проблемы, а модель машинного обучения может сделать это только тогда, когда она активно используется в производстве. Итак, как мы это сделаем?
В образовательных целях всегда можно использовать streamlit. Я размещаю свои приложения для машинного обучения на Streamlit больше года, и это бесплатно.
Давайте быстро взглянем на то, как я запускал модель в производство. Во-первых, нам нужно загрузить необходимую библиотеку.
Определите функцию для загрузки вашей модели и кодировщика.
Поскольку модель отсортирована, нам нужно создать внешний вид приложения ml.
Начнем с определения наших категориальных переменных. В производственной среде пользователи не будут выбирать 0,1 в качестве семейного положения.
Мы сгруппировали наши переменные. Streamlit дает вам несколько вариантов при разработке внешнего интерфейса, но я остановился на поле выбора (раскрывающемся списке) и ползунке. Вы можете играть с другими.
Социально-экономические переменные
Контакты
Другие
Как только пользователь выбирает параметр, этот выбор сохраняется в соответствующей переменной. Но если пользователь выбирает семейное положение как холост, ваша модель не понимает холостяка; он понимает только 0 и 1. Отсюда и необходимость трансформации, которая и является сутью энкодера, который мы загрузили с моделью.
Это просто я проектирую переднюю часть.
Загрузите свои файлы на GitHub и подключите его к Streamlit, и все; вы переместили свою модель из своего ноутбука в производство.
Вы можете просмотреть приложение машинного обучения здесь, а также блокноты здесь.
Эти соревнования Kaggle больше не должны заканчиваться в вашем блокноте Jupyter. Перенесите их в производство.
Спасибо, что пришли на мой TedTalk. Адиос