Кириллица Тех
СтатистикаПрогнозирование, эксперименты, нейросети, data stack На связи @privet_toha
- Последний пост
- 11 авг.
- Последнее чтение
- 18:09
- Постов за неделю
- 1
- Всего постов
- 20
- Тип
- открытый
- Язык
- русский
- Категория
- Технологии
- В каталоге с
- 23:08
- 1/24сутки в ленте
- 62
- 1/48двое суток
- 71
- 1/72трое суток
- 76
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
Все чаще на просторах уважаемых дата-тг-каналов натыкаюсь (тык и тык) на рекомендации готовиться к собесам по ии-кондингу — в целом согласен, сам планирую в этапы внедрять такую секцию Вопрос — как готовиться к такому этапу будучи average data guy? Пробовать разные модели (платные) и стараться увеличивать их эффективность на ваших задачах по оптимальной стоимости (даже на подписке за $100 можете сжечь все лимиты claude, но задачу так и не решить, поверьте😭). А чтобы получше понимать происходящее рекомендую почитать мастер-методичку от практиков по базе работе с моделями и агентами О применении моделей и агентов непосредственно в аналитике (в том числе и продуктовой) готовлю материал к концу августа
видео или голосовое, без подписи
Кириллица Тех pinned a photo
Тут у многим известной библиотеки для анализа пользовательского поведения Retentioneering вышел массивный апдейт: быстрее примерно в 100 раз, визуализации интерактивные, добавили сегменты, diff-режим и кластерный анализ, плюс MCP-сервер, чтобы отдать ивентстрим агенту Если вы не знакомы с этой библиотекой, то кратко — она позволяет по-всякому покрутить ивентстрим и поисследовать пользовательские пути, нагенерить продуктовых гипотез и поразить ваших стейкхолдеров ценными выводами и комплексными визуализациями По этому поводу решил собрать ноутбук, в котором воспроизвел флоу работы продуктового аналитика с этой либой в поисках ценнейших инсайтов: ➖кластеры с конверсией 96% — ❌, так как алгоритму скормили ответ вместе с вопросом ➖ петли в каталоге убивают продажи — красиво, но при дополнительной тщательной проверке эффект обнулился, упс и многие другие Велком за ноутбуком в комментарии к посту 🙃
У уважаемого Антона Воскресенского вышла классная серия постов про то, как хакаются метрики и процесс оценки модели прогнозирования — крайне рекомендую к прочтению! дальше включается Goodhart’s Law: когда метрика становится целью, она перестает быть хорошей метрикой Если человеку платят, повышают или ругают его за конкретную цифру, он начинает оптимизировать не бизнес-результат, а эту цифру А мне вот захотелось переложить эти хакинги на процесс аб-тестирования и рассказать о частых кейсах (все совпадения с уважаемыми коллегами случайны). Тут еще надо проговорить, что чем богаче аналитический стек и скуднее регламенты, тем больше всяких легитимных уловочек и развилочек — если выбирать между ними после знакомства с результатом, можно получить удобный ответ, почти нигде явно не соврав, но совершив тот самый хакинг: ▪️CUPED-ковариата под победу CUPED берет данные о юзерах до старта и за счет них снижает разброс в оценке, и пока ковариата, pre-period и спецификация заданы заранее — тут все ок. Но комбинаций ж может быть несколько, и можно глянуть результат, перебрать варианты и оставить тот, где эффект наконец-то значим, а uplift повыше. Каждый расчет по отдельности корректен, но вот доверительный интервал же не знает, что его выбрали из нескольких кандидатов, и получается та же множественность проверок, только прикрытая доблестным variance reduction ▪️Triggered или ITT, смотря что красивее При ITT эффект считается на всех рандомизированных пользователях, независимо от того, столкнулись они с фичей или нет. Triggered-анализ ограничивает выборку пользователями, которые потенциально могли ее увидеть. Оба подхода могут быть корректны, но отвечают на разные вопросы. Гейминг начинается, когда подход выбирают после того, как увидели, где результат выглядит привлекательнее ▪️Корректировка под удобный результат Претритментные признаки можно использовать в постстратификации или регрессионной корректировке, чтобы повысить точность оценки. Если модель и набор признаков выбраны заранее, то все легально. Но вообще после просмотра результата можно ведь начать перебирать признаки, способы биннинга, нелинейности, пока не найдётся удобная для стейкхолдера спецификация — тут уже попахивает скрытым перебором гипотез. Умные люди зовут это specification search ▪️HARKing на уровне роадмапа Сначала команда смотрит, что выстрелило, а потом подает гипотезу так, будто с самого начала это и проверяла. Разбор постфактум полезен сам по себе: неожиданный эффект вполне может дать новую гипотезу. Но если случайную находку выдают за заранее заявленное ожидание и не проверяют отдельным тестом, это уже гейминг В общем, знание этих развилок помогает связке принципал-агент (продакт-аналитик в данном кейсе) честно смотреть на свои же тесты и задавать правильные вопросы, если конечно цель — разобраться, а не покрасить отчёт в зеленый и кайфануть в моменте на защите результатов
видео или голосовое, без подписи
видео или голосовое, без подписи
видео или голосовое, без подписи
В канале посты стали выходить реже, потому что автор в тюрьме Кресты...был на экскурсии На самом деле очень интересно, что в момент постройки это была супер современная, технологичная и гуманная тюрьма: центральная канализация, электричество, даже принудительная вентиляция у каждого арестанта (на момент 2к26 сделать вентиляцию в квартире 60кв. метров стоит > 1млн.руб, думайте) В номере камере 7кв.метров находился только 1 заключенный (сейчас такие же комнаты можно на Airbnb в Сингапуре снять за $150/сутки, думайте) Это уже спустя 40 лет питерские кресты в целях "эффективной оптимизации" изменили свою модель и стали паковать по 15-17 человек в камеры 7 квадратных метров, но об этом как-нибудь потом...(лучше никогда) Ну так вот а посты стали реже выходить, потому что админ решил не терять зря ни минуты этого прекрасного лета и плотно заняться проектами на работе, запустить на степике сразу несколько курсов (будет еще 3, для аналитиков и ml) и возможно перезапустить формат контента тут, а то многие уважаемые ex-подписчики покидают канал ибо "слишком сложно" В общем, не сидим, а активно действуем — и вам желаю не сидеть...
Кластеризация без учителя и без правильного ответа Уважаемые подписчики могут знать, что кластеризация — это способ разбить наблюдения на группы по схожести, когда заранее нет меток и никто не показал модели правильный ответ. В этом её отличие от классификации — там модель учится повторять уже известные ответы, а алгоритм кластеризации сам ищет разбиение по выбранному правилу похожести И зачем это нужно Самая частая задача у аналитика/ds/ml — сегментация. Например у вас есть клиенты с десятком признаков, и хочется разложить их на осмысленные группы по этим признакам, а не резать вручную, ориентируясь на "Миш, я так чувствую" Еще можно использовать для поиска аномалий, где интересны как раз наблюдения, не попавшие ни в одну плотную группу: подозрительные транзакции, мутные пользователи, нетипичные заказы и тд. Чем кластеризуют Есть три семейства: 1️⃣ Центроидные методы во главе с k-means, они двигают центры групп и приписывают каждую точку к ближайшему центру. Считаются быстро и являются базой! Хорошо ложатся на компактные кластеры сопоставимого размера и плотности и заметно хуже ловят сложные формы 2️⃣ Плотностные методы вроде DBSCAN ищут области высокой плотности, умеют собирать кластеры сложной формы и заодно помечают выбросы как шум. Число кластеров заранее задавать не нужно, но придется заплатить за это подбором `eps` и `min_samples`, от которых результат может резко и неприятно измениться 3️⃣ Иерархические методы строят дерево вложенных групп. BIRCH сжимает данные в компактное CF-дерево и за счёт этого тянет большие выборки, где обычная агломеративная кластеризация становится слишком дорогой по памяти и времени Звучит круто, но наверняка есть подвох Да, он есть: у кластеризации нет единственно верного разбиения (ой как удобно) На одних и тех же данных разные методы могут дать разные осмысленные группы, и это нормально, поэтому число кластеров почти всегда под вопросом, а внутренние метрики качества оценивают геометрию: насколько кластеры компактные и отделённые друг от друга Как проверить кластеры на прочность Ну так если мы не можем точно определить правильность кластеров, то как можно вообще доверять полученным кластерам? Самый простой способ проверить результат — чекнуть устойчивость. Можно прогнать кластеризацию несколько раз на немного разных подвыборках данных и посмотреть, получаются ли похожие группы. Если группы действительно выражены в данных, границы обычно держатся: при разных подвыборках ты видишь примерно одно и то же, а если структуры нет, границы начинают прыгать от выборки к выборке Надо правда иметь ввиду, что устойчивость тоже не идеальна и иногда обманывается на симметричных данных, но как первый фильтр — ок Ну а в комментариях — ноутбук с k-means против DBSCAN на блобах и полумесяцах, две метрики на одних данных: силуэт без меток и скорректированный индекс Рэнда, которому нужна разметка. Плюс проверка устойчивости, где разбиение на данных с явной структурой воспроизводится при ресемплинге, а облако без структуры валится #кластеризация #ipynb
Уважаемые подписчики, у меня для вас 2 хороших новости: 1. В Питере солнце! 2. На Stepik вышел мой первый курс по Causal Inference для аналитиков: разбираем темы от наивного подхода до causal discovery, используем сквозной пример выдуманного сервиса StreamFlow (чтобы перекладывать инсайты из курса сразу на свою работу), смотрим кучу беспрактисов и практических инструментов, которые будут пополняться в программе курса со временем — всего 21 урок Стоимость и так символическая, а с промокодом CYRILLICA вообще со скидкой 50% Учимся, развиваемся и не даем себя заменить агентам!
Уважаемые коллеги, я понимаю, что сейчас не до постов про аналитику и ai-агентов, так как за окном лето, отдых и думскроллинг, но у меня есть важная тема, которую нам стоит обсудить! Так, ну и что там такого важного? Ну, вы задумывались, какие навыки и задачи…
Уважаемые коллеги, я понимаю, что сейчас не до постов про аналитику и ai-агентов, так как за окном лето, отдых и думскроллинг, но у меня есть важная тема, которую нам стоит обсудить! Так, ну и что там такого важного? Ну, вы задумывались, какие навыки и задачи в вашей корпоративной роли аналитика станут дороже, а какие обесценятся с постепенным переходом на агентские фреймворки? Тут об этом целая статья хайпится Some Simple Economics of AGI, и я бы хотел разобрать график оттуда По горизонтали отложена стоимость автоматизации задачи (c_A), по вертикали стоимость проверки результата задачи человеком (c_H). Две пунктирные линии режут картинку на четыре части, горизонтальная это бюджет на проверку (B), вертикальная это зарплата (w), ниже которой держать работягу на задаче дороже, чем ее автоматизировать (логично) Итого имеем 4 квадранта Q1 (нижний левый) — автоматизация дешёвая, проверка дешёвая. Сюда падают всякие дашборды, регулярные выгрузки, базовые ETL, расчёт A/B через готовый калькулятор (когда дизайн уже задан), ad-hoc запросы под звонок. В расчётах авторов в этом квадранте лежит s_v ≈ 0.59 всей работы (s_v это доля задач, у которых обе стоимости дешёвые одновременно), и именно эту долю агенты автоматизируют первой Q2 (верхний левый) — автоматизация дешёвая, проверка дорогая. В этот скоуп задач можно отнести оценки causal effect, дизайн рекомендательных систем, агентные пайплайны принятия решений, долгосрочные A/B с метрикой через квартал (изменение subscription pricing, retention 12M, ранкер ленты), оценка incrementality от brand-маркетинга Формула c_H = w · t_fb / S_nm объясняет, почему здесь бывает жить непросто: t_fb — сколько надо ждать результата, w зарплата эксперта, который проверяет, S_nm запас экспертизы в экономике. Длинный лаг умножается на дорогого эксперта, а делится на тающий запас экспертов. В пределе проверять некому, агенты летают без надзора Q3 (нижний правый) — автоматизация дорогая, проверка дешёвая. Качественный user research и интервью с пользователями, ручной разбор отзывов и NPS с пониманием контекста, конкурентный анализ, подготовка слайдов для C-level с правильным месседжингом, разметка эджевых кейсов в данных. Зона временно живая, пока стрелка K_C на графике (рост компьюта) не сдвинет её содержимое влево, в Q1, и LLM в разбор отзывов и в классификацию уже зашли Q4 (верхний правый) — автоматизация дорогая, проверка дорогая. Дизайн самой системы измерения продукта, то есть что считать North Star, перевод мутного запроса от CEO «надо увеличить engagement» в конкретные гипотезы и план измерений, дизайн экспериментальной программы на год с выбором guardrail-метрик, стратегические решения о приоритизации продуктовых направлений на данных плюс контексте, который нигде не записан Погоди, а в чем тут новость? С джунами также ведь! Это база! В целом я тоже так думал — замените агентов на джунов и суть же не изменится: джун делает Q1, мидл Q2, сеньор Q4, это карьерная лестница из любого учебника, какая там новизна вообще? Но есть три места, где аналогия агенты = джуны ломается, и из-за них статью, собственно, и написали: 1️⃣Verification не масштабируется, а execution масштабируется Один сеньор мог проверять пару джунов в день, и количество джунов было ограничено физикой найма. Сегодня сеньор должен проверять выход агента, который генерирует в тысячи раз больше за тот же час. Execution капасити экспоненциальная, verify капасити линейная, упирается в одного человека. С джунами этой асимметрии не было, потому что джун тоже ограничен временем 2️⃣Codifier's curse С джунами было так: сеньор обучает джуна, наращивает свой статус (становится ментором), джун через 5 лет становится мидлом, рынок экспертизы расширяется. С агентами: сеньор обучает модель, перекладывает свою интуицию в обучающие данные, и его собственная ценность падает. Аналога в карьерной лестнице нет, механизм работает в обратную сторону
От единицы анализа к единице рандомизации Когда заводишь эксперимент в Statsig или GrowthBook, сплит по юзерам стоит там по умолчанию, и обычно на этом шаге никто не задерживается🌟. Для кнопки в чекауте и правда выбирать нечего другого, но если пользователи в продукте общаются между собой, а фича касается их общения, дефолтный сплит начинает тихо занижать эффект, и понимаешь ты это не на этапе дизайна, а после раскатки, когда обещанный аплифт куда-то делся Разберу на мессенджере, который тестирует новые стикеры и замеряет сообщения в неделю Контроль перестает быть контролем Уважаемые подписчики знают, что обычный A/B держится на допущении, что метрика пользователя зависит только от того, в какую группу он попал. Но почти любая оциальная фича это допущение ломает, так как в нашем сетапе пользователь из контроля переписывается с друзьями из тритмента, у которых стикеры уже есть, и он сам начинает писать чаще (так как со стикерами прикольнее, например). Часть эффекта протекает из тритмента в контроль, и разница между группами сжимается Тест ловит только часть эффекта У стикеров два источника прироста: личный, тк. тебе самому с ними веселее, ты охотнее открываешь чат, и собеседнику для этого фича не нужна, стикер он увидит в любом случае. И сетевой, тк. когда стикеры появились и у твоих контактов, переписки становятся живее, тебе чаще пишут, ты чаще отвечаешь, и этот источник крупнее Юзерный сплит почти весь сетевой источник теряет. У пользователя из тритмента стикеры есть, но у половины его контактов их нет, так что переписки драйвятся лишь наполовину, а у контроля картина зеркальная. В итоге тест видит в основном личную прибавку, и в симуляции это около трети истинного эффекта, один лишний месседж в неделю против трёх при полной раскатке. Доверительный интервал у этой оценки узкий, так что заниженное число не выглядит подозрительным Рандомизировать надо комьюнити, а не людей Чинится сменой единицы рандомизации. Граф переписки режут на круги (комьюнити) общения и включают фичу целому кругу разом. Контакт пользователя теперь почти всегда в той же группе, что и он сам, протечка между тритментом и контролем падает, и оценка подбирается к настоящему эффекту. Идея вот отсюда. Звучит хорошо, кстати, но платишь за это хорошо разбросом, потому что независимых единиц стало десятки кругов вместо тысяч пользователей Сомневаешься — укрупняй С размером круга есть асимметрия, которую видно на симуляции. Возьмёшь круги крупнее реальных сообществ, смещение остается маленьким, растет только разброс. Нарежешь мельче, диалогов наружу становится больше и смещение скачком возвращается к наивному сплиту. Промахнуться в сторону крупных кругов можно почти бесплатно, в сторону мелких — дорого, поэтому при сомнении круг лучше укрупнять. Как найти разрез по графу строго, а не на глаз, разбирают тут ну а в комментариях ноутбук, где весь этот кейс с мессенджером собран на синтетической сети, и видно, как наивный сплит недооценивает стикеры втрое, как нарезка по кругам это вытягивает, и кривую, на которой слишком мелкие круги обваливают точность ⬇️
Retail media и зачем за этим следить аналитику Часто общаюсь с разными хедами аналитики, и в последние полгода тема retail media почему-то всплывает буквально в каждом втором разговоре. Домен большой, на руки команды собирают заметно выше, чем средняя продуктовая…
Консервативно боремся с эффектом новизны Частенько при тестировании новой фичи можно заметить в данных проявление эффекта новизны, когда пользователи тыкают в неё не потому что она полезна или решает их запрос, а потому что это что-то новое и блестящее, и вся проблема в том, что со временем надбавка от новизны выветривается, а эффект оседает на своём истинном, обычно куда более скромном уровне (а если фича пустая, то и вовсе на нуле). Если вовремя это не распознать, то проверку гипотезы можно зафакапить, отдав за раздутый краткосрочный эффект решение, которое в долгую не оправдается Кстати, бывает и зеркальная история, change aversion, она же primacy effect, когда сначала все хейтят новый интерфейс, а через неделю привыкают и метрика отрастает обратно Так и как обычно с этим справляются? Обычно берут график эффекта по календарным дням, видят, что он сползает, и бодро финалят, мол, новизна, само устаканится со временем. Но нюанс в том, что в одной точке этого графика намешаны и новички, и старички, а их доли день ото дня плавают, поэтому сползающая кривая запросто оказывается не затуханием новизны, а сменой состава выборки, то есть вы поймали композицию, а не реакцию на фичу Как лечить? Лечится это тем, что людей выравнивают не по календарю, а по времени с момента попадания в тест: разбиваем юзеров на когорты по дате, когда они впервые попали в тест, и смотрим эффект как функцию от возраста когорты, и тогда затухание новизны отделяется от смены состава, потому что внутри когорты состав уже зафиксирован. Самая дешёвая версия живёт вообще без формул, достаточно сравнить эффект в первую неделю жизни когорты с эффектом в последнюю, и если просел — значит новизна Взрослая версия через DiD Когда хочется построже, есть подход через difference in differences по когортам. Разные группы пользователей начинают видеть новую версию в разные недели, и дальше когорту со стажем сравнивают со свежей в один и тот же день, так сезонность сокращается, а в остатке остаётся чистая реакция на фичу, то есть новизна или primacy. Подробно и с картинками расписано в гайде на TDS Но за это надо будет платить и давайте сразу к прайслисту: ➖ выживаемость: по мере старения когорты из неё уходят менее вовлечённые, остаются активные, и это умеет и прятать затухание, и рисовать его там, где его нет ➖ нужен стабильный id, на протухающих куках когорту просто не собрать ➖ когортные ячейки быстро мельчают, дисперсия растёт, и сами авторы честно пишут, что под это нужно много пользователей и заранее продуманный дизайн Самый честный вариант, понятно, просто крутить тест дольше, пока эффект не выйдет на плато, но это упирается ровно в те же куки и в продакта, которому зарелизить надо было ещё вчера, так что когорты это разумный компромисс между подождём месяц и поверим красивому агрегату Не боимся нового!
Снижаем дисперсию, ломаем несмещённость Пример АБ: Стриминговый сервис тестирует новый алгоритм рекомендаций, целевая метрика — timespent на целевом сериале, эксперимент рандомизированный. Как снизить дисперсию в таком эксперименте? Уважаемые подписчики уже знают стандартные способы сузить доверительные интервалы в эксперименте: регрессионная корректировка, CUPED и его расширения, где целевую метрику чистят от вариации, объяснимой ковариатами. Тут очень чешутся руки добавить в ковариаты не только данные до эксперимента, но и поведение пользователя уже внутри теста, ведь оно сильнее всего коррелирует с метрикой и должно давать самое заметное сужение интервала Давай сюда нюансы Нюанс в том, что такие промежуточные метрики сам тест и изменил. Эффект часто доходит до целевой метрики через промежуточное поведение, когда человек под действием фичи активнее взаимодействует со смежным контентом и уже поэтому проводит больше времени в продукте, и корректировка на эту промежуточную метрику блокирует ровно тот путь, по которому эффект и распространяется, оставляя в оценке только прямую компоненту Да, рандомизация при этом честная, но оценка смещена, поскольку безопасно корректировать можно лишь то, что зафиксировано до распределения по группам Так и чего дальше Чтобы это не осталось рассуждением, я проверил оба способа на симуляции, где истинный эффект известен заранее. Корректировка на внутреннюю метрику стабильно занижает эффект, потому что отбрасывает его непрямую часть, и при этом даёт более узкий интервал, то есть ошибается уверенно. В работе Chihara и соавторов поведение внутри теста раскладывают на две части. Первая предсказуема и сдвинута самим тестом, её в корректировку брать нельзя. Вторая это отклонение от ожидаемого, на которое тест не повлиял, и берут только её, поскольку она сужает интервал, но не содержит сигнала об эффекте Ну так и какой вывод то Короче, брать ковариаты из самого эксперимента можно, но не в сыром виде, так как сырая внутренняя метрика смещает оценку, потому что несёт на себе след теста, а безопасна только та ее часть, которую тест не затронул Ну и не забываем мудирость: узкий интервал вокруг смещённого числа обходится дороже широкого вокруг верного (ауф) А в комментариях ноутбук с симуляциями
Сегодня на банкетном — Пушкинскому музею 114 лет! Поел тортика, послушал Андрианова, посмотрел на красивых, талантливых и влиятельных людей Самый приятный клиент нашего консалтинга (дада, не удивляйтесь)
Приехал такой коробан, который позволил мне отказаться от подписок на стриминговые сервисы, облачное хранилище и хостинг небольших проектов суммарно на 4-5к рублей в месяц. Вроде немного, да...но вы видели цены на жкх и впн??? Ну и ещё важная причина, по которой…
Стиринг-вектор, или почему промпт-инжиниринг это шаманизм Сегодня пересеклись с уважаемым коллегой, с которым вместе пытались автоматизировать создание WordPress-плагинов еще до этих ваших клод кодов (еще аж в 2019 году). Вот он меня озадачил вопросом стиринг-вектора, а у меня как раз в проде LLM и я хочу, чтобы она отвечала чуть менее вежливо и чуть более по делу, но всё, что у меня есть в руках — это системный промпт, который я переписываю в десятый раз, температура и фантазии про файнтюн, на который у меня нет ни данных, ни бюджета В итоге модель то говорит "как ассистент, я не могу", то начинает лить воду на три абзаца, и предсказуемости в этом примерно столько же, сколько в заявлениях Трампа Так вот тут стиринг-вектор это попытка прекратить это шаманство и работать с моделью на уровне её внутренних активаций. Берётся два набора примеров, в одном модель ведёт себя так, как нужно, в другом наоборот, и для каждой пары считается разница активаций на каком-нибудь среднем слое трансформера. Эти разницы усредняются, и получается один вектор, направление в скрытом пространстве, которое отвечает за конкретное поведение. На инференсе этот вектор просто прибавляется к активациям с коэффициентом α, и поведение модели сдвигается в нужную сторону, причём α можно крутить как ручку громкости, в плюс или в минус Подход называется Contrastive Activation Addition, авторы из Anthropic и MATS показали на Llama-2-13b, что так можно управлять подхалимством, склонностью к галлюцинациям и согласием отключиться Какие бизнес-задачи это закрывает на практике 1️⃣ тон и стиль ассистента без переписывания промпта 2️⃣ снижение отказов и подхалимства когда модель соглашается с любой ерундой пользователя 3️⃣ доменный сдвиг когда нужно, чтобы модель чаще говорила в терминах финансов, а не маркетинга, при тех же весах 4️⃣ безопасность можно вычесть направление, которое отвечает за вредные ответы, не трогая остальное Но наверняка есть нюанс Минус один и большой, нужен доступ к активациям, через API закрытых моделей это не сделать, только локальные веса. Так что пока это инструмент для тех, кто катает Llama/Qwen/Gemma у себя