MiddleData Analyst > SQL и данные > Качество данных
Короткий ответ Нужно сверить определения метрики шаг за шагом — период и таймзону, знаменатель (все визиты или только уникальные пользователи) и числитель (все покупки или только завершённые/неотменённые), а также проверить, не считает ли дашборд по кэшированной/агрегированной витрине с другой логикой дедупликации. Как это работает подробнее Конверсия = числитель/знаменатель, и расхождение почти всегда означает, что числитель или знаменатель (или оба) считаются по-разному: дашборд может считать конверсию по сессиям, а ручной запрос — по уникальным пользователям, что даёт разные цифры при повторных визитах. Пример кода Что использовать на практике На практике. Эффективный порядок проверки — (1) запросить у владельца дашборда точную формулу метрики и фильтры, (2) воспроизвести эту же формулу вручную на сырых данных и сравнить с цифрой дашборда, (3) если совпало — значит исходное ручное определение отличалось, если не совпало — искать проблему в пайплайне дашборда (устаревшая витрина, фильтр по тестовым пользова
conversion-ratedashboards
JuniorData Analyst > SQL и данные > Коммуникация с бизнесом
Короткий ответ Уточню формулировку задачи: что именно считаем «продажами» (выручка, число заказов, конверсия), за какой период произошло падение, с чем сравниваем и какое решение зависит от ответа — только после этого начну писать запросы. Как это работает подробнее фраза «продажи упали» скрывает конкретную метрику, период, сегмент и базу для сравнения. Без уточнения этих элементов легко посчитать не ту цифру и ответить не на тот вопрос. Что использовать на практике Применение. задаю вопросы: какая метрика (выручка/штуки/заказы/конверсия), с чем сравниваем (прошлый период, аналогичный период прошлого года, план), в каком сегменте заметили падение (канал, регион, категория товара), кто принимает решение по итогам и к какому сроку нужен ответ. Проверка или пример. Менеджер пишет: «продажи упали на этой неделе». Уточняющие вопросы: Шаг 1 — Продажи — это выручка или количество заказов? Шаг 2 — Сравниваем с прошлой неделей или с той же неделей прошлого года (сезонность)? Шаг 3 — Падение по всем каналам или, наприм
business-analysismetric-definition
MiddleData Analyst > SQL и данные > Аналитическое мышление
Короткий ответ Сверяю SQL-определение метрики на дашборде (фильтры, джойны, дедупликацию, период агрегации и часовой пояс) построчно с ручным запросом к источнику и ищу первую точку, где числа расходятся — там и причина. Как это работает подробнее расхождение дашборда и источника почти всегда объясняется различием в логике расчёта (другой фильтр, другой JOIN, кэш, другой часовой пояс), а не «ошибкой» одной из сторон — поэтому расследование идёт через сравнение логики запросов, а не цифр. Пример кода Что использовать на практике Порядок действий. 1) достаю точный SQL/конфиг метрики, который использует BI-инструмент; 2) воспроизвожу его вручную против «сырого» источника на том же периоде; 3) сверяю промежуточные числа (число строк после каждого фильтра/джойна); 4) проверяю, не закэширован ли дашборд (старые данные) и совпадает ли часовой пояс агрегации; 5) проверяю, не задвоение ли из-за JOIN один-ко-многим. Подводные камни Частые ошибки. сразу считать правильным дашборд (или наоборот источник), не разобрав лог
dashboarddata-quality
JuniorSMM Manager > Общее > Авторские права и лицензии
Короткий ответ Нет: изображение, найденное через поисковик, в большинстве юрисдикций защищено авторским правом владельца, если явно не указано иное, поэтому лёгкость находки не означает права на использование, а отсутствие водяного знака не означает, что фото свободно от прав. Как это работает подробнее авторское право на изображение возникает автоматически при его создании во многих правовых системах; факт индексации фото поисковиком никак не передаёт права на его использование. Что использовать на практике Действия. Стоит использовать лицензированные стоковые фото, собственную съёмку или материалы с явной свободной лицензией и соблюдением условий атрибуции, сохраняя подтверждение лицензии для каждого внешнего актива. Проверка. Дизайнер нашёл фото через поиск картинок и вставил его в карусель бренда. Проверка перед публикацией: указан ли источник и лицензия в карточке актива в медиабиблиотеке; при отсутствии подтверждения — замена на фото из проверенного лицензированного банка. Подводные камни Риск. Считать
content-licensingcopyright
JuniorPerformance Marketer > Google Ads > Масштабирование бюджета
Короткий ответ Общепринятая практика — увеличивать бюджет не более чем на 15–20% за один шаг и не чаще, чем раз в несколько дней, чтобы алгоритм успевал адаптироваться без выхода кампании в повторное обучение. Как это работает подробнее Алгоритмы автоматических ставок обучаются на исторических данных о результатах при определённом уровне расхода. Резкий скачок бюджета сильно меняет условия аукциона для кампании, и система может временно терять эффективность, заново подстраиваясь под новый объём. Что использовать на практике На практике. Перед увеличением бюджета проверяют, что кампания стабильно выходит из фазы обучения и показывает устойчивый результат. Увеличение делают постепенно, с паузой в 3–7 дней между шагами, наблюдая за CPA/ROAS. Пример. Бюджет 5000 руб./день увеличивается до 6000 руб./день (+20%), с наблюдением 4–5 дней перед следующим шагом. Проверка: CPA в эти дни не должен вырасти более чем на 10–15% от среднего за предыдущую неделю. Подводные камни Частая ошибка. Частая ошибка — увеличить бюджет
ad-platformsbudget-scaling
JuniorData Analyst > SQL и данные > Качество данных
Короткий ответ Сначала зафиксируйте точное определение метрики и воспроизведите фильтры дашборда. Затем последовательно сравните raw, staging, mart и визуализацию на одном периоде. Как это работает подробнее Дашборд часто читает агрегированную витрину, которая обновляется по расписанию и может применять дополнительные фильтры. Ручной запрос к исходной таблице не эквивалентен такой логике по умолчанию. Время. Проверьте границы периода, часовую зону и момент последнего обновления. Логика. Сверьте статусы, тестовые аккаунты, дедупликацию, валюту и способ агрегации. Модель. Убедитесь, что соединения не размножают строки и сравнивается одна грануляция. Пример кода Что использовать на практике Возьмите небольшой закрытый период и одну группу, чтобы локализовать первую точку расхождения. Храните определение метрики, SQL или ссылку на модель рядом с дашбордом. Подводные камни Смена нескольких условий. Одновременная правка фильтров мешает понять причину. Сравнение несвежих данных. Кэш BI и расписание витрины могут пок
dashboarddata-quality
JuniorDevOps Engineer > Контейнеры и доставка > DNS
Короткий ответ A-запись сопоставляет доменное имя с IPv4-адресом, CNAME — создаёт псевдоним одного доменного имени на другое каноническое имя, MX указывает почтовый сервер, отвечающий за приём электронной почты для данного домена, вместе с приоритетом. Как это работает подробнее При резолвинге CNAME DNS-сервер сначала находит каноническое имя, на которое указывает псевдоним, а затем рекурсивно резолвит уже его (в итоге всё равно нужна A- или AAAA-запись в конце цепочки); MX-записи используются не веб-браузерами, а почтовыми серверами при определении, куда доставлять письма для домена, и несколько MX-записей с разным приоритетом обеспечивают резервирование. Пример кода Что использовать на практике Практика. CNAME нельзя сочетать с другими записями на одном и том же имени (например, нельзя одновременно иметь CNAME и MX на apex-домене), поэтому для корневого домена часто используют ALIAS/ANAME-подобные расширения DNS-провайдера или просто A-запись. Подводные камни Риск. Частая ошибка — создавать CNAME на корнево
dnsdns-records
MiddleData Analyst > SQL и данные > Качество данных
Короткий ответ Нужны два отдельных запроса-проверки: LEFT JOIN с фильтром на отсутствие соответствия в dim_customer для ссылочной целостности и простой фильтр amount < 0 для проверки диапазона значений; в обоих случаях результат должен возвращать ноль строк. Как это работает подробнее Такие проверки обычно оформляют как автоматические тесты в оркестраторе/dbt (тест «relationships» и «custom SQL test»), которые запускаются после каждой загрузки и падают (fail), если запрос вернул хотя бы одну «плохую» строку. Пример кода Что использовать на практике На практике. Проверки качества данных встраивают в сам пайплайн, а не выполняют вручную постфактум — это позволяет остановить загрузку или хотя бы оповестить команду до того, как сломанные данные дойдут до дашбордов бизнеса. Проверка. оба запроса в здоровом пайплайне должны возвращать 0 строк; если проверка 1 вернула строки — где-то в источнике создаются заказы без клиента или dim_customer не успела обновиться до загрузки fact_orders. Подводные камни Частые ошибки.
data-qualitydimension-table
MiddlePython Developer > Основы Python > Функции и области видимости
Короткий ответ Декоратор оборачивает исходную функцию во внутреннюю функцию-обёртку, которая выполняет замер времени до и после вызова оригинала; без functools.wraps обёрнутая функция теряет своё имя, docstring и другие метаданные, так как снаружи видна только функция-обёртка, а не оригинал. Как это работает подробнее Декоратор @my_decorator синтаксически эквивалентен func = my_decorator(func) — имя func в месте использования начинает указывать на объект, который вернул декоратор (обычно это wrapper-функция). functools.wraps(func) — это сам декоратор, применяемый к wrapper, который копирует __name__, __doc__, __module__ и прочие атрибуты оригинальной функции на wrapper, чтобы снаружи decorated-функция выглядела как исходная. Пример кода Что использовать на практике Практика. Без functools.wraps инструменты автодокументации, отладчики, логирование стектрейсов и help(func) показывают имя wrapper вместо реального имени функции, что затрудняет диагностику в продакшене. Это особенно критично, если декораторы приме
decoratorsfunctions-scope
MiddleData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ Нужно сначала перевести время события из UTC (как обычно хранится в событийных логах) в локальную таймзону пользователя, затем определить календарный день по локальному времени и сравнить его с днём регистрации + 7 — в ClickHouse это делается функциями toTimeZone/toDate с динамической таймзоной из поля пользователя. Как это работает подробнее если считать Day 7 retention по UTC-дате для пользователей из разных часовых поясов, для части из них "день 7" фактически может означать день 6 или 8 по их локальному времени — особенно критично для продуктов с ежедневной активностью (например, привычка "заходить утром"). Проверка: сравнить итог с расчётом по UTC без поправки на таймзону — для продукта с глобальной аудиторией расхождение должно быть заметным. Что использовать на практике Практика. в ClickHouse таймзону можно задавать per-row через toTimeZone(event_time, user_timezone), где user_timezone — строковое поле вида 'Europe/Moscow'; для больших объёмов данных стоит заранее проверить, что поле тайм
clickhouseproduct-metrics