Разработка AI-системы для автоматического A/B-тестирования креативов
Ручное A/B-тестирование рекламных креативов не масштабируется: когда нужно одновременно тестировать сотни вариантов изображений, заголовков, CTA и аудиторных сегментов, традиционный подход занимает слишком много времени. AI-система автоматически генерирует гипотезы, запускает тесты, анализирует результаты и масштабирует победителей.
Архитектура системы
Creative Intelligence Layer — анализ существующих креативов: извлечение признаков (цвета, объекты, текст, эмоциональный тон), кластеризация по визуальным паттернам, предсказание performance до запуска теста.
Experiment Management — автоматическое создание тестовых групп, распределение бюджета, мониторинг статистической значимости, остановка проигрывающих вариантов (early stopping).
Multi-Armed Bandit — динамическое перераспределение трафика в пользу лучших вариантов без ожидания окончания классического A/B теста.
Multi-Armed Bandit для оптимизации
import numpy as np
from dataclasses import dataclass, field
@dataclass
class CreativeVariant:
id: str
name: str
impressions: int = 0
conversions: int = 0
# Beta distribution parameters (Bayesian)
alpha: float = 1.0 # Prior: 1 успех
beta: float = 1.0 # Prior: 1 неуспех
class ThompsonSamplingOptimizer:
def __init__(self, variants: list[CreativeVariant]):
self.variants = {v.id: v for v in variants}
def select_variant(self) -> str:
"""Выбор варианта через Thompson Sampling"""
samples = {}
for vid, v in self.variants.items():
# Сэмплирование из Beta-распределения
samples[vid] = np.random.beta(v.alpha, v.beta)
return max(samples, key=samples.get)
def update(self, variant_id: str, converted: bool):
v = self.variants[variant_id]
v.impressions += 1
if converted:
v.conversions += 1
v.alpha += 1
else:
v.beta += 1
def get_probabilities(self) -> dict:
"""Вероятность того, что вариант является лучшим"""
n_simulations = 10_000
wins = {vid: 0 for vid in self.variants}
for _ in range(n_simulations):
samples = {vid: np.random.beta(v.alpha, v.beta)
for vid, v in self.variants.items()}
winner = max(samples, key=samples.get)
wins[winner] += 1
return {vid: wins[vid] / n_simulations for vid in self.variants}
Автоматический анализ креативов
import torch
from transformers import CLIPModel, CLIPProcessor
class CreativeAnalyzer:
def __init__(self):
self.clip = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
self.processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
def extract_features(self, image_path: str) -> np.ndarray:
"""Извлечение визуальных признаков через CLIP"""
image = Image.open(image_path)
inputs = self.processor(images=image, return_tensors="pt")
with torch.no_grad():
features = self.clip.get_image_features(**inputs)
return features.numpy().flatten()
def predict_ctr(self, creative_features: np.ndarray,
audience_segment: str) -> float:
"""Предсказание CTR до запуска теста"""
# Обученная модель на исторических данных
combined = np.concatenate([
creative_features,
self.segment_encoder.encode(audience_segment)
])
return float(self.ctr_model.predict([combined])[0])
Интеграция с рекламными платформами
Facebook Marketing API:
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adcreative import AdCreative
def create_and_launch_test(access_token, ad_account_id, variants):
FacebookAdsApi.init(access_token=access_token)
for variant in variants:
creative = AdCreative(parent_id=ad_account_id)
creative.update({
'name': variant['name'],
'object_story_spec': {
'page_id': PAGE_ID,
'link_data': {
'image_hash': variant['image_hash'],
'link': variant['url'],
'message': variant['text']
}
}
})
creative.remote_create()
Метрики и критерии победителя
Система автоматически останавливает тест и объявляет победителя когда: достигнута 95% вероятность превосходства по CTR или ROAS, минимальный объём (1000+ конверсий на вариант). Победитель масштабируется немедленно, проигравшие отключаются — без ожидания ручного анализа.
Типичный результат: ускорение цикла тестирования с 2-3 недель до 3-5 дней, повышение ROAS на 15-30% за счёт непрерывной оптимизации.







