Мы решили перевести нашу статью на русский, и специально для Хабра оставим небольшие дополнительные комментарии о процессе написания.
Автор оригинальной статьи, перевода и всех комментариев: Влад Нижутин, Co‑founder и CPO, Pneumatix Research.
TL:DR
В течение нескольких дней с момента релиза в Steam в недавно ставшей популярной игре Far Far West в главном хабе присутствовал NPC, который напрямую призывал игрока оставить отзыв, а в конце диалога открывал страницу игры в магазине — прямое нарушение пользовательского соглашения Steam.
Мы собрали необходимые данные, сделали небольшой ресерч и прогнали отзывы через алгоритмы обнаружения аномалий — и обнаружили крупные выбросы с чёткой периодичностью примерно раз в 30 минут, совпадающей с игровым циклом. Используя две модели для оценки последствий, мы посчитали, что игра получила от 23% до 50% дополнительных отзывов: без этого механизма у неё было бы от 17к до 26к отзывов вместо 33к на момент написания статьи.
После завирусившегося поста на Reddit разработчик поправил текст, но оставил переход на страницу игры; Valve никак не отреагировала, а аудитория в целом поддержала разработчика — именно поэтому мы считаем это структурной проблемой, которую имеет смысл измерять.
Контекст
В мае, практически сразу после релиза, мы наткнулись на завирусившийся пост на Reddit, в котором автор возмущался откровенным нарушением пользовательского соглашения Steam игрой Far Far West:
Не просите игроков оставлять отзыв на ваш продукт изнутри вашего приложения.
В первые дни после релиза в главном хабе игры присутствовал NPC по имени Steamy — с логотипом Steam вместо головы, — который говорил:
По указу Гейба Ньюбота, я приехал в этот город с одной просьбой: оставь отзыв на игру в Steam!
После того как вы нажимали F, чтобы завершить диалог, в браузере открывалась страница игры в Steam.
Через день после публикации поста разработчик поменял текст на:
По указу Гейба Ньюбота, предлагаю всем ковбоям бесплатную поездку в главный магазин! А что вы там будете делать — уже не в моей юрисдикции.
Всё это разворачивалось в сабреддите r/Steam, и аудитория разделилась на два лагеря. Бо́льшая часть:
Очень крутая игра, она бы и так стала популярной.
Они же не просят положительных отзывов, это не нарушение.
Другие разработчики делают так же, ничего страшного.
И меньшая:
Нарушение соглашения даёт нечестное преимущество, правила должны работать для всех.
Среди них — разработчики, которым отклоняли заявку из‑за малейшего нарушения именно этого правила. Его применение непрозрачно и часто вызывает замешательство.
И независимо от того, на чьей мы стороне в этом споре, нам кажется важным копнуть глубже и разобрать конкретный пример — тем более что у нас уже есть рабочие модели, которые мы используем внутри команды, и есть ощущение, что мы нащупали что‑то интересное.
Материал мы выпускаем уже после того, как улеглась шумиха: мы не хотим вставать на чью‑либо сторону в конфликтах и держим нейтралитет — мы всё‑таки исследовательская команда. А раз так — поехали исследовать!
Повлияло ли это на отзывы?
Начнём с базового вопроса — было ли вообще какое‑то влияние на отзывы? И если да, нужно будет ответить позже — насколько?
Начнём с прямого сравнения, для чего посмотрим на графики распределений отзывов по плейтаймам игроков для двух сессионных игр: Slay the Spire 2 и Far Far West.


Немного... отличается.
Конкретно: у Far Far West отчётливо видно «нижнюю» кривую с относительно плавной формой, и какие‑то странные «выбросы» или «спайки» (spike).
Конечно, эти выбросы наблюдаются и в Slay the Spire 2, но их масштаб существенно меньше.
Давайте покрасим эти спайки в другой цвет с помощью алгоритма, чтобы отчётливее их увидеть. Для этого мы используем правило «похож на соседа», которое, упрощая, смотрит на соседние столбики для оценки. Если столбик существенно выбивается по сравнению с соседями — излишек красим в красный.
Комментарий
На самом деле можно было сразу приложить графики с помеченными аномалиями. Но мы часто оказываемся перед выбором: последовательно рассказывать «историю» или в сжатом и сухом аналитическом формате показывать данные. Так как мы стремимся повысить уровень аналитики в геймдеве, одновременно сохранив её доступной, здесь пришлось пожертвовать лаконичностью.

Теперь заметнее, но прежде чем идти дальше, подчеркнём:
«Нижняя» или «базовая» кривая выглядит очень похожей на лог‑нормальное распределение (как нормальное, но искривлённое влево, и из‑за этого с хвостом), а красные столбики напоминают «экспоненциальное».
Красные столбики подозрительно чередуются через два, что указывает нам на какую‑то периодичность процесса.
Первый пункт — не случайность, и мы обязательно поговорим об этом феномене в отдельной статье, так как это затрагивает огромную тему поведения игроков и предсказательных моделей, где мы это учитываем. Но пока что давайте углубимся во второй пункт — периодичность столбиков.
Комментарий
На самом деле эта разница в форме распределения представляет собой намного больший интерес, чем может показаться на первый взгляд. Забегая вперёд, к ещё не опубликованным статьям: есть вполне себе легко интерпретируемые правила, по которым это происходит. Если очень грубо говорить — «похожая на экспоненциальную» кривая на самом деле почти идеально отображает «истинную» кривую распределения, не по отзывам, но по какой‑то причине у большинства игр всё схлопывается к лог‑нормальному, но со «ступенькой» в районе 2 часов.
Давайте поищем периодичность на записанных стримах с геймплеем, и попробуем замерить время между попаданием в хаб.
Стрим с канала Jerma Stream Archive
Начало: ~13:00, конец ~36:00, первый забег длился 23 минуты.
Примерно 6 минут проведено в хабе.
Второй забег: начало ~42:00, конец ~1:11:00, забег длился 29 минут.
Примерно 5 минут в хабе.
Третий забег стартовал ~1:16:00, закончился в ~1:37:00, заняв 21 минуту.
Стрим с канала Northernlion
Первый забег начинается ~3:00, заканчивается ~31:00, заняв 28 минут.
4 минуты проведено в хабе.
Второй забег начинается в ~35:00, заканчивается в ~57:00, занимает 22 минуты.
Проведено 3 минуты в хабе.
Третий забег стартует в 1:00:00, заканчивается в ~1:19:00, занимает 19 минут.
Стрим с канала Bruce Greene
Нарезка стартует прямо с забега, поэтому не учитываем первый.
Второй забег начинается на ~18:00, заканчивается на ~47:00, занимает 29 минут.
Проведено 6 минут в хабе.
Третий забег начинается в ~53:00 и заканчивается в 1:42:00, заняв более чем 50 минут, по‑видимому, исключение.
Наша небольшая выборка имеет среднее время в забеге ~24 минуты и время в хабе примерно ~5 минут. И не надо забывать, что на написание отзыва тоже нужно время! Это даёт нам окна примерно 27–32 минут между написанием отзыва.
Комментарий
Разумеется, «под капотом» мы проверили наши результаты с помощью частотного анализа на разных диапазонах агрегации, и как понятный для нарратива пример использовали небольшую выборку.
Поэтому неудивительно, что наши 10-минутные столбики поймали эту зависимость. Но для уверенности выдвинем гипотезу:
Если длина сессии действительно является причиной спайков, а не ошибкой сборки данных, то мы должны увидеть более чёткую картину, если будем смотреть на плейтайм через 5-минутные интервалы.
И соответственно, часовые, или же 60-минутные, должны полностью смазать всю картинку, так как соседние получасовые интервалы будут объединяться в один.


В целом, получилось как и предсказывали:
На 5-минутных столбиках более отчётливо видно спайки, особенно на фоне уменьшившейся «базовой» кривой.
На 60-минутных практически нет спайков, а имеющиеся можно до какой‑то степени считать погрешностью алгоритма.
Но для скептиков, у нас есть еще одна идея, давайте посмотрим.
Если вас ничего не убедило до этого, давайте попробуем по‑другому, с помощью гипотезы:
Так как мы знаем, что разработчик изменил текст, и мы примерно знаем время патча, мы можем сравнить распределение до и после этого патча.
Таким образом, мы ожидаем, что после изменения эффект либо существенно ослабнет, либо исчезнет полностью.
Но также мы, скорее всего, ожидаем, что эффект полностью не исчезнет, потому что ссылка на страницу в Steam осталась в игре.


Визуально сразу становится понятно, что наша гипотеза оказалась верной:
До патча 2250 из 8350 отзывов (27%) являются «аномальными», то есть находятся в красных столбцах.
После изменения, за идентичный промежуток времени (~2 дня), 550 из 5400 отзывов (10%) посчитаны как аномальные.
После, в течение более двух недель, количество аномальных отзывов оставалось в районе 10%, меееедленно снижаясь.
Честно сказать, на этом моменте я удивился. 17 процентных пунктов просто из‑за изменения текста? Я, конечно, знал, что Call‑to‑action работает, но чтобы настолько?
Надеюсь, этого доказательства достаточно, мы напрямую увидели, что NPC с призывом оставить отзыв существенно повлиял на их количество, но есть кое‑что еще!
Комментарий
Мы проверили этот «скачок» и на графике изменения отзывов, падение динамики заметно невооружённым взглядом, но в итоге мы выбрали прямое сравнение до/после, как наиболее понятное, хотя и не идеальное с методологической точки зрения.
Мы можем посмотреть на это под другим углом — с помощью графика, который покажет нам, как менялся процент «аномальных» отзывов со временем, для двух игр — Slay the Spire 2 и Far Far West.

Сразу стоит заметить: колоссальные числа со старта — во многом артефакт и метода обработки, и самой системы отзывов. Но даже так заметна разница в масштабе:
Несмотря на то, что график Slay the Spire 2 (синий) имеет похожую форму, он стартует с 13%, почти сразу падает ниже 5% и в течение месяца уходит ниже 1%.
Far Far West, в сравнении, стартует с 40%+, намного медленнее падает к ~20%, и в течение месяца так и не опускается ниже 13%.
Насколько сильный эффект?
Было бы неинтересно остановиться без попытки оценить масштаб в конкретных числах и динамике. Кто‑то, наверное, уже задавался вопросом по мере прочтения — а сколько в итоге было бы без «аномалий»? И мы можем это посчитать... Ну почти.
Для начала начнём с простого: посчитаем и напрямую вычтем наши красные столбики, или «спайки», из графика отзывов, чтобы получить примитивную оценку.

На графике две кривые — синяя это оригинальный график отзывов у игры, и зелёная — за вычетом аномалий. Само по себе это даёт нам ~13% разницы, или же 4300 дополнительных отзывов.
В некотором смысле мы можем называть это «верхним пределом», или «гарантированно лишними» отзывами, и, как вы видите, нижняя кривая пропорциональна и не очень интересна сама по себе. Но мы знаем, что алгоритмы Steam используют какую‑то обратную связь от количества отзывов, поэтому наша примитивная модель явно недооценивает масштаб.
Для более точной оценки давайте предположим следующее:
Steam использует некоторый фидбек‑механизм, и часть будущего роста отзывов может быть объяснена предыдущей динамикой. В наших внутренних тестах, основываясь на регрессионных моделях, эта гипотеза имеет коэффициент R^2=0.86.
Оооочень сильно упрощая, предыдущая динамика отзывов на 86% описывает будущую динамику. Это очень сильное упрощение, с огромным количеством нюансов, но для общего понимания дальше — пойдёт.

Красной областью мы пометили диапазон, в котором, на основе точности нашего метода, могло оказаться итоговое количество отзывов у игры.
Если говорить совсем просто — если мы «вычитаем» аномальные отзывы из общего количества, то мы не только влияем на количество в моменте, но ещё и оказываем влияние на будущий рост, существенно замедляя его. Разумеется, модель не идеальна, и мы всё ещё настраиваем её, но в целом её достаточно, чтобы оценить масштаб наблюдаемого эффекта.
Также доступные в публичном виде «оценщики» продаж/прибыли имеют очень сильную корреляцию между количеством отзывов и продажами, иногда даже напрямую задействуя эти данные в расчётах, поэтому какое‑то влияние было оказано и на продажи, но мы считаем, что спекуляции оценок на оценках теряют всякий смысл, поэтому масштаб эффекта на продажах считаем неясным.
Итог: оценка количества отзывов у Far Far West, без влияния аномальных отзывов от NPC, находится между 17к и 26к, в сравнении с 33к, которые в итоге получила игра. Это примерно от 50 до 77% от реальных.
Комментарий
Конечно, для точности было бы правильно описать полностью нашу методологию, но это противоречит как интересам нашего проекта, так и смыслу нарратива. Вкратце, мы сильно фильтруем входные данные от неподходящих игр (например, 10 отзывов), выделяем некоторые паттерны конкретно по зависимости прошлое‑рост в будущем, кластеризуем, выбираем, валидируем на тестовой выборке, в общем, много чего делаем и экспериментируем, отчасти из‑за этого пока что не делимся конкретными шагами.
Заключение
Ну, пожалуй, и всё. Данный пример ни в коем случае не является первым случаем нарушения пользовательского соглашения, которое «сработало», но оно стало одним из самых заметных. В одной из следующих статей мы проведём более широкий анализ подобных случаев с помощью наших инструментов, но пока что давайте закругляться:
Призыв к действию от NPC сработал и повлиял на отзывы — от 23% до 50% от реальных отзывов являются аномальными.
Один лишь текстовый призыв ответственен за 17 из 27% аномальных отзывов.
Оставшиеся 10 из 27% аномальных отзывов, по‑видимому, относятся к механике перехода на страницу Steam, хотя надёжных способов отделить этот механизм от лого Steam и «Gabe Newbot» не представляется возможным.
Эффект в основном повлиял на положительные отзывы, но так как у игры и так подавляюще положительные отзывы, мы решили не включать это в анализ из‑за размера выборки.
Взаимосвязь отзывы — прибыль нами не была установлена, хотя можно с достаточной уверенностью сказать, что на продажи тоже был оказан эффект, но его размер носит спекулятивный характер.
Правильно применённый механизм Call‑to‑action, или же призыв к действию, работает более чем эффективно, иногда потенциально даже удваивая отзывы к игре.
Но самое интересное для нас — это не расчёты, это реакция:
Подавляющее большинство людей в оригинальном посте активно защищали игру, потому что она является качественной.
Valve не предприняла никаких действий, и применение правил пользовательского соглашения остаётся размытым.
На наш взгляд, это создаёт структурную проблему, когда игры, изначально популярные на релизе (Far Far West имела большое количество вишлистов на старте), в некотором смысле подталкиваются к мягкому нарушению пользовательского соглашения, получая существенный буст количества отзывов и общей видимости, под одобрение аудитории.
Является ли эта проблема настолько важной, чтобы её исправить, — не тот вопрос, на который мы в силах ответить. В наших силах — продолжать находить интересные вещи в данных, улучшая наши инструменты, которые в скором времени станут публичными.
Спасибо за внимание! Команда Pneumatix Research.
