В части 1 этой статьи мы рассмотрели, как импортировать данные и библиотеки, предварительно обрабатывая данные, используя модель классификатора CatBoost с поиском по сетке, чтобы найти оптимальные параметры и настроить отсечку классификатора, максимизируя сумму чувствительности и специфичности и максимизируя оценка Roc_Auc.

В этой части мы сосредоточимся на разработке функций, выборе функций и автоматизированном машинном обучении (AutoML).

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

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

Это выполняется после предварительной обработки данных, но до их разделения для обучения модели. Мы отойдем от предыдущей статьи, когда восстановим данные обучения и тестирования из объединенных данных.

Комбинация столбцов

Большинство столбцов имеют «категориальный» или «объектный» тип, поэтому создаются функции, представляющие собой комбинацию двух столбцов.

Давайте рассмотрим случай, когда один столбец — «Office_PIN» и «Manager_Num_Products», тогда комбинация этих двух будет называться «Office_PIN_and_Manager_Num_Products», и все значения будут объединены с помощью «_», поэтому будет создано много новых категорий.

Журналы шансов

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

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

Квадратное, квадратный корень и логарифмическое преобразование

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

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

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

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

Выбор функций

Может быть много методов для выбора лучших функций. Тем не менее, я использовал классификатор CatBoost и отсортировал функции по их важности, а также отобрал функции до тех пор, пока их совокупная сумма не составит около 98%. Этот процесс повторяется много раз, чтобы уменьшить количество переменных. Другие методы, такие как использование VIF или корреляции, также могут использоваться для выбора признаков.

Это трудоемкий процесс, поэтому цикл для автоматизации этого процесса будет очень полезен. Я выбрал 175 функций, повторив этот процесс 5–6 раз.

Первоначально, когда мы не выполняли настройку отсечки, наша оценка ROC_AUC при тестировании составляла 0,51, а теперь увеличилась до 0,61. Однако его все же можно увеличить после использования техники AutoML, поиска оптимальных параметров и настройки отсечки.

Случайный поиск оптимальных параметров

Это похоже на поиск по сетке, поскольку оба используют диапазон параметров. Тем не менее, в поиске по сетке мы определяем диапазон параметров целыми числами, и перебираются все комбинации. Напротив, при рандомизированном поиске пробуется ограниченное количество комбинаций, определяемых параметром «niter». Поиск по сетке эффективен, но медленный; рандомизированный поиск быстрый, но не всегда эффективный.

Настройка отсечки путем максимизации показателя ROC_AUCИспользование функции predict_proba для прогнозирования вероятностей в обучающем и проверочном наборе, а затем проверка различных значений отсечки, чтобы найти отсечку, при которой ROC_AUC максимальна.

Используя настроенную отсечку как 0,65, мы получаем оценку ROC_AUC для обучения и тестирования как 0,74 и 0,66.

До сих пор мы видели некоторое улучшение в нашем тестировании ROC_AUC, но у нас все еще есть кое-что в рукаве, и это AutoML. Некоторые люди считают, что AutoML съест рабочие места, другие говорят, что ему предстоит долгий путь. Давайте рассматривать его как инструмент и использовать его, если он дает хорошие результаты. Существует множество разновидностей AutoML, таких как Google, AWS, Azure, H2O, AutoKeras, Auto Sklearn, TPot и Pycaret, некоторые платные, а некоторые с открытым исходным кодом, но я воздерживаюсь от использования платных инструментов в хакатонах. Я нашел MLJAR весьма полезным и простым в использовании. У них есть код с открытым исходным кодом, а также платные веб-сервисы. Я рекомендую использовать MLJAR в Google Colab или в виртуальной среде.

Итак, сохраняем наш набор данных для использования в Colab.

MLJAR

Большинство необходимых нам библиотек предустановлено в Google Colab, но нам нужно установить MLJAR. Это довольно просто с помощью приведенной ниже команды, и после завершения установки будет предложено перезапустить среду выполнения, которая завершит нашу установку.

!pip install mljar-supervised

Нам нужно будет импортировать некоторые библиотеки, чтобы начать.

from google.colab import drive
drive.mount('/content/drive')

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

После успешного импорта диска мы можем прочитать файлы данных.

MLJAR имеет много режимов, так как мы используем его для хакатона/конкурса, мы будем использовать режим «Соревнование». Информация о различных режимах доступна в их репозитории Github.

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

Точная настройка отсечки на модели AutoML

Оба метода, ранее использовавшиеся для настройки отсечки, были применены в Jupyter Notebook, и результаты были схожими, оба немного улучшили показатели ROC_AUC при тестировании до 0,693.

Результаты

В двух статьях мы построили множество моделей, начиная с нашей первой модели, где мы использовали поиск по сетке с Catboost до AutoML с тонкой настройкой Cutoff. Это путешествие показало нам примерно 30-процентное улучшение результатов тестирования с 0,53 до 0,69.

Последние слова

Хоть я и участвовал в этом хакатоне, все равно не смог добиться такого хорошего результата. Точно так же я выполнил все шаги, кроме Feature Engineering, где я добавил шаг при компиляции этой статьи, и это действительно имело значение. Все файлы данных и Jupyter Notebook находятся в репозитории Github. Комментарии и предложения приветствуются.