MiddlePerformance Marketer > Google Ads > Работа с рекламными платформами
Короткий ответ Проверка может охватывать обещания в креативе, содержимое лендинга, юридические сведения, домен и соответствие страницы заявленной оферте. Как это работает подробнее Модерация проверяет не только текст объявления, но и содержимое посадочной страницы, поведение домена, а в ряде тематик (финансы, здоровье, недвижимость) — наличие дополнительных сертификатов или раскрытий; автоматическая модерация иногда даёт общую формулировку причины, которую нужно уточнять через поддержку, если она неясна. Отдельная категория отказов связана с несоответствием содержания рекламы фактическому содержанию посадочной страницы, например обещанной в объявлении скидки, которой нет на сайте — модерация всё чаще проверяет это соответствие автоматически. Что использовать на практике Откройте страницу так, как её увидит модератор, устраните именно указанную проблему и при неясной формулировке запросите разъяснение у поддержки. Подводные камни Повторная отправка того же объявления без правок редко помогает и может усилить р
ad-moderationadvertising-policy
JuniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Ошибка I типа (ложноположительный результат) — это признать эффект значимым, когда на самом деле его нет; её вероятность контролируется alpha. Ошибка II типа (ложноотрицательный результат) — это не заметить реально существующий эффект; её вероятность связана с мощностью теста (1 - мощность = бета). Как это работает подробнее обе ошибки — это два разных способа ошибиться при принятии решения по тесту: alpha контролирует частоту «увидеть эффект там, где его нет», бета — частоту «пропустить эффект, который есть». Таблица-памятка: | | Эффекта нет (H0 верна) | Эффект есть (H0 неверна) | | Признали значимым | Ошибка I типа (alpha) | Верное решение | | Не признали значимым | Верное решение | Ошибка II типа (бета) | Пример: alpha=0.05 означает не более 5% ложных тревог среди тестов без реального эффекта; бета=0.2 (мощность 80%) означает, что до 20% реальных эффектов могут быть пропущены при данном дизайне теста. Что использовать на практике снижение alpha (более строгий порог значимости) при том же раз
alphabeta
JuniorPython Developer > Основы Python > Основы Python
Короткий ответ split() и join() — парные методы строк, выполняющие противоположные операции: split() разбивает строку на список подстрок, а join() собирает список строк обратно в одну строку. Как это работает подробнее Важно помнить, что join() вызывается у строки-разделителя, а не у списка: разделитель.join(список). Разбиение. str.split(sep) делит строку по заданному разделителю; если он не указан, строка разбивается по пробельным символам. Склейка. sep.join(list_of_strings) объединяет элементы списка, вставляя между ними указанный разделитель. Ограничение. Вторым аргументом split() можно задать максимальное число разбиений. Неизменяемость. Строка в Python неизменяема, поэтому оба метода не меняют исходный объект, а создают новые. Пример кода Что использовать на практике Разбор ввода. Используй split() для обработки пользовательского ввода, CSV-подобных строк и текстовых данных. Сборка строк. Применяй join(), когда нужно собрать строку из фрагментов, — это быстрее, чем конкатенация в цикле. Пустой разделител
joinpython
JuniorDevOps Engineer > Контейнеры и доставка > CI/CD и управление релизами
Короткий ответ `docker build` собирает образ из Dockerfile и присваивает ему локальное имя и тег; `docker push` отправляет этот образ в удалённый registry, откуда его потом можно скачать на любом сервере или в кластере; тег нужен, чтобы однозначно идентифицировать конкретную версию образа. Как это работает подробнее тег — это часть полного имени образа (`registry/repo:tag`), которая обычно соответствует версии приложения или хэшу коммита. `docker push` загружает слои образа в registry (Docker Hub, GitHub Container Registry, ECR и т.п.), делая их доступными для других машин. Пример кода Что использовать на практике На практике. в CI-пайплайнах тег часто формируют из `CI_COMMIT_SHORT_SHA` или семантической версии, чтобы каждый собранный образ был уникальным и отслеживаемым до конкретного коммита. Это также основа для отката — можно развернуть образ с предыдущим тегом. Пример. Ожидаемое поведение: после выполнения команд в registry по адресу `registry.example.com/myapp` появляется новый тег `1.5.0`, который можн
cicd-and-release-managementcontainer-images
JuniorDevOps Engineer > Контейнеры и доставка > CI/CD и управление релизами
Короткий ответ `git tag -a v1.2.0 -m "..."` создаёт аннотированный тег, который навсегда фиксирует конкретный коммит под именем версии; `git push --tags` отправляет этот тег в удалённый репозиторий; теги используют для релизов, потому что они дают неизменяемую, легко читаемую ссылку на точную версию кода, из которой был собран релиз. Как это работает подробнее в отличие от веток, которые постоянно двигаются вперёд с новыми коммитами, тег — это фиксированная метка на одном коммите (аннотированный тег к тому же хранит автора, дату и сообщение, как отдельный Git-объект). Многие CI-системы умеют запускать отдельный пайплайн релиза именно по событию создания тега. Пример кода Что использовать на практике На практике. соглашение называть теги по semver (`v1.2.0`) позволяет автоматически генерировать changelog, прикреплять артефакты к GitHub/GitLab Release и однозначно идентифицировать, какая версия кода работает в production. Тег также удобен для обратной трассировки инцидента — заводская ревизия легко сопоставляет
cicd-and-release-managementdevops
JuniorPython Developer > Основы Python > Git и командная работа
Короткий ответ Ветка — это указатель на цепочку коммитов, позволяющий разрабатывать функциональность изолированно от основной линии; merge создаёт коммит слияния и сохраняет историю обеих веток, а rebase переносит коммиты поверх новой базы, делая историю линейной. Как это работает подробнее branch — лёгкий указатель (хеш последнего коммита), а не копия файлов; HEAD переключается между ветками. merge делает трёхстороннее слияние с общим предком; rebase переигрывает коммиты один за другим на новую базу. Пример кода Что использовать на практике Рекомендация. rebase используют для приватных feature-веток перед открытием PR, чтобы история была чистой; merge — для объединения в основную ветку, чтобы не терять контекст. Публичную ветку, от которой уже ответвились другие, rebase'ить нельзя. Подводные камни Риск. rebase общей ветки после того, как её запушили и другие от неё ответвились, — ломает историю у коллег; путают git merge --squash с обычным merge.
branchinggit
MiddleData Analyst > SQL и данные > Аналитическое мышление
Короткий ответ Делаю анализ на доступных данных, явно указываю период и источник, которых не хватает, оцениваю направление возможного смещения (например, недооценка метрики из-за отсутствия свежих записей) и формулирую выводы с явными оговорками, а не как окончательный результат. Как это работает подробнее неполные данные не означают «нельзя анализировать» — они означают, что нужно явно обозначить, какую часть картины не видно, и в какую сторону это может искажать выводы, чтобы потребитель отчёта не принял частичный результат за полный. Пример кода Что использовать на практике На практике: сначала проверяю масштаб проблемы (какая доля данных и какого периода отсутствует); рассуждаю о направлении смещения (если отсутствуют именно свежие записи CRM, то метрики «за последнюю неделю» могут быть занижены); там, где можно, сверяю с альтернативным источником (например, биллингом) для частичной проверки; в отчёте отдельным блоком указываю ограничения и степень уверенности в выводах. Проверка: если rows_loaded = 0 за
analytical-thinkingbias
MiddleData Analyst > SQL и данные > Аналитическое мышление
Короткий ответ Основные гипотезы — техническая (дублирование событий клика, баг фронтенда, повторная отправка события) или ботовый трафик; проверяю их, глядя на распределение события по пользователям/сессиям и на долю аномалии, сосредоточенную у малого числа источников. Как это работает подробнее рост одной метрики без изменения смежных, логически связанных метрик (клик должен вести к действию, отражающемуся в других метриках) — сильный сигнал технической аномалии, а не реального поведенческого изменения. Пример кода Что использовать на практике На практике: проверяю распределение событий клика по user_id/session_id — если рост сконцентрирован у небольшого числа сессий с аномально большим числом кликов, это похоже на баг (повторная отправка при каждом ре-рендере) или бота. Проверяю также, не было ли деплоя фронтенда в этот день, затронувшего обработчик клика. Проверка: если топ-20 сессий дают сотни кликов каждая при обычной норме 1-2 клика на сессию — подтверждена гипотеза о техническом дублировании событий,
analytical-thinkinganomaly-detection
MiddlePerformance Marketer > Google Ads > Автоматизация кампаний
Короткий ответ Безопасное правило должно учитывать не только порог CPA, но и минимальный объём расхода/конверсий за период проверки, окно усреднения в несколько дней и задержку/подтверждение перед необратимым действием, чтобы не приостанавливать группу на статистическом шуме. Как это работает подробнее Правило вида «если CPA > целевого, пауза» без условий на объём данных может сработать после одной случайно дорогой конверсии. Добавление условий «расход за период ≥ X» и «число конверсий за период ≥ Y» гарантирует, что оценка CPA статистически устойчивее. Что использовать на практике На практике. На практике задают составное условие: период 3-7 дней, минимум 5-10 конверсий или фиксированный минимальный расход, порог CPA с запасом (например, на 30-50% выше целевого, а не вровень с ним), и логируют каждое срабатывание для последующего ручного review, а не только автоматическое действие. Пример. Условие: «CPA за последние 5 дней > 1.4 × целевой CPA, И конверсий за 5 дней ≥ 8, И расход за 5 дней ≥ 10 000 руб. → пау
ad-platformsautomation-rules
MiddlePerformance Marketer > Google Ads > Масштабирование бюджета
Короткий ответ Бюджет лучше сокращать поэтапно (например, на 15-20% за шаг с паузой в несколько дней), начиная с кампаний с наименьшей предельной эффективностью (где ROAS/CPA на последних единицах расхода хуже среднего), а не одним резким урезанием самой прибыльной кампании целиком. Как это работает подробнее Резкое сокращение бюджета, как и резкое увеличение, меняет условия аукциона для кампании и может временно ухудшить эффективность из-за адаптации алгоритма; кроме того, при постепенном сокращении легче отследить, на каком уровне бюджета эффективность (CPA/ROAS) начинает заметно ухудшаться — это помогает найти разумный новый уровень расхода. Что использовать на практике На практике. Перед сокращением стоит ранжировать все активные кампании/сегменты по предельной эффективности (marginal CPA/ROAS на последнем приросте бюджета, если такие данные есть из истории масштабирования), чтобы резать в первую очередь наименее эффективные доли бюджета, а не весь бюджет пропорционально по всем кампаниям без разбора. При
ad-platformsbudget-scaling