Продуктовый аналитик — для найма
Роль, стек и метрики — чтобы сверить с вакансией.
Анализ
Визуализация
Эксперименты
Удержание и сегментация
Инфра
Все проекты
В этой категории нет проектов с этим инструментом.
-
Volta Neobank — Product Analytics
Эксперименты
- Ситуация
- «Volta» — вымышленный необанк, терявший пользователей на онбординге: у каждого отдела своя цифра, и ни одна не объясняла, где утекают деньги
- Задача
- Найти критический шаг онбординга и доказать вывод так, чтобы его нельзя было списать на удобную выборку
- Действия
- Одна петля discover → validate → measure → optimize: воронка, A/B прогресс-бара KYC, когорты, KMeans-сегментация, DiD-проверка причинности
- Результат
- KYC-фикс: +5,72pp конверсии (p<0,0001) → €208,5K за 12 мес при 13,9× ROI; M3-удержание +9,2pp
Python · pandas / NumPy · SciPy / Statsmodels · scikit-learn
-
A/B Testing Methodology Toolkit
Эксперименты
- Ситуация
- Метод A/B-теста хорош настолько, насколько верны его Type I error под нулём и мощность под эффектом
- Задача
- Сделать свойства методов проверяемыми: контроль ошибки подкреплён прогоном, а не ссылкой на литературу
- Действия
- Реализация методов из первичной литературы — SRM, CUPED, delta-method, mSPRT, HTE, BH — и калибровка каждого симуляцией
- Результат
- CUPED срезает дисперсию на 17.7% (SE 0.00360 → 0.00327), delta-method находит CTR-лифт +0.51 pp при p < 0.0001, SRM p = 0.8376 — все 18 модулей откалиброваны симуляцией
Python · NumPy / SciPy · pytest · uv
-
Browser Mini-Games — Analytics Arcade
Эксперименты
- Ситуация
- Аналитические концепции абстрактны: рекрутер или студент не прочувствует их из текста
- Задача
- Сделать смысл метрики очевидным из самого действия, а не из объяснения
- Действия
- Игры в self-contained SVG: A/B-тест, funnel drop, cohort catch, retention day, SQL и metric match
- Результат
- 10 игр: 7 аналитических и 3 аркадных, один файл без сервера; smoke-тесты Playwright ловят поломки
SVG · JavaScript · Astro · Playwright
-
- Ситуация
- Аналитическое портфолио показывает метрики на чистом CSV, а невидимой остаётся аналитика внутри multi-tenant продукта
- Задача
- Собрать слой целиком: авторизация, изоляция по организациям, приём событий и результат эксперимента, считаемый в базе
- Действия
- SQL-вьюхи считают funnel, cohort, MRR и DAU; v_results считает A/B в базе; RLS изолирует строки по организациям
- Результат
- Итог A/B на сидированном потоке: control 29,6% против treatment 40,7%, +11,1 пп при p ≈ 1,7·10⁻¹⁰ (χ²); метрики считаются в живой базе для любого клиента
Python · Streamlit · Supabase (Postgres + RLS + Edge Functions) · SQL
-
- Ситуация
- Аналитическое портфолио обычно начинается с готового CSV; здесь работа стартует раньше — с инструментирования приложения
- Задача
- Определить события без утечек PII, довести их до аналитического инструмента и превратить в решения
- Действия
- Каталог событий и скрабинг PII; A/B с chi-square, uplift, Wilson CI и SRM; SQL-зеркало метрик, Streamlit-дашборд, CI и Docker
- Результат
- Онбординг-тест на сидированном потоке: завершение 55.9% → 70.8% (+26.6%, χ² = 40.10, p < 0.0001, SRM p = 0.90), а до платного апгрейда доходят 6.3% завершивших регистрацию
Python · PostHog · FastAPI · Streamlit
-
- Ситуация
- Портфолио показывает весь AARRR-цикл на одном датасете из 8 000 синтетических пользователей, а не одну метрику
- Задача
- Собрать метрики так, чтобы они читались как один связный сюжет, а не набор отдельных графиков
- Действия
- Детерминированный seed и общий кэш: одна база для Funnel, Retention, Revenue и Segments; 5 страниц на Streamlit
- Результат
- Funnel, Retention, Revenue и Segments читаются на одной базе; тот же UI стал слоем презентации Supabase-проекта
Python · Streamlit · pandas / NumPy
-
Sales Calls Analytics Dashboard
Аналитика
- Ситуация
- ИИ-обзвон — 4-шаговая воронка на 16 891 синтетическом звонке; выгрузка не говорит, где бот теряет клиента
- Задача
- Снять разбор звонков с ручного просмотра и показать шаг воронки с наибольшей потерей
- Действия
- Разметка шага по маркерам шаблонного скрипта, утечка по типам, взвешенная потеря контактов, вовлечённость по часам
- Результат
- Ответ за минуту: где бот теряет клиента и что чинить; на выходе — взвешенная потеря контактов и первый A/B-сценарий
Python · Streamlit · pandas
-
SQL Analytics Case Study
Аналитика
- Ситуация
- Нет продакшен-данных, а учебные задачи не показывают системное мышление: 25 кейсов на синтетическом датасете
- Задача
- Собрать кейсы, где каждый запрос отвечает на продуктовый вопрос и воспроизводится одной командой
- Действия
- Самодостаточный .sql на кейс, генератор данных на DuckDB, dbt-слой staging → marts, regression-тесты, живой отчёт на Pages
- Результат
- Воронка теряет 78% на add-to-cart → checkout (54% — это шаг view→cart); retention с ~19.5% (D1) до ~4% (D30); повторных покупок 3.5%; на real data возвращаются 72.4%
SQL · dbt · DuckDB · Python
-
- Ситуация
- Кейсы ClickHouse проверялись на глаз: снапшот результатов не был связан с SQL-файлами, а выигрыш оптимизации смешивал переписывание запроса и изменение схемы
- Задача
- Мне нужно было собрать лабораторию, где каждый кейс сверяется со снапшотом и независимым движком, а выигрыш оптимизации измеряется при неизменном тексте запроса
- Действия
- 50 млн синтетических событий в MergeTree, десять кейсов от windowFunnel до RFM, DuckDB-двойники для семи из них, проекция по product_id и тест на побайтовую идентичность slow и fast SQL
- Результат
- Снапшот и семь DuckDB-двойников сходятся, идентичность slow и fast SQL закреплена тестом, а проекция проходит заложенный в тест порог ускорения ≥10× на полном скане
ClickHouse · DuckDB · SQL · Python
-
Delivery Control Tower
Аналитика
- Ситуация
- Доставка измеряется средним временем, а вопрос «где теряется время и хватит ли мощности под прогноз» требует разреза по категориям, каналам и городам
- Задача
- Собрать воспроизводимый контур: ETL, витрины, прогноз заказов, анализ узких мест, проверяемые гипотезы и SQL-слой с замерами
- Действия
- DuckDB star-schema, rolling-origin бэктест четырёх моделей, декомпозиция времени и кривая нагрузки, Mann-Whitney с bootstrap-CI, 14 оконных запросов и 3 пары оптимизаций под EXPLAIN ANALYZE
- Результат
- Лучший WAPE 6.01% на h=7 у seasonal_naive; время доставки почти не зависит от нагрузки (rho = −0.092), но закуски идут 40.0 мин против 26.6 мин у пиццы; доля mp выросла на 5.7 п.п.
python · sql · duckdb · superset
-
- Ситуация
- Алерт «GMV упал на 10%» не говорит, где теряются деньги: общий спад одинаково правдоподобно объясняется десятью разными сегментами
- Задача
- Мне нужно было разложить падение до конкретного сегмента и доказать, что атрибуция полная, а не удобная нарезка
- Действия
- Дерево метрик GMV = users × orders_per_user × AOV на именованной базе, декомпозиция country × дециль, гостевой адденд отдельно, Shapley-вклады, executive-дашборд
- Результат
- UK дециль-1 объясняет 56,2% именованного падения (−£195 218,25); полная атрибуция сходится в £0,00 при общем спаде −10,0%
Python · pandas · DuckDB · Plotly
-
- Ситуация
- Платформа не видит сделку: она закрывается вне платформы, поэтому ликвидность считается по самоотчёту продавца, а не по факту продажи
- Задача
- Мне нужно было измерить расхождение прокси с посаженной истиной по категориям и отдельно проверить, создаёт ли платная видимость контактный спрос или перераспределяет его
- Действия
- Синтетический лог на 6 000 объявлений и 40 000 сессий с посаженной истиной, EM-смесь sold/unsold на наблюдаемых сигналах ответа, поправка по категориям, рандомизированный холдаут с гардрейлами
- Результат
- Прокси 0,2413 против истины 0,3070: ошибка −0,0657 (−21,4%); после поправки худшая категория ошибается на 1,61 п.п., а платная видимость даёт −2,47% контактов на сессию при p = 0,308
Python · pandas · DuckDB · SciPy
-
RFM Analysis of Bank Clients
Аналитика
- Ситуация
- Банк накапливает транзакции клиентов, а маркетинг шлёт всем одинаковые предложения
- Задача
- Заменить единое предложение адресным: для каждого сегмента — своя стратегия удержания
- Действия
- Очистка транзакций, расчёт Recency, Frequency и Monetary, RFM-скоринг, сегментация и визуализация в Tableau
- Результат
- Шесть именованных сегментов; топ-20% клиентов держат 38,2% выручки (Gini 0,324), а Champions — 6,4% базы, дающие 12,1% дохода
Python · SQL · Tableau
-
Cohort Analysis Dashboard
Аналитика
- Ситуация
- Когортный анализ удержания и LTV на синтетических данных: средний retention прячет динамику
- Задача
- Показать поведение каждой когорты отдельно, а не сглаженную среднюю по всей базе
- Действия
- Матрица удержания, ARPU и LTV по когортам, оговорка о возрасте наблюдения, выгрузка в Tableau (CSV + Hyper)
- Результат
- Python внутри Tableau: 4 когортных расчёта на TabPy-сервере и 65 тестов; когортная матрица вместо среднего retention показывает скорость оттока и расхождение монетизации с удержанием
Python · pandas · matplotlib / seaborn · Jupyter Notebook
-
- Ситуация
- Модель оттока для подписочного продукта: случайный сплит подкладывает будущую активность в обучение
- Задача
- Оценить модель так, чтобы качество на тесте не было следствием утечки будущего
- Действия
- Признаки as-of, метка — будущее окно неактивности, хронологический сплит, решение по recall@top-decile и lift
- Результат
- В топ-10% самых рискующих модель ловит 54,4% отточников при lift 5,44×, но на at-risk подгруппе — 1,75×: 69,7% когорты — почти гарантированные негативы по конструкции.
Python · LightGBM · scikit-learn · pandas / NumPy
-
- Ситуация
- Двухвыборочный t-тест не использует пред-период: эксперименты просят лишний трафик, а retention-акции уходят всем
- Задача
- Реализовать CUPED и uplift-моделирование и доказать отсутствие смещения там, где верный ответ известен заранее
- Действия
- CUPED на ковариате пред-периода и T-/S-лернеры на LightGBM; сверка с ground truth по AUUC и QINI
- Результат
- CUPED срезает стандартную ошибку на 26% (5,5k пользователей на руку вместо 10k), а предрегистрированный порог окупаемости 0.05 отправляет кампанию только на new.
Python · LightGBM · scikit-learn · pandas / NumPy
-
- Ситуация
- Продуктовые A/B-практики, перенесённые в CRM, ломают рандомизацию: пользователя бакетируют при первом показе, а не при сборке сегмента
- Задача
- Собрать лабораторию, где каждый этап CRM-эксперимента проверяется на данных с известным ответом и может сломаться наглядно
- Действия
- Симулятор на 20 000 пользователей и 12 кампаний: сегментная рандомизация, глобальная контрольная группа, балансировщик отправок, эффект нетто отписок
- Результат
- Сегментная рандомизация держит SRM p=0.266, GCG-аплифт +0.9968 [0.9433, 1.0502], а нетто-эффект +50.5 на 1 000 обработанных — положительный, но guardrail отписок пробит.
Python · pandas / NumPy · SciPy · statsmodels
-
- Ситуация
- RAG-демо легко показать, но не измерить: непонятно, ошибка в поиске или в генерации, и воспроизводится ли результат вообще
- Задача
- Собрать пайплайн с офлайн-харнессом оценки, который разделяет метрики ретрива и генерации и работает без API-ключей
- Действия
- TF-IDF-индекс на корпусе концепт-документов, cosine top-k, детерминированный экстрактивный ответчик; Claude подключается флагом --llm, харнесс тот же
- Результат
- recall@5 и MRR = 1.00 на 20 вопросах и 0.00 на 11-вопросном контроле с промахами ретрива (MRR@all 0.12) — метрика способна падать; correctness 0.37 у офлайн-базлайна (faithfulness ≡1.00 — инвариант экстрактива); ретрив и генерация оцениваются раздельно
Python · scikit-learn · pandas / NumPy · TF-IDF
-
Python Analytics Playground
Аналитика
- Ситуация
- Продуктовый анализ обычно начинается одинаково: загрузка выгрузки, чистка, распределения, графики — каждый раз с нуля
- Задача
- Вынести общую часть в модули, которые можно передать коллеге и не бояться сломать
- Действия
- Модули load / clean / EDA / viz / pipeline под требования PRD; тесты в tests/ проверяют эти требования; тулинг uv + ruff
- Результат
- Покрытие pytest ≥80%; модули маленькие и одноцелевые, требования в PRD, инструмент можно дорабатывать, не ломая существующее
Python · pandas / NumPy · Matplotlib · pytest
-
Data Analyst Telegram Bot
Эксперименты
- Ситуация
- У PM и аналитика нет BI-доступа: проверка A/B-гипотезы ждёт дашборда, а CSV из выгрузки остаётся без статистики
- Задача
- Проверить гипотезу прямо в Telegram — из CSV получить корректный результат с гардрейлами, без BI и без ноутбука
- Действия
- Бот на aiogram, pandas, scipy и statsmodels: 12 команд, Welch t-test или χ², SRM- и power-гардрейлы, аналитика как чистые модули, pytest + ruff + mypy в CI
- Результат
- Из CSV — p-value, лифт и 95% CI менее чем за 30 секунд, плюс заметка по мощности и график; /export отдаёт standalone HTML
Python · aiogram · pandas · SciPy / statsmodels
-
Scrolly English Speaking
Инженерия
- Ситуация
- Рабочие разговоры на английском (A2–B1): грамматика есть, а связная речь и реакции в реальном времени буксуют
- Задача
- Закрыть разрыв между грамматикой и живой речью: ситуации, где фразы применяют, а не узнают
- Действия
- Единый ScrollyLayout, MDX-нарратив по секциям, типизированный data-модуль для viz, IntersectionObserver с lazy import
- Результат
- Нарратив и визуализация синхронны: читатель доходит до абзаца, график меняется; новая сцена — data-файл плюс MDX
Astro · TypeScript · MDX · D3
-
Digital Garden — EQ in IT
Инженерия
- Ситуация
- Знания в виде хронологических постов теряют связи; цифровой сад связывает заметки через wikilinks
- Задача
- Опубликовать личный Zettelkasten как статический сайт, где связи между заметками видны читателю
- Действия
- Атомарные заметки в Obsidian-flavored Markdown; Quartz: TypeScript-плагины, бэклинки, graph view, статический вывод
- Результат
- Связи вместо хронологии: бэклинки делают заметку узлом, граф превращает накопление заметок в навигируемую структуру
TypeScript · Quartz v4 · Markdown · Obsidian
-
SERP Rank Lab
Аналитика
- Ситуация
- Метапоиск зарабатывает на позиции оффера, поэтому ранжирование и монетизация не измеряются одним числом
- Задача
- Выяснить, сколько выручки даёт ранжирование по деньгам и чем эта выручка платится в кликах
- Действия
- Две feasible-политики на одном информационном множестве, раскатка по user_id с guardrails и правилом остановки, диагноз через источник сигнала
- Результат
- На синтетическом логе: +34.45% выручки на поиск за −16.84% CTR; в раскатке −14.26% (p = 0.11) и −16.05% конверсии → не катим
Python · DuckDB · Streamlit · NumPy / SciPy
-
Airflow DAG Platform
Инженерия
- Ситуация
- Ручной отчёт из Postgres в Google Sheets давал задержки, ошибки копирования и полное отсутствие воспроизводимости
- Задача
- Заменить ручную выгрузку воспроизводимым идемпотентным пайплайном с DQ-валидацией, алертами и метриками запусков
- Действия
- Платформа на Airflow 3: DAG-шаблон fetch → validate → write → record_metrics и shared-модули config, dq, alerts, metrics, output, windows
- Результат
- Три DAG-а по общему шаблону, 72 теста без Airflow-сервисов и БД; полный прогон DAG занимает 440 с, из них задача forecast — 413 с
Python · Apache Airflow 3 · PostgreSQL · Docker Compose
-
ML Fundamentals — scikit-learn Pipeline
Аналитика
- Ситуация
- Предобработка — фундамент всей ML-работы: утечка теста в обучение или ручная обработка пропусков обесценивают любую модель выше по стеку
- Задача
- Собрать предобработку корректно с точки зрения современного scikit-learn: без утечки, без опоры на случайный сид и с воспроизводимым результатом
- Действия
- ColumnTransformer (SimpleImputer → StandardScaler для чисел, OneHotEncoder для категорий), фит только на трейне; детерминированный сплит через сортировку по (Country, Age); генератор датасетов и EDA-графики
- Результат
- Сплит воспроизводим без сида (Train (8, 5), Test (2, 5)), четыре синтетических датасета и 21 тест (7 + 9 + 5) держат конвейер запускаемым
Python · scikit-learn · pandas · matplotlib
-
LinkedIn Content Analytics
Аналитика
- Ситуация
- Рейтинг форматов, у которого доверительный интервал накрывает всё поле, — не ответ: показать его как ответ хуже, чем не показать ничего
- Задача
- Отвечать не на «сколько показов я набрал», а на «какой формат писать дальше — и доказано ли вообще, что разница есть»
- Действия
- Одно ядро разбора workbook, четыре рендера (markdown-отчёт, HTML-дашборд, SVG-график, заметка в хранилище) и bootstrap-интервалы по постам вместо точечного рейтинга
- Результат
- 50 101 показов, охват 9 440, ER 1.71 % за окно 12.10.2025 — 11.10.2026; три из четырёх разрезов оказались внутри шума, и это записано как результат
Python · openpyxl · uv · bootstrap
-
Promo Margin Lab — цена промо в рублях
Аналитика
- Ситуация
- Промо в офлайн-ритейле измеряют средним допериодом, а глубину скидки выбирают без цены каннибализации и маржи
- Задача
- Измерить промо в рублях маржи и выбрать глубину и набор магазинов под бюджет так, чтобы числа можно было перепроверить
- Действия
- Синтетическая панель с известной правдой, контрфактуал, четырёхбакетный ledger, P&L, breakeven, кластерный тест по симуляции, Qini против policy value, аллокация бюджета
- Результат
- Промо даёт +68.5 млн ₽ выручки и −24.4 млн ₽ прибыли; 97.9% волн убыточны при breakeven-глубине 1.0–19.5% и фактической 25.4%, а на одном бюджете оптимизатор зарабатывает +231 496 ₽ против +136 648 ₽ у top-15%
Python · pandas · scikit-learn · PySpark
-
- Ситуация
- Подписочный B2C-сервис решает, раскатывать ли новый онбординг, и не может ответить, какой рычаг даёт больший прирост выручки
- Задача
- Связать результат эксперимента с воронкой, когортным удержанием и юнит-экономикой и выдать один управленческий вердикт
- Действия
- A/B с SRM-, ITT- и силовой проверками, воронка до оплаты, когорты и LTV, сравнение конверсии и удержания при равном шаге
- Результат
- SHIP: activation → paid +19.59% (p=0.000946) без деградации guardrails; при равном шаге конверсия даёт +10.00% к LTV против +8.65% у удержания
Python · pandas / NumPy · DuckDB · SciPy
-
- Ситуация
- Каталог проектов вёлся руками: карточки расходились с GitHub, а метаданные и ссылки приходилось обновлять в двух местах
- Задача
- Мне нужно было сделать каталог, где данные приходят из одного машинного источника, страницы собираются из него, а повторная синхронизация не ломает ручные правки
- Действия
- Astro 7 с content collections, Python-синхронизация GitHub API в TOML, генератор frontmatter с маркером владения, валидатор заметок и 26 тестов, CI от дешёвого гейта к сборке
- Результат
- 47 страниц проектов и 15 полей метаданных собираются из одного TOML; повторный рендер идемпотентен, а 26 тестов покрывают три ветки сопоставления записей
Astro · TypeScript · Bun · Python
-
- Ситуация
- Страница программы конференции — это Vue SPA: данные живут в API, вёрстка в бандле, и «сделать так же» обычно означает «сделать похоже»
- Задача
- Разобрать чужой интерфейс до измеримых величин и собрать работающую копию без сборки и бэкенда
- Действия
- Вытащил программу из публичного API, снял метрики сетки с отрендеренного DOM, собрал HTML/CSS/JS и прогнал четыре независимых проверки: ревью, security, браузерные тесты, визуальный аудит
- Результат
- Сетка совпадает с оригиналом до пикселя: колонка времени 99 px, зал 420 px, карточка 391 px, строка 550 px, верх сетки y = 414; тесты ловят расхождение данных и вёрстки
HTML · CSS · JavaScript · Python
-
This Portfolio Site
Инженерия
- Ситуация
- Статическое портфолио на GitHub Pages: контент — проекты и посты — редактируется в Markdown, а не в разметке компонентов
- Задача
- Свести публикацию проекта к добавлению файла, без правки компонентов и ручных шагов между коммитом и продакшеном
- Действия
- Content collections с Zod-схемами, withBase() для base-path, inline-скрипт темы без flash, SEO-набор, деплой на Pages по push
- Результат
- Невалидный frontmatter ломает сборку, а не деплой; ни одна ссылка не хардкодит base; новый проект — без правки кода
Astro · TypeScript · Markdown · CSS custom properties