MiddleSMM Manager > Общее > Работа с заказчиком
Короткий ответ Вместо спора о цене напрямую стоит показать, как предложенная стратегия и бюджет связаны с конкретной бизнес-целью заказчика, какие риски несёт более дешёвый вариант, и предложить сравнение по объёму и содержанию работ, а не абстрактное «дороже/дешевле». Как это работает подробнее защита бюджета работает лучше, когда опирается на конкретику — объём задач, ожидаемые сроки получения результата, риски при экономии, а не на общие утверждения о важности SMM как канала. Что использовать на практике Действия. Полезно разложить бюджет по статьям (контент-продакшн, реклама, аналитика/ведение), показать, что входит в стоимость услуг и чего не будет при более дешёвой альтернативе (например, тестирование гипотез, регулярная отчётность, корректировка стратегии), и предложить вариант с меньшим бюджетом, явно показав, от какого объёма и каких задач придётся отказаться. Проверка. Сравнение для заказчика: вариант А (текущий бюджет) — 12 постов, 4 рекламные кампании с A/B-тестами, еженедельная аналитика; вариант
budget-planningrequirements-management
JuniorSMM Manager > Общее > Работа с заказчиком
Короткий ответ Начинать работу по такому брифу нельзя: нужно вернуться к заказчику и уточнить приоритет целей (охват и продажи обычно требуют разных форматов и рекламных настроек), реалистичные сроки и хотя бы ориентировочный бюджет, прежде чем планировать контент и рекламу. Как это работает подробнее охват (узнаваемость) и продажи — разные бизнес-цели, которые обычно требуют разных форматов, площадок и целей кампании в рекламном кабинете; формулировка «бюджет не ограничен» на практике почти никогда не означает буквально неограниченный бюджет. Что использовать на практике Действия. SMM-менеджер задаёт уточняющие вопросы: какая цель важнее на этом этапе, есть ли ориентиры по бюджету/KPI из прошлых периодов, реалистичны ли сроки для выбранных задач — например, для роста продаж обычно нужен не один пост, а цикл касаний аудитории. Проверка. Ответ заказчику: «Уточните, пожалуйста: на ближайший месяц приоритет — охват новой аудитории или прямые заявки? Это разные рекламные цели и форматы. Также подскажите ориентир
budget-planningrequirements-management
MiddleData Analyst > SQL и данные > Аналитическое мышление
Короткий ответ Снижаю объём данных до JOIN (фильтрация и агрегация заранее), проверяю наличие индексов/ключей партиционирования на полях соединения и фильтрации, и по возможности заменяю дорогой JOIN на предварительно агрегированные промежуточные таблицы. Как это работает подробнее стоимость JOIN сильно растёт с объёмом обеих таблиц и отсутствием подходящих индексов/партиций; типичная причина медленного запроса — соединение «сырых» детальных таблиц целиком, хотя для диагностики нужен только агрегат за нужный период и сегмент. Пример кода Что использовать на практике На практике: сначала сужаю обе таблицы предикатами (WHERE по дате/партиции) до JOIN, а не после; проверяю, что соединение идёт по индексированному/партиционированному ключу; где возможно, заменяю JOIN на предварительно посчитанную витрину (материализованное представление) с нужными агрегатами; проверяю план выполнения (EXPLAIN ANALYZE в PostgreSQL) на предмет полного сканирования таблиц. Пример: PostgreSQL: Проверка: сравнить EXPLAIN ANALYZE до и
analytical-thinkingjoin
JuniorSMM Manager > Общее > Брендбук и Tone of Voice
Короткий ответ Избыточные заглавные буквы и множественные восклицательные знаки часто воспринимаются аудиторией как агрессивный или «крикливый» кликбейт-стиль, поэтому многие бренды явно ограничивают их использование для поддержания ощущения спокойного и профессионального тона. Как это работает подробнее визуальное оформление текста (регистр, пунктуация) влияет на восприятие тона не меньше, чем сами слова — тот же текст заглавными буквами читается как «крик». Что использовать на практике Подход. в гайдлайне часто фиксируют конкретный лимит, например «не более одного восклицательного знака на пост» и «заглавными буквами — только название бренда или акции, не более одного слова». Пример. Черновик «СКИДКИ ДО 50%!!! УСПЕЙ!!!» нарушает правило гайдлайна «не более 1 восклицательного знака, без капса, кроме названия бренда». Переписанный вариант: «Скидки до 50% — лучший момент успеть». Проверка — соответствие пунктуации и регистра правилу перед публикацией. Подводные камни Ошибка. использовать CAPS LOCK для «привлеч
brand-guidelinesbrand-management
JuniorData Analyst > SQL и данные > Продуктовые и бизнес-метрики
Короткий ответ Разделение нужно, чтобы понимать, за счёт чего растёт (или падает) общая активность продукта — за счёт притока новых пользователей или за счёт удержания уже существующих, потому что это разные рычаги роста, требующие разных действий. Как это работает подробнее на каждую дату/период пользователей делят на "новых" (первая активность в этом периоде) и "возвращающихся" (были активны и ранее); сумма даёт общий DAU/MAU, но тренд каждой части может отличаться. Что использовать на практике Применение. если рост общего DAU обеспечен только новыми пользователями, а доля возвращающихся падает — это сигнал проблем с retention, даже если верхнеуровневая метрика выглядит хорошо; обратная ситуация (рост за счёт retention при падающем притоке новых) говорит об ограничении маркетинга/привлечения. Проверка или пример. Общий DAU вырос на 10%, но абсолютное число возвращающихся не изменилось — весь рост обеспечен новыми пользователями, retention не улучшился. Подводные камни Частая ошибка. делают вывод "продукт ра
daunew-users
JuniorData Analyst > SQL и данные > Качество данных
Короткий ответ Суррогатный ключ — внутренний идентификатор строки измерения. Натуральный ключ сохраняют как бизнес-атрибут для сопоставления с источником, но факты обычно ссылаются на суррогатный ключ. Как это работает подробнее Один натуральный идентификатор может меняться, конфликтовать между источниками или соответствовать нескольким версиям SCD Type 2. Каждая историческая версия получает собственный неизменяемый surrogate key. Интеграция. Внутренний ключ отделяет модель DWH от правил конкретной CRM. История. Факт связывается с версией измерения, действовавшей в момент события. Пример кода Что использовать на практике Храните одновременно surrogate key, natural key и идентификатор исходной системы. Заведите специальную строку измерения для неизвестного ключа, если бизнес-правила это допускают. Подводные камни Потеря natural key. Без него сложно сверять сущность с источником. Нестабильная генерация. Пересоздание surrogate key при полной загрузке ломает связи с фактами.
data-warehousedimensions
MiddlePython Developer > Основы Python > Django ORM
Короткий ответ bulk_create()/bulk_update() формируют один (или несколько батчами) SQL-запрос на вставку/обновление множества объектов сразу вместо отдельного INSERT/UPDATE на каждый объект в цикле, что резко снижает число round-trip'ов к БД; ограничения — они не вызывают save()/сигналы Django для каждого объекта. Как это работает подробнее Обычный цикл for obj in objects: obj.save() выполняет отдельный запрос на каждый объект; bulk_create собирает один многострочный INSERT (батчами, управляется batch_size), bulk_update формирует CASE WHEN-конструкцию или несколько UPDATE одним проходом. Пример кода Что использовать на практике Практика. bulk_* операции применяют при массовом импорте/синхронизации данных; pre_save/post_save сигналы не вызываются, поэтому побочная логика, завязанная на сигналы, должна быть продублирована явно при необходимости. Подводные камни Ошибка. Ожидают, что bulk_create выполнит кастомную логику переопределённого save() — это не так; не указывают batch_size для очень большого количества о
bulk-operationsdjango-orm
JuniorPython Developer > Основы Python > Docker и контейнеры
Короткий ответ Такой порядок позволяет Docker кэшировать слой с зависимостями и переустанавливать их только при изменении requirements.txt, а не при каждом изменении кода; если скопировать весь код сразу, любое изменение файла инвалидирует кэш и зависимости переустанавливаются заново. Как это работает подробнее Docker строит образ послойно и кэширует каждый слой по хешу инструкции и входных данных; если слой не изменился, Docker берёт его из кэша, иначе пересобирает его и все последующие слои. Пример кода Что использовать на практике Рекомендация. правильный порядок — COPY requirements.txt ., затем RUN pip install, и только потом COPY . .; тогда при правке .py-файла пересобирается только быстрый слой копирования кода. Подводные камни Риск. COPY . . одной командой в начале Dockerfile — любое изменение в коде инвалидирует кэш pip install и заставляет переустанавливать все пакеты при каждой сборке.
build-cachecontainerization
MiddlePerformance Marketer > Google Ads > Инструменты и автоматизация
Короткий ответ QUERY позволяет одной формулой отфильтровать, сгруппировать, агрегировать и отсортировать диапазон, поэтому отчёт проще расширять, чем цепочку вложенных поисков и сумм. Её синтаксис отличается от полного SQL и требует однородных типов данных в столбцах. Как это работает подробнее Функция принимает диапазон и строку запроса на языке Google Visualization API Query Language. Выражение SELECT задаёт столбцы, WHERE фильтрует строки, GROUP BY агрегирует, ORDER BY сортирует; результат динамически меняется вместе с исходным диапазоном. Удобство. Для повторяющейся сводной логики QUERY делает фильтры и агрегацию видимыми в одном месте. Ограничения. Не все возможности SQL поддерживаются; смешанные типы могут интерпретироваться неожиданно, а строковые литералы и заголовки требуют аккуратного синтаксиса. Пример кода Что использовать на практике Для крупной таблицы. Ограничьте диапазон реальными данными и назовите поля или настройте заголовки предсказуемо. Проверка результата. Сравните групповые суммы с конт
data-aggregationgoogle-sheets
JuniorData Analyst > SQL и данные > Python для анализа данных
Короткий ответ .copy() создаёт независимую копию данных, чтобы изменения в новом объекте не затрагивали исходный DataFrame; без неё часть операций может вернуть view (вид) на те же данные, и изменения отразятся на оригинале неожиданным образом. Как это работает подробнее некоторые операции в pandas (например, простой срез по столбцам) могут возвращать view — объект, ссылающийся на ту же память, что и исходный DataFrame, а не на новую копию; изменение такого view способно изменить и исходные данные, что и вызывает печально известный SettingWithCopyWarning. Пример кода Что использовать на практике Практика. если планируется модифицировать производный DataFrame (добавлять столбцы, менять значения), а исходный должен остаться неизменным для дальнейших сравнений, стоит сразу явно вызвать .copy(); это особенно важно при создании "рабочих" версий таблицы для экспериментов с очисткой. Проверка. после изменения subset исходный df должен остаться [1, 2, 3], что подтверждает независимость копии от оригинала. Подводные к
copydataframe