Что такое слои?
Слои позволяют создавать и запускать изолированные эксперименты. Аудитория, относящаяся к одному слою, попадет либо в один, либо в другие эксперименты слоя, либо вообще не будут относится ни к одному из экспериментов (если совокупная доля экспериментов не занимает 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
Ниже представлено наглядное визуальное представление методики работы слоев:
Преимущество слоев для разработки
У вас всегда остается возможность решить проблему пересечений экспериментов без использования слоев. Проблема заключается в том, что разработчику придется использовать многоуровневневые условия в коде, которые (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:
- Главная страница
- Продуковая страница
- Страница каталога
- Корзина
- Поиск
- Рекомендательные системы