Skip to main content

Что такое слои?

Слои позволяют создавать и запускать изолированные эксперименты. Аудитория, относящаяся к одному слою, попадет либо в один, либо в другие эксперименты слоя, либо вообще не будут относится ни к одному из экспериментов (если совокупная доля экспериментов не занимает 100% от слоя, что является максимальным значением).

Пример: вы завели слой c названием layer_1 и к нему отнесли два эксперимента exp_1 и exp_2. Оба эксперимента занимают по 50% от слоя. В результате, ваша аудитория попадет либо в exp_1, либо в exp_2

При этом, слои независимы друг от друга, если их несколько

Пример: вы завели два слоя c названиями layer_1 и layer_2. В layer_1 вы отнесли exp_1 и exp_2, а в layer_2 вы отнесли exp_3 и exp_4. Каждый эксперимент занимает 50% внутри своего слоя. В результате, ваши пользователи будут распределены таким образом:

  • 25% траффика попадет в exp_1 и exp_3
  • 25% в exp_1 и exp_4
  • 25% в exp_2 и exp_3
  • 25% в exp_2 и exp_4

Ниже представлено наглядное визуальное представление методики работы слоев:

image

Преимущество слоев для разработки

У вас всегда остается возможность решить проблему пересечений экспериментов без использования слоев. Проблема заключается в том, что разработчику придется использовать многоуровневневые условия в коде, которые (1) ухудшают читаемость кода и (2) сложно масштабируются по мере увеличения числа запущенных экспериментов внутри слоя.

Пример: вы запускаете 3 эксперимента. В первом тестируется цвет кнопки (синий или красный), во втором цвет текста на кнопке (тоже синий или красный), а в третьем размер кнопки. Если пользователь получит одинаковые цвета заливки и текста, тогда текст будет сливаться и он просто не сможет распознать текст. Также есть 3-й эксперимент, который запустился не сразу, а допустим, спустя несколько дней.

Код для этого кейса можно представить так:


// Получим цвета заливки, текста и размера кнопки в экспериментах
// Значения цветов: "blue", "red"
// Значения размеров: "80px", "100px"
let button_fill = DEFAULT_BUTTON_FILL;
let button_text = DEFAULT_BUTTON_TEXT;
let button_width = DEFAULT_BUTTON_WIDTH;
let random_number = Math.random();
const btn_fill_color = await sigma.getExperiment('btn_fill_color').then(res => res.getParamValue('color'));
const btn_text_color = await sigma.getExperiment('btn_text_color').then(res => res.getParamValue('color'));
const btn_width = await sigma.getExperiment('btn_size').then(res => res.getParamValue('size'));

// Распределим 3 эксперимента
if (random_number < 0.334) {
// Меняем в btn_style только fill
button_fill = btn_fill_color;
} else if(random_number >= 0.334 && random_number < 0.664) {
// Меняем в btn_style только text
button_text = btn_fill_text;
} else if(random_number >= 0.664) {
// Меняем в btn_style только width
button_width = btn_fill_width;
}

Каждый раз, когда запускается новый эксперимент, разработчику придется поддерживать условия пересечений. Поэтому, чтоб облегчить работу разработке, а также нивелировать человеческий фактор и другие возможные кейсы, проще сразу присвоить нужное значение:

const button_fill = await sigma.getExperiment('btn_fill_color').then(res => res.getParamValue('color')) || DEFAULT_BUTTON_FILL;
const button_text = await sigma.getExperiment('btn_text_color').then(res => res.getParamValue('color')) || DEFAULT_BUTTON_TEXT;
const button_width = await sigma.getExperiment('btn_size').then(res => res.getParamValue('size')) || DEFAULT_BUTTON_WIDTH;

Управление слоями происходит непосредственно в административной панели. Поэтому вызывать какие-либо дополнительные методы не требуется

Подход к созданию слоев

Технически, слой – эксперимент поверх эксперимента, где для слоя вариантом является сам эксперимент. Сначала проверяется вхождение пользователя в слой, а затем в эксперимент. Поэтому ограничений на количество созданных слоев нет: вы можете создать несколько слоев, и концептуально за каждым определить разные части продукта.

Пример для ecommerce:

  • Главная страница
  • Продуковая страница
  • Страница каталога
  • Корзина
  • Поиск
  • Рекомендательные системы