Привет, меня зовут Евгений Кириёк, я занимаюсь HR-аналитикой, преподаю и рассказываю про специфику анализа данных в области функции управления персоналом. Последнее время я плотно занимался прогнозированием HR-показателей (текучесть, выбытие, укомплект, заполняемость ШР, численность и пр.), попробовал довольно много методов, подходов, а главное - столкнулся со спецификой прогнозирования таких синтетических показателей, об этом и хочу рассказать в рамках этой статьи.
Для кого эта статья
В первую очередь для коллег из HR: рекрутеров, менеджеров по персоналу, специалистов ОТиЗ и всех тех, кто сталкиваются с задачами прогнозирования показателей в своей работе, при этом не имеет специального тех. образования, и не разбирается в тропических змеях и методах их приручения. Для них, я надеюсь, эта статья станет простой и максимально доступной инструкцией к действию.
В рамках второй части (я, надеюсь, до этого дойдёт), поговорим о более сложных моделях типа ARIMA/SARIMA, алгоритмах типа Prophet и пр. применительно к HR, но это на перспективу, а сейчас – к теме.
Что будем прогнозировать
В статье мы будем прогнозировать HR-метрики, анализируя их как временные ряды. Временной ряд – это последовательность данных, которые фиксируются с определенной (равной) периодичностью. Например, текучесть, которую вы рассчитываете на ежемесячной основе. У вас собирается статистика формата: дата измерения – значение текучести. Такие пары значений и будут временным рядом.
Что нужно для прогнозирования
1. Данные – это понятно. Но какой глубины они должны быть? Тут все зависит от инструмента, с которым мы работаем и характеристик самого ряда. Например, если данные имеют сезонность (текучесть с сезонностью, например, встречается довольно часто), то нужно 2–3 полных цикла с такой сезонностью для создания качественного прогноза. Это не значит, что если у нас будет меньше наблюдений, мы не сможем сделать прогноз, но его качество - да, вероятно пострадает. Поэтому, для упрощения будем считать минимально необходимым объёмом - не менее 24 наблюдения. (т.е. 24 записи значения текучести).
2. Инструмент для построения модели. Мы будем использовать Excel, как основной рабочий инструмент большинства HR-специалистов.
Специфика HR прогнозирования
1. Почти все метрики, с которыми мы с вами работаем – синтетические. Это значит, что в отличие от прогноза погоды, мы с вами имеем дело не с объективными природными явлениями, а с искусственными показателями, определенными методологией, а она имеет свойство меняться. Вот пример, у одного из моих клиентов в 2023 году поменялась методология расчета текучести персонала. Из нее начали убирать увольнения по причине смерти сотрудника, призыва на военную службу и аналогичные статьи, при которых увольнение сотрудника — это неизбежность. Компания посчитала правильным исключить такие случаи из расчета. До 2023 года считали по одной методологии со среднем уровнем в районе 14-15%, а с 2023 – по-другому, со средней текучестью уже в 10-11%. Поменялась методология и вслед за ней поменялась и статистика показателя. А, следовательно, брать в изначальном виде данные текучести до 2023 года стало невозможно.
Поэтому, когда вы готовите данные для анализа вы должны убедиться, что методология расчета показателя у вас не менялась на всем протяжении замеров данных. А если поменялась, то пересобрать данные по единой методологии.
2. Следующая особенность - следствие предыдущей: большая часть наших метрик – это производные от базовых показателей вроде списочной численности (СЧ), среднесписочной численности (ССЧ) и прочих. Поэтому прогноз текучести может выглядеть как прогноз количества уволившихся / прогноз ССЧ, а может как прогноз самой текучести от ее исторических значений. Формально и первый и второй вариант корректный, но практика показывает, что второй вариант дает более точные прогнозы, чем первый (моя гипотеза, что в первом случае суммируется ошибка двух прогнозов, которая усиливается через деление, а во втором – только ошибка итогового прогноза).
Поэтому, когда вы прогнозируете показатель, который сам является расчетной величиной от других показателей или метрик, предпочтительнее работать с данными производных величин. Т.е. текучесть прогнозировать через текучесть, а укомплект через укомплект, а не как прогноз ФЧ / на прогноз ШЧ.
3. Развитие многих HR-процессов ограничивается такими значениями как штатное расписание, численность или естественными ограничителями значениями для некоторых метрик. Например, мы прогнозируем текучесть персонала. Значение текучести не может быть отрицательным, поэтому нижним предельным значением прогноза будет 0. Если в классической аналитике данных есть методы вроде logit-трансформации (например, для долей), которые до известной степени помогают сохранять прогноз в допустимых границах, то в Excel такого функционала нет и нашим решением будет ограничение прогноза нулевым значением вручную. В известной степени это «костыль», но для наших задач он оправдан.
Более сложный пример - фактическая численность штатных сотрудников СП не может превышать численность СП по ШР. При этом мы знаем, что в компании есть только одно окно для пересмотра ШР в году. А значит, если наш прогноз ФЧ превышает ШР, мы фиксируем прогноз на уровне 100% с пересмотром после изменения ШР. Еще один «костыль», но опять же обусловленный логикой показателя.
Поэтому, в тех случаях, когда показатель не может перешагнуть некоторое пороговое значение, мы должны ограничить значение прогноза предельным значением. И в случае, если показатель достигает этого значения - инициировать пересмотр прогноза или посмотреть бизнес-логику процесса.
4. Наконец последний пункт кажется довольно очевидным, но при этом крайне важный, поэтому считаю не лишним про него сказать. Мы работаем со стохастическими системами. Мало того, что все наши прогнозы базируются на попытках спрогнозировать поведение людей, которые, в общем, довольно иррациональны сами по себе, так сюда еще прибавляется и огромное количество внешних условий, которые мы с вами не можем предвидеть по определению и которые оказывают влияние на развитие процессов и состояний, которые мы прогнозируем (ставка рефинансирования для кредитования бизнеса, изменение системы налогов и сборов, которые влияют на доходы и расходы компании, рынок спроса, рестрикции и многое другое) и все это может значительно повлиять на качество наших прогнозов, даже если математически мы все сделали верно.
Поэтому, мы должны быть готовы к определённому диапазону погрешности в наших прогнозах и, как вариант, работать не только через прогнозные значения, а через диапазоны прогнозов. Например, прогноз ± 1 ошибка отклонения.
Модели для прогнозирования
В рамках этой статьи мы познакомимся с двумя методами прогнозирования, которые доступны нам в базовой версии Excel: метод экспоненциального сглаживания и линейной регрессии. Посмотрим на эти функции, их аргументы, специфику работы, ограничения и примеры использования.
Модель первая: экспоненциального сглаживания + модель Хольта–Уинтерса
Эта функция реализует семейство моделей ETS (Error–Trend–Seasonality), куда входит модель Хольта–Уинтерса с автоматическим подбором параметров сглаживания (α, β, γ) и длины сезонности. Вызывается функцией = ПРЕДСКАЗ.ETS() и имеет следующие аргументы:

Целевая дата (обязательно) — период, для которого требуется прогноз (обычно дата);
Значения (обязательно) — фактические исторические данные, на основании которых строится прогноз. Выделяем весь известный нам диапазон значений;
Временная шкала (обязательно) — диапазон дат, соответствующий известным значениям. Excel использует этот аргумент, чтобы определить интервал между точками ряда и проверить его регулярность;
Сезонность (необязательно) — число, обозначающее длину сезонного цикла. 1- автоопределение сезонности (ставится по умолчанию, но доверять автоопределению не стоит точно); 0 — нет сезонности; N — длину сезона ставим мы сами;
Заполнение данных (необязательно) — метод, которым будут заполнены недостающие значения (если таковые есть). 1 (по умолчанию) — будут заменены на среднее соседних точек; 0 — пропуски интерпретируются как нули;
Агрегирование (необязательно) — метод, которым будут агрегироваться значения с одинаковой меткой времени (по умолчанию будут использоваться ср.знач.) Скорей всего, вы этот аргумент использовать не будете.
Используем для
В функцию ПРЕДСКАЗ.ETS() вшита модель Хольта–Уинтерса, поэтому она умеет работать с трендами и сезонностью в рядах данных, а значит, этот инструмент можно использовать если в вашем ряду данных есть тренд, сезонность или некоторая цикличность изменения показателя. То есть это довольно универсальный метод, подходящий для большинства случаев (но не забывайте про глубину наблюдений, вам нужно не менее 24 записей, но лучше больше).
Пример использования
У нас есть набор данных, отображающий состояние текучести в компании за 2 года помесячно. Задача спрогнозировать уровень текучести на следующие 12 месяцев. Для начала построим график имеющихся данных и посмотрим на его структуру:

Заметно, что график имеет и тренд, и сезонность.
Тренд – это общее движение показателя во времени, оно у нас нисходящее (красная пунктирная линия).
Сезонность — это цикличность колебаний в рамках какого-то диапазона. Для удобства я выделил сезонность вертикальными линиями. В нашем случае у нас годовой цикл, где вначале года виден рост текучести примерно до мая-июня, потом перелом тренда и снижение текучести до октября. В октябре снова смена тренда и текучесть опять идет вверх до мая-июня. Цикл укладывается в ~12 месяцев (с октября по октябрь). А теперь к прогнозу:

В первой ячейке, где мы хотим отобразить прогноз, пишем функцию = ПРЕДСКАЗ.ETS(дата прогноза, который мы хотим получить; диапазон предыдущих значений; диапазон соответствующей им даты; длина цикла, в нашем случае 12). После ввода функции протягиваем значения на 12 периодов вперед и не забываем зафиксировать нижние границы диапазона дат и диапазона значений. На выходе получаем прогноз (пунктирная линия).

Визуально можно отметить, что прогноз передает тренд, сезонность, колебания в рамках цикла и, в целом, выглядит более-менее адекватно. О конкретных метриках качества/точности (MAE,MAPE etc.) поговорим в рамках второй части.
Модель вторая: линейная регрессия признака от времени
Функция ПРЕДСКАЗ.ЛИНЕЙН() используется для прогнозирования будущего значения на основе линейной регрессии признаков объекта. А признак тут только один – это время(t). Скажу сразу, это далеко не самый лучший метод прогнозирования временных рядов, так как создан для других задач, но и у него есть область применения в прогнозировании HR-процессов. Вызывается функцией = ПРЕДСКАЗ. ЛИНЕЙН() и имеет следующие аргументы:

X — значение, для которого нужно сделать прогноз;
известные значения Y — диапазон данных на основе которого мы будем делать прогноз;
известные значения X — время, которое определяет значения Y (дата, время и пр.).
Используем для
Функция ПРЕДСКАЗ.ЛИНЕЙН() основана на линейной регрессии, поэтому лучше всего подходит для случаев, когда между переменными действительно существует (или предполагается) линейная связь. В прогнозировании временных рядов она применяется редко, так как большинство показателей имеют нелинейные колебания, сезонность и пр.
Тем не менее, использовать ПРЕДСКАЗ.ЛИНЕЙН() для прогноза временного ряда имеет смысл тогда, когда ряд действительно близок к идеально линейному виду: устойчивый тренд, минимум выбросов и полное отсутствие сезонности или цикличности. В HR такая ситуация встречается, например, в показателях фактической и списочной численности (СЧ, ССЧ, ФЧ, ШЧ) и некоторых других метриках.
Пример использования
У нас есть набор данных, отображающий фактическую численность (ФЧ) в компании за 2 года. На графике виден устойчивый тренд роста, но при этом особенно незаметно каких-то значимых циклически повторяющихся изменений, то есть нет сезонности.

В первой ячейке, где мы хотим отобразить прогноз, пишем функцию = ПРЕДСКАЗ.ЛИНЕЙН(дата первого прогноза; диапазон предыдущих значений; диапазон соответствующего им времени). После ввода функции протягиваем значения на 12 периодов вперед и не забываем зафиксировать нижние границы диапазона времени и диапазона значений.

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

Подведем итог
Если вы решаете задачу прогнозирования HR-процессов, вот план ваших действий:
1. Собрать исторические данные по нужной для вас метрики для построения прогноза. Желательная глубина данных не менее 24 наблюдений (особенно если ряд имеет сезонность), меньше тоже можно, но качество прогноза, скорей всего, будет снижаться;
2. Убедиться, что метрика или показатель, с которым вы работаете, не менял методологии расчета. Если менял – пересчитать его по единому стандарту;
3. Построить график и глазами посмотреть на наличие тренда и сезонности. Самый простой способ сделать это - разделить ряд на отдельные годовые фрагменты и посмотреть есть ли между фрагментами какие-то общие паттерны развития ряда;
4. Если есть тренд и/или сезонность, то определить период сезонности (количество отрезков времени между сезонами) и использовать модель ПРЕДСКАЗ.ETS() с рассчитанной вами длинной сезона. Если сезонности нет, то можно попробовать ПРЕДСКАЗ.ЛИНЕЙН().
Опционально: если ряд, с которым вы работаете, очень волатильный, то можете поработать не с точечным прогнозом, а с прогнозным интервалом. Это получившийся прогноз ± одна стандартная ошибка прогноза и представить прогноз не в виде одиночного значения, а в виде диапазона. В общем и целом, это допустимо.
5. Если прогноз показывает нарушение бизнес-логики показателя (например, отрицательная текучесть) – руками скорректировать прогноз на максимально допустимое значение.
В следующей статье поговорим про применение более сложных, но точных методов прогнозирования, их использование с учетом специфики прогнозирования HR-метрик, введем метрики качества прогнозов и перейдем на код.