Aspiring Data Science
318 subscribers
386 photos
10 videos
6 files
1.41K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#timeseries #anomalydetection #nabscore #autoencoders

Странноватое сравнение, либо не так что-то я понял. Но я не верю, что детектор ЛИШЬ на текущих точках (пусть и тысячи сенсоров) может отработать на порядок лучше рекуррентного, который располагает ДОПОЛНИТЕЛЬНО окном данных. И непонятно, почему наличие окна должно как-то снижать оперативность детекции. Закрадывается подозрение, что ряд нарубили неперекрывающимися окнами вместо перекрывающихся, и это искусственно уменьшило скорость реакции и, соответственно, nab score.

https://www.youtube.com/watch?v=B6r20LBrvYw
#conformal #mapie #crepes #timeseries

Конформализированная квантильная регрессия - как тебе такое, Илон Маск?!
Для временных рядов важный вопрос заключается в выборе калибрационного множества.

https://www.youtube.com/watch?v=--WcrDRtrYk
#masters #scaling #preprocessing #robustscaler #timeseries

Перечитываю Мастерса, у него очень интересный подход к нормироваке и шкалированию временных рядов. Вместо общепринятых среднего и скв. отклонения в формуле (val-mean)/std, он использует медиану и межквартильное расстояние iqr. Идея очень резонная в плане устойчивости к выбросам. Я вот что подумал, в sklearn, конечно, есть RobustScaler, который делает вроде бы то же самое, но фишка в том, что Мастерс нормирующие показатели вычисляет не по всему train set, как RobustScaler, а по скользящему окну из последних T наблюдений. Надо бы попробовать модифицировать RobustScaler с учётом этой идеи.
Forwarded from asisakov
Дождались

Наконец-то выложили видео с моим выступлением на датафесте!

Все прошло очень круто, тем более в этот день конференция проходила в гостях у Яндекса и по классике все было очень приятно.

Единственная проблема была вызвана ощущуением конкуренции с треком по LLMкам, который проходил параллельно нашим активностям, но мои переживания были напрасны. Ребята настолько задолбались слушать про RAGи, что как раз на мое выступление подошло достаточно большое количество людей, которые при этом были сильно вовлечены. Это было очень приятно, что все-таки временные ряды важны не только узкому числу людей. После выступления также небольшое время мы с ребятами общались про нюансы подготовки признаков и применения моделей.

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

Кстати, вот ссылка на видео: https://www.youtube.com/watch?v=lL9Dimm5UuE

#life #ml #timeseries
#dummy #baselines #sklearn #timeseries

Чёт я задумался, что Dummy* модели в sklearn совсем не предназначены для временных рядов. Сел сочинять Feature Request, посмотрим, если не зарубят, даже сам над ним поработаю.

И, кстати сказать, неудобно, что на практике всегда перебираешь все доступные стратегии, чтобы создать хоть какой-то разумный бэйз.

У меня пока такие идеи:

1) дать возможность указывать окно, как в pandas при вычислении rolling/expanding. Вводим для этого параметр scope:str={"rolling","expanding","all"}. Если scope!="all", стратегия применяется не ко всему датасету, а к окошку. параметры **kwargs передаются напрямую в метод scope ряда pandas.

Для полной поддержки взвешенных окон придётся добавить **extra_kwargs:

kwargs=dict(window=5, win_type="gaussian")
extra_kwargs=dict(std=0.1)
# Supplementary Scipy arguments passed in the aggregation function
y.rolling(**kwargs).mean(**extra_kwargs)


2) добавить strategy="lag" (только для scope="rolling")

3) добавить strategy="best", которая будет внутри перебирать все остальные стратегии, чтобы выдать пользователю самую сильную базу. Также придётся добавить параметр scoring, как в cross_validate, чтоб можно было сравнивать стратегии.

4) добавить strategy="ewm" на базе того же пандас. параметры **kwargs передаются напрямую в метод ewm pandas.

5) добавить strategy="apply" (для scope!="all") для применения кастомных аггрегирующих функций. Будет транслироваться в

def mad(x):
return np.fabs(x - x.mean()).mean()

kwargs=dict(window=4)
extra_kwargs=dict(func=mad, raw=True)

y.rolling(**kwargs).apply(**extra_kwargs)


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

Ещё придётся думать о сортировке y (если это ряд pandas с datetimelike-индексом) и заполнении пропусков (у окон есть параметр min_period, так что пропуски вполне могут появиться). Думаю заполнять пропуски либо backfill-ом, либо стратегией, применённой ко всему датасету. Нужен новый параметр fill_na:str={"backfill","strategy"}, видимо.

Есть ещё предложения по стратегиям?

В общем, запостил FR: https://github.com/scikit-learn/scikit-learn/issues/29813