Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
274 - Telegram Web
Telegram Web
#libraries

Yellowbrick - библиотека для визуального анализа и диагностики качества получаемых моделей. По сути - множество оберток с готовыми графиками, чтобы самим не писать их каждый раз. Например, есть график с validation curve с доверительными интервалами для train и cross validation скоров, в зависимости от значения какого-либо гиперпараметра.

P.S. В посте в прошлую субботу, я сделал небольшую шалость. Заметка про data-driven подход была сгенерирована сервисом для автоматического копирайтинга по заголовку "плюсы и минусы data-driven подхода" и немного отредактирована мной. Кажется, что шалость удалась ;)
👎1🤔1
Приходите послушать! Я буду выступать 17го с докладом про методы балансировки в causal inference
🔥6
Forwarded from Reliable ML
Митап ODS Reliable ML по АБ-тестированию и Causal Inference - 17 декабря
Анонсы докладов

Всем привет!

Не всё же читать про АБ-тесты, давайте про них говорить!

17 декабря мы с Димой приглашаем вас на митап по АБ-тестам от канала @Reliable ML и Open Data Science.
В программе 9 докладов от мэтров в этой области. Начнем в 11 утра по Мск, закончим - примерно в 18 (или как пойдет).

Регистрация на митап туть!

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

Программа:

11:00
- Ваагн Минасян, Lead DS @ X5 Tech - Оценка эффектов в АБ тестах при неслучайном разделении на тестовую и контрольную группы
11:45 - Дмитрий Васькин, Data Scientist @ Lenta - Synthetic Control для AB тестов на малых размерах выборок
12:30 - Аслан Байрамкулов, Head of Experimental Group @ МТС BigData - Ambrosia - open-source библиотека для быстрой и удобной работы с A/B тестами
13:15 - Артем Ерохин, Lead DS @ X5 Tech - Balancing Methods in Causal Inference
14:30 - Александр Сахнов - Парный, пуассоновский и дикий бутстреп
15:15 - Валерий Бабушкин, VP, Data Science @ Blockchain.com - Метрики: от офлайна до иерархии
16:00 - Максим Кочуров, PyMC Labs - Планирование Байесовских АБ тестов
16:45 - Дмитрий Торшин, Data Scientist @ Lenta - Causal Impact и как его готовить
17:30 - Григорий Чернов, PhD in Economics, University of Tuebingen, ВШЭ - Causal Discovery Methods for Experimental Design

Далее постараемся рассказать подробнее об отдельных докладах!

#анонс #tech #ab_testing
🔥91
​​#statistics

Поговорим о causal trees.

Ранее мы говорили об uplift trees. Causal trees - некоторое обобщение для построения деревьев в causal inference.

Что же там происходит?

Как я ранее говорил, в обычных uplift trees используются некоторые эвристики, которые позволяют посчитать приближение при разбиении и учесть его при построении дерева.

Но что, если мы сделаем иную (и более честную) функцию для того, чтобы разделять дерево на ветви? Про это как раз и следующая работа (Athey, Susan, and Guido Imbens. "Recursive partitioning for heterogeneous causal effects." Proceedings of the National Academy of Sciences 113.27 (2016): 7353-7360).

Почему нам важно иметь иную функцию для разбиения? Все потому, что у нас стоит принципиально иная задача. Это не обычная классификация или регрессия, а оценка причинности влияния и размера эффекта. Соответственно, обычные методы будут привносить смещение (bias). И оценки наши, увы, будут несостоятельны.

Соответственно, наш критерий для сплита должен учитывать (см. пример хорошего и плохого разбиения в изображении к посту):
- Баланс между попавшими в ветвь дерева объектами из target и control;
- Ожидаемую точность оценки CATE (conditional average treatment effect). Если разбиение разбивает на группы неточно, то мы получаем искажение в нашей оценке

Потому, давайте введем новую функцию для получения оптимального разбиения - EMSE (expected mean squared error for treatment effects). Если коротко, то это просто MSE с поправкой и учетом разделения на тест и обучение. Выглядит формула примерно так 1 / N_test * sum_N_test( (Y_i - tau_est)**2 - Y_i**2)

То есть, мы обучаем наше разделение на одном множестве, а потом подставляем в другое. На коем и вычисляем MSE с поправкой на константу. Ну а expected здесь - это мат. ожидание от нашего MSE. При этом, test и estimation у нас независимы.

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

Итог:
Кажется весьма интересным такой способ оценки. Да и весьма в стиле ML решений с разделением на train/test части. Подробнее можно почитать в статьях + в этом блог-посте. А реализацию на python можно найти в пакете econml.
👍6
Сегодня поста не будет, т.к. я выступаю на митапе. Подключайтесь посмотреть ;)
👍3🔥1
Forwarded from Reliable ML
Артем Ерохин - Методы балансировки в causal inference
17 декабря - митап ODS Reliable ML по AB-тестированию и Causal Inference

В 13:15 17 декабря на нашем митапе выступит Артем Ерохин, Lead DS X5 Tech, автор канала @Artificial Stupid.

В докладе Артем расскажет о том, что такое балансировка в causal inference, какие методы балансировки существуют и как они работают.

Регистрация на мероприятие тут.
Полное расписание мероприятия тут.

Ваш @Reliable ML

#анонс #tech #ab_testing
🔥7❤‍🔥2
​​#statistics

Weighted Z-test для мета-анализа результатов экспериментов.

Мне попался на глаза пост от ebay про z-test для мета-анализа (спасибо коллегам). Так что сегодня поговорим про этот метод.

Итак. Предположим, что у нас есть несколько запусков одного теста (например, волны коммуникации со схожей механикой, либо повторный запуск какого-либо эксперимента).

У нас есть N тестов (например, N t-тестов для средних), для каждого из которых есть свое p-value, свое значение статистики и свой доверительный интервал. Мы думаем, что объединение разрозненных источников информации даст нам преимущество и позволить уточнить наши выводы, увеличив мощность полученного комбинированного теста.

Для one-sided теста у нас может использоваться Fishers method. Но в случае two-sided теста нам нужен другой способ. И тут на сцену выходит Z-test.

Мы можем скомбинировать наши p-values в комбинированный p-value, используя Z-статистики из каждого эксперимента и веса, которые получаются из выражения w_i = 1 / SE_i, где SE_i - это standart error для i-го эксперимента (формула построения доверительного интервала комбинированного эксперимента есть в исходном посте по ссылке в начале).

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

Какие тут плюсы и минусы?

Плюсы:
- Тест может комбинировать отдельные результаты тестов с разными размерами выборки;
- Полученная комбинация имеет большую мощность, чем каждый отдельный тест

Минусы:
- Тест предполагает нормальность распределения (не забываем о Z-статистике при его расчете);
- Тест чувствителен к весам. Соответственно, есть возможность того, что какой-то тест попросту перевесит все остальные;
- Комбинированный тест может быть сложнее к пониманию и реализации, чем единичный обычный проведенный тест
🔥6
Вот и заканчивается еще один год!

Что же произошло за этот год:
1. Я стал отцом! В начале года у меня родилась дочка - самое замечательное событие в моей жизни. Огромное спасибо моей жене, которая отвечает за большую часть ухода за нашей дочкой. Ну а я стараюсь помогать всеми силами :)
2. В этом году я руководил небольшой командой (6-8 человек) в X5. Мы справились с несколькими успешными проектами, продолжаем работать и развиваться.
3. Несколько раз я выступал с докладами, например, на X5 Data Driven Meetup #2 и на reliable ML секции во время Data Елки.
4. Я также помогал организовывать конференцию, хотя она и была отложена на некоторое время.
5. Я успешно обучился на Product Owner и повысил свою квалификацию по управлению проектной командой.
6. Весь год я ответственно вел канал, выпуская ~ по 1 посту в неделю. За год канал вырос с ~180 до ~760 подписчиков (тут огромное спасибо всем тем, кто меня читает).
7. В этом году я также получил награду ODS Award "ментор года" - это огромная честь для меня.
8. И, наконец, я выиграл одно из соревнований цифрового прорыва.

Я надеюсь, что следующий год будет не таким турбулентным. Желаю всем удачи и успехов в наступающем 2023 году!

May the Force be with you!
26🔥16🐳5💋2
#libraries

Pysynthdid - синтетический diff-in-diff для Python. Подробнее про метод - в репозитории (там есть ссылка на medium пост и на оригинальную статью) и здесь. Метод работает для постепенной раскатки (staged adoption) и для множественных target объектов.
🔥2
Forwarded from Reliable ML
АБ-тесты. Экстраполяция результатов пилота
Цикл постов про АБ-тестирование. Пост 8

За предыдущие 7 постов мы закрыли почти все ключевые риски бизнес-процесса АБ-тестирования. Но остался один важный риск, с которым мы еще не разобрались. Это отсутствие единой методики/правил экстраполяции результатов пилота для расчета финансового эффекта на все объекты.

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

Например, вы получили +1% к выручке на 5 объектах. Можем ли сказать, что при ролл-ауте проекта, для всей сети будет +1% к выручке? Была ли выборка репрезентативна для всей сети? Можем ли назвать результаты пилота робастными? Например, 5 объектов пилота могли быть расположены в Сибири, а основные объекты компании расположены в Центральных регионах.

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

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

- характеристики объектов в пилот и контроль. Стоит учитывать планируемую экстраполяцию результата:

(1) территориально. Если при успехе пилота, его сразу планируется “раскатать” на все объекты, тогда можно математически подобрать репрезентативную группу для всего распределения объектов. Если же планируется поэтапное внедрение (например, сначала все объекты одного региона/города, потом группы регионов), значит для первого пилота подойдут объекты, отражающие специфику конкретного города или региона.

(2) по внутренним показателям объектов (фин. и опер. индикаторы, и др.). Проект может быть направлен на убыточные объекты компании. Значит, и пилотировать его надо на них, и контроли смотреть уж точно не прибыльные.
целевые метрики пилота. Аналогично, если успехом при внедрении проекта для нас будет положительное влияние на маржу при отсутствии отрицательного влияния на совокупные продажи, значит, обе эти метрики должны присутствовать в гипотезах пилота именно в такой постановке. А если планируем эффект на пару категорий продаж, то проверять стоит на них, а не на тотал продажах.

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

Некоторые из вопросов выше могут показаться очевидными. Но на этапах дизайна пилота и финальной экстраполяции результатов пилота иметь это ввиду нужно, и задавать об этом вопросы тоже - если есть сомнения в соответствии пилота и его планируемой применимости в бизнес-процессах компании. Поверьте большому опыту практического АБ за плечами. Очевидное и невероятное всегда где-то рядом 🙂

Если все моменты выше были учтены на этапе дизайна эксперимента, то вопросы робастности результата и возможности его экстраполяции на объекты ролл-аута перестают быть актуальными. Статистически корректная методика (которую мы уже рассмотрели в предыдущих постах) гарантирует нам робастность и корректность экстраполяции результата, если пилот продуман с точки зрения содержательной постановки (бизнес-применения).

#tech #ab_testing
👍3
Forwarded from Reliable ML
Reliable ML AB Testing & Causal Inference Meetup
Видео и презентации докладов

Опубликованы видео и презентации докладов нашего декабрьского митапа по АБ тестам и причинно-следственному анализу.

Все доклады, их описания и презентации можно найти на сайте ODS.ai, а также в плейлисте на YouTube.

Ссылки отдельно по докладам:

- Ваагн Минасян - Оценки с двойной надёжностью для выявления причинно-следственных связей в бизнесе (видео, презентация)

- Дмитрий Васькин - Synthetic Control для AB тестов на малых размерах выборок (видео, презентация)

- Аслан Байрамкулов - Ambrosia - open-source библиотека для быстрой и удобной работы с A/B тестами (видео, презентация)

- Артем Ерохин - Balancing Methods in Causal Inference (видео, презентация)

- Александр Сахнов - Парный, пуассоновский и дикий бутстреп (видео, презентация)

- Валерий Бабушкин - Метрики: от офлайна до иерархии (видео, презентация)

- Григорий Чернов - Causal Discovery Methods for Experimental Design (видео, презентация)

- Дмитрий Торшин - Causal Impact и как его готовить (видео, презентация)

- Максим Кочуров - Планирование Байесовских АБ тестов (видео, презентация)

Ваш @Reliable ML

#tech #ab_testing #causal_inference
👍6
​​#statistics

Что такое diff-in-diff и как он работает?

Итак, diff-in-diff (Difference in differences, DID) - это статистическая техника, применяемая в эконометрике и численных оценках в социальных науках при работе с наблюдательными исследованиями (observational studies).

Предположим, что у нас есть две группы - контроль и тест. Так же, предполагаем, что у нас выполняются требования обычной OLS модели + тренды у наших групп параллельны. Тогда мы можем подумать, что если разница в поведении теста и контроля до старта эксперимента сохранялась бы и после старта эксперимента (см. пунктирную линию на графике к посту), то мы могли бы оценить виртуальное поведение теста, если бы не было вмешательства. И, если в реальности есть какое-то отличие в поведении теста (линия P на графике), то эта разница и будет оценкой воздействия.

Другими словами, предположительное поведение тестового множества после воздействия (если этого воздействия не было бы) - это поведение тестового множества до воздействия + поправка на рост, которую можно оценить по контрольному множеству.

Здесь очень важно, чтобы тренды были параллельны, иначе оценка по контролю будет некорректной (что логично, мы же предполагаем, что все стабильно себя ведет).

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

Оценить доверительный интервал эффекта можно моделью такого вида Y = b0 + b1 * test + b2 * test_period + b3 * test * test_period + err, где b0 - базовая оценка из контроля, b0 + b1 - оценка коэффициента для теста перед экспериментом, а b2 - тренд контроля. Соответственно, b3 - это "добавка" от нашего воздействия.

Получаем достаточно простой и эффективный метод. Который, конечно, имеет весьма серьезное предположение в основе. Так что с ним нужно быть крайне аккуратными.

А чтобы обойти требование о параллельности трендов, используется другой метод - синтетический контроль. Но о нем в следующем посте.
4👍1
​​#statistics

Что такое синтетический контроль и как он работает?

Давайте рассмотрим постановку из DID. У нас все еще есть две группы - тесовая и контрольная. Но тренды, увы, не параллельны. Тут нам на выручку и приходит синтетический контроль.

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

Классический пример - введение закона под названием Proposition 99 в Калифорнии. Там решили бороться с курением введением дополнительного сбора с каждой пачки сигарет (и если она есть в кармане, то не все так уж плохо на сегодняшний день, если верить товарищу Цою), а также введением дополнительных ограничений на места продажи сигарет и продажи сигарет поштучно (привет, 90-е).

Давайте соберем статистику продаж сигарет в штате Калифорния и еще в 39 штатах с 1970 по 2000 годы.

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

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

Будем оптимизировать некоторый функционал разницы между тестом и контролем. В ванильном синтетическому контроле мы еще считаем, что сумма весов еще равна единице.

from typing import List
from operator import add
from toolz import reduce, partial

def loss_w(W, X, y) -> float:
  return np.sqrt(np.mean((y - X.dot(W))**2))

lambda x: np.sum(x) - 1

from scipy.optimize import fmin_slsqp

def get_w(X, y):
   
  w_start = [1/X.shape[1]]*X.shape[1]

  weights = fmin_slsqp(partial(loss_w, X=X, y=y),
             np.array(w_start),
             f_eqcons=lambda x: np.sum(x) - 1,
             bounds=[(0.0, 1.0)]*len(w_start),
             disp=False)
  return weights

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

Но как проверить, значимое ли получилось отличие? Давайте используем идею Fisher's exact test. Возьмем все контрольные образцы, проделаем точно такие же операции, чтобы получить синтетические значения для всех рядов. И оценим, как часто наш тестовый эффект был более экстремальным, чем контрольные эффекты. Отсюда получим p-value для нашего теста и сможем отклонить (или не отклонить) нулевую гипотезу об отсутствии значимого эффекта на тесте.
👍5
Forwarded from partially unsupervised
Применил на работе прием, который считал общеизвестным, но, судя по реакции коллег, это не совсем так. Потому расскажу и здесь!

Предположим, для какой-то ML задачи нужна ручная разметка данных, и расходы сколько-то заметны💰 (а значит, в 2023 их наверняка предложат урезать 🔪). В такой ситуации хочется хотя бы приблизительно понимать, как эти инвестиции в разметку окупаются.

Мое сколько-то наивное решение такое:
- делим тренировочный датасет на бакеты так, минимизируя разницу размеров бакетов и некоторое сходство между семплами разных бакетов (например, все семплы одного пользователя попадают в один бакет, который определяется на базе хэша его id);
- фиксируем вычислительный бюджет (вне зависимости от размера датасета учимся на N батчей);
- учим модель на сабсетах в диапазоне от малой части датасета до целого датасета, обеспечивая кумулятивного увеличение датасета (например, если некий семпл X был в обучении на 10% сабсете, то он обязательно будет и в обучении на 20% датасета);
- для каждой обученной модели смотрим ключевую метрику и рисуем график: по оси X - размер датасета, по оси Y - улучшение метрики;
- включаем воображение и оцениваем с точностью до порядка, сколько данных нужно досыпать, чтобы выжать следующий 1% метрики.

Точность такой экстраполяции оставляет желать лучшего (например, совершенно не учитывает штуки типа concept drift), но она значительно лучше, чем "хер его знает!", и сильно упрощает принятие решений типа "что выгоднее: отправить джуна подбирать гиперпараметры или нанять десять разметчиков и дальше заваливать модель данными".
👍7
На этой неделе вдохновения писать что-то нет.

Но порекомендую хороший канал - Чтобы не выгорать. Совсем не реклама, канал реально милый и приятный. Советы тоже хороши. Позволяют поддерживать менталку в порядке (это важно, не пренебрегайте поддержанием морального и психического тонуса).
🔥6👍5👌1
​​#statistics

Что такое Population Stability Index (PSI)?

Population Stability Index (PSI) - это метрика, которая позволяет измерить то, насколько распределение некоторой переменной меняется между двумя выборками с течением времени. Она широко используется для мониторинга изменений характеристик популяции и диагностики возможных проблем с эффективностью моделей машинного обучения.

Как считается PSI?

1. Делим выборку на децили по нашему целевому значению (децили считаем по одной из выборок, для нас логично это сделать по более ранней выборке);
2. Для обеих выборок считаем процент значений, попавших в конкретный дециль;
3. Далее считаем (%Actual - %Expected) * ln(%Actual / %Expected) для каждого дециля;
4. Суммируем полученные на шаге 3 значения по всем децилям.

Типичные значения для принятия решения:
1. PSI < 0.1 - разница незначительна;
2. PSI >= 0.1, PSI < 0.2 - небольшая разница между выборками;
3. PSI >= 0.2 - сильная разница между выборками, произошло смещение в данных.

Зачем вообще используется PSI?

Это полезная метрика для систем слежения за качеством данных во времени. Конкретно, с помощью PSI можно отслеживать так называемый data drift, чтобы понимать, когда наши данные начали резко меняться и нам нужно предпринимать те или иные действия (запустить новый процесс доразметки данных, переобучить модель, исследовать новые данные на предмет ошибок и качества поступающих данных и т.д.)
👍17🔥1
​​#statistics

Прекращайте использовать метод локтя в k-means.

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

Итак, как выглядит метод локтя?

1. Строим много кластеризаций k-means с разным количеством k;
2. Для каждого отдельного k считаем сумму квадратов внутрикластерных расстояний до центра кластера (within-cluster sum of squares, WCSS). Для sklearn это будет атрибут inertia_.
3. "На глаз" выбираем такое k, где у нас происходит "перегиб" (отсюда и метод локтя) и WCSS перестает существенно уменьшаться. Это и будет итоговым числом кластеров k.

У такого метода есть один некоторые минусы, например, выбор k "на глаз". Потому в разных работах предлагались методы автоматизации метода локтя.

Как можно улучшить метод?

1. Jump method. Давайте искать максимум SSE_k ** -Y - SSE_k ** -Y, где степень Y может варьироваться, но авторы предлагают брать Y=1/2 * dimensionality (то есть половина от размерности пространства признаков).
2. L-method. Возьмем две линейных функции (перед перегибом и после). Выберем лучшую кусочно-линейную аппроксимацию.
3. Kneedle algorithm. Возьмем полиномиальную кривую (сплайн), нормализуем от 0 до 1. Сравним с диагональю. Берем последний максимум перед задаваемым threshold.
4. Улучшение шага 3. Давайте искать максимум для SSE_k-1 - SSE_k / (SSE_k - SSE_k+1) - 1.
5. В библиотеке pyclustering используется метод ElbowLen, которые считается (x_k*(y_0 - y_1) + (x_1 - x_0)*y_k + (x_0*y_1 - x_1*y_0)) / (sqrt((x_1 - x_0)**2 + (y_1 - y_0)**2)), где x0, x1, y0, y1 - минимумы и максимумы графика.
6. AutoElbow. Вычисляем ((x_k - 1)**2 + (y_k - 1)**2) / (x_k ** 2 * y_k **2) на нормализованном на [0,1] графике.

Все эти методы не лишены минусов. В статье приводятся примеры для разных наборов данных. Общий вывод - на достаточно разделимых кластерах и небольшом k все работает более или менее неплохо. Но если мы отходим немного от тепличных условий, все становится весьма плохо.

Мы можем отойти от эвристик над методом локтя и прочих геометрических манипуляций в сторону вариационных методов (предполагается, что они более теоретически обоснованы). В статье по ним проходятся весьма поверхностно, так что некоторые из них я не совсем понял ¯\_(ツ)_/¯

1. Variance Ratio Criterion (VRC). Считаем ((SSE_1 - SSE_k) / (k - 1)) / (SSE_k / (n-k)). Авторы рассматривают это, как некий аналог F-статистики.
2. Метод Mariott. Рассматривается детерминант ковариационной матрицы |W|.
3. KL-index. Давайте рассмотрим DIFF_k = (k - 1)**(2/p)*SSE_k-1 - k**(2/p)*SSE_k. Потом ищем максимум KL(k) = |DIFF_k / DIFF_k+1|.
4. Метод Pham. Считаем SSE_k / (alpha_k * SSE_k-1), где alpha_2 = 1 - 3/(4*d) и alpha_k = 5/6 * alpha_k-1 + 1/6 (что моделирует ожидаемое изменение равномерного распределения).

Учитывая задачу кластеризации, можно придумать и критерии, основанные на расстояниях.

1. DUNN index.
2. David-Bouldin index.
3. Silhouette score.

Но это не все. Мы еще можем использовать теоретические подходы, основанные на теории информации.

1. Bayesian information criterion (BIC).
2. Akaike Information Criterion (AIC).

Ну и, напоследок, еще можно использовать симуляционный критерий.

1. В данном случае, мы считаем GAP_k = E[log(SSE'_k)] - log(SSE_k). И выбираем наименьший k, где GAP_k >= GAP_k-1 - std_k+1. Где SSE'_k - базовый SSE, а std_k+1 - среднеквадратичное отклонение оценок.

А какой итоговый вывод?

Не использовать метод локтя. Предпочитаемыми методами авторы считают VRC (реализация sklearn), Bayesian Information Criterion (BIC) (материал с реализацией) или симуляционный критерий (GAP-статистику, материал с реализацией).
👍10🤔3
#video

Клевая подборка видео по теме Multivariate statistics.

В основном, там базовые вещи, но повторить материал (или посмотреть в первый раз, если не знали) это позволяет очень хорошо. Описано все на примерах, рассказывается просто и понятно.
👍51
#libraries

Orion - библиотека для поиска аномалий во временных рядах с использованием unsupervised подходов (то есть, без учителя).

Авторы еще написали несколько интересных материалов на эту тему:
1. Вводная статья про unsupervised anomaly detection;
2. GAN'ы для детекции аномалий во временных рядах;
3. Подходы к оценке качества и построению пайплайнов для детекции аномалий во временных рядах.

В общем, весьма интересное чтиво. Библиотека тоже выглядит неплохо (хоть и сложновато, если честно).
👍4
​​#books

Статистика в рисунках.

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

Конечно, не все идеально описано (сложные понятия не особо проще выглядят в книге). Но большинство важных концепций, вроде проверки гипотез и доверительных интервалов весьма наглядно показаны.

В общем, советую. Особенно, если вам приходится объяснять какие-то статистические концепции бизнесу.
👍5
2025/07/12 20:30:19
Back to Top
HTML Embed Code: