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

Итак, здесь я представляю лучшую часть конкурса.

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

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

  1. @Zirons
  2. @ Rajat5Ranjan
  3. @TheGupta
  4. @ Sandeepkumar121995
  5. @ Artem.dubinich
  6. @Predict This!
  7. @Sandeeppat

Рабочий процесс конкурса по машинному обучению

  1. Импорт данных
  2. Feature Engineering
  3. Обработка выбросов
  4. Лечение недостающих ценностей
  5. Масштабирование данных
  6. Отбор проб
  7. Разделение данных
  8. Обучение модели на обучающих данных
  9. Прогнозирование по данным тестирования и отправка результата.

Решения, которые стоит прочитать:

  1. Ziron’s Team: Это решения высшего ранга, которые я мог найти, так что в этом что-то есть. С удовольствием читаю решение топпера
  2. Sandeeppat: Очень подробное ядро. Он подробно рассказал о своей разработке функций и аккуратном и чистом ядре.

Коды: Файл кода

Импорт данных. Самое приятное в хакатоне то, что вам не нужно собирать данные, сравнивать их с вашими личными проектами, где вам нужно собирать данные, что требует много времени и много усилие. Сбор данных может быть интересным занятием, но не всегда. Здесь вам нужно распаковать тренировочные данные, импортировать их в Pandas Dataframe.

Разработка функций

Причина разницы в рейтинге топ-20 - простая удача, но причина, по которой 20 лучших и 100/200 находятся в топ-20, - это Feature Engineering. Нет ни единого верного трюка в разработке функций, люди изучают его со временем. Некоторые люди создают функцию для создания функции, которую они обычно используют, многие делают ее на лету в зависимости от конкуренции, оба метода одинаково хороши: один дает скорость, другой дает возможность настройки. Здесь я бы показал некоторые функции, которые были созданы почти всеми, но по-разному, и некоторые функции, которые были уникальными для пользователя.

1. Возраст

В каждом решении, которое я читал, это была самая распространенная функция

Возраст рассчитывался как разница между столбцом «Дата выплаты» и столбцом «Дата рождения».

Большинство людей заметили сбой в столбце «Дата рождения»?

Проблема заключалась в том, что панды читали dob «01–01–74» как «01–01–2064», что следовало читать как «01–01–1964». Я перечислю различные подходы, которые люди использовали для решения этой проблемы:

Метод 1

Способ 2

Способ 3

Метод 4

Метод 5

2. Дата выдачи и дата рождения

Оба имеют форматы типа «Дата», но их нельзя использовать в том виде, в котором они есть, поэтому наиболее распространенным методом является извлечение «месяца», «даты» и «года», но можно также извлечь другие функции, например как «Это начало, середина или конец месяца», «день даты», «квартал года», «номер недели», «Абсолютная дата с 1 января 1970 года».

Метод 1 (исходный)

Метод 2 (с использованием функции)

3. Извлечение месяца и года из «среднего возраста счета» и «продолжительности кредитной истории»

Большинство людей извлекали из столбца «Месяцы» и «Год», но некоторые также вычисляли «Общее время в месяцах» для столбца, но было приятно видеть, что каждый делал это по-своему, некоторые использовали регулярные выражения, некоторые использовали split и некоторые из них уже использовались, так что вы можете использовать тот метод, который вам кажется простым.

Метод 1

Способ 2

Способ 3

Метод 4

Метод 5

Метод 6

4. Выполните описание оценки CNS (отчет бюро)

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

Метод 1

Способ 2

Способ 3

Метод 4

Метод 5

5. Оценка CNS

Многие люди сохранили значения этого столбца как есть, но некоторые пытались объединить значения, используя «pd.cut» или «pd.qcut», но некоторые также использовали свои определения для сортировки переменной.

6. Характеристики, основанные на «первичных актах», «вторичных актах», «ltv», «выплаченной сумме».

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

7. Некоторые уникальные функции всех ядер:

7.1 Функция - на основе аномальной ветви:

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

7.2 Непогашенный остаток на счетах

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

7.3 Основная защита, дополнительная защита, Общая защита и защита за последние шесть месяцев

Основной дефолт

Вторичный по умолчанию

Итого по умолчанию

По умолчанию за последние шесть месяцев

8. Функции, созданные с помощью функции Groupby:

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

9. Разница в выплаченной сумме

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

10. Отсутствующие значения в типе занятости

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

11. Масштабирование данных

Масштабирование выполняется, потому что у нас много разных функций, и поскольку большинство алгоритмов машинного обучения используют евклидово расстояние между двумя точками данных в своих вычислениях, поэтому нам нужно привести все функции к одному уровню величин, но только несколько ядер реализовали масштабирование. Некоторые часто используемые методы масштабирования: Standard Scaler, Minmax Scaler, Robust Scaler. Но, к моему удивлению, одно ядро ​​использовало квантильное преобразование для масштабирования данных, что тоже было в новинку для меня.

Квантильный масштабатор / преобразователь

12. Выборка

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

  1. Случайная недостаточная выборка
  2. Случайная передискретизация

Разделение данных

Данные обычно разделяются между обучением и тестированием в соотношении 75: 25 или 80:20 в зависимости от выбора, это делается для того, чтобы мы могли обучить нашу модель на одном наборе и протестировать ее на другом.

В основном разделение выполняется на основе классов, что достигается с помощью train_test_split:

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

14. Обучение модели:

Чаще всего в ядрах использовались модели Catboost и LightGBM с использованием перекрестной проверки в k-кратном размере. Модель с хорошей оценкой обучения и тестирования, а разница между оценкой обучения и тестирования незначительна, считается хорошей моделью. Здесь я показал вам метод обучения, используемый командой Ziron, но вы можете тренировать свою модель в соответствии со своими предпочтениями.

15. Отправленные файлы

Файлы отправки представляют собой выходные данные для данных тестирования, для которых оценивается наша модель, и оценка дается на основе метрики оценки, например. площадь под кривой ROC, RMSE (среднеквадратичная ошибка), RMSLE (среднеквадратичная ошибка для зарегистрированных значений). Файлы для отправки - это в основном файлы Excel или CSV.