Никто не может насвистывать симфонию. Чтобы ее сыграть, нужен целый оркестр.
- Х. Э. Люккок
1 - Постановка проблемы:
✦ P orto Seguro - одна из крупнейших в Бразилии компаний по страхованию автомобилей и домовладельцев. В этом соревновании задача состоит в том, чтобы построить модель, которая предсказывает вероятность того, что водитель подаст иск о автостраховании в следующем году.
✦ Полный проект можно найти здесь.
✦ Вы также можете связаться со мной в Linkedin.
«Неточности в прогнозах страховых компаний по страхованию автомобилей увеличивают стоимость страховки для хороших водителей и снижают цену для плохих».
Источник данных: наборы данных для обучения и тестирования можно загрузить по этой ссылке Kaggle.
2 - Цели и ограничения:
- Повышение коэффициента Джини. Это метрика оценки, указанная организаторами на Kaggle. Коэффициент Джини колеблется от приблизительно 0 для случайного предположения до приблизительно 0,5 для высшей оценки. Для получения дополнительной информации о коэффициенте Джини перейдите по этой ссылке.
- В этом тематическом исследовании время не является ограничением.
3 - Исследовательский анализ данных:
Наибольшая ценность изображения - это когда оно заставляет нас замечать то, чего мы никогда не ожидали увидеть.
- Джон Тьюки
✦ У нас есть 2 файла .csv. train.csv содержит 595212 точек данных вместе с их фактическими метками классов. test.csv содержит 892816 точек данных. Каждая точка данных имеет 57 измерений.
✦ Функции разделены на 3 категории. Функции, в названии которых есть ‘ind’, являются отдельными функциями. Это функции, которые содержат данные о человеке. Функции с ‘car’ и ‘reg’ относятся к автомобилю и региону соответственно.
✦ Эти функции предварительно обработаны, поэтому мы не можем многое разобрать об этих функциях.
✦ Кроме того, бинарные функции содержат 'bin' в своих именах, а категориальные функции содержат 'cat' в своих именах. имена. Остальные функции непрерывны.
✦ Существует также набор функций, в названии которых есть ‘calc’. Эти функции рассчитываются на основе существующих функций.
Проверка классового дисбаланса:
✦ Наблюдается очень высокий дисбаланс, о чем свидетельствует тот факт, что лишь небольшое количество людей на самом деле подают свои претензии.
1 - Визуализация отдельных двоичных функций:
2 - Визуализация отдельных категориальных характеристик:
3 - Визуализация отдельных непрерывных / порядковых элементов:
4 - Визуализация отдельных региональных особенностей:
5 - Визуализация категориальных характеристик автомобиля:
6 - Визуализация непрерывных характеристик автомобиля:
7 - Визуализация рассчитанных непрерывных функций:
8 - Визуализация вычисляемых двоичных функций:
9 - Сравнение мультифункциональности:
Это все для EDA. А теперь давайте обсудим самую важную часть этого тематического исследования, т. Е. Разработку функций.
4 - Разработка функций: секретный соус аналитика данных!
«В конце концов, некоторые проекты машинного обучения успешны, а некоторые - нет. В чем разница? Несомненно, наиболее важным фактором являются используемые функции ».
- Проф. Педро Домингос
1 - Число пропущенных значений в строке. Эта функция представляет количество пропущенных значений в каждой строке данных. Ниже приведен фрагмент кода функции для вычисления этой функции.
✦ Эта функция принимает дискретные значения от 0 до 8.
✦ Нет необходимости выполнять какую-либо сортировку по кодированию для этой функции.
2 - Функции умножения и деления. Мы умножаем и разделяем две существующие функции друг на друга и добавляем их как новые функции. Ниже приведен фрагмент кода. Мы используем непрерывные функции для получения этой конкретной функции.
✦ Эти характеристики представляют собой непрерывные значения и, следовательно, могут рассматриваться как числовые характеристики.
✦ Лучше применить StandardScaler к этой функции, прежде чем загружать ее в нашу модель.
3 - Функция строки: мы возьмем все категориальные функции в точке данных, соединим их знаком подчеркивания '_' и создадим строку дискретных значений как признак.
✦ Нам нужно будет применить OrdinalEncoding к этим строковым элементам, прежде чем передавать их в модель.
4 - Функции категориального подсчета. Эта функция подсчитывает количество раз, когда каждое категориальное значение появляется в наборе данных для каждой функции.
✦ Эта функция принимает числовые значения. Мы применим поверх него StandardScaler.
5 - Функция двоичной суммы. Эта функция представляет собой сумму всех двоичных функций в строке.
✦ Эта функция содержит дискретные значения от 0 до 6.
✦ Нет необходимости в кодировании.
6 - Функция абсолютной двоичной разницы. В этой функции мы создаем ссылочную строку, которая подобна медиане всех строк. Затем мы вычисляем сумму абсолютной разницы каждой строки со ссылочной строкой.
✦ Функция дискретного значения. Значения от 1 до 7.
✦ Нет необходимости в кодировании.
7 - Групповая статистическая функция: мы получаем некоторую статистику, такую как максимальное, минимальное, среднее, среднее и стандартное отклонение, группируя наши точки данных по некоторым характеристикам.
✦ Это также дискретные числовые значения. Нет необходимости применять какую-либо кодировку.
8 - Функции на основе модели:
✦ Создание этих функций может занять более 30 часов даже на таких платформах, как Google Colab или Google Cloud Platform .
✦ Я использовал Многопроцессорность в Python, чтобы получить эти функции примерно за шесть часов на облачной платформе Google. Хитрость заключается в том, чтобы разделить все функции на три категории: 'ind', 'car' и 'reg', а затем передать их функциям по отдельности и запустить 3 процесса параллельно. Ниже приведен код измененной функции:
✦ А теперь код для запуска параллельных процессов:
✦ Вы также можете разделить эти функции и изменить функции по своему усмотрению. Если вы используете GCP, вы можете использовать как минимум 8 процессоров. Так вы можете еще больше ускорить процесс.
✦ Помимо описанных выше функций, есть некоторые категориальные особенности, которые содержат значение «-1».
✦ Мы применим к ним OrdinalEncoding. Мы также применим StandardScaler к непрерывным функциям.
Это все, что касается разработки функций. Теперь давайте обсудим решение этой проблемы с помощью модели ансамбля.
5 - Решение ансамблевой модели:
✦ Теперь, когда у нас есть необходимые функции, и мы также выполнили EDA, давайте перейдем к последней части этого блога: ансамблевой модели для окончательного решения.
Ансамбль сложно сделать. Это похоже на трехмерные шахматы.
- Эрик Богосян
✦ Приведенный выше фрагмент кода предназначен для класса Create_ensemble, который принимает объекты базовой модели в качестве входных данных. В нем также есть метод прогноз, который тренирует модель на обучающих данных и прогнозирует вывод для тестовых данных.
Мы можем загрузить файл Submission.csv на эту K страницу aggle и получить оценку.
✦ Будущие работы:
Чтобы еще больше улучшить результат, мы можем попробовать несколько моделей глубокого обучения. Мы можем попробовать простую многослойную нейронную сеть и глубокую сверточную нейронную сеть. Мы можем объединить результаты, полученные из ансамблевого решения с решением глубокого обучения, и улучшить окончательный результат Kaggle.
✦ Ссылки: