Menu
CoddyTech

Чем больше выборка, тем меньше шум

Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 22 из 64.

Более крупные выборки дают более точные оценки, но насколько точнее? Вот 1000 средних значений для выборок из 25 покупательских корзин и 1000 средних значений для выборок из 100 корзин:

Два распределения средних значений числа товаров в корзине, оба сосредоточены около 30. Средние значения для выборок из 25 корзин, показанные серым цветом, распределены примерно от 20 до 40; средние значения для выборок из 100 корзин, показанные синим цветом, образуют колоколообразное распределение вдвое уже

sample_means измеряет разброс каждой выборки. Стандартная ошибка, std / np.sqrt(n), предсказывает его без симуляции:

for n in [25, 100]:
    spread = sample_means(baskets, n, 1000).std()
    print(n, np.round(spread, 2), np.round(baskets.std() / np.sqrt(n), 2))

Это выводит:

25 3.43 3.45
100 1.72 1.72

В четыре раза больше данных, вдвое меньше шума: так работает квадратный корень. Оценка модели, протестированной на 400 примерах, вдвое точнее, чем на 100.

challenge icon

Задание

Средне

bags содержит веса 5000 мешков муки на мельнице в граммах. Отдел контроля качества каждый час взвешивает выборку; программа считывает допустимую стандартную ошибку.

  1. Найди наименьшее n, при котором стандартная ошибка bags.std() / np.sqrt(n) не превышает это значение: начни с 1 и прибавляй 1, пока ошибка слишком велика.
  2. Проверь результат: вычисли стандартное отклонение 300 выборочных средних с помощью sample_means.
  3. Выведи результат, как показано ниже, с точностью до 2 знаков после запятой.

Для другой мельницы и значения 2.5:

Bags to weigh: 24
Standard error: 2.46 g
Simulated spread: 2.37 g

Попробуйте сами

import numpy as np

target = float(input())

# Не изменяйте строки ниже: вес каждого мешка муки в граммах
rng = np.random.default_rng(22)
bags = np.round(rng.normal(500, 8, size=5000), 1)


# Ваша функция из урока «Выборочные средние меняются»: средние значения для count выборок
def sample_means(data, size, count):
    means = []
    for i in range(count):
        sample = rng.choice(data, size=size, replace=False)
        means.append(sample.mean())
    return np.array(means)


# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Статистика для машинного обучения

Потренируйтесь самостоятельно: Онлайн-компилятор Python