Привет, Хабр!
PyCaret — это open-source библиотека, которая предлагает low-code подход к созданию, обучению и внедрению моделей ML. Она позволяет провести весь процесс — от подготовки данных до развертывания модели в продакшн — всего за несколько строк кода.
Основные возможности
PyCaret разделен на несколько модулей, каждый из которых предназначен для выполнения определенного типа задач:
pycaret.classification
: для задач, где нужно предсказать категорию или класс.pycaret.regression
: для задач предсказания числового значения.pycaret.clustering
: для сегментации данных на группы с схожими характеристиками.pycaret.anomaly
: для выявления нетипичных данных, которые значительно отличаются от остальных.pycaret.time_series
: для задач прогнозирования значений во времени.pycaret.nlp
: для задач обработки естественного языка.
Первый шаг при работе с PyCaret — это инициализация окружения с помощью функции setup()
. Эта функция выполняет предобработку данных.
from pycaret.classification import setup
# загрузка данных
data = pd.read_csv('data.csv')
# инициализация эксперимента
exp = setup(data=data, target='target_column',
normalize=True,
train_size=0.8,
session_id=123)
Код выполнит след. шаги:
Загружает данные и задает целевую переменную.
Автоматически разбивает данные на обучающую (80%) и тестовую (20%) выборки.
Применяет нормализацию числовых признаков.
Фиксирует случайное значение для воспроизводимости результатов с помощью
session_id
.
После выполнения setup()
, PyCaret возвращает множество полезных объектов, которые можно использовать в дальнейшем. Например, можно получить доступ к данным после предобработки:
X_train = get_config('X_train')
X_test = get_config('X_test')
Функция compare_models()
— это, на мой взгляд, одна из самых мощных функций PyCaret. Она позволяет автоматически обучить и оценить несколько моделей, используя кросс-валидацию, и возвращает лучшую модель на основе выбранной метрики.
from pycaret.classification import compare_models
# сравнение всех доступных моделей и выбор лучшей
best_model = compare_models()
По умолчанию, compare_models()
выполняет оценку всех доступных моделей и сортирует их по метрике качества. Можно настроить поведение этой функции, например, указав количество моделей, которые нужно вернуть:
# возвращаем топ-3 модели
top3_models = compare_models(n_select=3)
После выбора лучшей модели можно провести доп. тюнинг её гиперпараметров с помощью функции tune_model()
. Эта функция автоматизирует процесс поиска оптимальных параметров.
from pycaret.classification import tune_model
# тюнинг лучшей модели
tuned_model = tune_model(best_model)
После настройки и тюнинга модели, можно ее визуализировать и оценить её производительность с помощью функции evaluate_model()
.
from pycaret.classification import evaluate_model
# оценка модели
evaluate_model(tuned_model)
Функция blend_models()
используется для создания ансамблей моделей путем их объединения. Она позволяет выбрать несколько моделей и комбинировать их прогнозы с использованием различных стратегий, таких как усреднение или взвешенное усреднение:
from pycaret.classification import setup, compare_models, blend_models
# Шаг 1: Инициализация эксперимента
exp = setup(data=data, target='target_column', normalize=True, session_id=123)
# Шаг 2: Сравнение моделей и выбор топ-3
top3_models = compare_models(n_select=3)
# Шаг 3: Ансамблирование топ-3 моделей
blended_model = blend_models(estimator_list=top3_models)
Функция stack_models()
используется для создания многоуровневых ансамблей, где выходы базовых моделей передаются на вход мета-модели. Этот подход позволяет учесть ошибки базовых моделей и улучшить финальный прогноз:
from pycaret.classification import setup, compare_models, stack_models
# Шаг 1: Инициализация эксперимента
exp = setup(data=data, target='target_column', normalize=True, session_id=123)
# Шаг 2: Сравнение моделей и выбор топ-5
top5_models = compare_models(n_select=5)
# Шаг 3: Стекинг моделей
stacked_model = stack_models(estimator_list=top5_models, meta_model=None)
Пример задачи регрессии на наборе данных. Весь процесс от предобработки данных до выбора и тюнинга модели занимает всего несколько строк кода:
import pandas as pd
from pycaret.regression import setup, compare_models, tune_model, save_model
# Шаг 1: Загрузка данных
data = pd.read_csv('diamonds.csv')
# Шаг 2: Инициализация эксперимента
exp = setup(data=data, target='price', normalize=True, silent=True)
# Шаг 3: Сравнение моделей
best_model = compare_models()
# Шаг 4: Тюнинг лучшей модели
tuned_model = tune_model(best_model)
# Шаг 5: Сохранение модели
save_model(tuned_model, model_name='diamond_price_model')
Для решения других задач (например, классификации, кластеризации, или работы с временными рядами) нужно просто заменить модуль импорта pycaret.regression
на соответствующий модуль, например, pycaret.classification
для классификации, и так далее. Логика работы остается такой же.
Пример применения
Разберем кейс, связанный с прогнозированием цены на жилье.
Для начала загрузим и подготовим набор данных о ценах на жилье. Будем использовать дефолт датасет house-prices
:
import pandas as pd
# Загрузка данных
data = pd.read_csv('house-prices.csv')
Инициализируем окружение:
from pycaret.regression import setup
# инициализация
exp = setup(data=data, target='SalePrice',
normalize=True,
polynomial_features=True,
feature_interaction=True,
log_experiment=True,
experiment_name='house_price_prediction',
silent=True)
Сравним модели с compare_models()
На этом этапе автоматически обучим и сравним несколько моделей ML, чтобы выбрать наилучшую:
from pycaret.regression import compare_models
# сравнение всех доступных моделей и выбор лучшей
best_model = compare_models()
Чтобы улучшить производительность выбранной модели, проведем тюнинг её гиперпараметров.
from pycaret.regression import tune_model
# тюнинг лучшей модели
tuned_model = tune_model(best_model)
После тюнингаможно визуализировать и оценить работу модели с помощью различных графиков:
from pycaret.regression import plot_model, evaluate_model
# Построение графиков для оценки модели
plot_model(tuned_model, plot='residuals')
plot_model(tuned_model, plot='error')
evaluate_model(tuned_model)
Теперь теперь можно использовать модель для предсказания на новых данных:
from pycaret.regression import predict_model
# прогнозирование на новых данных
new_data = pd.read_csv('new_house_data.csv')
predictions = predict_model(tuned_model, data=new_data)
print(predictions)
Сохраним модель для дальнейшего использования или развертывания в продакшн:
from pycaret.regression import save_model
# Сохранение модели
save_model(tuned_model, model_name='final_house_price_model')
Подробнее с библиотекой можно ознакомиться здесь.
А другие библиотеки и практические инструменты коллеги из OTUS рассматривают в рамках практических онлайн-курсов. Подробнее в каталоге.
saege5b
Только любит использование *kwards неимоверно.
Даже в официальном руководстве чёрт шею свернёт. А о некоторых моментах вообще - тишина.
Слишком много неявнооформленных глобальных переменных, о которых скромно умалчивается.
В более-менее сложных наборах регулярно что-то ссыпется, возникают конфликты неявных преобразований и приведений.
Для временных радов с несколькими переменными, часть моделей может автоматически вызываться с неправильными или недостающими параметрами.
Нет единообразия в индивидуальном использовании моделей. А автовыбор может занять отвратительно много времени и в результате просто с грохотом упасть, выжрав 12 Гб оперативы ГуглоКоллаба, на небольших наборах в пару тысяч.
Руководство дикий микс из статей к разным версиям.