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

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

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

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

Так должны ли мы рассматривать только 37% кандидатов при поиске работы? Давайте проверим, используя некоторые основные инструменты Python.

Давайте создадим простую тестовую версию, предположив, что мы ранжируем кандидатов от 0 до 100 в зависимости от их способностей. Очевидно, что в этих тестах мы будем брать затраты, связанные с каждым проведенным собеседованием, так что мы не можем бесконечно ждать. Кроме того, я создам несколько тестовых окон от 10% до 70%, чтобы проверить, насколько сильно итоговое значение средней оценки будет меняться в зависимости от нашего решения об остановке. Мы также создадим функцию findmaxwithinwindow, чтобы найти максимальную оценку в окне.

Окончательный средний максимальный балл за окно показан выше для выборки из 1000 кандидатов и после 300 случайных экспериментов. Мы видим, что градиент или наклон падает примерно после 400 размеров окна, поддерживая 37%. Таким образом, мы можем просто провести собеседование с 400 кандидатами на эту работу.

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

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