This is Data
описание
Канал Романа Романчука про аналитику и данные. Рассказываю про метрики и мат.статистику. Обозреваю ENG и RUS статьи. Советую книги. Делюсь скриптами, ссылками, майндмэпами. Сайт: https://thisisdata.ru Задать вопрос: @romanchuk_roman
6 215
подписчиков
Охват к подписчикам
43,8%
ERR
Реакции к просмотрам
1,02%
1 594 на 50 постов
Пересылки к просмотрам
1,71%
2 683
Постов в день
0,1
всего 56
Где отзываются чаще
доля реакций к просмотрам- 10:20AI в работе. Что изменилось? Почти два года назад я написал пост «Когда тебя заменит робот?» и там уверенно заявлял: «Человеческий дух никакой ИИ не заменит!» Но за это время ИИ перестал быть просто чатом с вопросами и ответами. AI эволюционировал. Агенты как концепция существовали и тогда, но по большей части жили в статьях и демо, а на практике или сыпались или требовали танцев с бубном вокруг настройки. Сейчас это инструмент, который сам открывает файлы, пишет код, создает приложения и доводит идею до результата без пошаговых команд. Разница не в том, что появилось что-то принципиально новое, а в том, что это наконец заработало и я вижу это на примере обычных рабочих задач. Развитие ИИ реально пугает. Но факт остается фактом - тот, кто освоил ИИ, обойдет тех, кто забил. Поделюсь одним кейсом, который меня отрезвил. Нужно было собрать финмодель для продукта, плюс прогноз на пару лет. Я, по старинке, открыл презентацию с описанием идеи, открыл Excel, сел собирать таблицу руками. Далее созваниваюсь с продактом (привет, Стас) по этому же вопросу и вместо того чтобы долго объяснять, он открывает Телегу, записывает голосовое своему боту, тот передает его агенту и через пару минут в чат прилетает готовая финмодель! В Excel и с учетом того, о чем я даже не подумал. Несколько минут и готовый результат, осталось немного поправить и обогатить данными. Вот тогда я понял, как безнадежно отстал, и что учиться нужно срочно! Сейчас осваиваю вайбкодинг, собираю персональных агентов, делаю сайт, в общем развлекаюсь. Если вы, также как и я, ощущаете, что отстали - хватит смотреть со стороны. Найдите курс, поставьте Cursor, Codex или Claude Code и соберите своего первого агента. Не все получится с первого раза, но попробовать стоит уже сейчас. А если не знаете, с чего начать - вот несколько точек входа: ▪️ Anthropic Academy (бесплатно) - курсы от самого Anthropic на английском, с сертификатами: от базового промптинга до Claude Code, MCP и агентов. ▪️ Кодовый ИИ-агент Cursor AI (бесплатно) - системный разбор всего инструмента на Stepik, от первого запуска до автономных агентов в CI. ▪️ Нейроцех (платно) - клуб, где сейчас учусь сам: мини-курсы с нуля, вайбкодинг, чат сообщества в ТГ. Кстати, насколько вообще интересна эта тема? По мере изучения могу делиться инсайтами. 🦄 - да, хочу все знать про AI 🥱 - нет, все тлен #мысли #опыт7,41%
- 12 янв.Возвращаемся в строй Отдых вышел что надо - долгий и ленивый 🦥 Я провел его дома под пледом, с Гарри Поттером на экране и «Ведьмаком» в консоли. Пару раз выгонял себя на пробежки в лес (сосны в инее - это волшебно!), а в самый снегопад даже удалось устроить выезд на квадроциклах с друзьями. Этот перерыв был нужен, чтобы перезагрузить голову, выдохнуть и собраться с мыслями. И теперь я готов к новому году с новыми идеями и энергией. А что будет в канале дальше? 🤔 В фокусе - харды. Много. Буду делиться знаниями и разбирать сложные темы. Ждите про: ▪SQL и оптимизацию запросов; ▪Python для анализа данных и разработки; ▪ML и статистику; ▪Немножко A/B; ▪И конечно, мои любимые метрики - куда ж без них. Чтобы было проще находить нужное, вводим навигацию по тегам: #харды - про код, данные и алгоритмы; #софты - переговоры, презентации, работа в команде; #карьера - рост от джуна до лида, фишки развития; #книга - must-read для прокачки и иногда для души; #мысли - мое мнение в свободном (и иногда хулиганском) формате; #опыт - стратегии, кейсы, лайфхаки из реальных проектов; #личное - учеба в маге, спорт, вылазки на природу. Цель - делать контент, который будет вам полезен и интересен. Если есть темы, которые хотите разобрать - пишите в комментарии, обязательно учту. Рад снова быть на связи! Давайте заряжать этот год вместе.2,98%
- 24 апр. 2025 г.Этот шаг спасет твою аналитику (и карьеру) Классический кейс. К аналитику прибегает продакт с горящими глазами: «Срочно нужно посчитать метрики, отчет нужен вчера, босс ждет!». Аналитик лезет в сырые данные, быстро собирает дашборд… и всё. Ни тебе проверки распределений, ни поиска выбросов, ни визуализации. Продакт на следующий день презентует эти цифры как истину в последней инстанции. А потом на них строятся бизнесовые решения… Так делать нельзя. Никогда. Исследовательский анализ данных (EDA — Exploratory Data Analysis) — это первый и обязательный шаг перед тем, как ты начнёшь считать метрики, строить модели или делать выводы. Он помогает понять, с чем ты на самом деле работаешь, выявить ошибки и аномалии, а самое главное, не попасть в ловушку красивых, но ложных цифр. Особенно критично это в машинном обучении. Когда ты обучаешь модель на плохих данных, хороший результат невозможен в принципе. В этом смысле работает железное правило: garbage in — garbage out. Что входит в EDA? ✔️ Осмотр данных. Сколько строк? Какие типы колонок? Что выглядит странно? Уже на этом этапе можно поймать очевидные ошибки. Используй .info(), .describe(), загляни в начало и конец таблицы, проверь типы. ✔️ Пропуски и дубликаты. Пропуски не всегда нужно удалять — иногда лучше заполнить их медианой, модой или предсказанными значениями. А дубликаты — это не только точные копии строк. Часто бывают неявные: например, у одного пользователя два одинаковых заказа с разными ID. ✔️ Очистка и предобработка. Проверка категориальных значений, работа с форматами, единообразие записи. Например, если у тебя в колонке есть и «Санкт-Петербург» и «СПБ» и «Питер», то без нормализации это три разных значения. А если даты хранятся как строки — ты не сможешь нормально их анализировать. ✔️ Выбросы и аномалии. Просто посчитать среднее недостаточно. Построй распределение, используй boxplot. Эти графики мгновенно покажут, где данные выбиваются за границы нормы. И не забывай: один выброс может испортить тебе весь анализ. ✔️ Визуализация. Даже простой scatter plot может рассказать тебе гораздо больше, чем набор агрегатов. Иногда взаимосвязь между переменными становится очевидной только когда ты её увидишь, а не посчитаешь. EDA — это не про «поковыряться в данных». Это про понять, что ты анализируешь, и быть уверенным в своих выводах. Это защита от ошибок, которые ты даже не успел заметить. В следующих постах я постепенно разберу каждый из этапов подробнее. А также поделюсь универсальным ноутбуком для проведения EDA. Так что добавляй в закладки 😉 #харды #eda2,49%
- 4 июн. 2025 г.С чего начинается хорошая аналитика? В прошлом посте я рассказывал, почему без EDA нельзя делать ни аналитику, ни машинное обучение. Даже если продакт стоит над душой и требует цифры «ещё вчера». Теперь давай разберём первый и самый недооценённый шаг в исследовательском анализе: осмотр данных. Представь, что ты лезешь в базу и... сразу пишешь groupby() или строишь график? Это ловушка. Начинать нужно не с расчётов, а с банального знакомства с тем, что у тебя вообще в руках. Осмотр данных — это как включить свет в темной комнате. Сразу видно, где пыльно, а где стоит тумбочка, об которую легко споткнуться. Первым делом смотри на объем данных: df.shape покажет, сколько строк и колонок. Иногда там вообще пара десятков строк — и это уже повод позвать дата-инженера. Дальше — названия колонок. Через df.columns можно заметить лишние пробелы, странные символы, дубли названий. Здесь же удобно сразу стандартизировать названия: убрать русские слова и привести к единому стилю ("snake_case" ван лав). Такие вещи не бросаются в глаза, но потом ломают пайплайн. Теперь — в бой идет df.info(). Это твой лучший друг. Он покажет: ▪️какие типы данных у колонок, ▪️сколько ненулевых значений, ▪️сколько памяти жрёт датафрейм. Обрати внимание: если в колонке написано, что у неё 80 000 непустых значений, а в df.shape[0] у тебя 100 000 — значит, 20% пропусков. Это серьёзно. Ещё один лайфхак: если колонка выглядит пустой, но info() говорит, что там всё заполнено — проверь, не строки ли там вроде " " или "None". Это визуальные, а не настоящие пропуски. Так что df.replace() тебе в помощь. Если всё типы данных соответствуют ожиданиям — отлично. Если нет — можно наткнуться на неприятности. Например, object вместо чисел или дат — и ты не сможешь нормально группировать, фильтровать, делить на категории. В таких случаях сразу меняй тип или уточняй источник. Следом подключай df.describe(). Это быстрый способ понять, как «живут» числовые данные. Сравни среднее и медиану — это может подсветить асимметричное распределение. Проверь минимум и максимум — там часто сидят выбросы или ошибки: отрицательные значения там, где их быть не должно, нули в колонке с деньгами, тысячи категорий у рейтинга от 1 до 5. Дополнительно пригодится .nunique(): иногда колонка кажется категориальной, а там каждый второй элемент уникален. Это уже почти ID, и скорее всего — не то, что ты хотел анализировать. И не забывай смотреть глазами. df.head(), df.tail() — быстрый способ поймать неявные проблемы. Например, даты, которые лежат строками. Или списки внутри ячеек. Или дубли с разницей в один символ. В табличке может быть много неожиданного — особенно если её собирали в два этапа, три человека, а выгружал четвёртый. Осмотр данных — это про внимательность и здравый смысл. Здесь ты ловишь грубые баги, структурные проблемы и мусор, который может незаметно утащить твою аналитику не туда. А ещё — экономишь себе кучу времени, потому что не придется всё переделывать после того, как уже построен отчёт. В следующем посте поговорим про пропуски и дубликаты. Ставь лайк, если тема интересна. #харды #eda2,45%
- 5 мар. 2025 г.без подписи2,32%
- 15 июл.Как написать стратегию аналитики и зачем она нужна? Ура, я наконец-то закончил эту статью! Писал ее долго, потому что хотел сделать по-настоящему крутой гайд, в который вложил много сил. И теперь с радостью делюсь с вами. Эта статья для тех, кто недавно стал тимлидом или хедом аналитики и чувствует, что пора выйти из режима «просто делаем задачи» и начать думать системно. Перед тем, как ее опубликовать, я искал подобные материалы и не нашел ничего достойного на русском языке. Есть пересказы Gartner, есть руководства от вендоров уровня «нужно делать data-driven», есть какие-то корпоративные посты. Поэтому статья - попытка закрыть реальный пробел. В ней вы найдете практическое руководство: как вывести стратегию аналитики из бизнес-целей, честно оценить зрелость команды, пройти три фазы развития и собрать дорожную карту. Это выжимка из моего опыта, с конкретными шагами. Приятного чтения. #опыт1,96%
- 9 апр.Эффективные встречи один на один - существуют ли они? Я терпеть не могу встречи ради встреч. Обычно это просто сжигание времени. Но есть один формат, в который я по-настоящему верю 🙏 Встречи один на один - не просто регулярный разговор сотрудника с начальником, а один из главных инструментов управления. К сожалению, многие относятся к ним как к простой формальности и проводят их «для галочки». Для меня 1-1 - это способ синхронизироваться, вовремя заметить проблемы, поддержать и задать направление движения. Именно поэтому к таким встречам нужно готовиться. Не обязательно писать большой план, но важно хотя бы заранее понимать, что хочешь обсудить. Формат может быть таким: 1. Начинаем с короткого неформального разговора. 2. Даем слово сотруднику: какие есть вопросы, сложности, идеи, что беспокоит, где нужна помощь (и действительно стараемся помочь). 3. Переходим к своей части: рассказываем новости, делимся мыслями, советуем, если это уместно, обсуждаем планы и изменения. 4. Самый важный блок - фокус недели. Фиксируем 1-2 главных приоритета на ближайшие дни. На следующей встрече разбираем: что вышло, что нет и почему. ⚠️ Сами фокусы не должны браться из воздуха. Они должны рождаться из стратегии развития. Если у руководителя нет понимания, куда движется функция, то 1-1 быстро скатывается в обсуждение только текучки. А когда есть стратегия, такие встречи становятся способом регулярно переводить ее в конкретные шаги для команды. Кстати, я уже готовлю статью про свой опыт создания и внедрения стратегии аналитики в компании. ⚠️ Еще одна практика, которую считаю очень полезной - это фиксировать письменно темы встреч и договоренности в любом удобном инструменте. Всегда можно вернуться и вспомнить, что обсуждали. Потому что если договоренности не зафиксированы, то их не существует. Как часто проводить 1-1? Все зависит от вашей команды и контекста, но мне нравятся недельные каденции. Они позволяют не терять фокус и темп: за 5 рабочих дней обычно накапливается достаточно прогресса для обсуждения. Для зрелой команды хватит и двухнедельного интервала, но реже есть риск упустить проблемы. Такой подход делает встречи не формальностью, а рабочим инструментом. Помогает держать курс, поддерживать людей и не тонуть в текучке. А вы верите в эффективный 1-1? 👍 - да 🔥 - нет, сжигание времени #опыт1,45%
- 27 июн. 2025 г.Планировал сегодня выложить пост про LTV — что это за метрика, какие бывают подходы к расчёту, чем отличается когортный от прогнозного. Но пока писал — наступил вечер, а пост так и не закончен 🙃 Поэтому выкладываю фото кота. Потому что пятница. Если у вас есть домашние питомцы — кидайте в комменты, пусть сегодня будет просто мило. #пятница #кототерапия1,43%
- 7 авг.На русском языке о стратегии построения аналитической команды нет почти ничего. Буквально несколько статей, одна из которых моя. Тем ценнее handbook, продолжающий эту тему и превращающий разрозненные наблюдения в пошаговую систему. 📚 From Data to Insights. The strategy of a Data Analytics Team John Mackay Джон начинал инженером данных, вырос до руководителя аналитики в крупном европейском банке, а сейчас управляет data-аналитикой в ведущей технологической компании и консультирует Fortune 500. За два десятка лет он построил не одну команду, которая возвращала бизнесу миллионы и делала процессы заметно человечнее. Свой опыт он упаковал в короткое прикладное руководство. Каркас книги - четыре обязательных элемента любой аналитической функции: команда, данные, стейкхолдеры и отчетность. Автор проведет вас от хаоса первых дней до внятной долгосрочной стратегии. Вот семь типовых симптомов, знакомых почти каждой команде аналитики: ▪️Завал ad-hoc запросами. ▪️Репутация подорвана и вам не доверяют. ▪️На анализ и инсайты времени нет. ▪️Срочные задачи прилетают в последний момент. ▪️Отчеты разрозненные, пользоваться ими больно. ▪️Коллеги выгорели и потеряли драйв. ▪️Стейкхолдеры вынуждены делать отчеты сами. Причина, по Маккею, одна - слабая стратегия и плохой дизайн команды. Книга ровно про то, как это исправить. Пригодится и CTO, и тимлидам, и рядовым аналитикам - чтобы понимать, как устроен здоровый data‑организм и в какой момент все пошло не так. 🔗 Электронную версию на английском в PDF качайте по ссылке. #книга1,42%
- 16 янв.Учимся создавать «окна» в SQL В прошлом посте мы узнали, зачем нужны оконные функции. Теперь научимся их объявлять. Все начинается с инструкции OVER() - она и определяет наше «окно». Ключевые команды внутри OVER(): ▪️PARTITION BY - разделяет данные на группы (партиции). Как GROUP BY, но без «схлопывания» строк. Считает функцию внутри каждой группы отдельно. ▪️ORDER BY - сортирует строки внутри окна. Критично для функций нарастающего итога, ранжирования и смещения (LAG/LEAD). Разберем на примере простой таблички, содержащей дату, канал с которого пришел пользователь и количество конверсий: SELECT date AS dt , medium AS med , conversions AS conv , SUM(conversions) OVER(PARTITION BY date ORDER BY medium) AS sum FROM orders Что произойдет? ▪PARTITION BY Date создаст отдельное «окно» для каждой даты. Сумма будет считаться только в рамках одного дня. ▪ORDER BY medium отсортирует каналы внутри каждой даты. ▪SUM(conversions) в паре с ORDER BY рассчитает нарастающий итог конверсий внутри каждого дня. Для первой строки в окне (дне) sum будет равен ее conversions, для второй - сумме первой и второй, и так далее. ⚠️ Важно: ROWS / RANGE управляют диапазоном строк, по которым считается оконная функция. И даже если ничего не указывать, то по умолчанию используется RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. В результате выполнения запроса мы получим примерно такую табличку: dt med conv sum 10.05.20 cpa 1 1 10.05.20 cpc 2 3 10.05.20 organic 1 4 11.05.20 cpa 1 1 11.05.20 cpc 3 4 11.05.20 direct 1 5 11.05.20 organic 2 7 12.05.20 cpc 1 1 12.05.20 organic 2 3 Основы разобрали! Далее я расскажу как сужать фокус окна до «скользящего» диапазона с помощью ROWS BETWEEN. #харды #sql1,35%
- 2 мар.Почему оконные функции могут тормозить запрос? Я написал уже целую серию постов про оконки (раз, два, три) и там все выглядело красиво - добавил OVER() и получил профит. Но в комментах справедливо подметили, что оконные функции - это часто один из самых тяжелых видов запросов, который сильно жрет ресурсы. Главный виновник тут обычно не сама функция, а сортировка. Сортировать много строк - дорогая операция на больших объемах данных, и ее лучше избегать везде, где она не нужна. Ниже 4 прикладных совета по оптимизации. 1⃣ Убери ORDER BY из окна, если порядок не влияет на смысл Частая ошибка - писать ORDER BY внутри OVER() «на всякий случай». Как только он появляется, базе нужно обеспечить порядок строк, а это почти всегда дорого. Если тебе нужен просто итог по группе (например, общий доход за день для каждой строки), а не накопительная сумма или скользящее окно - ORDER BY внутри окна не нужен. -- Накопительная сумма (дороже) SUM(revenue) OVER (PARTITION BY date ORDER BY created_at) -- Просто итог по дню (дешевле) SUM(revenue) OVER (PARTITION BY date) 2⃣ Чем меньше строк, тем быстрее Оконки «проходят» по всем строкам, часто упорядочивают их, а иногда еще и держат большие куски данных в памяти. Поэтому самый простой ускоритель - сократить объем данных ДО оконки: ✔ Отфильтруй период (например, последние 30/90 дней); ✔ Не тащи лишние колонки («SELECT *» - плохо); ✔ Если можно, то сначала агрегируй данные до нужной гранулярности, а окно считай уже на агрегате. 3⃣ Несколько разных окон = несколько сортировок Если в одном запросе несколько окон с разным ORDER BY, база может быть вынуждена упорядочивать данные несколько раз. И как итог: больше времени и памяти. SUM(x) OVER (PARTITION BY a ORDER BY b) AS s1, AVG(x) OVER (PARTITION BY a ORDER BY c) AS s2 Если можешь, унифицируй порядок в окнах. Если не можешь, то иногда лучше разнести расчеты на 2 шага, чем собирать все в одном SELECT. 4⃣ Используй план выполнения запроса EXPLAIN - это команда, которая показывает план выполнения запроса: какие шаги база собирается сделать и где она потратит ресурсы. А EXPLAIN ANALYZE еще и выполняет запрос добавляя фактические цифры: сколько строк прошло через каждый шаг и сколько времени заняло. Далее я разберу, как именно читать EXPLAIN и использовать эту команду для оптимизации. #харды #sql1,26%
- 16 окт. 2024 г.В 1960-х в автомобилях были повсеместно установлены ремни безопасности, дабы уменьшить количество смертей при авариях. Это дало результат: гибель на дорогах сократилась на 72%. Вот только обращений в больницу стало больше. Если раньше человек погибал при ДТП, то теперь получал серьезные травмы. Люди не знали про статистику смертности. Поэтому среди населения распространилось мнение о том, что ремни безопасности повышают риск травмы. С похожим заблуждением столкнулся математик Абрахам Вальд, описавший ошибку выжившего. Во время Второй мировой ему поручили проанализировать повреждения вернувшихся из боя самолетов, чтобы сократить потери в авиации. Он понял, что критические удары пришлись в тех зонах, которые на вернувшихся самолетах были повреждены меньше всего. Ошибка выжившего – одна из систематических ошибок отбора. Она возникает при анализе только успешных случаев и игнорировании данных о тех, кто не прошел отбор. В итоге мы получаем неполный набор данных, смещенный в сторону успешных случаев. При анализе клиентов мы собираем статистику «выживших». Это пользователи, которые успешно прошли сквозь воронку и дошли до покупки. Но есть и те, кто сошел с пути и потерял интерес к продукту. Если мы игнорируем «сошедших» пользователей, то совершаем несколько ошибок. Во-первых, сужается круг потенциальных покупателей. Например, строительный магазин постоянно увеличивает выбор обоев, чтобы привлечь больше клиентов. При этом бизнес мог бы подумать над расширением выбора садовой мебели для притока других категорий покупателей. Во-вторых, мы вычеркиваем из анализа людей, которые потерялись на этапах воронки. Так мы рискуем ошибочно приписать успех незначительным факторам или упустить ключевые, приводящие к неудаче. Чтобы избежать ошибки выжившего, важно увидеть «пропавшие» данные и собрать реальную картину. Замечать искажения нам помогают исследования клиентов. Также существуют статистические методы, например коррекция Хекмана для учета систематических ошибок отбора. #аномалии1,24%