ИЦ "ГЕВИССТА"


Гео и язык канала: не указан, не указан
Категория: не указана



Гео и язык канала
не указан, не указан
Категория
не указана
Статистика
Фильтр публикаций


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


В книгу по классике (1-й и 2-й уровень подписки) начал интеграцию легендарного дополненного страничного модуля (был 750 страниц, стал 1000 страниц) по градиентному бустингу и еще будет новый 500-страничный модуль по применению бустинга для recsys и time series, появились разделы по reliable ML для моделей бустинга. По глубине разбора реализаций бустинга аналогов нет (помимо LightGBM, XGBoost, CatBoost добавится H2O GBM от H2O и PyBoost от Сберлабы). Большая работа предстоит. Если не будет никаких ЧП (а они у нас в России каждый день), планирую уложиться до февраля 2023.


Создание признаков времени в Polars


Создание признаков даты в Polars (обновлено)


Часть_3_17_2_Применение_метода_фильтра_и_встроенного_метода_для.ipynb
205.9Кб
Из предстоящей книги по предварительной подготовке данных

Часть 3_17.2._Применение метода-фильтра и встроенного метода для отбора признаков (на примере соревнования BNP Paribas Cardif Claims Management с Kaggle)


Оптимизация гиперпараметров в ETNA c помощью Optuna и Weights & Biases. Скоро в новом обновлении книги по рядам!


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

Обратите внимание на best practice по признакам для рядов от разработчиков scikit-learn https://scikit-learn.org/stable/auto_examples/applications/plot_cyclical_feature_engineering.html. В частности, предлагают использовать сплайны. Этот кейс я тоже включу в книгу.

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

Здесь же отвечаю на вопросы.
Rolling Frequency Encoding можно реализовать с помощью функции groupby_moving_stats().
Вложенная перекрестная проверка нужна для поиска гиперпараметров, стабильно дающих высокое качество, при построении моделей с высокой дисперсией типа градиентного бустинга. Вы выбираете или обращаете внимание на ту комбинацию гиперпараметров, которая чаще всего выбирается в качестве наилучшей.


Часть_3_17_3_Комбинирование_нескольких_методов_для_отбора_признаков.ipynb
1.2Мб
Из предстоящей книги по предварительной подготовке данных

Часть 3_17.3._Комбинирование нескольких методов для отбора признаков (задача Porto Seguro’s Safe Driver Prediction с Kaggle)


Хорошая новость для подписчиков 3-го и 4-го уровня, материал по предподготовке временных рядов будет иллюстрироваться на примере pandas и Polars


Функция вычисления скользящих статистик в Polars

# пишем функцию, вычисляющую скользящие
# статистики в Polars
def polars_moving_stats(pl_data,
pl_series,
periods=1,
min_periods=1,
window_size=4,
out_column='Mov_stat',
aggfunc='mean',
strategy=None):
"""
Вычисляет скользящие статистики в Polars.

Параметры
----------
pl_data:
Polars.DataFrame
pl_series:
Polars.Series
periods: int, по умолчанию 1
Порядок лага, с которым вычисляем скользящие
статистики.
min_periods: int, по умолчанию 1
Минимальное количество наблюдений в окне для
вычисления скользящих статистик.
window_size: int, по умолчанию 4
Ширина окна.
out_column: string
Название результирующего столбца.
aggfunc: string, по умолчанию 'mean'
Агрегирующая функция.
strategy: string, по умолчанию None
Стратегия импутации пропусков.
"""

if aggfunc == 'mean':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_mean(
window_size=window_size,
min_periods=min_periods).alias(out_column))

if aggfunc == 'min':
pl_data = pl_data.with_column(pl.col(pl_series).shift(
periods=periods).rolling_min(
window_size=window_size,
min_periods=min_periods).alias(out_column))

pl_data = pl_data.fill_null(strategy=strategy)
return pl_data


Признаки для временных рядов – скользящие разности
Обычно в прогнозировании временных рядов используют два вида скользящих разностей. Тестовую часть защищаете от протечек значениями NaN.

# считаем скользящие разности между максимальным
# и минимальным значениями окна, окно шириной 4,
# c лагом 1
data['rolling_diff4_max_min'] = data['sales'].shift(periods=1).rolling(
window=4, min_periods=1).apply(lambda x: max(x) - min(x))

# вручную считаем скользящие разности между последним и
# первым значениями окна, окно шириной 4, с лагом 1
data['rolling_diff4_last_frst'] = data['sales'].shift(periods=1).rolling(
window=4, min_periods=1).apply(lambda x: x.iloc[-1] - x.iloc[0])

Ну и куда без подводных камней. Последняя разность между максимальным и минимальным значениями в тестовой части всегда будет равна 0, обычно нулевое значение заменяют последней разностью между максимальным и минимальным значениями в обучающей части. Разности между последним и первым значениями в тестовой части получат пропуски, обычно их заменяют нулями. Разности применяйте для градиентных бустингов. Они либо не работают вовсе, либо работают очень хорошо, резко улучшая качество модели. Я использую их в работе, они хорошо работали вот в этом соревновании https://www.kaggle.com/competitions/store-sales-time-series-forecasting/overview. В книге по рядам подробнее покажу примеры использования.




Пример реализации скользящего среднего с регуляризацией. Случайным образом отбираем наблюдения для расчета статистики по окну с возвращением или без возвращения. Используем для градиентного бустинга и нейронных сетей. Для тестовой выборки (или тестовой части исходного набора) используем защиту от протечек в виде значений NaN.
Есть столбец

2018-01-09 2400.0
2018-01-10 2800.0
2018-01-11 2500.0
2018-01-12 2890.0
2018-01-13 2610.0
2018-01-14 2500.0
2018-01-15 2750.0
2018-01-16 2700.0
2018-01-17 NaN
2018-01-18 NaN
2018-01-19 NaN
2018-01-20 NaN
Name: sales, dtype: float64

Пишем функцию

# функция вычисления скользящего среднего с регуляризацией
def regularized_mean(x, frac=0.5, random_state=42, replace=False,
verbose=False, axis=None):
np.random.seed(random_state)
x_sampled = x.sample(frac=frac, replace=replace)
if verbose:
print(x_sampled)
print('')
return np.mean(x_sampled)

# вычисляем скользящее среднее с регуляризацией
data['sales'].shift(1).rolling(window=4, min_periods=1).apply(
lambda x: regularized_mean(x, frac=0.8, verbose=True))

Применяем

2018-01-10 2400.0
2018-01-09 NaN
dtype: float64

2018-01-09 NaN
2018-01-10 2400.0
dtype: float64

2018-01-10 2400.0
2018-01-12 2500.0
2018-01-09 NaN
dtype: float64

2018-01-11 2800.0
2018-01-13 2890.0
2018-01-10 2400.0
dtype: float64

2018-01-12 2500.0
2018-01-14 2610.0
2018-01-11 2800.0
dtype: float64

2018-01-13 2890.0
2018-01-15 2500.0
2018-01-12 2500.0
dtype: float64

2018-01-14 2610.0
2018-01-16 2750.0
2018-01-13 2890.0
dtype: float64

2018-01-15 2500.0
2018-01-17 2700.0
2018-01-14 2610.0
dtype: float64

2018-01-16 2750.0
2018-01-18 NaN
2018-01-15 2500.0
dtype: float64

2018-01-17 2700.0
2018-01-19 NaN
2018-01-16 2750.0
dtype: float64

2018-01-18 NaN
2018-01-20 NaN
2018-01-17 2700.0
dtype: float64

2018-01-09 NaN
2018-01-10 2400.000000
2018-01-11 2400.000000
2018-01-12 2450.000000
2018-01-13 2696.666667
2018-01-14 2636.666667
2018-01-15 2630.000000
2018-01-16 2750.000000
2018-01-17 2603.333333
2018-01-18 2625.000000
2018-01-19 2725.000000
2018-01-20 2700.000000
Name: sales, dtype: float64


Таксономия моделей тройного экспоненциального сглаживания


Шпаргалка по подбору P, D, Q для SARIMA


Пепе Берба
Объяснение работы HDBSCAN и алгоритмов кластеризации на основе плотности

Перейти и скачать


Изучение статистики можно начать с этой карманной книжки


Гаолин Ке, Ки Менг, Томас Финли, Тайфенг Вонг, Вэй Ченг, Вейдонг Ма, Кивей Йе, Тиян Лю
LightGBM: высокоэффективный градиентный бустинг над деревьями решений

Перейти и читать


Логистическая регрессия (часть 4)
https://dzen.ru/media/gewissta/logisticheskaia-regressiia-chast-4-63433dae24f5285d3cb3db7c


Тьянци Чен, Карлос Гестрин
XGBOOST: масштабируемая система бустинга над деревьями решений

Перейти и читать

Показано 20 последних публикаций.

104

подписчиков
Статистика канала