Условие
Армия захватила несколько танков противника с серийными номерами 17, 53, 88, 142, 207. Серийники присваиваются последовательно от 1 до N (где N — общее число произведённых танков). Оцените N.
Сравните оценки:
- Метод моментов (
N̂ = 2 · X̄ − 1). - MLE (
N̂ = max(X_i)). - UMVUE (несмещённая с минимальной дисперсией):
N̂ = max(X) · (k+1)/k - 1.
(k — размер выборки)
Решение
Постановка
X_i ~ DiscreteUniform(1, N) независимо. Цель — оценить N по выборке размера k = 5: (17, 53, 88, 142, 207).
1) Метод моментов
E[X] = (1 + N) / 2 → N = 2·E[X] − 1.
Подставляем X̄:
X̄ = (17 + 53 + 88 + 142 + 207) / 5 = 507 / 5 = 101.4
N̂ = 2 · 101.4 − 1 = 201.8
Проблема: оценка может быть меньше наблюдаемого максимума 207 — невозможно. Метод моментов плох для данной задачи.
2) MLE
Функция правдоподобия:
L(N) = (1/N)^k если N ≥ max(X)
0 иначе
Максимум по N → минимальный допустимый N → N̂_MLE = max(X) = 207.
Но MLE смещена: E[max] ≈ N · k / (k+1), то есть систематически занижает.
3) UMVUE
Несмещённая оценка с минимальной дисперсией для дискретного uniform:
N̂ = max(X) · (k+1)/k − 1
= 207 · 6/5 − 1
= 207 · 1.2 − 1
= 248.4 − 1
= 247.4
Бизнес-ответ: ≈ 247 танков.
Доказательство несмещённости (через max)
Для дискретного uniform на {1, ..., N} распределение максимума:
P(max ≤ m) = (m/N)^k (вероятность всех ≤ m)
P(max = m) = (m/N)^k − ((m-1)/N)^k
E[max] = N · k/(k+1) + O(1)
Откуда:
E[max · (k+1)/k - 1] = N · k/(k+1) · (k+1)/k - 1 = N − 1
Уточнение на «−1» делает оценку точно несмещённой при равномерной discrete distribution.
Доверительный интервал
Для верхнего значения N:
P(max < c · N) = c^k при c < 1
→ P(N > max/c) = c^k.
95% CI: N ∈ [max(X), max(X) / α^(1/k)] где α = 0.05 для верхнего конца.
upper = 207 / 0.05^(1/5) = 207 / 0.55 ≈ 376
lower = 207
С 95% уверенностью N ∈ [207, 376].
Симуляция
import numpy as np
rng = np.random.default_rng(0)
def estimate_n(k, N_true, n_sim=10000):
estimators = {'MoM': [], 'MLE': [], 'UMVUE': []}
for _ in range(n_sim):
x = rng.choice(np.arange(1, N_true+1), size=k, replace=False)
estimators['MoM'].append(2*x.mean() - 1)
estimators['MLE'].append(x.max())
estimators['UMVUE'].append(x.max() * (k+1)/k - 1)
for name, est in estimators.items():
bias = np.mean(est) - N_true
std = np.std(est)
print(f"{name:6} bias = {bias:+.1f}, std = {std:.1f}")
estimate_n(k=5, N_true=250)
# MoM bias ≈ 0 std ≈ 64
# MLE bias ≈ -42 std ≈ 35
# UMVUE bias ≈ 0 std ≈ 42UMVUE — лучшая из несмещённых; MLE смещена, но иногда полезна.
Историческая справка
Во время WWII союзники по этой методике (с поправкой на немецкие SN-схемы) оценили месячное производство немецких танков в ~256 штук/месяц. Реальная цифра по архивам Третьего рейха = ~255. Разведка давала оценки в 1500-2000 — в 7-10 раз выше.
Подводные камни
- Метод моментов даёт N̂ < max(X) — патологически неверно. Метод неприменим к данной задаче.
- MLE смещена — почти всегда занижает.
max(X) · (k+1)/k − 1— корректная формула;-1иногда забывают (для continuous uniform нет, для discrete есть).- Допущение, что номера присваиваются последовательно с 1: если есть пропуски / non-uniform — формула неверна.
- Sampling without replacement: формула меняется, но для k ≪ N разница пренебрежима.
- Censoring: если кадры выбиваются с большей вероятностью при больших N (бой более активный) — sampling смещён.
- Дискретное vs непрерывное uniform — разные поправки. В continuous:
N̂ = max(X) · (k+1)/k, без −1.
Эталонный ответ
UMVUE: N̂ = max(X) · (k+1)/k − 1 = 207 · 6/5 − 1 = 247.4 ≈ 247.
Метод моментов даёт 201.8 — невозможно (меньше max). MLE = 207 — смещена вниз. UMVUE — несмещённая, оптимальная.
95% CI: [207, 376].
Применение: оценка размера популяции по серийным номерам, дискретная uniform-задача. Реальный кейс — WWII (German tank problem), оценка немецкого военного производства по захваченным номерам.