People Analytics на ноутбуке HR-аналитика: расчёт истинной текучести, кривые удержания Каплана — Мейера и вилки грейдов
Ведомость начислений ФОТ с премиями топ-менеджмента, причинами увольнений и грейдами инженеров — самая взрывоопасная коммерческая и персональная таблица внутри любой компании. Загружать сырую выгрузку из 1С:ЗУП во внешние зарубежные BI-облака или сторонние веб-конвертеры категорически запрещено как службой информационной безопасности, так и требованиями локализации 152-ФЗ «О персональных данных».
К счастью, даже для холдинга численностью 10 000–80 000 сотрудников вся десятилетняя история кадровых перемещений и расчётных листков весит в колоночном формате .parquet всего 30–90 мегабайт и обсчитывается строго локально в памяти защищённого ноутбука HR-аналитика за доли секунды! Разбираем три главные математические методики, отделяющие настоящую People Analytics от «средней температуры по больнице».
Почему классический «процент текучести за год» врёт на растущем или сезонном бизнесе
В учебниках прошлых лет общую текучесть считают как Уволенные за период / Среднесписочная численность × 100 %. Представьте, что компания в сентябре открыла новый распределительный центр и наняла 300 новичков: среднесписочная численность выросла в полтора раза — и на слайде HRD общая текучесть «волшебным образом упала с 28 % до 19 %», хотя в реальности 60 % этих новичков увольняются в первые 45 дней стажировки!
Правильный инструмент оценки удержания на ноутбуке аналитика — анализ выживаемости с цензурированием справа (Kaplan — Meier Survival Curve, библиотека lifelines в Python), учитывающий и тех, кто уже уволился (event = 1), и тех, кто прямо сейчас продолжает работать со стажем T дней (event = 0, правоцензурированные наблюдения!):
import pandas as pd
from lifelines import KaplanMeierFitter
# Выгрузка 1С:ЗУП уже псевдонимизирована (только внутренний солёный хеш emp_hash, без ФИО и СНИЛС!)
df["tenure_days"] = (df["exit_date"].fillna(pd.Timestamp("2026-10-20")) - df["hire_date"]).dt.days
df["is_voluntary_exit"] = df["exit_reason"].isin(["собственное_желание", "непрохождение_испытания"]).astype(int)
kmf = KaplanMeierFitter()
for dept, group in df.groupby("department"):
kmf.fit(durations=group["tenure_days"], event_observed=group["is_voluntary_exit"], label=dept)
print(f"{dept}: удержание 90 дней = {kmf.predict(90):.1%}, удержание 365 дней = {kmf.predict(365):.1%}")
Такой расчёт за 2 секунды показывает истинную точку перелома:
- если кривая обваливается на 7–30-й день (
Early Attrition) — сломан рекрутинг (обещали на собеседовании не те условия) или провалена адаптация у конкретного мастера смены; - если кривая держится ровно год, а на 13–15-м месяце резко падает — рынок обогнал входной оклад, а порядок индексации и пересмотра оплаты труда не успевает за внешними офферами!
Метрики справедливости ФОТ на ноутбуке C&B: Compa-Ratio и Range Penetration
Чтобы пересмотр окладов на 800 сотрудников не превращался в конкурс «кто громче всех просит прибавку у директора», в локальной модели DuckDB / Power BI Desktop на ноутбуке C&B-менеджера для каждого сотрудника рассчитываются два индекса относительно утверждённой вилки его грейда (Min — Midpoint — Max):
| Метрика C&B | Формула расчёта | Зона риска, требующая решения на комитете по пересмотру ФОТ |
|---|---|---|
Compa-Ratio (CR) |
Фактический оклад / Медиана вилки грейда (Midpoint) × 100 % |
CR < 82 % при высокой оценке Performance: ключевой инженер недооценён ниже низа рынка — первый кандидат на уход к конкуренту в ближайшие 90 дней! |
Range Penetration (RP) |
(Оклад - Min) / (Max - Min) × 100 % |
RP > 100 % («Red Circle»): сотрудник упёрся выше потолка своего грейда — дальнейший рост оклада возможен только через расширение зоны ответственности и перевод на следующий грейд! |
Pay Compression (инверсия окладов) |
Медиана окладов новичков (< 6 мес.) / Медиана опытных сотрудников (> 2 лет) того же грейда |
> 1,00: новичкам с улицы уже дают больше, чем лояльным старикам, которые этих же новичков обучают! |
Для мгновенных аналитических SQL-срезов по выгрузкам из 1С и ATS без установки сервера СУБД используйте встроенный движок DuckDB (принцип его работы прямо по плоским файлам мы подробно разбирали в материале локальный SQL-анализ миллионов строк в DuckDB на ноутбуке).
Защита ноутбука C&B-аналитика: шифрование, псевдонимизация и фильтр приватности экрана
У аналитика вознаграждений есть одна сугубо физическая угроза, о которой забывают 90 % компаний: подсматривание в экран ноутбука в переговорной, опенспейсе, лифте или сапсане!
- Магнитная или накладная антишпионская плёнка (
Privacy Filterс углом обзора±30°) либо встроенный электронный экран приватности (HP Sure View / ThinkPad Privacy Guard) — обязательный стандарт для любого ноутбука, на котором открываются ведомости ФОТ и бонусов! - Шифрование
BitLocker / FileVault, 16–32 ГБ ОЗУ, корпоративные шасси с аппаратнымTPM 2.0и сканером отпечатка (см. подробный разбор в статье корпоративные ноутбуки ThinkPad против EliteBook).
Чек-лист безопасности и методологии перед презентацией HR-дашборда правлению
- [ ] На самом первом шаге локального ETL-скрипта удалены столбцы
ФИО,СНИЛС,паспорт,телефони заменены на необратимыйSHA-256хеш табельного номера с локальной солью! - [ ] На всех слайдах и срезах дашборда включено правило минимальной группы
k-анонимности (N >= 5 человек): если в отделе работает всего 2 человека, фильтр не показывает «среднюю зарплату отдела», раскрывающую оклад коллеги! - [ ] Отдельно разведены добровольная текучесть (
Voluntary / Regrettable Turnover) и вынужденные сокращения / истечение срочных сезонных договоров. - [ ] Файл
.pbix / .xlsxс первичным ФОТ не пересылается открытым вложением в мессенджерах и почте — доступ выдаётся строго по ролевой модели (Row-Level Security).
Частые вопросы
Как посчитать реальную стоимость одного увольнения (Cost of Turnover) в рублях для защиты бюджета удержания перед финансовым директором?
Сложите прямые и косвенные статьи по конкретной должности на ноутбуке в финансовой модели: Прямые затраты на подбор (доля ФОТ рекрутеров + работные сайты + медосмотр + спецодежда) + Затраты на ввод и обучение (часы наставника по его часовой ставке) + Потеря выработки открытой вакансии за дни простоя (Time-to-Fill) и пониженная продуктивность новичка в первые 60 дней. Даже для линейного комплектовщика склада или бариста эта сумма обычно составляет 3–5 месячных окладов, а для ведущего инженера — 9–15 окладов!