Skip to Content
МетодичкиМатематическая статистикаГлава 4. Поиск больных (Метод Дорфмана)

Глава 4. Поиск больных (метод Дорфмана)

Забудь про умозрительные примеры с кубиками. Сейчас будет суровый жизненный расклад.

Представь: Вторая мировая, призывной пункт США. Нужно проверить n=1000n = 1000 призывников на сифилис (реакция Вассермана). Каждый тест стоит денег, лаборатория зашивается. Если тестировать каждого «в лоб» — уйдёт ровно 10001000 пробирок и тестов.

В 1943 году экономист Роберт Дорфман придумал тему: зачем проверять каждого отдельного пацана, если можно сливать пробы в один котёл?

Схема развода лаборатории (суть метода)

Берём всех nn призывников и разбиваем на пачки по kk человек в каждой.

  1. Берём капельку крови у каждого из kk человек, сливаем в одну общую пробирку и делаем 1 тест.
  2. Вариант А (вся пачка чистая): тест отрицательный. Одной проверкой оправдали сразу kk человек.
  3. Вариант Б (кто-то залетел): тест положительный (в смеси есть хотя бы один больной). Найти виновного «вслепую» нельзя — берём индивидуальные пробы у всех kk из пачки и делаем ещё kk тестов. Итого на эту пачку: 1+k1 + k тестов.
[Пачка из k человек] (1 общий тест) ╱ ╲ [Чисто] [Есть больной] (0 доп.) (k доп. тестов) │ │ Всего: 1 Всего: k + 1

Где подвох? Если болезнь редкая (pp маленькое), большинство пачек будут полностью здоровыми и проскочат за 11 тест.

Разбираем формулу по кирпичикам

Пусть pp — вероятность, что случайный призывник болен. Тогда 1p1 - p — что он здоров.

Результаты независимы (схема Бернулли из главы 3). Вероятность, что вся пачка из kk человек здорова:

P(все k здоровы)=(1p)k.\mathbf{P}(\text{все } k \text{ здоровы}) = (1 - p)^k.

Вводим случайную величину XjX_jчисло проверок для jj-й группы:

Xj={1,с вероятностью (1p)k(все здоровы),k+1,с вероятностью 1(1p)k(хотя бы один болен).X_j = \begin{cases} 1, & \text{с вероятностью } (1-p)^k \quad (\text{все здоровы}), \\ k+1, & \text{с вероятностью } 1-(1-p)^k \quad (\text{хотя бы один болен}). \end{cases}

Матожидание затрат на одну группу MXj\mathbf{M}X_j

Формула матожидания из главы 2 (значение × вероятность):

MXj=1(1p)k+(k+1)[1(1p)k].\mathbf{M}X_j = 1\cdot(1-p)^k + (k+1)\bigl[1-(1-p)^k\bigr].

Раскрываем скобки:

MXj=(1p)k+k+1(k+1)(1p)k=k+1k(1p)k.\mathbf{M}X_j = (1-p)^k + k + 1 - (k+1)(1-p)^k = k + 1 - k(1-p)^k.

Общее число тестов MZ\mathbf{M}Z

Групп примерно n/kn/k. Общее число проверок Z=X1++Xn/kZ = X_1 + \dots + X_{n/k}. По линейности матожидания:

MZ=nkMXj=n[1+1k(1p)k].\mathbf{M}Z = \frac{n}{k}\cdot\mathbf{M}X_j = n\left[1 + \frac{1}{k} - (1-p)^k\right].

Удельные затраты (доля от nn «лобовых» тестов):

H(k)=1+1k(1p)k.H(k) = 1 + \frac{1}{k} - (1-p)^k.

Если H(k)=0,2H(k) = 0{,}2 — потратим 20% от первоначального числа тестов (экономия примерно в 5 раз).

Пощупай руками (симуляция Монте-Карло)

Проверим теорию в коде: n=1000n = 1000, p=0,01p = 0{,}01 (1% больных), k=10k = 10.

Загрузка редактора…

Оптимизация: какую группу kk выбрать?

Если kk слишком большой (например k=100k = 100 при p=0,01p = 0{,}01), то с вероятностью 1(10,01)10063%1 - (1-0{,}01)^{100} \approx 63\% в группе окажется больной — почти всегда доплатим ещё 100100 тестов.

Если kk слишком маленький (k=2k = 2), теряем выгоду от группировки.

При малых pp оптимальный размер приближённо:

kопт1p.k_{\text{опт}} \approx \frac{1}{\sqrt{p}}.

При p=0,01p = 0{,}01: kопт1/0,01=10k_{\text{опт}} \approx 1/\sqrt{0{,}01} = 10, и затраты около 20%20\% от «лобового» плана.

Покрути график удельных затрат H(x)=1+1/x(1p)xH(x) = 1 + 1/x - (1-p)^x при p=0,01p = 0{,}01 (то есть 0,99x0{,}99^x). Минимум около x=10x = 10, линия y=1y = 1 — уровень «тестируем всех в лоб».

Удельные затраты H(k) при p = 0,01

График y = 1 + 1/x - 0.99^x на [1; 40].

Проверь себя

Проверка

В группу объединили k=10k = 10 человек. В этой группе оказался 1 больной призывник. Сколько всего тестов будет сделано для этой группы?

Тест

Почему метод Дорфмана НЕ РАБОТАЕТ, если болен каждый второй (p = 0.5)?
Обновлено