P-значения
Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 44 из 64.
p-value сводит перемешивания к одному числу: доле фиктивных разниц, которые как минимум не меньше реальной разницы с любой стороны.
В коде для исследования шрифтов:
real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng) # цикл из прошлого урока
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)Это выводит 0.039. np.abs считает разрыв в -7 таким же большим, как 7: вопрос в том, различаются ли шрифты вообще.
Ниже уровня значимости, часто равного 0.05, случайность — плохое объяснение улучшения шрифта или модели. Это не доказательство: в 4 случаях из 100 это всё ещё происходило при перемешивании.
Задание
СреднеНа ферме поливают клубнику утром или вечером. Стартовый код разделяет strawberries.csv на morning и evening, перечисляет columns, считывает level и определяет shuffled_diffs.
- Для каждого столбца вычисли фактическую разницу (среднее за вечер минус среднее за утро), перемешанные разницы (сначала утро) и p-значение.
- Выведи строку для каждого столбца, как показано ниже (разница — 2 знака после запятой, p — 3):
differs, если p меньшеlevel. - Посчитай количество столбцов, в которых есть различие.
Другая ферма, уровень 0.05:
berries: difference -5.4, p = 0.009, differs
weight_g: difference 0.2, p = 1.0, could be chance
sweetness_brix: difference 0.46, p = 0.022, differs
leaf_spots: difference 0.6, p = 0.397, could be chance
Columns that differ: 2 of 4Попробуйте сами
import numpy as np
import pandas as pd
# Возвращает разности, полученные при перестановках в перестановочном тесте (цикл из урока 43): среднее искусственной выборки b минус среднее искусственной выборки a
def shuffled_diffs(a, b, shuffles, rng):
pooled = np.concatenate([a, b])
diffs = []
for i in range(shuffles):
shuffled = rng.permutation(pooled)
diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
return np.array(diffs)
beds = pd.read_csv("strawberries.csv")
morning = beds[beds["watering"] == "morning"]
evening = beds[beds["watering"] == "evening"]
columns = ["berries", "weight_g", "sweetness_brix", "leaf_spots"]
level = float(input())
# Не меняйте строки ниже
rng = np.random.default_rng(21)
shuffles = 1000
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Статистика для машинного обучения
1Центр и разброс
Среднее и медианаПроцентили и квартилиДисперсия и стандартное отклонениеВыборка или генеральная совокупность?Самое частое значениеПовторение: сроки доставки4Выборки и генеральные совокупности
Генеральная совокупность и выборкаСредние значения выборок различаютсяРаспределение выборочных среднихЧем больше выборка, тем меньше шумИтоги: опрос жителей города2Распределения
Гистограммы плотностиФормы распределения данныхНормальная криваяПравило 68–95–99,7Z-оценкиПовторение: время работы батареи8Сравнение групп
Диаграммы размаха по группамРазность среднихА вдруг это случайность?P-значенияt-критерийПовторение: A/B-тест3Вероятность с помощью моделирования
Вероятность как частотаЗакон больших чиселСуммы значений на кубикахМатематическое ожиданиеУсловная вероятностьПовторение: шансы в игре в кости6Взаимосвязи
Чтение диаграмм рассеянияКорреляцияМатрица корреляцийТепловые карты корреляцийКорреляция не означает причинностьПовторение: мороженое и солнцеПотренируйтесь самостоятельно: Онлайн-компилятор Python