Часть 1 - Ночной тариф на ЭЗС: A/B-тест от гипотезы до денег

📌 О серии

Это первая из трёх статей про A/B-тест ночной скидки в одной московской сети электрозарядных станций для электроавто.

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

Мы попытались отразить всю последовательность развития проекта: от сырых логов IoT-контроллеров до финальных согласований бюджетов с заказчиком.

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

Часть 1. «Зачем и почему»

Постановка задачи, экономика решения, эластичность, поведенческие гипотезы и предрегистрация.

Вы здесь.

Часть 2. «Что под капотом»

Данные, ETL, ML-кластеризация станций, matched-pair дизайн, MDE и статистическая мощность, guardrail-метрики.

Часть 3. «Результаты»

Difference-in-Differences, результаты, деньги, проверки на робастность и разбор граблей.

Для кого эта серия статей

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

Публикационная оговорка о данных

Все числовые показатели агрегированы и анонимизированы. Точные адреса станций, идентификаторы оборудования, персональные данные водителей и конфиденциальные коммерческие условия не раскрываются согласно NDA. Тарифы сторонних операторов, если они упоминаются, приведены как отраслевой контекст и требуют сверки с действующими офертами на дату чтения.

1. Суточная загрузка ЭЗС: вечерний пик и ночной простой

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

Вечером, с 17:00 до 19:00, станция упирается не в выручку, а в физику. Мы считали занятость коннекторов (коннектор, он же разъём): долю времени, когда коннектор занят автомобилем. В эти два часа она регулярно переваливала за 80%, то есть свободного коннектора на площадке почти никогда не было.

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

📌 Если вы не каждый день бываете на ЭЗС:

Род тока

AC-станции (Mode 3 по МЭК 61851 [1]) обычно называют медленными: мощность порядка 7-22 кВт, зарядка идёт часами, машину можно подключить на всю ночь.

DC-станции (Mode 4) быстрые: от 50 кВт и выше, до 80% заряда доходят за 20-40 минут, если позволяет батарея автомобиля.

Локация

Транзитные станции стоят на трассах и выездах.

Станции притяжения у торговых центров, офисов и АЗС.

Станции в жилых массивах во дворах, на внутриквартальных парковках и у новых ЖК.

Комбинация даёт разные задачи. Транзитная DC-станция ночью почти пуста: маршрутов нет, и скидке там нечего сдвигать.

Дворовая AC-станция вечером может быть занята полностью, но это чаще не очередь, а ночёвка: проблема смещается с «негде зарядиться» на «зарядился, а место не освободил».

DC-станция в жилом массиве редкий случай, где одновременно есть вечерняя очередь, короткая сессия, простой после зарядки и ненулевой ночной спрос.

В этой серии речь именно о DC-станциях в жилых массивах.

Они дают ту механику, которую мы разбираем дальше, и на них ставился эксперимент. Дворовые AC-станции мы не трогали: у них другая проблема и другой дизайн тарифа.

📌 Дальше «быстрая ЭЗС» означает DC-станцию, Mode 4.

Матрица типов станций для медленных AC-зарядок
Матрица типов станций для медленных AC-зарядок
Матрица типов станций для быстрых DC-станций
Матрица типов станций для быстрых DC-станций

Слой 1. Мощность делится между коннекторами

У быстрой ЭЗС с динамическим распределением мощности, а именно такие работают в нашей сети, один силовой шкаф обслуживает два коннектора. Пока машина одна, она забирает всю доступную мощность станции в пределах, которые разрешают её система управления батареей, температура аккумулятора, текущий уровень заряда, кабель и ограничения самой станции.

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

Речь о станциях с активным распределением мощности (power sharing). На станциях без него второй коннектор может блокироваться на время первой сессии: мощность не делится, но и второй водитель не заряжается, поэтому очередь растягивается иначе, по времени, а не по мощности. Вывод о вечерней перегрузке от этого не меняется, меняется только её механизм.

Слой 2. Батарея принимает мощность неравномерно

После 80% заряда зарядная кривая падает, и последние проценты машина добирает медленно. Зимой добавляется холодный аккумулятор: пока он не прогрет, автомобиль сам ограничивает приём, и в московские морозы это заметно.

Слой 3. Простой после зарядки

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

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

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

Это согласуется с теорией массового обслуживания [2]: двухпостовую станцию естественно описывать как двухканальную систему с ограничением по времени ожидания. При вечерней интенсивности потока время ожидания растёт нелинейно, а часть водителей уходит, не дождавшись.

📌 Подробнее о том, как мы это измеряли

Формальной очереди на большинстве российских публичных ЭЗС нет. Работает принцип «кто первый подъехал»: водитель видит занятые коннекторы и либо ждёт в машине, либо уезжает. В логах станции эти два состояния различимы только косвенно: по отсутствию новой сессии, по повторным визитам в тот же вечер и, если приложение фиксирует подъезд, по интервалу между приездом и отъездом без сессии.

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

Ночью тишина. Доля ночных сессий в сети составляла 5,3%, при том что окно с 22:00 до 06:00 занимает 33% суток. То есть на восьмичасовое ночное окно приходилась лишь примерно одна двадцатая всех сессий сети.

Сразу оговорим границу: 22:00-06:00 это операционное определение ночи, принятое в этой сети, а не отраслевой стандарт. У других российских операторов окна другие, встречаются 23:00-08:00 и 22:00-08:00. Разница не косметическая: сдвиньте границу на час, и часть сессий переедет из категории в категорию. Поэтому во всех наших расчётах мы зафиксировали временное окно заранее.

📌 Сразу определим долю ночных сессий

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

Для DC это означает не ночёвку на коннекторе, а решение приехать на получасовую сессию в другой час. Эксперимент мы ставили именно на таких станциях, и у расчётной станции базовая ночная доля составляла около 11%. Поэтому дальше во всех расчётах эффекта появляется 11%, а не 5,3%.

При этом ночью условия для зарядки объективно лучше, чем днём.

  • Закупочная стоимость электроэнергии для станции в ночные часы, как правило, ниже. Но это не то же самое, что скидка в сервисном тарифе для водителя: разницу между этими уровнями цены мы разбираем в разделе 3.
  • Мощность не делится: машина на площадке одна и забирает всё, что станция может отдать. Та же зарядка проходит быстрее, чем в 18:30.
  • Силовая электроника работает в более мягком тепловом режиме, а значит стабильнее держит паспортную мощность.

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

На суточном профиле видно и широкое дневное плато с 13:00 до 19:00, и острую фазу внутри него. Плато это просто высокий спрос, с ним всё в порядке. Проблема начинается на последних двух часах, когда свободных коннекторов не остаётся вовсе. Именно их мы дальше называем вечерним пиком и именно их собирались разгружать.

Для Москвы это усреднённая картина. У бизнес-локаций обеденный максимум может смещаться к 12:00-14:00, у жилых массивов вечерний пик может сдвигаться к 18:00-20:00. На станциях нашего эксперимента самым загруженным по логам оставалось окно 17:00-19:00, поэтому именно его мы и зафиксировали как вечерний пик. Во второй части мы разделяем станции по кластерам именно поэтому: чтобы не приписывать одной кривой разные локации и разные сценарии использования.

Суточный профиль загрузки сети
Суточный профиль загрузки сети

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

2. Почему нельзя просто поставить больше станций

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

Мы посчитали и отказались. Причин три, по убыванию значимости.

Деньги

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

Сроки

Технологическое присоединение к сетям это процедура, где счёт идёт на месяцы, а иногда на год. Пока вы получите увеличение выделенной мощности, пик успеет переехать в другой район.

Физика сети

В спальном районе вечером у распределительной подстанции свой пик, и добавить туда ещё 150 кВт зарядной мощности в 19:00 не всегда технически возможно.

Вывод: у нас проблема не с количеством мощности, а с её распределением во времени.

А как решают схожие проблемы в других доменах? Авиакомпании десятилетиями продают одно и то же кресло по десяти разным ценам. Отели живут сезонными коэффициентами. Каршеринг и такси используют повышающий множитель в час пик. Энергетика вообще придумала многотарифный учёт задолго до появления слова «дата-сайентист»: ночной тариф в квартире у многих читателей стоит прямо сейчас.

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

3. Что мы на самом деле хотим сдвинуть

Задача

Выровнять загрузку коннекторов в течение суток: перенести часть спроса из перегруженного вечернего окна (17:00-19:00) в незагруженное ночное (22:00-06:00), сохранив приемлемый суммарный объём сессий и маржинальный доход.

Главное слово здесь «выровнять». Мы не боролись с очередью как с явлением и не пытались ускорить зарядку. Мы хотели, чтобы одна и та же площадка меньше времени стояла в состоянии «оба коннектора заняты, свободных нет» и меньше времени в состоянии «не занят ни один».

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

Обратите внимание на три вещи в этой формулировке.

Во-первых, «перераспределить», а не «увеличить». Мы изначально закладывались на то, что основной механизм это временнóй сдвиг, а не создание нового спроса. Электромобиль потребляет столько, сколько он проехал, и скидка не заставит человека наездить лишние сто километров. Забегая вперёд, мы ошиблись в приятную сторону: часть эффекта оказалась именно новым спросом. Об этом в третьей части.

Во-вторых, «не потеряв суммарный объём». Это уже наполовину guardrail-метрика (защитная метрика). Если ночью прибавилось сто сессий, а днём столько же убыло, мы просто раздали скидку тем, кто и так бы приехал. Забегая вперёд: день действительно просел, на 4,4% при пороге в 10%.

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

Здесь нужно остановиться и развести уровни цены, иначе дальше начнётся путаница, в которой тонет половина подобных обсуждений.

  • Цена электроэнергии для юрлица: стоимость киловатт-часа на рынке или по договору с гарантирующим поставщиком
  • Тариф станции на электроэнергию: цена, по которой ЭЗС покупает энергию в рамках своего техприсоединения и учёта; бывает одноставочной, двухзонной и иной
  • Сервисный тариф для водителя: цена зарядки, которую пользователь видит в приложении: электроэнергия плюс сервисная надбавка, амортизация, аренда, эквайринг и маржа оператора
  • Скидка: изменение только сервисного тарифа для водителя, а не автоматическое изменение закупочной цены энергии
  • Маржинальный доход: разница между сервисным тарифом и переменными затратами на сессию

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

Что мы считали переменными затратами

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

И теперь неприятная арифметика, которую стоит просчитать до эксперимента, а не после.

Скидку мы будем внедрять только ночью, поэтому дальше речь идёт о ночных сессиях. Рабочее значение скидки, с которым мы шли на защиту дизайна, составляло 20%. Откуда взялась эта цифра, подробно разберём в разделе 8, а здесь проверим, выдерживает ли её экономика. Обозначим через c долю переменных затрат в цене до скидки, а через V множитель объёма ночных сессий (V = 1,37 означает рост на 37%). После скидки 20% от цены остаётся 0,8, и маржинальный доход ночного сегмента не упадёт, если:

V · (0,8 − c) ≥ 1 − c

С - это доля переменных затрат в цене до скидки, а V рост объёма

При росте объёма V = 1,37, который показал эксперимент (расчёт в Части 3), это даёт c ≤ 25,9%. Наши 25% проходят с запасом меньше процентного пункта.

Часть 1 - Ночной тариф на ЭЗС: A/B-тест от гипотезы до денег

Вывод, который мы проговорили на защите дизайна открытым текстом: вся маржинальная история держится на оценке переменных затрат и ломается уже при 30%.

Если бы структура себестоимости в сети была хуже, тот же самый прирост объёма в 37% означал бы не нейтральную маржу, а её падение. Рост ночной выручки сам по себе не является доказательством того, что эксперимент окупился.

Порог 25,9% и есть вся прочность вывода об экономике. Наша оценка затрат в 25% проходит с запасом меньше процентного пункта, и при 30% та же скидка уже съедает маржу.
Порог 25,9% и есть вся прочность вывода об экономике. Наша оценка затрат в 25% проходит с запасом меньше процентного пункта, и при 30% та же скидка уже съедает маржу.

Основной метрикой перераспределения спроса мы выбрали долю ночных сессий. Занятость коннекторов зависит не только от числа подключений, но и от продолжительности зарядки, а на неё влияют температура, модель автомобиля и целевой уровень заряда. Доля ночных сессий считается по фактам подключения, поэтому её рост проще интерпретировать однозначно: часть сессий начинается в другое время суток.

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

Из постановки задачи вытекает вопрос, вокруг которого дальше крутится вся статья:

Насколько пользователи готовы менять привычки ради скидки?

Ответить на него помогает эластичность спроса, с неё и начнём.

4. Ценовая эластичность спроса: как скидка влияет на объём и выручку

Кривая спроса это зависимость объёма потребления от цены.

Мера чувствительности называется эластичностью спроса по цене:

Эластичность спроса по цене

E_d = (ΔQ / Q) ÷ (ΔP / P),

где ΔQ / Q это относительное изменение объёма (сессий, минут зарядки, киловатт-часов),

ΔP / P относительное изменение цены.

Эластичность почти всегда отрицательна: цена вверх, объём вниз. Поэтому на практике смотрят на модуль.

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

Как модуль эластичности определяет, что небольшая скидка сделает с выручкой
Как модуль эластичности определяет, что небольшая скидка сделает с выручкой

Возьмём то же рабочее значение скидки, что и в разделе 3: 20%, то есть цена 1,00 становится 0,80. Окончательно размер скидки мы обоснуем в разделе 8, а пока посмотрим, что она делает с выручкой при разной эластичности.

По формуле эластичности объём вырастет на |E| × 20%. Выручка после скидки равна новому объёму, умноженному на новую цену.

  • E = −0,5: объём +10%, выручка 1,10 × 0,80 = 0,88, то есть −12%.
  • E = −1,0: объём +20%, выручка 1,20 × 0,80 = 0,96, то есть −4%.
  • E = −1,25: объём +25%, выручка 1,25 × 0,80 = 1,00, то есть 0%.
  • E = −1,5: объём +30%, выручка 1,30 × 0,80 = 1,04, то есть +4%.
  • E = −2,0: объём +40%, выручка 1,40 × 0,80 = 1,12, то есть +12%.

Почему при E = −1,0 выручка всё-таки падает?

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

Эластичность мы знаем только в одной точке, при текущей цене. Поэтому в расчёте выше использовано линейное приближение: объём растёт пропорционально скидке, ровно на |E| × d. На прямой кривой спроса чувствительность к цене ослабевает по мере удешевления: чем ниже цена, тем меньше остаётся сессий, которые ещё можно сдвинуть на ночь. Первые проценты скидки приносят больше прироста, чем последние, и при E = −1,0 прирост объёма к концу шага уже не покрывает потерю в цене.

Отсюда точное условие для скидки d любого размера. Выручка не падает, если (1 + |E| · d) · (1 − d) ≥ 1, то есть при |E| ≥ 1 / (1 − d). Для d = 20% порог равен 1 / 0,8 = 1,25: это строка E = −1,25 в расчёте выше. При малой скидке d близко к нулю, и порог возвращается к знакомой единице из таблицы.

Почему мы считали именно так. Есть вторая распространённая модель, с постоянной эластичностью: в ней |E| одинаков при любой цене. При E = −1,5 и скидке 20% она даёт рост объёма на 40% и выручки на 12%, а линейная только на 30% и 4%. Главный недостаток модели с постоянной эластичностью в другом: при |E| > 1 она обещает, что выручка растёт при любой глубине скидки, без предела. В жизни так не бывает: ночной спрос ограничен числом водителей, которым вообще есть смысл заряжаться в это время. Линейная модель даёт конечный оптимум, к нему мы вернёмся в разделе 8, и скорее занижает эффект, чем завышает его. Для решения о бюджете ошибка в эту сторону безопаснее.

Обе модели считаются базовыми функциями отклика на цену в ценовой аналитике, их сильные стороны и ограничения подробно разобраны у Robert Phillips в «Pricing and Revenue Optimization» (Stanford University Press, 2005) [3]. Расчёт здесь нужен, чтобы выбрать параметры теста. Реальную эластичность покажет только эксперимент.

С маржинальным доходом порог ещё выше: каждая дополнительная зарядка несёт переменные затраты c.

Условие из раздела 3: V · (0,8 − c) ≥ 1 − c, где V показывает, во сколько раз вырос объём. При наших c = 25% получаем V ≥ 0,75 / 0,55 ≈ 1,36, то есть объём должен вырасти минимум на 36%. В том же линейном приближении это |E| ≥ 0,36 / 0,2 ≈ 1,8. Итого у скидки 20% два порога: 1,25 для выручки и 1,8 для маржи.

Забегая вперёд: фактическая эластичность оказалась около −1,8, почти ровно на втором пороге, поэтому маржа в эксперименте сохранилась с минимальным запасом.

Одна и та же скидка в 20% может снизить выручку на 12% или поднять её на 12%. Какой из вариантов случится, определяет одно число, эластичность, а его мы заранее не знаем. Поэтому эластичность нельзя угадать, её нужно измерить.

Часть 1 - Ночной тариф на ЭЗС: A/B-тест от гипотезы до денег

5. Ловушка, в которую попадают почти все: две разные эластичности

Именно здесь начинается та часть теории, которая определила судьбу всего проекта. На защите дизайна коллега задал один простой вопрос:

«А какую именно эластичность вы собираетесь использовать?»

В отраслевых обзорах регулярно встречается утверждение, что ценовая эластичность спроса на зарядку электромобилей лежит в диапазоне примерно от −0,2 до −0,4. Число выглядит убедительно и подкреплено ссылками. Если взять его без уточнений и подставить в расчёт, проект закрывается ещё до старта. Проблема в том, что за одним словом «эластичность» прячутся два принципиально разных механизма.

Собственная ценовая эластичность спроса

Отвечает на вопрос: что произойдёт с общим объёмом потребления, если изменить цену зарядки во всей сети?

Для зарядной инфраструктуры этот эффект невелик, и на то есть содержательная причина. Зарядка не является конечной потребностью человека. Это производный спрос: он возникает потому, что нужно совершить поездку. Работа, школа, магазин и дача определяют, сколько киловатт-часов уйдёт за месяц, несравнимо сильнее, чем изменение тарифа на несколько процентов.

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

Эластичность межвременного замещения (intertemporal substitution elasticity)

Наш эксперимент про другое. Вопрос звучит так: если ночь стала на 20% дешевле дня, какая доля пользователей перенесёт уже существующую зарядку на ночные часы?

Здесь не появляется новый спрос и не растёт общее потребление энергии. Меняется только время потребления. Для владельца электромобиля с домашней или дворовой AC-зарядкой издержка такого переноса часто близка к нулю: машина всё равно стоит до утра, а таймер отложенного старта есть и в машине, и в приложении. На DC-станции в жилом массиве перенос не бесплатен: водителю нужно приехать в другой час. Но станция находится рядом с домом, сессия короткая, и эта издержка может окупаться отсутствием вечерней очереди.

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

Обзор Faruqui и Sergici [4] (подробнее в разделе 6) показывает, что в полевых экспериментах с динамическими тарифами для домохозяйств эффект переноса нагрузки между пиковыми и непиковыми периодами обычно заметно сильнее эффекта изменения общего потребления, а в программах критического пика снижение пика достигает двузначных значений, особенно при наличии автоматики.

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

Почему это меняет весь дизайн

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

Ожидаемый размер эффекта. В наших проектных допущениях межвременное замещение даёт сигнал примерно впятеро сильнее, чем собственная эластичность: +3,3 п.п. против +0,7 п.п. Как получаются эти числа, покажем ниже и в разделе 6.

Целевая метрика. Нас интересует не суммарный отпуск энергии, а доля ночных сессий в структуре суток.

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

Почему разница оказалась критичной

Посчитаем, что было бы, если бы мы взяли собственную эластичность.

При E = −0,3 и скидке 20% ожидаемый прирост объёма составил бы 6%. Для расчётной станции с базовой ночной долей около 11% (напомним: это станция спального района, а не среднее по сети) это означает рост до 11,7%, то есть меньше одного процентного пункта. Порог чувствительности нашего эксперимента, который мы посчитаем во второй части, оказался около 3 процентных пунктов.

Вывод был бы однозначным: эффект заведомо ниже разрешающей способности теста, эксперимент бессмысленно запускать. Мы бы закрыли направление на этапе планирования, и формально расчёт был бы безупречен. Ошибка сидела бы не в арифметике, а в экономической модели.

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

Обратная сторона: перетекание спроса между станциями

Есть и обратная сторона межвременного замещения. Если тестовая и контрольная станции стоят слишком близко, часть эффекта окажется простым переездом водителей с одной точки на другую ради тарифа. Это spillover (перетекание эффекта), и он нарушает базовое допущение причинного анализа, известное как SUTVA, Stable Unit Treatment Value Assumption [5]: результат одного объекта не должен зависеть от того, какое воздействие получил соседний. Контрольная группа перестаёт быть независимой, а оценка эффекта смещается.

Лечится это только на этапе дизайна, поправками постфактум такое не чинится. Поэтому ещё до запуска мы ввели пространственное ограничение при подборе станций и формировали пары сопоставимых объектов. Как именно, подробно во второй части.

Эластичность спроса и эластичность межвременного замещения
Эластичность спроса и эластичность межвременного замещения

6. Откуда мы взяли E = −1,5

Буквой E (от elasticity) принято обозначать эластичность: на сколько процентов изменится объём, если цена изменится на один процент.

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

Зачем вообще определять эластичность межвременного замещения (E) до эксперимента? Ведь измерить её мы собирались как раз экспериментом.

E работает как вход в расчёт статистической мощности. Из него получается ожидаемый эффект, из ожидаемого эффекта требуемый объём выборки, из объёма выборки число станций и длительность теста. Поставьте на вход другое число, и на выходе окажется другой бюджет и другой срок. Не назвать E вовсе значит проектировать эксперимент вслепую: мы не будем знать, хватит ли нам данных, чтобы увидеть эффект, если он есть.

E = −1,5 это проектное допущение, а не измеренная эластичность.

Взять коэффициент из учебника и сделать вид, будто он описывает именно водителей электромобилей в Москве, было бы слишком наивно. Поэтому мы собрали оценку из четырёх источников и сознательно сдвинули её в консервативную сторону.

Источник 1. Полевые эксперименты с тарифами по времени использования. Программы Time-of-Use и Critical Peak Pricing изучаются с 1970-х годов. Обзор Ahmad Faruqui и Sanem Sergici «Household response to dynamic pricing of electricity: a survey of 15 experiments» (Journal of Regulatory Economics, 2010) [4] сводит воедино пятнадцать полевых экспериментов и даёт устойчивую картину: собственная эластичность потребления остаётся низкой, а вот перенос нагрузки между пиком и непиком заметен и кратно растёт, когда у потребителя есть автоматика или возможность отложить действие.

Для электромобиля такая возможность встроена в сценарий использования. Водителю необязательно начинать зарядку в момент подключения: он может подключить коннектор вечером, а сам процесс отложить на несколько часов. Именно поэтому эта литература для нас релевантнее, чем работы про реакцию «цена выросла, потребление упало».

Источник 2. Динамическое ценообразование в сервисах поездок. Работа Cohen, Hahn, Hall, Levitt и Metcalfe «Using Big Data to Estimate Consumer Surplus: The Case of Uber» (NBER Working Paper 22627, 2016) [6] даёт для сервиса в целом эластичность около −0,6 и подчёркивает сильную неоднородность: у гибкой части аудитории реакция существенно выше средней. Полезен здесь сам механизм: столкнувшись с изменением цены, человек не обязательно отказывается от услуги, он меняет момент потребления. Оговорок две. Там речь о сдвиге на десятки минут, у нас на несколько часов. И главное, у Cohen с соавторами измерена собственная ценовая эластичность спроса на поездки, а не межвременное замещение для зарядки. Поэтому работу мы используем как подтверждение механизма «смена времени вместо отказа от услуги», а не как источник числа −1,5.

Источник 3. Переменные парковочные тарифы. Оценка программы SFpark в работе Gregory Pierce и Donald Shoup «Getting the prices right» (Journal of the American Planning Association, 2013) [7] показала, что цена влияет не только на сам факт поездки, но и на выбор времени и места парковки. Для нас это ещё одно подтверждение, что пользователь не уходит с рынка, а меняет поведение внутри него. Прямой оценки переноса зарядки на несколько часов там нет, поэтому это подтверждение поведенческого механизма, а не количественный источник эластичности.

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

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

Чего в этом списке не хватает, и мы это признаём. Все четыре источника сильны в методологии и аналогиях, но ни один не покрывает EV-специфику напрямую. Для усиления внешней валидности в такой расчёт стоит добавлять хотя бы одну работу именно по управлению спросом зарядной инфраструктуры или по time-of-use тарифам для электромобилей. На момент проектирования у нас такой проверенной работы под рукой не оказалось, и мы компенсировали это консервативным сдвигом допущения и собственными историческими данными. Если вы повторяете этот путь, закройте пробел источником по своей предметной области: он дороже любой аналогии из смежной отрасли.

Почему в итоге −1,5

Ни один из четырёх источников не говорит: «эластичность замещения для зарядки электромобилей равна −1,5». Внешние работы подтверждают механизм, но числа не дают. Правдоподобный диапазон мы собрали по аналогиям и собственным историческим данным: примерно от −1,2 до −1,8, причём наши данные тянули к его верхней половине, то есть к значениям от −1,5 до −1,8. Мы взяли −1,5, нижнюю границу того, на что указывали собственные данные, а не оптимистичные −1,8.

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

📌 Важно проговорить

−1,5 это не результат нашего исследования и не то, что мы просим принять на веру. Это входной параметр расчёта мощности. Фактическую реакцию спроса мы оценили только после эксперимента, и именно там стало видно, насколько удачным было исходное предположение.

Что это допущение означало в цифрах

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

Ожидаемый прирост объёма

ΔQ / Q ≈ E · ΔP / P = (−1,5) · (−0,20) = +0,30

При эластичности −1,5 и скидке 20% объём растёт примерно на 30%

То есть около +30% к исходному объёму ночных сессий. На станции, которую мы взяли за расчётную, базовая ночная доля составляла около 11%, значит:

Перевод прироста в целевую метрику

11% × 1,30 = 14,3%

Базовая ночная доля 11%, после прироста 14,3%

Прирост составляет +3,3 процентных пункта.

Величина порядка +3,3 п.п. и стала нашим ориентиром при проектировании. Запомните её: во второй части мы будем сравнивать с ней порог чувствительности теста и обнаружим, что запас гораздо тоньше, чем кажется, а в третьей оценим, насколько консервативным оказалось допущение.

Здесь же стоит зафиксировать различие, на котором регулярно спотыкаются обсуждения результатов. +30% это относительный прирост, +3,3 п.п. это абсолютное изменение доли. Одно и то же событие, записанное в разных единицах: доля выросла с 11% до 14,3%. Бизнесу удобнее слышать первое, статистический тест работает со вторым, потому что сравнивает разность долей. Мы с самого начала договорились писать «п.п.» везде, где речь про абсолютную разницу, и рекомендуем то же самое всем, кто будет защищать похожие результаты.

7. Три способа измерить эластичность и почему мы выбрали самый неудобный

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

Наш вопрос был такой:

Что произойдёт со спросом, если мы сами снизим цену?

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

Способ первый: посмотреть в историю

Самый дешёвый. Берём прошлые данные, строим регрессию объёма на цену, добавляем погоду, день недели, сезон и тип локации.

Ломается всё об один факт: цену в прошлом назначали не случайно. Её поднимали там, где спрос и так высокий, и снижали там, где станция простаивала.

Получается замкнутый круг. Цена влияет на спрос, спрос влияет на цену, и в исторических данных обе связи перемешаны. Регрессия их не разделит. Коэффициент посчитается, причём с красивой значимостью, но он смещён, как правило в сторону нуля: в истории высокая цена совпадает с высоким спросом, и реакция на цену выглядит слабее, чем есть. В эконометрике это называется эндогенностью.

Разделить такие связи можно, но нужен внешний источник случайности: инструментальная переменная или естественный эксперимент [8], когда цена поменялась по причине, со спросом не связанной. У нас его не было.

Поэтому историю мы использовали, чтобы сформулировать гипотезу, и не использовали, чтобы её проверить.

Способ второй: обучить модель

Вариант технологичнее: градиентный бустинг предсказывает число сессий по характеристикам станции, контексту и цене. Нелинейности поймает, взаимодействия учтёт, метрика качества будет отличной.

И здесь легко перепутать две задачи, которые звучат похоже:

  • Прогноз. Сколько сессий будет завтра?
  • Причинный эффект. Сколько сессий добавится именно из-за того, что мы снизили цену?

Модель уверенно отвечает на первый вопрос и не отвечает на второй. Причина та же, что и в первом способе: она училась на мире, где цена назначалась неслучайно. Подставить в обученную модель цену на 20% ниже значит узнать, что выдаст модель, а не что сделает рынок.

Есть два подхода, которые обходят часть этих проблем. Мы их знали и сознательно не стали применять.

  • Causal ML. Двойное машинное обучение (double machine learning) [9] и родственные методы оценивают причинный эффект с помощью гибких моделей. Но работают они при одном сильном допущении: все факторы, которые одновременно влияли и на цену, и на спрос, должны быть в данных. У нас цену меняли в ответ на загрузку, которую видели на месте, и далеко не все причины этих решений попали в таблицы. Метод выдал бы аккуратное число, опирающееся на непроверяемое допущение. Для первого эксперимента в серии мы предпочли метод, которому такое допущение не нужно.
  • Объяснение модели через SHAP. Значения SHAP [10] раскладывают конкретный прогноз на слагаемые: столько добавила цена, столько погода, столько день недели. Инструмент хороший, но он показывает, как рассуждает модель, а не как поведёт себя рынок. Если модель училась на смещённых данных, SHAP точно воспроизведёт то же смещение. К тому же защищать таким разложением тарифное решение перед финансовым директором тяжелее, чем разность двух средних с доверительным интервалом.

Способ третий: поставить эксперимент

Часть станций случайным образом получает новый тариф, остальные работают по старому.

Ключевое отличие в одном: разница между группами возникает не из-за нашего отбора, а из-за жеребьёвки. Поэтому группы в среднем сопоставимы по всем факторам сразу: и по тем, что мы измерили, и по тем, о которых не подозреваем. Открылся торговый центр по соседству, изменились маршруты автобусов, ударили морозы: всё это бьёт по обеим группам одинаково и вычитается само.

Формально нас интересует разница между двумя исходами одной и той же станции: что с ней стало со скидкой и что стало бы без неё. Этот язык потенциальных исходов мы взяли у Donald Rubin («Estimating causal effects of treatments in randomized and nonrandomized studies», Journal of Educational Psychology, 1974) [11] и держали как рамку: он заставляет на каждом шаге спрашивать, с чем именно сравнивается результат.

Средний причинный эффект

ATE = E[Y(1)] − E[Y(0)]

ATE (average treatment effect) это средний причинный эффект нового тарифа;

Y(1) это исход станции при новом тарифе, в нашем случае её ночная доля сессий;

Y(0) это исход той же станции при старом тарифе;

E[·] это математическое ожидание, то есть среднее по всем станциям. Не путать с эластичностью E из раздела 4.

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

Без формул: нас интересует не разница между двумя группами сама по себе, а разница между тем, что произошло после изменения цены, и тем, что произошло бы без него. Именно её в третьей части считает метод разности разностей [8].

Три способа оценить эластичность
Три способа оценить эластичность

Почему мы рандомизировали станции, а не пользователей

В продуктовом A/B-тесте единицей рандомизации служит пользователь. У нас так нельзя.

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

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

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

Тысяча сессий на одной станции это не тысяча независимых наблюдений.

Готовый аппарат для этой ситуации нашёлся в соседней отрасли, и довольно неожиданной: в клинических исследованиях. Медики столкнулись с той же задачей гораздо раньше нас. Когда новую программу профилактики внедряют не пациенту, а целой больнице или школе, рандомизировать приходится учреждения, а считать результат по людям внутри них. Пациенты одной клиники связаны общим персоналом, оборудованием и протоколом ровно так же, как наши сессии связаны одной станцией.

Канонический разбор этого дизайна у Allan Donner и Neil Klar («Design and Analysis of Cluster Randomization Trials in Health Research», Arnold, 2000) [12]. Оттуда во вторую часть пришла формула дизайн-эффекта: мы её не меняли, только подставили свои размер кластера и внутриклассовую корреляцию вместо больничных.

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

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

Итоговый выбор и его цена

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

Организационную часть дизайна мы подсмотрели у Ron Kohavi, Diane Tang и Ya Xu в «Trustworthy Online Controlled Experiments» (Cambridge University Press, 2020) [13]: оттуда взяты guardrail-метрики с заранее согласованными порогами, правило считать мощность до запуска и проверка расхождения долей трафика между группами. Адаптировать пришлось почти всё, потому что книга написана про веб, где рандомизируют пользователей, а не физические объекты.

Метод выбран. Но эксперимент невозможно запустить, пока не назван его главный параметр: насколько именно снижать цену.

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

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

8. Почему выбрали скидку 20%: заметность, экономика и ценность эксперимента

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

Аргумент первый: заметность

Скидка должна восприниматься не как изменение цифры в приложении, а как повод поменять сценарий вечера. Водитель, который обычно подключает машину сразу по возвращении домой, должен увидеть понятный выбор: зарядиться сейчас в очереди или поставить машину после 22:00 и заплатить меньше.

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

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

Различие принципиальное. Мы не доказывали, что именно двадцать процентов заставляют человека менять поведение. Мы выбирали величину, при которой у эксперимента есть разумный шанс такой эффект увидеть.

Аргумент второй: экономика

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

При допущении E = −1,5 объём растёт как Q(d) ≈ Q₀·(1 + 1,5·d), а цена падает как P(d) = P₀·(1 − d). Перемножаем и получаем индекс выручки относительно исходного уровня:

Индекс выручки как функция глубины скидки

R(d) ≈ (1 + 1,5d) · (1 − d) = 1 + 0,5d − 1,5d²

d это глубина скидки в долях единицы

Важная оговорка к этой формуле: R(d) это индекс выручки, а не маржи. Для оценки маржинального эффекта нужна отдельная формула с переменными затратами из раздела 3, и она даёт заметно менее радужную картину, потому что скидка бьёт по марже сильнее, чем по выручке.

Сама формула R(d) не модель будущей кривой спроса, а первое приближение, которого достаточно, чтобы очертить разумный диапазон для первого теста. Максимум квадратичной функции находится там, где производная обращается в ноль. В общем виде для эластичности E оптимум равен d* = (|E| − 1) / (2·|E|), и при E = −1,5 это даёт:

Точка максимума выручки

d* = 1/6 ≈ 16,7%

Оптимум при допущении об эластичности −1,5

И здесь нужна поправка к формулировке, которая часто звучит в подобных статьях. Экономический оптимум при нашем допущении лежит не на двадцати процентах, а примерно на 16,7%. Значит, называть −20% математически оптимальной скидкой было бы неверно. Мы выбрали её по другой причине, и таблица ниже показывает, почему это почти ничего не стоило:

Индекс выручки R(d) при E = −1,5
Индекс выручки R(d) при E = −1,5

Переход от расчётного оптимума 16,7% к 20% почти не меняет ожидаемую выручку в модели (индекс 1,040 против 1,042), зато дают заметно более сильный ценовой стимул. Мы сознательно обменяли небольшую часть теоретической эффективности на более высокую вероятность увидеть сигнал.

Следовательно, скидка 20% это практический выбор вблизи расчётного максимума выручки, полученного при допущении E = −1,5, а не доказанный оптимум для реального спроса.

Аргумент третий: информационная ценность

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

Логика тут простая. Если −20% даст убедительный эффект, следующий тест можно провести ближе к расчётному оптимуму и проверить, насколько глубину удаётся уменьшить без потери результата. Если эффект окажется слабым, останется пространство проверить более сильный стимул. Начинать сразу с предполагаемого оптимума значит получить меньше информации о форме реакции спроса и потом не знать, в какую сторону двигаться.

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

Расчётный индекс выручки при разных размерах скидки. Максимум модели около 16,7% получен при проектном допущении E = −1,5 и не является измеренным оптимумом реального спроса
Расчётный индекс выручки при разных размерах скидки. Максимум модели около 16,7% получен при проектном допущении E = −1,5 и не является измеренным оптимумом реального спроса

Оговорка, без которой расчёт вводил бы в заблуждение

Всё, что посчитано выше, держится на одном предположении: E = −1,5. Поменяйте его, и оптимум уедет.

Поэтому 16,7% это не истинная точка максимума, а ответ модели на заданный ей вопрос. Мы получили не факт о рынке, а ориентир, вытекающий из нашего же допущения.

Именно по этой причине мы не стали подменять эксперимент расчётом. Модель сделала свою работу: очертила разумный диапазон, из которого можно выбирать. Что происходит внутри этого диапазона с реальным поведением водителей, покажет эксперимент.

Эта разница между посчитанным и измеренным дальше проходит через всю серию:

  • Часть 2. Выбранные −20% превращаются в ожидаемый эффект +3,3 п.п., и от него считается вся мощность теста.
  • Часть 3. Выясняется, что фактическая эластичность ближе к −1,8, то есть спрос оказался чувствительнее нашего допущения.

9. Почему кривая спроса не гладкая линия из учебника

В учебнике всё просто: цена вниз, спрос вверх. В реальной инфраструктуре между ценой и поведением пользователя стоит ещё несколько слоёв.

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

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

Насыщение. Рост не может продолжаться бесконечно: есть ёмкость батареи, длительность стоянки, мощность станции и число автомобилей в районе. При достаточно глубокой скидке снижение цены перестаёт давать пропорциональный прирост. На нашей первой точке до этого предела, по нашим оценкам, далеко.

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

Эластичность сети как смесь сегментов

Eсети = Σ wᵢ · Eᵢ

Eᵢ это эластичность сегмента i,

wᵢ его доля в спросе

Отсюда практический вывод: одним экспериментом кривую спроса не построить. Наш тест это одна точка на ней. Важная, потому что получена контролируемым экспериментом, но одна.

10. Влияние изменения стоимости на поведение пользователя

Экономическая модель предполагает, что человек сравнивает варианты и выбирает выгодный. Реальный водитель чаще действует проще: приехал, подключил, ушёл. Поэтому снижение цены должно не просто существовать в тарифной таблице, оно должно быть способно перебить автоматическое решение.

Якорение. Цена воспринимается относительно точки отсчёта, а не абсолютно [14]. Поэтому ночной тариф важно было показывать не изолированно, а рядом с обычным. Мы не просто меняли цифру, а проверяли, что разницу между дневным и ночным периодом пользователь видит в интерфейсе.

Неприятие потерь. Люди сильнее реагируют на воспринимаемые потери, чем на сопоставимые выигрыши [15]. Отсюда любопытная гипотеза: дневная наценка в 20% и ночная скидка в 20% создают сопоставимый ценовой разрыв, но могут восприниматься по-разному. Проверять это в первом эксперименте мы сознательно не стали, наценка несёт больший репутационный риск. Сначала нужно было ответить на простой вопрос: работает ли ценовой стимул как таковой.

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

Информирование. Здесь мы приняли методологически важное решение: в эксперименте не использовались push-уведомления и отдельная кампания по продвижению скидки. Информация о тарифе была доступна в приложении и на станции, не более.

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

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

11. Что мы проверили в исторических данных до старта

До согласования эксперимента мы провели три предварительных анализа.

Есть ли ночной спрос в принципе

Распределение сессий по часам показало, что ночные зарядки не нулевые и имеют устойчивый профиль: локальный максимум приходится примерно на 22 и 23 часа, дальше глубокий провал в интервале с двух до пяти утра.

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

Одинаковы ли станции

Разброс ночной доли между станциями оказался очень большим, от почти нулевых значений до пятнадцати процентов с лишним, и различия не выглядели случайными: тип локации влиял существенно. Транзитные станции давали почти нулевую ночную долю: ночью нет маршрутов, и скидке там нечего сдвигать. У станций притяжения (ТЦ и БЦ) значения низкие однозначные, у станций в жилых массивах двузначные.

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

Кто чувствителен к цене

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

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

12. Предрегистрация: единый паспорт эксперимента

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

Такой документ стоит готовить перед любым тестом. Он помогает обеим сторонам:

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

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

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

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

Практика не наша: в академической среде она известна как предрегистрация исследования, и её аргументацию хорошо суммирует статья Brian Nosek и соавторов «The preregistration revolution» (PNAS, 2018) [16]. В индустриальных экспериментах она приживается медленнее, хотя цена ошибки здесь ровно такая же.

Что было зафиксировано

Первичная метрика. Доля ночных сессий станции в общем числе её сессий за сутки, где ночь это интервал с 22:00 до 06:00:

Первичная метрика

NightShareₛ = Nночь ÷ Nвсего

Nночь и Nвсего это число ночных и всех сессий станции s за операционные сутки

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

  • Валидная сессия это авторизованная попытка зарядки с фактическим отпуском энергии не менее согласованного порога, у нас 0,5 кВт·ч. Из анализа исключаются тестовые и инженерные прогоны, дубли после перезапуска контроллера, незакрытые сессии без показаний счётчика и сессии с нулевым отпуском.
  • Время старта это отметка события StartTransaction в протоколе OCPP [17] либо эквивалентного события начала учёта энергии в логах станции. Не время авторизации, не время подключения коннектора и не первое нажатие кнопки в приложении.
  • Ночная сессия это валидная сессия, время старта которой попадает в операционное окно 22:00-06:00.
  • Операционные сутки идут с 06:00 до 06:00 следующего дня, чтобы ночное окно не разрывалось между календарными днями.

Правило отнесения сессии. Ночной считается валидная сессия, время старта которой попало в окно 22:00-06:00. Тарификация привязана именно к этому событию, поэтому сессия, начатая в 21:55 и зарядившая 30 кВт·ч уже после 22:00, считается дневной.

Почему это правило нужно держать в голове при чтении результатов. Для DC-станции в жилом массиве сессия короткая, и старт почти совпадает с завершением: отнесли по старту или по пересечению, результат почти не изменится. Для AC-станции картина была бы другой: машина подключается вечером и заряжается всю ночь, но по правилу старта такая сессия остаётся вечерней. Это ещё одна причина, по которой AC-станции в эксперимент не входили: на них метрика «доля ночных сессий по старту» измеряет не то, что нас интересует. Фиксируем это заранее.

Проверка на ожидание у границы окна. Мы заранее заложили контроль аномальной концентрации стартов в интервалах 21:30-22:30 и 05:30-06:30. Он нужен, чтобы отделить реальный перенос спроса в ночь от эффекта «водитель не уехал, а дождался начала скидки». Без этой проверки оценка межвременного замещения завышается, а выглядит при этом совершенно нормально.

Гипотезы. Основная: ночная скидка в 20% увеличивает ночную долю в тестовой группе относительно контрольной. Нулевая: после учёта исходных различий изменение ночной доли в тесте не отличается от изменения в контроле, то есть Δтест − Δконтроль = 0.

Ожидаемый эффект. Около +3,3 п.п. при допущении E = −1,5 и базовой ночной доле около 11%. Это величина для расчёта мощности, а не утверждение о том, что такой результат обязан получиться.

Метод анализа. Difference-in-Differences, DiD (разность разностей) [8], с заранее зафиксированной спецификацией модели (подробнее о нём во второй части).

Параметры теста. Уровень значимости α = 0,05, тест двусторонний, целевая мощность 80%.

Статистика с поправкой на кластеризацию. Поскольку единица рандомизации это станция, а не сессия, стандартные ошибки считаются с поправкой на кластеризацию [18]. При ограниченном числе станций дополнительно запланированы permutation-тест (randomization inference) [5], проверка баланса групп до вмешательства и анализ параллельности трендов. Результаты всех трёх проверок в Части 3.

Длительность. 90 дней пре-периода и 90 дней тестового периода. Промежуточных решений об остановке по первичной метрике не предусмотрено.

Защитные метрики

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

Три жёстких основания для остановки, согласованные письменно до старта. Пороги по ходу эксперимента не пересматривались
Три жёстких основания для остановки, согласованные письменно до старта. Пороги по ходу эксперимента не пересматривались

Определения защитных метрик

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

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

Жёсткими основаниями для остановки были зафиксированы только дневная активность, success rate и paid rate. Маржинального hard stop в предрегистрации не было. Полная маржинальная экономика ночного сегмента оценивалась отдельно, уже по ходу и по итогам, и автоматическим стоп-фактором не являлась. Мы проговариваем это ограничение дизайна явно, чтобы не выдавать последующий финансовый анализ за заранее зарегистрированный guardrail. Задним числом это выглядит упущением: учитывая хрупкость маржинальной арифметики из раздела 3, порог по маржинальному доходу на ночную сессию стоило внести в план наравне с остальными тремя.

Паспорт эксперимента
Паспорт эксперимента

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

Что мы сознательно не превращаем в доказательство

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

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

Теперь самое неприятное. Уровень значимости 0,05 означает, что даже при полном отсутствии эффекта в среднем каждое двадцатое сравнение покажется значимым просто по случайности. На сотне срезов таких находок будет в среднем около пяти. Их можно красиво назвать инсайтами и унести на совещание, и ни одна из них не воспроизведётся.

Это известная проблема множественного тестирования, и для неё есть готовые поправки: от классической поправки Бонферрони до процедуры Benjamini и Hochberg (Journal of the Royal Statistical Society, Series B, 1995) [19].

Мы решили её проще, на уровне регламента. Два режима работы с данными, разделённые заранее:

Два режима работы с данными
Два режима работы с данными

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

13. Чек-лист: что должно быть готово до похода за бюджетом

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

1. Сформулирована задача, а не заранее выбранное решение. Не «сделать скидку», а «проверить, можно ли перераспределить часть спроса из пиковых часов в ночь».

2. Понятно, какую эластичность вы оцениваете. Эластичность общего спроса и эластичность межвременного замещения это разные величины. Если пользователь перенёс зарядку с 19:00 на 02:00, для общего спроса не произошло ничего.

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

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

5. Первичная метрика ровно одна. И заранее описано, как она считается, включая временные границы, пропуски и пограничные случаи. Чем больше свободы аналитик оставляет себе после старта, тем труднее потом отделить результат эксперимента от результата аналитического выбора.

6. Защитные метрики и пороги реакции согласованы заранее. Не обсуждены на встрече, а зафиксированы письменно.

7. Аналитический план датирован до старта. Буквально датирован. Это не бюрократия, а способ показать, что решение принято до знакомства с результатом.

8. Порог чувствительности рассчитан для реального дизайна, а не для идеального. MDE (minimum detectable effect, минимально детектируемый эффект) [13] это не «какой эффект мы хотели бы увидеть», а минимальный эффект, который данный эксперимент способен обнаружить при заданных значимости и мощности. Он зависит от объёма выборки, дисперсии метрики и структуры данных, поэтому рост числа сессий сам по себе не гарантирует пропорционального улучшения. Если единица рандомизации это станция, зависимость наблюдений внутри станции обязана войти в расчёт.

9. Оценена цена эксперимента. Не только разработка и аналитика, но и стоимость самого воздействия, то есть недополученная маржа за период скидки. Это цена информации, и сравнивать её нужно с ценностью решения, которое эксперимент позволит принять.

10. Заранее определено, что делать при каждом из трёх исходов. Эффект обнаружен, что масштабируем. Эффекта нет, что закрываем. Результат неопределённый, что меняем в дизайне. Последний сценарий встречается чаще, чем хотелось бы, и именно к нему бизнес обычно готов меньше всего.

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

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

14. Итог первой части: цепочка принятых решений

Свернём первую часть в одну цепочку.

Цепочка решений первой части
Цепочка решений первой части

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

Дальше теория заканчивается и начинаются данные.

📌 В следующей части

Часть 2. «Что под капотом». Тестовые сессии инженеров, дубли после перезапуска контроллеров, нулевые киловатт-часы, незакрытые сессии. И самое неприятное: зарядки, которые начинаются в 21:50 и заканчиваются уже в ночном окне.

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

Источники и дальнейшее чтение

Внешние работы использованы как аналогии и методологические ориентиры, а не как прямые доказательства эластичности зарядки электромобилей в Москве. Что именно мы взяли из каждой работы, сказано в тексте рядом со ссылкой.

[1] IEC 61851-1:2017. Electric vehicle conductive charging system. Part 1: General requirements. Geneva: International Electrotechnical Commission, 2017.

[2] Kleinrock L. Queueing Systems. Volume 1: Theory. New York: Wiley, 1975.

[3] Phillips R. L. Pricing and Revenue Optimization. Stanford: Stanford University Press, 2005.

[4] Faruqui A., Sergici S. Household response to dynamic pricing of electricity: a survey of 15 experiments // Journal of Regulatory Economics. 2010. Vol. 38, no. 2.

[5] Imbens G. W., Rubin D. B. Causal Inference for Statistics, Social, and Biomedical Sciences: An Introduction. Cambridge: Cambridge University Press, 2015.

[6] Cohen P., Hahn R., Hall J., Levitt S., Metcalfe R. Using Big Data to Estimate Consumer Surplus: The Case of Uber. NBER Working Paper No. 22627. Cambridge, MA: National Bureau of Economic Research, 2016.

[7] Pierce G., Shoup D. Getting the Prices Right: An Evaluation of Pricing Parking by Demand in San Francisco // Journal of the American Planning Association. 2013. Vol. 79, no. 1.

[8] Angrist J. D., Pischke J.-S. Mostly Harmless Econometrics: An Empiricist's Companion. Princeton: Princeton University Press, 2009.

[9] Chernozhukov V., Chetverikov D., Demirer M., Duflo E., Hansen C., Newey W., Robins J. Double/debiased machine learning for treatment and structural parameters // The Econometrics Journal. 2018. Vol. 21, no. 1.

[10] Lundberg S. M., Lee S.-I. A Unified Approach to Interpreting Model Predictions // Advances in Neural Information Processing Systems 30 (NIPS 2017). 2017.

[11] Rubin D. B. Estimating causal effects of treatments in randomized and nonrandomized studies // Journal of Educational Psychology. 1974. Vol. 66, no. 5.

[12] Donner A., Klar N. Design and Analysis of Cluster Randomization Trials in Health Research. London: Arnold, 2000.

[13] Kohavi R., Tang D., Xu Y. Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing. Cambridge: Cambridge University Press, 2020.

[14] Tversky A., Kahneman D. Judgment under Uncertainty: Heuristics and Biases // Science. 1974. Vol. 185, no. 4157.

[15] Kahneman D., Tversky A. Prospect Theory: An Analysis of Decision under Risk // Econometrica. 1979. Vol. 47, no. 2.

[16] Nosek B. A., Ebersole C. R., DeHaven A. C., Mellor D. T. The preregistration revolution // Proceedings of the National Academy of Sciences. 2018. Vol. 115, no. 11.

[17] Open Charge Alliance. Open Charge Point Protocol 1.6: Specification. Open Charge Alliance, 2015.

[18] Cameron A. C., Miller D. L. A Practitioner's Guide to Cluster-Robust Inference // Journal of Human Resources. 2015. Vol. 50, no. 2.

[19] Benjamini Y., Hochberg Y. Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing // Journal of the Royal Statistical Society: Series B. 1995. Vol. 57, no. 1.

22