Gamedev Глеб Диденко
4 137

Школьная алгебра: вычисляем идеальную цену внутриигровых товаров

Формулы оптимального соотношения спроса и расценок.

В закладки

16 февраля блог «Манжеты ГД» опубликовал статью о том, как определить оптимальную цену для товаров во free-to-play игре. Её автор — продюсер и продакт-лид 2RealLife Григорий Чопоров.

Григорий Чопоров,
game producer и products lead в 2RealLife

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

— Исследуем спрос на товар;

— Построим кривую спроса;

— Найдём максимально эффективную цену;

— PROFIT!!!

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

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

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

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

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

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

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

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

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

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

Теперь, когда у нас есть две пары чисел (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. В которой герой снова вспоминает школьную алгебру

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

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

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

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

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

Эпилог

В качестве заключения мы решили дать вам ещё несколько советов.

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

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

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

Ну и последний, самый важный, совет — дружите с экономикой и любите математику!

#опыт #геймдизайн

{ "author_name": "Глеб Диденко", "author_type": "self", "tags": ["\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d","\u043e\u043f\u044b\u0442"], "comments": 33, "likes": 20, "favorites": 1, "is_advertisement": false, "subsite_label": "gamedev", "id": 4723, "is_wide": false }
{ "id": 4723, "author_id": 5399, "diff_limit": 1000, "urls": {"diff":"\/comments\/4723\/get","add":"\/comments\/4723\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/4723"}, "attach_limit": 2, "max_comment_text_length": 5000 }

33 комментария 33 комм.

Популярные

По порядку

Написать комментарий...

Николай Костоправ

7

Хороший ликбез, спасибо! Ждем продолжения.

Ответить

Sergey Babaev

5

Друзья, в следующий раз когда участники в том числе и этой беседы будут спрашивать меня про "странные комментарии в ПРО, которыми никто не чистит" - я просто скринами покажу, что вы зачем-то сами поддерживаете эту странную беседу)

Ответить

Комментарий удален

Юрий Елистратов

0

1-4. Тут должен был быть комментарий про то что игроделы геи/п..сы и их не волнует баланс/качество игры/фичи, а волнует только монетизация, к которой они и прикручивают игры ... Но его не будет ибо автор все сказал сам, ненужно любить игры, делать хорошие игры или упоминать игры ... нужно "дружите с экономикой и любите математику" ....

Ответить

Sergey Babaev

Юрий
3

игры любить конечно нужно. Делать нелюбя "чистую математику" невозможно. По крайней мере хорошо делать.

Ответить

Юрий Елистратов

Sergey
0

1-4. Вот тут какой-то дикий перекос в сторону алгебры, а не игр ... По ощущениям так ...

Ответить

Sergey Babaev

Юрий
3

Это известная проблема да - когда статья про математику - в ней много математики. В следующий раз попросим добавить главу о философии геймдизайна и душе игры)

Ответить

sloa

–4

Если у вас в команде появился дизайнер монетизации, значит вы делаете уже не игры, а что-то еще.

Ответить

Sergey Babaev

sloa
4

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

Ответить

sloa

Sergey
–2

Зачем гейм-дизайнер команде, которая производит на свет движок для монетизации? Мне всегда казалось, что для этого достаточно схедхантить бывшего наперсточника у одного из крупных сотовых операторов. А уже он объяснит, как правильно потрошить "китов", придумает кучу акций и парад валют и прочие способы запутать человека и отобрать у него деньги.
Что же до f2p века, то он наступил только, как бы это сказать, в f2p секторе. И мне хотелось бы верить, что людей, которые хотят дойти до конца игры несколько больше, чем тех, кто хочет дойти до конца своего кошелька.
Да, дурной доход от f2p игр притягателен, но он всегда приходит с оттенком шулерства и оставляет после себя нехороший привкус.

Ответить

Sergey Babaev

sloa
1

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

Ответить

sloa

Sergey
–1

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

Ответить

Sergey Babaev

sloa
0

слава богу)

Ответить

Gregory Choporov

sloa
0

Хотелось бы, чтобы все было так просто в монетизации, как вам всегда казалось. :)

Ответить

sloa

Gregory
–2

А что такого сложного? Делаете законченный продукт и честно его продаёте по фиксированной цене. Если продукт хороший - он продаётся.
А сложности начинаются когда вы отдаете "бесплатно" недособранный драндулет, а потом пытаетесь продать к нему недостающие гайки. Кто-то в этом более успешен, кто-то менее, но все они жулики.

Ответить

Gregory Choporov

sloa
2

Если вкратце - все не так. В обеих ваших сентенциях. :)
Но дискуссия дальнейшая и впрямь малопродуктивна, прав был Сергей.

Ответить

sloa

Gregory
0

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

Ответить

Andrew Grabko

sloa
2

Все просто - если вы не любите f2p как класс, то не нужно ходить в проф. статьи про f2p для тех кто делает/интересуется f2p, и заниматься там морализаторством. Тем более с такими мощными аргументами

Ответить

Sergey Babaev

Andrew
2

человеку, Андрей, не нужен ответ, человеку нужно пространство, где можно безнаказанно повозмущаться)

Ответить

sloa

Sergey
0

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

Ответить

Sergey Babaev

sloa
0

вы обещали отстать от меня, сдержите обещание плиз)

Ответить

sloa

Sergey
0

То что говорят обо мне - мое дело. Имейте совесть.

Ответить

sloa

Andrew
0

Вы знаете, там под статьёй тег "геймдизайн". Он находится там по ошибке. Возможно это как раз та ошибка, которая привлекла сюда меня.

Ответить

Andrew Grabko

sloa
0

монетизация с геймдизайном лучше, чем без него :)

Ответить

sloa

Andrew
0

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

Ответить

Николай Костоправ

sloa
0

Сколько зарабатывают игры вашей компании?

Ответить

sloa

Николай
0

Нисколько. Я потребитель.
Так что если вам нужен был повод проигнорировать то что я сказал - вот он. Дарю.

Вы получаете достижение ["Легкая победа!"], 15 кристаллов, 3 пера, 1 орб и веревочку. И 15 золотых за заход в игру. Не забывайте, что акция кончается через 3 часа! Паки на 4000 кристаллов со скидкой 10%!

Ответить

Andrey Morevsky

sloa
0

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

Ответить

sloa

Andrey
0

Нет. Это они сталкиваются со мной. Например когда микроплатежи ползут в премиум-сегмент и уродуют хорошие игры. Или когда f2p вытесняют честные игры из маркетов через демпинг и убивают культуру премиум контента.

Ответить

Andrey Morevsky

sloa
0

О каких играх речь? Я знаю игры, сменившие модель монетизации или перешедшие на гибридную модель, но интересно о каких именно вы говорите.
По поводу вытеснения. Ни из стима ни из ps store f2p ничего не вытеснил, его там ничтожно мало. А в мобильных сторах f2p ничего не вытеснял, ибо когда он там появился, вытеснять еще было практически нечего.

Ответить

sloa

Andrey
0

Те, о которых думаю я, пострадали от целой цепи плохих решений, но микроплатежи в этой цепи были не на последнем месте. Это Dead Space 3, похоронившая серию, Deus Ex: Mankind Divided, которая близка к этому, и грядущая Shadow of War, которая уже отметилась в Steam шильдиком In-App Purchases, и это дурной знак.
Особняком стоит Orcs Must Die: Unchained. Полная f2p, в бету которой я имел шанс сыграть сразу после основных двух игр OMD. Ощущение было такое, будто кто-то прошел по игре с большими ножницами и вырезал фан везде, где увидел. Не самая влиятельная игра, но именно возможность сделать близкое сравнение оказала основной эффект и напомнила мне, что такое дух f2p и откуда он родом.

Что же до мобильных рынков, то дело не в том, было ли там чего вытеснять, а в том, что перспективы у премиум релиза там в лучшем случае смутные, и даже те версии премиум игр, которые там были раньше перестали появляться. У PvZ есть премиум-версия, а у PvZ 2 - уже нет. У Angry Birds Space была премиум-версия, а сейчас уже нет. Поиски игры, которая не играет краплеными картами занятие в лучшем случае трудоемкое. Потому что f2p отравил почву, убил культуру премиум-контента. Super Mario Run наслаждается рейтингом 2.8/5 потому что люди возмущены тем, что за игру надо платить. Не за кристаллы, просто за игру. Buy once. 2.8/5

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

Ответить

Andrey Morevsky

sloa
0

"Потому что f2p отравил почву, убил культуру премиум-контента."

"Super Mario Run наслаждается рейтингом 2.8/5 потому что люди возмущены тем, что за игру надо платить. Не за кристаллы, просто за игру. Buy once. 2.8/5"

Это отличная иллюстрация того, что f2p - это прежде всего выбор потребителя. Борьба с f2p - это битва не с шулерами, а с игроками.

Ответить

Alexey Prilovsky

Andrey
0

люди скорее возмущены не тем, что за саму игру надо платить, а тем, что, несмотря на то, что игру надо покупать, она – типичный f2p и нет там никакого Buy once.

Ответить

Кирилл Воротов

sloa
2

"Если продукт хороший - он продаётся. "
Увы, нет, не продаётся. По крайней мере сам собой, волшебным образом без дополнительных усилий. Лет 10 назад... А нет, и 10 лет назад не продавался.

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]