Никто не может насвистывать симфонию. Чтобы ее сыграть, нужен целый оркестр.

- Х. Э. Люккок

1 - Постановка проблемы:

P orto Seguro - одна из крупнейших в Бразилии компаний по страхованию автомобилей и домовладельцев. В этом соревновании задача состоит в том, чтобы построить модель, которая предсказывает вероятность того, что водитель подаст иск о автостраховании в следующем году.

✦ Полный проект можно найти здесь.

✦ Вы также можете связаться со мной в Linkedin.

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

Источник данных: наборы данных для обучения и тестирования можно загрузить по этой ссылке Kaggle.

2 - Цели и ограничения:

  1. Повышение коэффициента Джини. Это метрика оценки, указанная организаторами на Kaggle. Коэффициент Джини колеблется от приблизительно 0 для случайного предположения до приблизительно 0,5 для высшей оценки. Для получения дополнительной информации о коэффициенте Джини перейдите по этой ссылке.
  2. В этом тематическом исследовании время не является ограничением.

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.

✦ Ссылки:

  1. Рулевое колесо фортуны: Porto Seguro EDA
  2. Решение Дмитрия Алтухова за 3 место.
  3. Шумовой анализ объектов Porto Seguro.
  4. Https://github.com/pklauke/Kaggle-PortoSeguroSafeDriverPrediction