На пути к идеальной цене — Манжеты Гейм-дизайнера
ris5

На пути к идеальной цене

Пролог.

Здравствуй, мой друг гейм-дизайнер. Наша редакция обеспокоена тем, как много твоих коллег не могут понять, приносит ли их f2p-игра (если, конечно, они не инди у них есть игра) максимально возможную прибыль или нет, и поэтому мы решили написать им в помощь эту статью. Так что, если ты «не такой» и не озадачен столь важными вопросами — быстро прекрати читать и позови к телефону взрослых покажи эту статью своему продюсеру, а он уж сам разберётся, как правильно тебя мотивировать.

Отлично, ты продолжил читать. Итак, что же такого полезного ждёт тебя в этой статье? А ждёт тебя простой (главное — легальный) способ определения такой цены (P = Price) на конкретный игровой товар (например, «Зелье огромной скорости», которое уже продаётся в игровом магазине и имеет какую-то цену), при которой количество ежедневных продаж этого товара (Q = Quantity) будет максимально выгодным для нас, то есть произведение P*Q (а это есть не что иное, как ежедневный доход с продажи твоих зелий) будет максимальным.

И вот это чудо мы совершим с тобой всего за три простых шага:

  1. Исследуем спрос на товар
  2. Построим кривую спроса
  3. Найдём максимально эффективную цену
  4. PROFIT!!!

Итак, поехали!

Глава 1. В которой герой исследует спрос.

Начнём мы с самого простого шага — исследования текущего спроса на зелья. Для этого нам понадобится собрать статистику его ежедневных продаж при текущей цене. Само собой разумеется, что статистика должна быть максимально релевантной (в неё не должны попасть дни, в которые происходили события, способные заметно повлиять на спрос — акции, эвенты и прочие катализаторы спроса). Усреднив результат по нескольким дням, мы получим первую пару чисел (P1, Q1) (среднее количество продаваемых в день зелий по текущей цене). Запомним их.

Осталось измерить, как изменится спрос на товар при изменении цены на него. Для это нам необходимо снизить цену на товар (стоит заметить, что можно и увеличивать, однако, не думаем, что это будет тепло встречено твоей f2p аудиторией) и замерить среднее количество продаж в день при новой цене. Максимально правильно будет использовать для этого А/Б тестирование — выделить несколько групп игроков и поменять цену на зелье для каждой группы на некоторое количество процентов, например, от 10 до 50%, а затем собрать статистику по каждой группе игроков.

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

Правильных способов измерения нового спроса при новой акционной цене огромное количество (ты и сам сможешь придумать пару-тройку штук после того, как прочтёшь эту главу до конца). Но дабы не прерывать учебный процесс на время твоих длительных раздумий, мы расскажем о самом простом — акции под кодовым названием «Неделя+». Процесс измерения при помощи этой акции выглядит так: ты, мой друг, объявляешь скидку на товар (например, 50%, здесь сам размер скидки не так важен, важно, чтобы изменение спроса под действием акции было достаточно заметным на фоне обычных ежедневных его колебаний) ровно на одну неделю (о чём громогласно объявляешь игрокам), после чего, по истечении срока акции, продлеваешь её ещё на одну неделю «по просьбам трудящихся».

image17

В итоге график продаж товара по дням будет выглядеть примерно вот так (здесь мы собрали «хайп» на первых днях акции).

image19

Или вот так (здесь «хайп» есть на первых и последних днях акции, в зависимости от того, как именно игроки потребляют купленный товар).

 

Избавившись на первой неделе от «хайповых» продаж, мы получим достаточно ровный график на второй неделе акции (и достаточно релевантную статистику изменения спроса). Вычислив среднее количество продаж товара в день, при новой цене, мы узнаём вторую пару чисел (P2, Q2). Запомним и их.

Этот акционный способ далеко не единственный, кроме него, например, неплохо себя показывает объявление скидки на неопределённый срок (то есть игроки заранее не знают, когда закончится акция). Или ещё десяток других, которые способен родить мозг гейм-дизайнера. Основное правило для всех них одно — максимально избавиться от «хайповых» покупок (то есть покупок, совершаемых игроками только потому, что в данный момент цена товара ниже, чем обычно).

В случае если в твоей игре нельзя просто так взять и исследовать цены при помощи А/Б тестирования, придётся тебе запускать одинаковую акцию для всех игроков разом, исследовать отдельно игроков по категориям (не мешать, например, свежие регистрации и топовых игроков в одну категорию), а затем удовлетворяться всего одной парой чисел (P2, Q2).

Глава 2. В которой герой строит кривую спроса.

one-plus-one-1256854

Теперь, когда у нас есть две пары чисел (P, Q), мы вполне способны построить кривую спроса и получить её (кривой) аналитическое представление.

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

Для этого мы рассчитаем коэффициент эластичности спроса товара по цене.

Коэффициент эластичности спроса по цене показывает, на сколько процентов изменится величина спроса при изменении цены на 1%.

Формула для вычисления коэффициента достаточно проста:

E = ((Q2 — Q1) / Q1) * (P1 / (P2 — P1))

Подставим в неё запомненные нами в предыдущей главе пары чисел (P1, Q1) и (P2, Q2) и внимательно посмотрим на получившийся коэффициент. Если этот коэффициент меньше -1 (то есть спрос эластичен), у нас для тебя есть приятная новость — скорость изменения спроса выше скорости изменения цены, а это значит, что есть смысл уменьшить цену на данный товар (в нашем случае, напомним, это «Зелье огромной скорости») для увеличения дохода от его продаж.

В случае если изменение спроса на товар при снижении цены значительно («значительным» считается изменение спроса большее, чем на 5% при снижении цены на 1%), стоит использовать формулу дуговой эластичности:

E = ((Q2 — Q1) / (Q2 + Q1)) * ((P2 + P1) / (P2 — P1))

Но по факту, эту формулу мы решили написать для тех зануд, которые про неё знают, ибо в случае, когда спрос эластичен, обе формулы дадут коэффициент меньше -1. В этом случае (при коэффициенте эластичности меньше -1) при наличии только двух пар чисел (P, Q) график спроса можно грубо представить линейной функцией вида:
Q = a — b * P

Если же полученный коэффициент больше -1, то приятных новостей для тебя не будет. Прости.

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

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

Q1 = a — b * P1
Q2 = a — b * P2

Из неё легко получаем значения a и b, а после и саму функцию.

Глава 3. В которой герой снова вспоминает школьную алгебру.

math-1597865

Итак, аналитическое представление кривой спроса на твоё чудное (судя по названию кто вообще его придумал?) зелье мы получили. Самое время вспомнить — ради чего мы всё это затевали — нам с тобой необходимо определить такую точку (P, Q) на графике полученной функции, в которой произведение P * Q будет максимальным (а это произведение, напомним, и есть тот самый доход от продажи товара, который так радует твоего продюсера холодными зимними вечерами)

Сделать это проще простого — достаточно найти первую производную функции F(P, Q) = P * Q, приравнять её к 0 и найти точку экстремума функции. Если ты прогуливал школу — вот тебе ссылка на википедию о том, что такое производная, и как она считается. И про экстремумы функции заодно, просвещайся.

Мы же все молодцы, и в школе учились, поэтому легко посчитаем:

F'(P, Q) = (P * Q)’ = (P * (a — b * P)’ = a — 2 * b * P
Отсюда:

  • если a — 2 * b * P = 0
  • то P = a / (2 * b)
  • ну а Q = a — b * (a / (2 * b)) = a / 2

Пытливые умы из предыдущей главы, понятное дело, ищут экстремумы получившейся у них функции. Запишем ещё раз результат (для закрепления):

P = a / (2 * b)
Q = a / 2

Поздравляем, ты подошёл максимально близко к идеальной цене на свой товар. Смело иди и меняй её в магазине, но не забудь потом ещё разок собрать статистику продаж и убедиться, что всё сделал правильно. Дерзай!

Эпилог.

money-box-1314786-1278x831

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

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

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

Совет третий. Во избежание проблем с пересечением спроса на товары одной группы (то есть ситуации, когда увеличение спроса на один товар уменьшает спрос на другой, что делает собранную тобой статистику менее релевантной) рекомендуем тебе исследовать цены всех связанных товаров или же, если ты не уверен в том, как товары влияют друг на друга, в целом всего продаваемого контента одновременно. Будь внимателен и осторожен!

Ну и последний, самый важный, совет (даже несколько) — дружи с экономикой, люби математику и добавь в свою игру единорогов уже наконец (если всё ещё нет). Пока!

Григорий Чопоров
Григорий Чопоров
Game producer | Products lead @ 2RealLife
  • Stas Stepchenko

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

    • Gregory Choporov

      В статье все, конечно, немного упрощено. И можно было написать про перекрестную эластичность (как раз изменение спроса на товар А при изменении цены на товар В).

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

  • Дмитрий Ермолаев

    У меня есть ряд различных замечаний к данной статье.
    1) АБ тестирование. Нет оценки стат. достоверности, нет оценки мощности. Без оного непонятно как относится к результатам данного АБ теста (никак).
    2) Для новых игроков (или для игроков которые получают доступ к тестируемому объекту) и для старых — реакция на изменение цены будет совсем разная. Возможно на старых оно скажется положительно, а на новых — отрицательно и тогда на дистанции мы от сделанных изменений можем проиграть. Требование к гомогенности нашей целевой и тестируемой аудитории не соблюдено. И у меня есть определенный скептицизм на тему того, что игроки во вторую недели акции будут вести себя так же как и без нее.
    3) Логика изменения игры «от объекта» легко нарушает макробаланс. Представьте что у нас есть два объекта:
    (1) +10 силы за 1000 монет
    (2) +5 силы за 500 монет
    Если применить алгоритм подбора эффективной цены к объекту (1) то очевидно что мы сможем получить сильно больший профит если отдадим за 900. Спустя 2 недели мы глянем на предмет (2) и так же обнаружим что для него отличная цена меньше 450! 400 заходит на ура. Океееей. Через 2 недели мы снова сможем оптимизировать цены на предмет (1).
    Ну и в целом: если мы будем очень трудолюбивы и проведем подбор эффективной цены указанным образом для всех игровых объектов — то мы просто удешевим игру! Будет ли это полезно?
    4) Из вышесказанного следствие: Вопрос «Как получить макс. профит с отдельного объекта?» должен задаваться с бооольшими оговорками. На самом деле мы хотим максимизировать сумму всех продаж. Зачастую же — если чего-то стали продавать больше, значит другого стали продавать меньше, об этом, кстати, написано в статье в причинах эластичности, но отражение этого в самой статье я не увидел.

    Реально в играх образуются сложные связи типа «продали больше бустов -> игроки прошли больше локаций -> игроки получили больше ресурсов -> сократились продажи ресурсов». Описанную логику «от отдельного объекта» я бы применял к очень узкой категории:
    — минимальное влияние на экономику (объект продается только за хард)
    — ограниченное время действия (бусты)
    — Минимальные связи с игровыми механиками (отдельный игровой модуль)
    Это позволит уменьшить «хвост» от изменений и стало быть минимизирует вероятность ошибки из-за грубости наших изменений.

    Самый самый чистый вариант, выглядит примерно так:
    Купи ачивку «самый глупый» (которая ничего не дает). Вот тут — можно искать максимум от продаж и не париться со всем остальным.

  • Дмитрий Ермолаев

    У меня есть ряд различных замечаний к данной статье.
    1) АБ тестирование. Нет оценки стат. достоверности, нет оценки мощности. Без оного непонятно как относится к результатам данного АБ теста (никак).
    2) Для новых игроков (или для игроков которые получают доступ к тестируемому объекту) и для старых — реакция на изменение цены будет совсем разная. Возможно на старых оно скажется положительно, а на новых — отрицательно и тогда на дистанции мы от сделанных изменений можем проиграть. Требование к гомогенности нашей целевой и тестируемой аудитории не соблюдено. И у меня есть определенный скептицизм на тему того, что игроки во вторую недели акции будут вести себя так же как и без нее.
    3) Логика изменения игры «от объекта» легко нарушает макробаланс. Представьте что у нас есть два объекта:
    (1) +10 силы за 1000 монет
    (2) +5 силы за 500 монет
    Если применить алгоритм подбора эффективной цены к объекту (1) то очевидно что мы сможем получить сильно больший профит если отдадим за 900. Спустя 2 недели мы глянем на предмет (2) и так же обнаружим что для него отличная цена меньше 450! 400 заходит на ура. Океееей. Через 2 недели мы снова сможем оптимизировать цены на предмет (1).
    Ну и в целом: если мы будем очень трудолюбивы и проведем подбор эффективной цены указанным образом для всех игровых объектов — то мы просто удешевим игру! Будет ли это полезно?
    4) Из вышесказанного следствие: Вопрос «Как получить макс. профит с отдельного объекта?» должен задаваться с бооольшими оговорками. На самом деле мы хотим максимизировать сумму всех продаж. Зачастую же — если чего-то стали продавать больше, значит другого стали продавать меньше, об этом, кстати, написано в статье в причинах эластичности, но отражение этого в самой статье я не увидел.

    Реально в играх образуются сложные связи типа «продали больше бустов -> игроки прошли больше локаций -> игроки получили больше ресурсов -> сократились продажи ресурсов». Описанную логику «от отдельного объекта» я бы применял к очень узкой категории:
    — минимальное влияние на экономику (объект продается только за хард)
    — ограниченное время действия (бусты)
    — Минимальные связи с игровыми механиками (отдельный игровой модуль)
    Это позволит уменьшить «хвост» от изменений и стало быть минимизирует вероятность ошибки из-за грубости наших изменений.

    Самый самый чистый вариант, выглядит примерно так:
    Купи ачивку «самый глупый» (которая ничего не дает). Вот тут — можно искать максимум от продаж и не париться со всем остальным.

    • Gregory Choporov

      В статье описан метод исследования цены (через построение кривой спроса F=y(x) и нахождения максимума произведения y*x). Основная цель статьи — познакомить читателя с этим методом (к которому, я так понимаю, претензий нет :)). Поэтому переносить фокус на описание вспомогательных методов (т.е. описывать, например, как правильно проводить А/Б-тесты) не хотелось. И даже акционный метод снижения цены был описан как один из множества рабочих вариантов.

      Метод этот стоит применять не к любом товару (тут я абсолютно согласен), исследовать стоит монетобразующие товары, лучше всего товары, относящиеся к типам, перечисленным в эпилоге. Как и любой практический метод, этот стоит применять с некоторым пониманием.

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

      Т.е. статья в целом получилась не для новичков в игровой экономике, согласен; сейчас активно думаем о том, как отмечать заранее для читателей «сложность» статей.

      • Дмитрий Ермолаев

        КМК такие вещи нужно хотя бы указывать. Фактически получилось неверное описание АБ теста без пометок, что его на самом деле проводить иначе (кстати, это очень распространенная ошибка — очень многие проводят АБ именно так как написано) .
        И описание инструмента корректировки цены без указания области его применения.

        Тот же анализ группы товаров — это вещь на уровень сложнее.

        • Gregory Choporov

          В статье, в общем-то, вообще не рассказано как проводить А/Б тестирование (кроме упоминания, что необходимо выделять несколько когорт и делать для каждой отдельную скидку для получения нескольких точек будущего графика). :) И я даже объяснил, почему так было сделано. В статье приведен пример метода получения более релевантной статистики (самый простой, но далеко не единственный) в процессе тестирования.

          По поводу анализа группы товаров — добавим в эпилог еще один совет об этом (который я уже дважды написал в комментариях :)).

          • Дмитрий Ермолаев

            Мы, видимо, читали две какие-то разные статьи.
            «Усреднив результат по нескольким дням, мы получим первую пару чисел (P1, Q1) … Осталось измерить, как изменится спрос на товар при изменении цены на него. … Максимально правильно будет использовать для этого А/Б тестирование — выделить несколько групп…»
            Что методологически УЖЕ не верно. Хотим мы описывать как проводить АБ тест или нет.

            Если считаешь что написано ок и в достаточной-понятной мере, ну ок. На мой взгляд — может ввести в заблуждение. А т.к. вопросы о чем нужно думать, не заданы, то читатель даже не поймет что заблуждается.

          • Gregory Choporov

            Что именно не верно по твоему мнению:
            1. Использовать снижение цены для измерения зависимости спроса от цены?
            2. Использовать для этого набор тестовых групп, для которых цена имеет каждый раз разное значение?

          • Дмитрий Ермолаев

            Неправильно сравнивать данные старые (до АБ) с новыми (после АБ), тем более когда есть возможность сделать несколько групп сразу. В таком варианте мы добавляем ненужного шума и тратим лишнее время.

          • Gregory Choporov

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

          • Дмитрий Ермолаев

            Эм. У меня есть большие подозрения, что вы не корректно АБшите.
            1) Нельзя сравнивать данные по разным периодам, по причине колебаний во времени. Про недельные колебания помнят, надеюсь, все, но есть еще сезонные, зависимости от праздников, месячные итд итп. Поэтому если есть возможность сравнивать данные по одному периоду — это надо делать.

            2) Нет никакой возможности «правильно» выделить группы для АБ теста заранее. Сплитить группы нужно в тот момент, когда влияние АБ теста начинает сказываться.
            Примеры:
            Тестируем акцию под платящих — не нужно в тестируемые группы замешивать неплатящих.
            Тестируем разный баланс для 30ур+ игроков — не нужно в АБ запихивать тех, у кого этого уровня нет.

            Метрик может быть ровно столько, сколько можно придумать в игре, поэтому заранее определять группы для АБ теста — будет ошибкой.
            Кроме того, нельзя для двух тестов идущих одновременно использовать одни и те же группы.

            Какой в принципе смысл определять группы заранее ?

          • Дмитрий Ермолаев

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

          • Gregory Choporov

            Таки да, напишем об этом статью. :)

  • Aleh Ladutska

    Я джва года ждал такую статью. Уже отчаялся корованы. Большое спасибо.

  • Tamara Pankova

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