Выборка против генеральной совокупности
Мы почти никогда не видим все данные — лишь выборку; вся статистика про то, как по части судить о целом, не обманываясь.
Генеральная совокупность — все объекты, которые нас интересуют. Выборка — подмножество, которое мы реально наблюдаем и по которому делаем выводы о совокупности.
Почему мы изучаем часть
Опросить всех жителей страны невозможно — дорого и долго. Поэтому берут выборку и по ней судят о всей совокупности. То же в ML: настоящая «совокупность» — это все возможные данные в мире (все письма, все фото кошек), а у нас есть лишь конечный датасет — выборка из неё. Модель учится на выборке, но мы хотим, чтобы она работала на всей совокупности. Это и есть обобщение.
Оценка по выборке приближает истину
Среднее по выборке оценивает среднее совокупности, но не равно ему точно — есть случайная погрешность. Смоделируем «совокупность» из 100 000 человек и посмотрим, как выборочное среднее приближает истинное.
import random, statistics
random.seed(123)
# «Генеральная совокупность»: рост 100000 человек, истинное среднее 170
population = [random.gauss(170, 8) for _ in range(100000)]
true_mean = statistics.mean(population)
print("Истинное среднее совокупности:", round(true_mean, 2))
# Берём случайные выборки разного размера
for size in [10, 100, 1000]:
sample = random.sample(population, size)
print(f"Выборка из {size:4}: среднее = {round(statistics.mean(sample), 2)}")
Вывод:
Истинное среднее совокупности: 170.02 Выборка из 10: среднее = 166.11 Выборка из 100: среднее = 171.64 Выборка из 1000: среднее = 169.95
Маленькая выборка (10) промахнулась сильнее, большая (1000) почти попала в истинное среднее. Чем больше выборка, тем точнее оценка — это снова отголосок закона больших чисел.
Смещение отбора — главная ловушка
Размер выборки важен, но репрезентативность важнее. Если выборка собрана криво, она врёт независимо от размера. Классика — смещение отбора (selection bias): опрос про доходы только среди читателей премиального журнала завысит средний доход. В ML это смертельно: если обучить модель на данных одной группы, на других она будет ошибаться. Смоделируем смещённую выборку.
import random, statistics
random.seed(5)
population = [random.gauss(170, 8) for _ in range(100000)]
# Честная случайная выборка
fair = random.sample(population, 1000)
# Смещённая выборка: берём только людей выше 178 (например, из баскетбольной секции)
tall_pool = [h for h in population if h > 178]
biased = random.sample(tall_pool, 1000)
print("Среднее честной выборки =", round(statistics.mean(fair), 2))
print("Среднее смещённой выборки =", round(statistics.mean(biased), 2))
print("(истина около 170)")
Вывод:
Среднее честной выборки = 169.92 Среднее смещённой выборки = 182.38 (истина около 170)
Смещённая выборка дала 182 вместо 170 — и это не лечится увеличением размера, ведь сама процедура отбора кривая. Урок для ML: качество и представительность данных важнее их количества.
Итог
- Генеральная совокупность — всё, что нас интересует; выборка — то, что мы наблюдаем.
- По выборке оценивают параметры совокупности; больше выборка — точнее оценка.
- Смещение отбора делает выборку нерепрезентативной — её не спасёт размер.
- В ML датасет — это выборка; цель модели — обобщиться на всю совокупность.