Menu
CoddyTech

Выборка или генеральная совокупность?

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

Пчеловод взвесил мёд из 5 ульев, в кг. NumPy и pandas не сходятся в значении стандартного отклонения:

values = [18, 22, 25, 19, 26]
print(np.round(np.std(values), 2))
print(np.round(pd.Series(values).std(), 2))

Это выводит:

3.16
3.54

Оба складывают одни и те же квадраты отклонений, затем делят:

Квадраты отклонений для 5 ульев: 16, 0, 9, 9 и 16; в сумме получается 50. Одна стрелка ведёт к np.std: 50 / 5 = 10, стандартное отклонение 3.16, формула для генеральной совокупности. Другая ведёт к pandas: 50 / 4 = 12.5, стандартное отклонение 3.54, формула для выборки

Деление на n подходит для генеральной совокупности — в неё входят все значения. Выборка группируется вокруг собственного среднего, поэтому её разброс кажется небольшим; n - 1 компенсирует это.

ddof=1 задаёт NumPy формулу для выборки: np.std(a, ddof=1) совпадает с pandas. Данные модели — это выборка: расхождение в стандартном отклонении между инструментами связано с ddof, а не с ошибкой.

challenge icon

Задание

Легко

Биолог получил два разных значения стандартного отклонения размаха крыльев нескольких летучих мышей в см. Стартовый код считывает их в массив spans и Series column; проверка выводит False.

  1. Эти летучие мыши — выборка: исправь строку NumPy так, чтобы оба инструмента вычисляли выборочное стандартное отклонение.
  2. Ниже выведи, насколько значение NumPy по умолчанию np.std(spans) меньше, чем column.std(), округлив до 2 знаков после запятой.

Для размахов крыльев 33, 27, 30, 35 и 29:

Sample std: 3.19 cm, tools agree: True
Dividing by n underestimated it by 0.34 cm

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

import numpy as np
import pandas as pd

n = int(input())
values = []
for i in range(n):
    values.append(int(input()))
spans = np.array(values)
column = pd.Series(values)

# Эта проверка выводит False: исправьте строку с NumPy, чтобы оба инструмента вычисляли выборочное стандартное отклонение
numpy_std = np.round(np.std(spans), 2)
pandas_std = np.round(column.std(), 2)
print(f"Sample std: {numpy_std} cm, tools agree: {numpy_std == pandas_std}")

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

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

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

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