К книге
Игра в цифры. Как аналитика позволяет видеоиграм жить лучшеГлава 7 Прогнозирование. Сезонность
61%
Глава 7 Прогнозирование. Сезонность
43

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

Что такое сезонность?

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

Чаще всего наиболее ярко сезонность выражена по дням недели и по месяцам. Рассмотрим каждую по отдельности.

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

Несколько примеров:

– во многих играх аудитория в выходной день больше, чем в будни;

– с другой стороны, показатели дохода в среднем выше в будние дни и достигают максимума в пятницу (именно поэтому пятница – отличный день для проведения акций);

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

Последний пример, к слову, демонстрирует важную мысль. Сезонность касается не только количественных метрик продукта (аудитория или доход), но и качественных показателей (Retention, ARPU). То есть пользователи даже ведут себя в разные дни по-разному.

Cкриншот отчета Main Metrics в devtodev. На нем видно, что и доход, и сессии имеют недельную сезонность, и особенно ярко выражена она у показателя дохода

Месячная сезонность

Если агрегировать показатели по месяцам (от DAU перейти к MAU, а от ARPDAU к ARPU), то тоже можно заметить некоторые сезонные изменения:

– как мы говорили выше, во многих продуктах жаркие месяцы являются, наоборот, наиболее «холодными» по количеству аудитории, ее интересу и деньгам;

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

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

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

– в одной из игр мы видели, что оптимальная продолжительность цикла в поведении показателя ARPDAU не 7 дней, а 14. Мы объяснили это тем, что зарплату людям платят как раз каждые две недели;

– в некоторых продуктах, кстати, особенно заметны пики на тех числах месяца, которые делятся на пять (а это и есть дни зарплаты);

– также мы находили продукты, в которых оптимальные циклы составляли 3, 9, 11 дней, и во всех случаях это объяснялось внутренними ивентами в продукте (в частности, турнирами).

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

Отличия аддитивной и мультипликативной сезонности

Как найти сезонность?

Вашему вниманию предлагается подробное описание алгоритма расчета сезонности (на примере нахождения сезонности по дням недели).

Очистка данных от выбросов

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

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

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

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

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

Расчет автокорреляции

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

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

Для ее расчета в Excel существует стандартная функция – КОРРЕЛ (CORREL), которая рассчитывает коэффициент автокорреляции между двумя диапазонами данных. Эти диапазоны и являются аргументами функции и смещены друг относительно друга: если мы ищем коэффициент автокорреляции 1-го порядка, то первый диапазон включает значения временного ряда, начиная с первого и заканчивая предпоследним, а второй диапазон содержит все значения, начиная со второго. Таким образом, мы получаем два диапазона, смещенные друг от друга на один день.

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

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

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

А если этот коэффициент максимален для 7-го порядка, это значит, что ряд содержит циклические колебания с периодичностью в 7 дней.

В нашем примере наибольший коэффициент проявляется как раз для автокорреляции 7-го порядка. Это говорит о том, что в данном временном ряду присутствует недельная сезонность

Расчет коэффициентов линейного тренда

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

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

Линейный тренд строится по уравнению вида y = ax + b, где a и b – коэффициенты, а x – порядковый номер дня. Для расчета уравнения нужно вычислить два коэффициента.

Сделать это можно также стандартной функцией Excel – ЛИНЕЙН (LINEST), аргументами которой являются два массива данных: исследуемая метрика и порядковые номера дней.

Используя эту формулу как функцию массива (Ctrl + Shift + Enter), мы получаем два коэффициента, которые затем подставим в уравнение.

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

Построение линии тренда

Для построения линии тренда используем рассчитанные ранее коэффициенты – a и b. Единственным изменяемым параметром уравнения будет х – порядковый номер дня. Благодаря этому линия тренда может быть продлена на несколько дней вперед, в нашем примере это семь дней (столбец I). Так мы получаем дальнейшую динамику изменения метрики.

Расчет коэффициентов сезонности

Следующий шаг для построения прогноза по линейному тренду – расчет коэффициентов сезонности.

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

Наложение сезонности на тренд и построение прогноза

Чтобы завершить прогноз, необходимо «наложить» на тренд сезонность.

Для этого нужно умножить каждое значение линии тренда на коэффициент сезонности соответствующего дня (столбец L).

Это приведет график линии тренда к привычному виду – с регулярными колебаниями в зависимости от дня недели.

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

График из расчетного файла: ярко выражена недельная сезонность на фоне падающего линейного тренда

Зачем нужно знать сезонность

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

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

Интересный вопрос: можно ли бороться с сезонностью? Допустим, вы знаете, что в июле ARPDAU у вас будет самым низким за год. Нужно ли пытаться повысить его и бомбить пользователей заманчивыми июльскими скидками?

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

Предыдущая главаГлава 43 из 70Следующая глава