Условие
В молодой финтех-стартап устроились два аналитика — Влад и Алена. Между ними сразу разгорелось соперничество за кресло тимлида. В качестве финального испытания им поручили обучить модели предсказания оттока пользователей на выделенных серверах Selectel.
Данные, разбитые по сегментам пользователей (регионам присутствия компании), хранились в Data Lake. Чтобы итоговое сравнение было честным, каждому аналитику поручили протестировать модель на собственноручно выбранном наборе сегментов, а итоговую метрику решили считать по всем своим сегментам сразу. Из-за неравномерного распределения клиентской базы по регионам объем данных у специалистов закономерно отличался: в одних регионах компания работает дольше и накопила больше логов, в других вышла на рынок недавно.
Сначала ребятам выгрузили данные за прошлый год (этап 1), а чуть позже — свежие метрики за текущий месяц (этап 2). При этом на каждом этапе сегменты, доставшиеся Владу и Алене, не совпадали по объему — это было всем известно.
Вечером перед презентацией Влад проверил метрику точности моделей. На первом этапе его модель лидировала. На втором этапе — его алгоритм снова обошел модель Алены. И Влад со спокойной душой ушел спать, уверенный в победе. На утренней демонстрации Алена объединила оба датасета в общий пул, запустила финальный скрипт валидации, и графики показали, что ее общая точность на всем объеме данных оказалась выше, чем у Влада. Влад обвинил Алену в подтасовке логов в облаке, из-за чего возник скандал.
Задача
Рассудите коллег и объясните директору, возможна ли такая ситуация с точки зрения математики, или Влад действительно нашел баг в системе аналитики? Чтобы ваше решение было максимально верным, подойдите к решению с трех сторон: логической, математической и программной.
Решение
Владу рано винить облачную платформу: никакого бага здесь нет. Перед нами классический парадокс Симпсона: статистический эффект, при котором в объединенных данных направление зависимости меняется на противоположное из-за разного «веса» выборок.
- Способ №1. Логический
Точность (Accuracy) — это не абсолютная величина, а дробь: отношение правильных предсказаний к общему числу тестов. При объединении датасетов мы не можем просто сложить или усреднить проценты точности. Итоговый результат будет «тяготеть» к тому этапу, где объем данных был больше.
В чем может скрываться секрет победы Алены:
- На первом этапе ей мог достаться огромный кусок массива данных, а Владу — совсем крошечный.
- На своем куске Влад мог обойти ее только на 1% (80% против 79%). Но Алена могла показать высокий результат (79%) на гигантском объеме данных, что в разы ценнее для общего зачета.
- На втором этапе ситуация перевернулась: Владу достался большой массив, а Алене — маленький. И Влад снова победил локально.
В итоге, когда данные объединили, гигантская база Алены с первого этапа, где она показала отличную точность, «вытянула» ее финальный результат вверх. А у Влада все произошло наоборот: огромная выборка со второго этапа была с низкой точностью и «утащила» его общий итог на дно. Влад победил в двух локальных стычках на разных объемах, но Алена победила за счет стабильности на больших данных.
- Способ №2. Математический
Давайте подберем объемы данных, при которых парадокс сработает наглядно. Начнем с первого этапа.
- Влад протестировал модель на 100 объектах и сделал 80 верных прогнозов (точность = 80%).
- Алена тестировала на 1 000 объектах и угадала 790 (точность = 79%).
- Влад лидирует: 80% > 79%.
Переходим ко второму:
- Влад тестировал модель на 1 000 объектах и угадал 400 (точность = 40%).
- Алена тестировала на 100 и угадала 39 (точность = 39%).
- Влад снова лидирует: 40% > 39%.
Объединяем данные:
Итоговый результат Влада: угадал 80 + 400 = 480 результатов из 100 + 1 000 = 1 100. Общая точность: 480 / 1100 = 43,6%.
Итоговый результат Алены: верно спрогнозировала 790 + 39 = 829 результатов из 1 000 + 100 = 1100. Общая точность: 829 / 1100 = 75,4%.
- Способ №3. Проверим на Python
Напишем короткий скрипт симуляции, чтобы окончательно доказать Владу правоту Алены. Временная сложность алгоритма — стабильное O(1).

Программа наглядно подтверждает: система считает все корректно, а Алена забирает пальму первенства.
Заключение
Владу пришлось признать поражение, отозвать тикеты из техподдержки и сесть за повторение матстатистики. Алена же получила кресло тимлида и поделилась с коллегой доступом к материалам Академии Selectel, где регулярно выходят разборы архитектурных кейсов, нюансов работы с Big Data и машинным обучением. Теперь их модели в продакшене будут застрахованы от любых статистических аномалий!