Автоматизируйте конвейер разработки машинного обучения с помощью PyCaret

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

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

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

Что если у вас есть библиотека, которая может помочь вам автоматизировать этот процесс и предоставить вам лучшие альтернативы для обучения вашей модели? Вот что такое PyCaret.

Я считаю себя энтузиастом науки о данных. Мне нравится разрабатывать проекты машинного обучения и глубокого обучения, находить закономерности в данных и создавать захватывающие дух визуализации. Но, честно говоря, есть некоторые повторяющиеся задачи, которые я хотел бы автоматизировать.
PyCaret, по словам их разработчиков, «представляет собой библиотеку машинного обучения с открытым исходным кодом на Python. который автоматизирует рабочие процессы машинного обучения». Круто, не правда ли?

Хорошо, я привлек твое внимание, верно? Что это означает для конечных пользователей, начинающих заниматься наукой о данных? Теперь вы можете собирать данные, использовать инструменты с низким кодом и полностью автоматизировать проекты разработки машинного обучения, не беспокоясь о написании сотен строк кода. Вы можете подумать: «Это жульничество, да?» На самом деле, при работе над реальными проектами вам необходимо оптимизировать время, которое вы тратите на повторяющиеся задачи, и хотя включение основ моделей машинного обучения является обязательным, если вы занимаетесь наукой о данных, вы необходимо использовать любой доступный инструмент, который позволит вам сократить "время выхода на рынок" и позволит вам сосредоточиться на тех шагах, которые повышают ценность вашего проекта.

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

Давайте посмотрим, как PyCaret может вывести процесс разработки на новый уровень. В этом примере я буду использовать Google Colab, но вы можете использовать записную книжку или настройку разработки по своему выбору.

Настройка вашего проекта

Первым делом откройте блокнот и установите PyCaret.

‹Здравствуй, мой друг Колаб!›

Теперь давайте установим PyCaret.

!pip install pycaret

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

from pycaret.utils import enable_colab
enable_colab()

Механизм ноутбука установит Pycaret и все его зависимости. вот и все. Ваша среда настроена👌

Что такое бинарная классификация?

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

Двоичная классификация – это метод управляемого машинного обучения для прогнозирования дискретных и неупорядоченных меток категорийных классов, таких как "Годен/Не годен", "Положительно/Отрицательно", "Да/Нет", "По умолчанию/Не по умолчанию" и т. д.

Несколько реальных вариантов использования классификации перечислены ниже:

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

Набор данных

Используя документацию PyCaret, в этом руководстве мы будем использовать Набор данных клиентов кредитных карт по умолчанию. Этот набор данных содержит информацию о платежах по умолчанию, демографических факторах, кредитных данных, истории платежей и выписках о счетах клиентов по кредитным картам на Тайване с апреля 2005 г. по сентябрь 2005 г. Имеется 24 000 образцов и 25 функций.

Ниже приведены краткие описания каждого столбца:

  • ID: идентификатор каждого клиента.
  • LIMIT_BAL: сумма кредита в тайваньских долларах (включая индивидуальный и семейный/дополнительный кредит).
  • ПОЛ: пол (1=мужской, 2=женский)
  • ОБРАЗОВАНИЕ: (1=аспирантура, 2=университет, 3=средняя школа, 4=другое, 5=неизвестно, 6=неизвестно)
  • БРАК: семейное положение (1=замужем, 2=холост, 3=другое).
  • ВОЗРАСТ: возраст в годах
  • От PAY_0 до PAY_6: статус платежа на n месяцев назад (PAY_0 = последний месяц … PAY_6 = 6 месяцев назад) (Ярлыки: -1=платить должным образом, 1=задержка платежа на один месяц, 2=задержка платежа на два месяца, … 8=отсрочка платежа на восемь месяцев, 9=отсрочка платежа на девять месяцев и выше)
  • BILL_AMT1–BILL_AMT6: сумма выписки по счету за n месяцев назад ( BILL_AMT1 = last_month .. BILL_AMT6 = 6 месяцев назад)
  • от PAY_AMT1 до PAY_AMT6: сумма платежа n месяцев назад ( BILL_AMT1 = last_month .. BILL_AMT6 = 6 месяцев назад)
  • по умолчанию: Платеж по умолчанию (1=да, 0=нет) Target Column

Теперь, когда мы поняли наш источник, давайте загрузим данные.

from pycaret.datasets import get_data
dataset = get_data('credit')

Чтобы продемонстрировать функцию predict_model() на невидимых данных, выборка из 1200 записей была исключена из исходного набора данных для использования в прогнозах. Имейте в виду, что это не тестовый набор данных, эти невидимые данные являются подмножеством, которое будет использоваться в конце проекта для выполнения наших прогнозов. Другой способ думать об этом состоит в том, что эти записи недоступны во время обучения модели машинного обучения.

data = dataset.sample(frac=0.95, random_state=786)
data_unseen = dataset.drop(data.index)
data.reset_index(inplace=True, drop=True)
data_unseen.reset_index(inplace=True, drop=True)
print('Data for Modeling: ' + str(data.shape))
print('Unseen Data For Predictions: ' + str(data_unseen.shape))

Настройка среды в PyCaret

Функция setup() инициализирует среду в pycaret и создает конвейер преобразования для подготовки данных для моделирования и развертывания. setup() необходимо вызывать перед выполнением любой другой функции в pycaret.

Он принимает два обязательных параметра: кадр данных pandas (я могу создать пост о pandas позже) и имя целевого столбца.

Когда выполняется setup(), алгоритм вывода PyCaret автоматически выводит типы данных для всех функций на основе определенных свойств. Если все типы данных определены правильно, можно нажать enter для продолжения или ввести quit для завершения эксперимента. Обеспечение правильности типов данных имеет фундаментальное значение в PyCaret, поскольку он автоматически выполняет несколько задач предварительной обработки, которые необходимы для любого эксперимента по машинному обучению. Эти задачи выполняются по-разному для каждого типа данных, поэтому очень важно правильно настроить их.

from pycaret.classification import *
exp_clf101 = setup(data = dataset, target = 'default', session_id=123)

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

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

  • session_id: псевдослучайное число, распределяемое как начальное значение во всех функциях для последующего воспроизведения. Если session_id не передается, автоматически генерируется случайное число, которое распространяется на все функции. В этом эксперименте session_id устанавливается как 123 для последующей воспроизводимости.
  • Тип цели: двоичный или многоклассовый. Тип цели автоматически определяется и отображается. Нет никакой разницы в том, как проводится эксперимент для бинарных или мультиклассовых задач. Все функции идентичны.
  • Кодирование метки. Если целевая переменная имеет строковый тип (например, «Да» или «Нет») вместо 1 или 0, она автоматически кодирует метку в 1 и 0 и отображает сопоставление (0: Нет, 1: Да) для справки. В этом эксперименте кодирование метки не требуется, поскольку целевая переменная имеет числовой тип.
  • Исходные данные. Отображает исходную форму набора данных. Этот эксперимент (22 800, 24) означает 22 800 выборок и 24 функции, включая целевой столбец.
  • Отсутствующие значения. Если в исходных данных отсутствуют значения, это будет отображаться как True. Для этого эксперимента в наборе данных нет пропущенных значений.
  • Числовые признаки. Количество признаков, определяемых как числовые. В этом наборе данных 14 из 24 функций выводятся как числовые.
  • Категорические признаки. Количество признаков, определяемых как категориальные. В этом наборе данных 9 из 24 признаков считаются категориальными.
  • Преобразованный набор поездов. Отображает форму преобразованного набора поездов.
  • Преобразованный набор тестов. Отображает форму преобразованного набора тестов/удержаний.

Сравнение разных моделей

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

best_model = compare_models()

Два простых слова кода (даже строки) были обучены и оценены на более чем 15 моделях с использованием перекрестной проверки. 🦾

Напечатанная выше сетка оценок выделяет самые эффективные показатели только для целей сравнения. Сетка по умолчанию сортируется по точности (от большего к меньшему).

По умолчанию compare_models возвращает наиболее эффективную модель на основе порядка сортировки по умолчанию, но может использоваться для возврата списка N лучших моделей с использованием n_select параметров.

Распечатаем лучшую модель.

print(best_model)

Для этого варианта использования мы получили следующие результаты:

LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,solver='svd', store_covariance=False, tol=0.0001)

Линейный дискриминантный анализ — наш лучший кандидат, теперь давайте создадим нашу модель.

Создание и настройка вашей модели

Теперь, когда у вас есть кандидат для вашего проекта, давайте создадим модель и настроим ее соответствующим образом.

Во-первых, нам нужно определить идентификатор нашей модели.

models()

Давайте создадим нашу модель, хорошо?

lda = create_model('lda')

Вот и все, у вас есть модель. Но ‹Да, всегда но›как и в любом проекте машинного обучения, вам нужно настроить свою модель. Хорошей новостью является то, что для запуска этого требуется всего одна строка.

tuned_lda = tune_model(lda)

Эта функция автоматически настраивает гиперпараметры модели, используя Random Grid Search предопределенное пространство поиска. На выходе распечатывается оценочная сетка, которая показывает точность, AUC, полноту, точность, F1, каппа и MCC в кратном порядке для лучшей модели.

Мы можем распечатать результаты настройки модели

print(tuned_lda)

И мы получили следующий вывод на основе процесса настройки.

LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage='auto',solver='lsqr', store_covariance=False, tol=0.0001)

Это была оригинальная модель без тюнинга. Вы можете заметить различия.

LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,solver='svd', store_covariance=False, tol=0.0001)

Построение модели

Было бы неплохо увидеть результат на графике, верно? О, подождите! мы можем сделать это с помощью простой строки кода!

Распечатаем матрицу путаницы. Но что такое матрица путаницы? Это таблица с 4 различными комбинациями прогнозируемых и фактических значений. Мы используем его для измерения полноты, точности, специфичности, точности и, что наиболее важно, кривых AUC-ROC.

plot_model(tuned_lda, plot = 'confusion_matrix')

Теперь, когда у нас есть представление об истинно положительном, истинно отрицательном, ложноположительном и ложноотрицательном, давайте построим кривые ROC.

plot_model(tuned_lda, plot = 'auc')

Если вы впервые видите этот график, кривая ROC позволяет визуализировать, хорошо ли работает ваша модель для случаев True Positive. В зависимости от вашего варианта использования вам понадобится кривая как можно дальше от линии 0,5, но не слишком сильно, чтобы не перегружать модель. Мы обсудим это в следующих постах. Давайте придерживаться идеи, что пока мы находимся выше линии 0,5, мы сможем действительно выявлять положительные случаи.

PyCaret предлагает 15 различных графиков для анализа. Вы можете обратиться к документации plot_model() для получения дополнительной информации о графиках.

Еще одним интересным сюжетом будет точный.

plot_model(tuned_lda, plot = 'pr')

Или даже вы можете визуализировать ранг важности функции.

plot_model(tuned_lda, plot='feature')

Прогноз на тесте / задержке Образец

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

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

predict_model(tuned_lda)

Точность набора тестов составляет 0.8197 по сравнению с 0.8292, достигнутой по результатам tuned_lda. Это незначительная разница, учитывая, что значительный разрыв между ними может выявить модель переобучения. Нежелательное поведение для нашего проекта машинного обучения.

Завершение вашей модели

На этом этапе, после настройки и настройки вашей модели, последний шаг — ее доработка.

Чтобы добиться этого, угадайте, что? Требуется только одна строка кода. Круто, правда?

final_rf = finalize_model(tuned_rf)

Теперь мы можем использовать нашу модель для прогнозирования данных по нашему набору данных data_unseen.

unseen_predictions = predict_model(final_lda, data=data_unseen)unseen_predictions.head(10)

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

Сохранение вашей модели

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

save_model(final_lda,'Final LDA Model 11Feb2022')

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

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

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

Для получения дополнительной информации вы можете посетить Документация по PyCaret.

Если вы дойдете до этого момента, спасибо!

<AL34N!X>