Введение

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

Новый модуль временных рядов PyCaret. Изображение автора

В отличие от других библиотек машинного обучения с открытым исходным кодом, PyCaret является low-code библиотекой, с помощью которой можно заменить “тонны” кода всего несколькими строками. Благодаря этому, эксперименты проходят в разы быстрее и эффективнее. PyCaret представляет собой обертку Python для нескольких библиотек и фреймворков машинного обучения, таких как scikit-learn, XGBoost, LightGBM, CatBoost, spaCy, Optuna, Hyperopt, Ray и других.

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

Модуль временных рядов PyCaret

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

  • статистическое тестирование;
  • обучение и выбор моделей (30+ алгоритмов);
  • анализ моделей;
  • автоматическая настройка гиперпараметров;
  • логирование экспериментов;
  • развертывание в облаке и многое другое.

И все это всего с помощью нескольких строк кода! Впрочем, на это же способны и другие модули Pycaret. Хотите в этом убедиться? Ознакомьтесь с официальным ноутбуком проекта.

Вы можете использовать pip для установки этой библиотеки. Если PyCaret установлена у вас в той же среде, то нужно создать отдельную среду для pycaret-ts-alpha, иначе возникнут конфликты зависимостей. pycaret-ts-alpha будет объединен с основным пакетом Pycaret в следующем крупном релизе.

pip install pycaret-ts-alpha

Пример рабочего процесса

Рабочий процесс в модуле временных рядов PyCaret очень прост. Начинать следует с функции setup, где вы определяете горизонт прогнозирования fh и количество папок (folds). Вы также можете определить стратегию fold_strategy как расширяющуюся (expanding) или скользящую (sliding).

После такой настройки функция compare_models, которая вам наверняка знакома, может обучить и оценить 30+ алгоритмов  —  от ARIMA до XGboost (TBATS, FBProphet, ETS и др.).

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

А с помощью predict_model строятся прогнозы.

Загрузка данных

import pandas as pd
from pycaret.datasets import get_data
data = get_data('pycaret_downloads')
data['Date'] = pd.to_datetime(data['Date'])
data = data.groupby('Date').sum()
data = data.asfreq('D')
data.head()
Изображение автора
# построение графика данных
data.plot()
График временного ряда pycaret_downloads. Изображение автора

Этот временной ряд представляет собой количество ежедневных загрузок библиотеки PyCaret с pip.

Установка

# для функционального API
from pycaret.time_series import *
setup(data, fh = 7, fold = 3, session_id = 123)

# для API с ориентацией на новый объект
from pycaret.internal.pycaret_experiment import TimeSeriesExperiment
exp = TimeSeriesExperiment()
exp.setup(data, fh = 7, fold = 3, session_id = 123)
Результат работы функции setup. Изображение автора

Статистическое тестирование

check_stats()
Результат работы функции check_stats. Изображение автора

Разведочный анализ данных

# для функционального API
plot_model(plot = 'ts')

#  для API с ориентацией на объект
exp.plot_model(plot = 'ts')
Изображение автора
# график кросс-валидации
plot_model(plot = 'cv')
Изображение автора
# График ACF
plot_model(plot = 'acf')
# График диагностики
plot_model(plot = 'diagnostics')
# График декомпозиции
plot_model(plot = 'decomp_stl')

Обучение и выбор модели

# для функционального API
best = compare_models()

# для API, ориентированного на объект
best = exp.compare_models()
Результат работы функции compare_models. Изображение автора

create_model в модуле временных рядов работает так же, как и в других модулях.

# создание модели fbprophet
prophet = create_model('prophet')
print(prophet)
Результат работы функции create_model. Изображение автора
Результат работы функции print. Изображение автора

Почти аналогично проходит работа с tune_model.

tuned_prophet = tune_model(prophet)
print(tuned_prophet)
Результат работы функции tune_model. Изображение автора
Результат работы функции print. Изображение автора
plot_model(best, plot = 'forecast')
Изображение автора
# прогноз в неизвестном будущем
plot_model(best, plot = 'forecast', data_kwargs = {'fh' : 30})
Изображение автора
# график внутривыборочного периода
plot_model(best, plot = 'insample')
# график остатков
plot_model(best, plot = 'residuals')
# график диагностики
plot_model(best, plot = 'diagnostics')

Развертывание

# доработка модели 
final_best = finalize_model(best)

# создание прогнозов
predict_model(final_best, fh = 90)
Изображение автора
# сохранение модели
save_model(final_best, 'my_best_model')
Изображение автора

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Moez Ali: 📢 Announcing PyCaret’s New Time Series Module

Предыдущая статьяКак галлюцинируют нейросети 
Следующая статьяMongoDB: моделирование данных