Оптимизация времени напоминаний
Две ситуации
Служба доставки воды
Перед нами офис-менеджер. Вчерашняя студентка, чьи разнообразные обязанности пополнились заказом воды для пары офисных кулеров. Вода заканчивается примерно раз в 2 недели и она частенько забывает заказать новые бутыли, пока ей не напомнят на еженедельном совещании утром в понедельник.
Барбершоп
Представьте себе молодого человека, который приходит к своему барберу примерно раз в 4 недели. Самый удобный день для стрижки в его расписании это воскресенье, ровно между спортзалом и тем, как он выберется куда-то со своей девушкой.
Что произойдет, если он забудет, что в среду нужно записаться на стрижку? Скорее всего, записи на удобное время не будет и он будет вынужден пропустить неделю и прийти в следующее воскресенье.
Пример с барбершопом
Прикинем потери
Для барбершопа. Частота: 3,5 недели, средний чек: 2800р., 20% случаев пропуска даты визита, 200 клиентов:

Будем считать, что в первом приближении это примерно 370 тыс. рублей в год. Что при рентабельности в 50% может быть равнозначно месяцу аренды небольшого помещения.
Типичные напоминания
Зачастую, компании решают такие проблемы довольно хаотичным образом, спохватившись, когда клиент по тем или иным причинам уже "сорвался" и дергать за рукав уже поздно.
Как бы сделать "чуть-чуть лучше" ?
Нам нужен подход, который:
- Учитывает обычный день посещения каждого конкретного клиента
- Учитывает частоту посещений конкретного человека, но больший вес придает последним данным (когда привычка была сформирована)
- Не будет слишком зависеть от случайных "сбоев" - отпуск, болезнь итд.
Так когда же напомнить:
За N-дней (зависит от горизонта заполнения записи) до последнего привычного дня недели перед прогнозируемой датой.

ОК, сделаем
Нам нужны уникальные ID и даты посещений. Я обогатил данные почтами и телефонами для большей схожести с реальными.

Лист: Входные значения
Отсортируем таблицу по ID и датам, найдем среднее время между визитами и самый популярный день

Лист: Обработка и сортировка
Применим метод экспоненциального сглаживания. Он позволит игнорировать выбросы данных и придать больший вес последним датам визита.
Формула:
St = α * Yt+(1-α) * St-1
St - сглаженное значение времени ( t )
Yt - значение в момент ( t )
St-1 - сглаженное значение в предыдущей точке
α - коэффициент сглаживания от 0 до 1

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

Лист: Выходные значение
Получим прогнозные даты, скорректированные к привычному дню недели

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

Лист: Напомнить сегодня
Как использовать
- Скопировать таблицу по ссылке ниже к себе (файл - создать копию)
- Внести данные на лист Входные значения
- Настроить коэффициент сглаживания (используя подсказки)
- Настроить шаг дней до напоминания на листе Напомнить сегодня
- Рассылать напоминания тем способом, который принят в компании, без спама и навязчивости, только тогда, когда это нужно.
Как улучшить
Один и тот же клиент может пользоваться разными услугами. К примеру, для салона красоты это может быть стрижка, депиляция, маникюр и тп. Вы можете добавить к ID тег услуги, получиться "ID7492-lack" и "ID7492-dep", тогда модель данных будет считать услуги для одного клиента независимо друг от друга. Останется только не перегрузить клиента входящими коммуникациями.
Забрать шаблон
Забрать шаблон расчета в google sheets
INFO
Датасет с клиентскими данными в шаблоне сгенерирован с использованием ИИ на основе реальных данных. Все совпадения с реальными адресами, именами или телефонами случайны.
