Вашему вниманию предлагается подробное описание алгоритма расчета сезонности (на примере нахождения сезонности по дням недели).
Предварительно исходные данные нужно очистить от выбросов – нетипично высоких или низких значений показателя, которые находятся за пределами ожидаемого диапазона. Часто на графике такие данные выглядят как значительные пики или, наоборот, падения практически до нуля, которые в несколько раз превосходят обычные значения.
Причиной выброса может быть пик продаж в праздничный день, сбой в работе системы трекинга или любой другой разовый фактор, который так или иначе повлиял на метрику.
Почему нужно очищать данные от выбросов? Дело в том, что эти значения искажают результаты расчетов и могут привести к ошибкам в прогнозе. Некоторые статистические показатели, такие как стандартное отклонение и среднее арифметическое, зависимы от выбросов, и, включив их в расчет, можно сделать некорректные выводы.
Поэтому для очистки данных существует ряд подходов, которые позволяют оценить, какое подозрительно высокое или низкое значение можно считать выбросом, а какое таковым не является.
Подробнее на очистке от выбросов останавливаться мы не будем, ведь сейчас наша основная задача – это расчет сезонности. Тем не менее при анализе данных нужно всегда о ней помнить.
Итак, второй этап расчетов, который применяется к уже очищенным данным, – это расчет лага автокорреляции.
Автокорреляция – это зависимость между значениями временного ряда, взятыми со сдвигом. Она используется для выявления тенденций и циклических колебаний данных во временном ряду.
Для ее расчета в Excel существует стандартная функция – КОРРЕЛ (CORREL), которая рассчитывает коэффициент автокорреляции между двумя диапазонами данных. Эти диапазоны и являются аргументами функции и смещены друг относительно друга: если мы ищем коэффициент автокорреляции 1-го порядка, то первый диапазон включает значения временного ряда, начиная с первого и заканчивая предпоследним, а второй диапазон содержит все значения, начиная со второго. Таким образом, мы получаем два диапазона, смещенные друг от друга на один день.
Для поиска коэффициента 2-го порядка диапазоны должны быть смещены на два дня – первый не включает последние два значения временного ряда, второй не включает первые два.
Этим способом мы рассчитываем коэффициенты автокорреляции для семи порядков и находим среди них максимальный. Он и будет показателем того, в какой день автокорреляция наиболее высокая.
Если максимальный коэффициент получился для автокорреляции первого порядка, то это значит, что данный ряд не содержит каких-либо тенденций и зависимостей.
А если этот коэффициент максимален для 7-го порядка, это значит, что ряд содержит циклические колебания с периодичностью в 7 дней.
В нашем примере наибольший коэффициент проявляется как раз для автокорреляции 7-го порядка. Это говорит о том, что в данном временном ряду присутствует недельная сезонность
Далее построим тренд для нашего ряда, чтобы впоследствии сделать по нему прогноз и определить, как будет дальше себя вести выбранный показатель.
Существует несколько видов тренда, которыми можно описать метрику (линейный, экспоненциальный, логарифмический, полиномиальный и т. д.). Мы будем использовать линейный, так как он наиболее прост для построения и восприятия, но в то же время хорошо показывает динамику метрики.
Линейный тренд строится по уравнению вида y = ax + b, где a и b – коэффициенты, а x – порядковый номер дня (в примере это колонка D). Для расчета уравнения нужно вычислить два коэффициента.
Сделать это можно также стандартной функцией Excel – ЛИНЕЙН (LINEST), аргументами которой являются два массива данных: исследуемая метрика и порядковые номера дней.
Используя эту формулу как функцию массива (Ctrl + Shift + Enter), мы получаем два коэффициента, которые затем подставим в уравнение.
Линейный тренд годится в большинстве случаев, особенно если в данных нет заметных регулярно повторяемых выбросов.
Для построения линии тренда используем рассчитанные ранее коэффициенты – a и b. Единственным изменяемым параметром уравнения будет х – порядковый номер дня. Благодаря этому линия тренда может быть продлена на несколько дней вперед, в нашем примере это семь дней (столбец I). Так мы получаем дальнейшую динамику изменения метрики.
Следующий шаг для построения прогноза по линейному тренду – расчет коэффициентов сезонности.
Для этого нужно определить отклонение значений метрики от линии тренда (столбец K), а затем найти среднее значение этих отклонений в зависимости от дня цикла. Эти средние значения и есть искомые коэффициенты.
Чтобы завершить прогноз, необходимо «наложить» на тренд сезонность.
Для этого нужно умножить каждое значение линии тренда на коэффициент сезонности соответствующего дня (столбец L).
Это приведет график линии тренда к привычному виду – с регулярными колебаниями в зависимости от дня недели.
А так как ранее мы продлили тренд на семь дней за пределы имеющихся данных, эта сезонность распространится и на спрогнозированную часть линии тренда, предоставив таким образом прогноз метрики на ближайшие семь дней.
График из расчетного файла: ярко выражена недельная сезонность на фоне падающего линейного тренда
Во-первых, чтобы точнее прогнозировать свою выручку и принимать на основании этих прогнозов более правильные решения. Допустим, не планировать массовую закупку трафика на август, а потерпеть до сентября. Вопрос планирования выручки вообще очень важен, и, пожалуй, в любой компании его решают. Сезонность – один из способов сделать свои прогнозы значительно точнее.
Во-вторых, сезонность можно использовать себе во благо. Если вы знаете, что в декабре у вас будет много пользователей и средний доход на пользователя будет высок, то есть смысл увеличить его, предложив этим «горячим» пользователям холодного месяца более выгодные скидки и запланировав на этот период внутриигровые активности.
Интересный вопрос: можно ли бороться с сезонностью? Допустим, вы знаете, что в июле ARPDAU у вас будет самым низким за год. Нужно ли пытаться повысить его и бомбить пользователей заманчивыми июльскими скидками?
Наш опыт говорит, что бороться с сезонностью бесполезно: если ваш клиент уехал в летний отпуск, то он и будет пребывать в этом отпуске, что бы вы ни делали. Лучше сосредоточиться на том, чтобы мультиплицировать сезонность «хороших» месяцев, увеличивая и без того хороший доход, чем пытаться поднять из мертвых доход «плохих». Еще один вариант: на время сезонного спада увеличивать аудиторию стран, где сезонность ведет себя обратным образом, диверсифицируя таким образом свой доход.