Протокол ценового эксперимента

Протокол A/B-теста для ценообразования












Главная » Ресурсы » Здесь

Невозможно представить себе оптимизацию без оценки, а для оптимизации расценок требуется не только оценка, но и эксперименты. Очень часто ценообразование связывают с изменением цен, а реакция рынка на новые цены, которая позволила бы получить более глубокое понимание ситуации, не измеряется. При создании стратегии ценообразования нужно руководствоваться знаниями, при этом анализ изменений, необходимых для подгонки стратегий, происходит апостериори, то есть, по факту. На данной странице мы представляем протокол для A/B-тестов стратегий ценообразования, которые выполняются при поддержке Lokad. Нужно отметить, что данный протокол не является изобретением Lokad, и его можно воссоздать с помощью других инструментов, даже с помощью таблиц Excel, если обращаться с ними очень внимательно.


1. Создание справочного документа

Если вы сможете провести хотя бы один ценовой эксперимент, то скоро вы будете проводить их постоянно. Без системы по сбору и обработке подобной информации результаты у вас будут в большом беспорядке, и польза, которую можно было бы от них получить, будет утрачена. Поэтому мы советуем начинать любой ценовой эксперимент с создания справочного документа, в котором будет отражена вся информация по этому эксперименту. Такой документ может представлять собой файл Microsoft Word, однако сегодня мы настоятельно рекомендуем использовать инструменты, поддерживающие совместную работу через Интернет, например Google Sites, hackpad или любые другие системы управления контентом, доступные в сети.

После создания документа нужно придумать запоминающееся название для эксперимента. Эксперимент не может быть полезен, если сотрудники (или их преемники — не забывайте о движении кадров) не смогут запомнить название. Это будет мешать им обмениваться данными об эксперименте. Скука — враг знания. Если название слишком скучное или сложное, то информация пройдет мимо даже самых усердных работников.

2. Создание специального проекта

Создайте специальный проект для ценового эксперимента в своей учетной записи Lokad. Для ясности рекомендуется назвать проект так же, как эксперимент. Кроме того, в ячейке label рекомендуем создать гиперссылку на справочный документ, который также находится в сети. Следовательно начало вашего сценария Envision будет выглядеть примерно так:

// Pricing Experiment: Sevilla
// Start: 2014-07-09 End: 2014-08-08
// Author: Joannes Vermorel
show label "http://example.org/my-reference-document Ref. Document"

Согласно данному сценарию, ячейка label появится на панели управления в виде гиперссылки на справочный документ, в котором подробно описан ценовой эксперимент.

Этот проект позволит выполнять различные действия в рамках ценового эксперимента. Функции проекта:

  1. Создание образцов контрольных групп наименований
  2. Сохранение таких групп
  3. Составление обновленной стратегии ценообразования
  4. Проверка правильности назначения цен
  5. Визуализация двух контрольных групп

Все эти действия будут выполнены с помощью различных частей сценария данного проекта.

3. Составление гипотезы эксперимента

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

Ложные умозаключения показывают, что мы плохо умеем рассматривать факты, не интерпретируя их или не устанавливая между ними логически отношения причинности/следственности. Объяснения связывают факты друг с другом. Они также упрощают запоминание и придают фактам дополнительные значения. Такое свойство человеческого разума может стать причиной ошибок, если оно дает ложное ощущение понимания ситуации. — Нассим Николас Талеб, Черный лебедь))

Данная проблема особенно остро проявляется, когда речь идет о ценообразовании, потому что в условиях рынка не существует контролируемых условий. Не важно, как много усилий было вложено в составление протокола эксперимента, множество факторов так или иначе остаются неподконтрольными экспериментаторам. В первую очередь, это деятельность конкурентов.

Поэтому крайне важно составить гипотезу для проверки до начала эксперимента, чтобы впоследствии доказывать или опровергать именно ее, а не какие-то случайные гипотезы, которые создаются и изменяются в течение эксперимента. Необходимо указать эту гипотезу в начале справочного документа, о котором мы говорили выше. Вот пример хорошей гипотезы: Резкое падение объема продаж связано не с падением спроса, а с деятельностью второстепенных конкурентов, которые предлагают более привлекательные цены. Таким образом, если мы резко снизим наценку на товары, объемы продаж должны резко возрасти.

4. Позитивные и негативные контрольные группы

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

Эти две группы называются следующим образом:
  • Позитивная контрольная группа, к которой применяется новая стратегия ценообразования.
  • Негативная контрольная группа, к которой применяется старая стратегия ценообразования.

Сравнив результаты по позитивной и негативной контрольным группам, можно сделать вывод об истинности изначальной гипотезы. Envision позволяет быстро выбрать две случайные контрольные группы благодаря функции хеширования:

seed := "hello world"
R = rankd(hash(concat(Id, seed
where R <= 1000 // positive group here where R > 1000 & R <= 2000 // negative group here В сценарии выше мы рассчитываем случайный выбор наименований в строке 2. Функция хеширования позволяет задать псевдослучайный номер для строк, которые обозначены как входящие данные. Данный выбор нельзя назвать абсолютно случайным, потому что одна и та же строка всегда имеет одно и тоже значение хеш-функции. Таким образом, чтобы получить конкретные данные, необходимо изменить текст, которому присвоен параметр seed. В строке 3 мы выбираем 1000 наименований, которые войдут в позитивную контрольную группу. В строке 5 мы делаем то же самое для негативной контрольной группы.

Данный алгоритм можно легко настроить для ситуаций, когда мы хотим создать две группы, обе из которых удовлетворяют определенным условиям. Например, давайте предположим, что нам нужно создать контрольные группы из наименований марки Fabrikam. Это можно сделать следующим образом:
where Brand == "Fabrikam" // scoping only the brand 'Fabrikam'
  seed := "hello world"
  R = rankd(hash(concat(Id, seed)))
  where R <= 50
    // positive group here
  where R > 50 & R <= 100
    // negative group here

5. Сохранение контрольных групп

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

seed := "hello world"
R = rankd(hash(concat(Id, seed)))
Control = ""
where R <= 1000
  Control = "pos" // positive group
where R > 1000 & R <= 2000
  Control = "neg" // negative group

// exporting the group
startDate := "2014-07-09"
endDate := "2014-08-09"
where Control != ""
  show table "sample" export:"/exp/g-sevilla.tsv" with
    Id
startDate as "Date"
endDate, Control
Price

В сценарии выше после создания групп мы сохраняем результаты в файле с именем «g-sevilla.tsv». В следующем разделе мы рассмотрим, как префикс «g» (или любой другой) позволяет легко избежать наложения групп. «sevilla» — это просто пример запоминающегося названия эксперимента. Этот файл уже отформатирован как поток событий, и его можно будет снова загрузить в Lokad позднее. Данный алгоритм нужно выполнить всего лишь один раз, а затем нужно указать путь для экспорта файла, чтобы не заменить ранее созданный файл. Теперь для сохранности загрузите этот файл и сохраните его копию, которую вы прикрепите к справочному документу.

Затем, чтобы группы, используемые в разных экспериментах, не пересекались, можно повторно загрузить сохраненный файл и использовать эти данные для исключения определенных наименований. Это можно сделать следующим образом:
read "/exp/g-*" as Experiments // loading all experiments so far

today := Date(2014,7,9)
IsPartOfGroup = false
where Experiments.EndDate < today // we exclude all ongoing experiments
  // look for the existence of a matching group
  IsPartOfGroup = exists(Experiments.Date) 

where not IsPartOfGroup
  seed := "hello world"
  R = rankd(hash(concat(Id, seed)))
  Control = ""
  where R <= 1000
    // positive group here
  where R > 1000 & R <= 2000
    // negative group here

6. Составление обновленной стратегии ценообразования

В предыдущих разделах мы рассмотрели различные стратегии ценообразования. Теперь необходимо прописать составление обновленной стратегии ценообразования. Мы не будем подробно разбирать алгоритм ценообразования в данной статье, однако вы должны помнить, что расценки обычно экспортируются в ячейку table:
read "/exp/g-sevilla.tsv" as Scope

// Original logic to generate the control groups is commented out.
// We reload the control groups directly from the persisted copy.
Control = last(Scope.Control) or ""

where Control != "" // excluding items not part of the scope
  // snipped here: actual pricing logic
  show table "sample" export:"/exp/p-sevilla.tsv" with Id, today() as Date, Price
Данный сценарий начинается с загрузки сохраненной копии контрольных групп. Затем мы задаем область работы алгоритма, которая ограничивается только контрольными группами. Затем мы экспортируем новые расценки в отдельный файл.

На практике сохранить обновленные цены может быть не так просто, как, например, сами контрольные группы. Цены продолжают изменяться в соответствии со стратегиями, которые их определяют, в течение всего эксперимента.

7. Публикация и отслеживание расценок

После прописывания кода для создания обновленных расценок эти расценки можно опубликовать через различные каналы продаж. По возможности процесс публикации расценок рекомендуется автоматизировать. В частности, Lokad позволяет использовать REST API с поддержкой автоматического запуска проекта. Файлы, полученные после выполнения сценария, можно получить через FTP или FTPS и импортировать их в собственную производственную систему.

Очень важно, чтобы наблюдения за продажами осуществлялись после изменения цен. Для этого необходимо удостовериться, что в ваши каналы продажи действительно представлены цены, полученные с помощью сценариев Envision. Очень часто цены импортируются неправильно или частично, что приводит к противоречиям между опубликованными ценами и ценами, рассчитанными с помощью стратегии ценообразования.

В идеале опубликованные расценки следует снова вводить в Lokad. При создании такого «круговорота» данных становится возможным сравнивать опубликованные цены с ценами, рассчитанными в Lokad, и отслеживать их. В сценарии ниже мы загружаем цены, полученные от компании, затем проводим эксперимент, а затем вводим изначально рассчитанные цены.

//  ... snipped items and other data files ...
read "/prices.tsv" as Prices // from the production systems
read "/exp/g-sevilla.tsv" as Scope
read "/exp/p-sevilla.tsv" as ExpPrices

// The original logic to generate control groups is commented out.
// We reload the control groups directly from the persisted copy.
Control = last(Scope.Control) or ""

where Control != "" // excluding items not part of the scope
  // relevant date for the publish date of the prices
  when date <= date(2014,8,1) 
    where last(Prices.Price) != last(ExpPrices.Price)
      show table "Item count with price mismatch" with count(Id) 
Сценарий показывает некоторые расхождения расценок: цены, полученные от компании, не совпадают с ценами, рассчитанными с помощью сценария.

Наконец, через несколько дней или недель в зависимости от временных рамок ценового эксперимента можно сравнить полученные данные об изменениях объемов продаж по двум группам, чтобы решить, была ли исходная гипотеза истинной. Накопленные эксперименты — это актив, который компании могут использовать для создания все более и более эффективных стратегий ценообразования.