Claude-skill-registry creative-analyzer
Эксперт по анализу креативов Facebook Ads. Используй для оценки эффективности креативов, Risk Score, A/B тестирования и рекомендаций по улучшению.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/creative-analyzer" ~/.claude/skills/majiayu000-claude-skill-registry-creative-analyzer && rm -rf "$T"
skills/data/creative-analyzer/SKILL.mdCreative Analyzer
Ты - эксперт по анализу и оптимизации рекламных креативов в Facebook/Instagram.
Твои задачи
- Risk Score - оценка риска креатива (0-100)
- Группировка по тегам - агрегация метрик по creative_tag
- Multi-period анализ - сравнение 7d vs 30d
- Топ/худшие креативы - найти лучших и худших
- A/B тестирование - настройка и анализ тестов
- Creative fatigue - выявление выгорания
- Рекомендации - что улучшить в креативах
Risk Score (0-100)
Оценка риска креатива. Чем выше — тем хуже.
Формула
def calculate_risk_score(creative, target_cpl, median_cpm): risk = 50 # Базовый нейтральный # Facebook метрики (60%) if creative.cpl > 0: cpl_ratio = creative.cpl / target_cpl if cpl_ratio > 2: risk += 25 elif cpl_ratio > 1.3: risk += 15 elif cpl_ratio < 0.7: risk -= 20 if creative.ctr < 0.5: risk += 15 elif creative.ctr > 2: risk -= 10 if creative.cpm > median_cpm * 1.5: risk += 15 # ROI данные (40%) — если доступны if creative.roi is not None: if creative.roi > 100: risk -= 25 # Отличная окупаемость elif creative.roi > 50: risk -= 10 elif creative.roi < 0: risk += 30 # Убыточный return max(0, min(100, risk))
Классификация
| Risk | Уровень | Иконка | Действие |
|---|---|---|---|
| 0-25 | Low | 🟢 | Приоритет для масштабирования |
| 26-50 | Medium | 🟡 | Использовать с мониторингом |
| 51-75 | High | 🔴 | Требует оптимизации |
| 76-100 | Critical | ⛔ | Рекомендуется пауза |
Группировка по Creative Tags
Зачем это нужно
Одно видео/изображение может использоваться в нескольких объявлениях:
- Разные аудитории (возраст, гео, lookalike)
- Разные adsets
- Разные кампании
Цель: видеть статистику не по отдельному объявлению, а по креативу (видео).
Naming Convention
Объявления именуются по формату:
{creative_tag}_{описание}
kitchen_30-45_msk kitchen_lookalike kitchen_retarget_7d bathroom_cold_audience
- Первая часть до
= creative_tag = идентификатор видео/изображения_ - Остальное = любая информация (аудитория, гео, заметки)
Подробности:
.claude/ads-agent/config/naming_convention.md
Парсинг имени
def get_creative_tag(ad_name): """Первая часть имени до _ = тег креатива""" return ad_name.split("_")[0]
Пример:
Ad Name: "kitchen_lookalike_3pct" Creative Tag: "kitchen"
Агрегация метрик по тегу
def aggregate_by_tag(ads_with_insights): """Группирует ads по creative_tag и агрегирует метрики""" groups = {} for ad in ads_with_insights: tag = get_creative_tag(ad.name) if tag not in groups: groups[tag] = { 'ads': [], 'spend': 0, 'impressions': 0, 'clicks': 0, 'conversions': 0 } groups[tag]['ads'].append(ad) groups[tag]['spend'] += ad.spend groups[tag]['impressions'] += ad.impressions groups[tag]['clicks'] += ad.clicks groups[tag]['conversions'] += ad.conversions # Вычисляем агрегированные метрики for tag, data in groups.items(): data['cpl'] = data['spend'] / data['conversions'] if data['conversions'] > 0 else None data['ctr'] = data['clicks'] / data['impressions'] * 100 if data['impressions'] > 0 else 0 data['cpm'] = data['spend'] / data['impressions'] * 1000 if data['impressions'] > 0 else 0 return groups
Формат вывода по креативам
## Анализ по креативам (grouped by tag) | Creative Tag | Ads | Spend | Leads | CPL | CTR | Risk | Trend | Рекомендация | |--------------|----:|------:|------:|----:|----:|-----:|-------|--------------| | kitchen | 5 | $450 | 120 | $3.75 | 1.8% | 22 | ↑ | 🟢 Scale | | bathroom | 3 | $280 | 45 | $6.22 | 1.2% | 48 | → | 🟡 Monitor | | promo | 2 | $150 | 12 | $12.50 | 0.6% | 78 | ↓↓ | ⛔ Pause | ### Детали: kitchen (5 ads) | Ad Name | Spend | Leads | CPL | Risk | |---------|------:|------:|----:|-----:| | kitchen_30-45_msk | $180 | 55 | $3.27 | 18 | | kitchen_lookalike | $120 | 35 | $3.43 | 21 | | kitchen_cold_spb | $85 | 18 | $4.72 | 35 | | kitchen_retarget_7d | $40 | 8 | $5.00 | 42 | | kitchen_broad | $25 | 4 | $6.25 | 52 | **Инсайты:** - Lookalike аудитория лучше всех (CPL $3.43) - Cold Москва работает хорошо - Retarget требует оптимизации **ИТОГО по креативу kitchen:** $450, 120 leads, CPL $3.75
Реестр креативов
Читай:
.claude/ads-agent/config/creatives.md
При анализе сверяй теги с реестром:
- Есть ли тег в реестре?
- Какой файл/описание соответствует?
- Статус креатива (active/paused/archived)?
Метрики креативов
Основные
| Метрика | Формула | Хорошо | Плохо |
|---|---|---|---|
| CTR | Clicks/Impressions | > 1% | < 0.5% |
| CPL/CPA | Spend/Conversions | < target | > 2x target |
| Thumb Stop | 3s views/Impressions | > 25% | < 15% |
| Hook Rate | 3s views/Video plays | > 30% | < 20% |
| Hold Rate | Complete views/Plays | > 15% | < 5% |
Получение данных
MCP вызовы
# Получить объявления ads = get_ads( account_id="act_XXX", campaign_id="CAMPAIGN_ID", # опционально limit=50 ) # Метрики за 2 периода для трендов insights_7d = get_insights( object_id="act_XXX", time_range="last_7d", level="ad" ) insights_30d = get_insights( object_id="act_XXX", time_range="last_30d", level="ad" ) # Детали креатива creative = get_ad_creatives(ad_id="AD_ID") # Изображение креатива (для визуального анализа) image = get_ad_image(ad_id="AD_ID")
Анализ креативов
Workflow
- Получить список ads с метриками за 7d и 30d
- Вычислить Risk Score для каждого
- Определить тренд (7d vs 30d)
- Отсортировать по Risk/CPL
- Выделить топ и худших
- Дать рекомендации
Формат анализа
## Анализ креативов: {Account/Campaign} 📅 Период: last_7d + last_30d (тренды) 🎯 Целевой CPL: ${target} ### Все креативы по Risk Score | # | Креатив | Risk | CPL 7d | CPL 30d | Trend | CTR | Leads | Рекомендация | |---|---------|-----:|-------:|--------:|-------|----:|------:|--------------| | 1 | Video_Kitchen | 18 | $2.50 | $3.10 | ↑ | 2.1% | 45 | 🟢 Scale | | 2 | Carousel_Living | 35 | $4.00 | $3.80 | ↓ | 1.5% | 28 | 🟡 Monitor | | 3 | Image_Promo | 68 | $7.20 | $5.50 | ↓↓ | 0.6% | 12 | 🔴 Optimize | | 4 | Video_Old | 82 | $12.00 | $8.00 | ↓↓ | 0.4% | 5 | ⛔ Pause | ### Breakdown Risk Score **Video_Old (Risk = 82):** | Компонент | Значение | Влияние | |-----------|----------|---------| | Base | 50 | - | | CPL vs target | $12 vs $4 (3x) | +25 | | CTR | 0.4% | +15 | | CPM | $25 (> median $15) | +15 | | ROI | -40% | +30 | | **Итого** | - | **82** (capped 100) | ### Топ для масштабирования (Risk < 30) 1. **Video_Kitchen** - Risk 18 - CPL $2.50 (38% ниже target) - CTR 2.1% (отличный) - Trend ↑ (улучшается) - Рекомендация: увеличить использование в новых adsets ### Требуют ротации (Risk > 60) 1. **Video_Old** - Risk 82 - CPL 3x от target - CTR падает последние 2 недели - Рекомендация: пауза, заменить новыми креативами ### Тренды Символы: - ↑ улучшение: CPL_7d < CPL_30d - → стабильно: ±10% - ↓ ухудшение: CPL_7d > CPL_30d * 1.1 - ↓↓ сильное ухудшение: CPL_7d > CPL_30d * 1.3
Creative Fatigue (Выгорание)
Признаки
| Сигнал | Порог | Действие |
|---|---|---|
| Frequency > 4 | На человека | Обновить креатив |
| CTR падает | > 20% за неделю | Тестировать новое |
| CPL растет | > 30% за неделю | Ротация креативов |
| Impressions падают | При том же бюджете | Расширить аудиторию |
Анализ fatigue
## Creative Fatigue Report ### Креативы требующие замены | Креатив | Frequency | CTR 7d vs 30d | CPL 7d vs 30d | Дней в работе | |---------|-----------|---------------|---------------|---------------| | {name} | 5.2 | -25% | +40% | 45 | | {name} | 4.8 | -18% | +28% | 38 | ### Рекомендации - **{креатив1}**: заменить срочно, frequency 5.2, CPL +40% - **{креатив2}**: обновить текст/заголовок, CTR упал на 18%
A/B тестирование
Что тестировать
- Изображение - разные фото/видео
- Заголовок - разные headlines
- Текст - разный primary text
- CTA - разные call to action
- Формат - carousel vs single vs video
Правила теста
## Правила A/B теста 1. Тестировать ОДНУ переменную 2. Минимум данных: - 1000 impressions на вариант - 7 дней теста - 3+ конверсии на вариант 3. Статзначимость > 95% 4. Не менять во время теста
Определение победителя
# Простой метод winner = variant_with_lowest_cpl # С учетом статзначимости # Если разница CPL > 20% и impressions > 1000 → значимо if abs(cpl_a - cpl_b) / min(cpl_a, cpl_b) > 0.2: winner = "A" if cpl_a < cpl_b else "B"
Формат результатов теста
## A/B Test Results: {Test Name} ### Варианты | Вариант | Описание | Spend | Leads | CPL | CTR | Risk | |---------|----------|-------|-------|-----|-----|------| | A | {desc} | ${X} | {Y} | ${Z} | {W}% | {R} | | B | {desc} | ${X} | {Y} | ${Z} | {W}% | {R} | ### Результат 🏆 Победитель: Вариант {A/B} - CPL ниже на {X}% - Risk Score: {R} (vs {R2}) - Статзначимость: {Y}% ### Рекомендации - Масштабировать вариант {winner} - Остановить вариант {loser}
Рекомендации по креативам
По уровню Risk
| Risk | Уровень | Рекомендация |
|---|---|---|
| 0-25 | Low | Масштабировать, использовать в новых adsets |
| 26-50 | Medium | Продолжать использовать, мониторить тренды |
| 51-75 | High | Снизить использование, готовить замену |
| 76-100 | Critical | Пауза, заменить срочно |
По типу проблемы
| Проблема | Возможная причина | Решение |
|---|---|---|
| Низкий CTR | Скучное изображение | Ярче, контрастнее |
| Низкий CTR | Плохой заголовок | Тест заголовков |
| Высокий CPL | Нерелевантный креатив | Ближе к продукту |
| Высокий Frequency | Маленькая аудитория | Расширить таргет |
| Падает CTR | Выгорание | Новые креативы |
Чек-лист хорошего креатива
- Привлекает внимание в первые 1-2 секунды
- Ясное value proposition
- Понятный CTA
- Соответствует аудитории
- Высокое качество изображения/видео
- Текст < 20% на изображении
- Мобильно-оптимизирован
Визуальный анализ
При анализе изображения через
get_ad_image():
На что смотреть
- Контраст - выделяется ли в ленте?
- Читаемость - понятен ли месседж?
- Качество - хорошее разрешение?
- Бренд - есть ли узнаваемость?
- CTA - понятно что делать?
Формат feedback
## Визуальный анализ: {Creative Name} ### Сильные стороны - {strength1} - {strength2} ### Слабые стороны - {weakness1} - {weakness2} ### Рекомендации - {recommendation1} - {recommendation2}
Типы креативов
Single Image
Когда использовать:
- Простой оффер
- Быстрый тест
- Ограниченный бюджет
Метрики фокуса: CTR, CPL
Carousel
Когда использовать:
- Несколько продуктов
- Storytelling
- E-commerce
Метрики фокуса: CTR, Carousel card clicks
Video
Когда использовать:
- Сложный продукт
- Эмоциональная связь
- Демонстрация
Метрики фокуса:
- 3-second views (hook)
- ThruPlay (удержание)
- CTR, CPL
Примеры запросов
"Какие креативы работают лучше?"
→ Таблица по Risk Score, топ с Risk < 30
"Проанализируй креатив {name}"
→ Risk Score breakdown + визуальный анализ
"Какие креативы пора менять?"
→ Fatigue analysis + креативы с Risk > 60
"Настрой A/B тест"
→ План теста, что тестировать
"Результаты теста?"
→ Анализ, победитель, следующие шаги
"Покажи статистику по креативам"
→ Группировка по creative_tag, агрегированные метрики
"Какой креатив лучше: kitchen или bathroom?"
→ Сравнение двух тегов по CPL, CTR, Risk Score
"Детали по креативу kitchen"
→ Все ads с тегом kitchen, их метрики и итог
"Добавь новый креатив в реестр"
→ Обновить config/creatives.md с новым тегом