Menu
CoddyTech

P-значения

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

p-value сводит перемешивания к одному числу: доле фиктивных разниц, которые как минимум не меньше реальной разницы с любой стороны.

1000 перемешанных разниц исследования шрифтов в виде гистограммы. Столбцы по обе стороны на уровне 6,6 секунды или выше выделены красным, 39 перемешиваний, и подпись гласит: p = 39 / 1000 = 0.039

В коде для исследования шрифтов:

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 это всё ещё происходило при перемешивании.

challenge icon

Задание

Средне

На ферме поливают клубнику утром или вечером. Стартовый код разделяет strawberries.csv на morning и evening, перечисляет columns, считывает level и определяет shuffled_diffs.

  1. Для каждого столбца вычисли фактическую разницу (среднее за вечер минус среднее за утро), перемешанные разницы (сначала утро) и p-значение.
  2. Выведи строку для каждого столбца, как показано ниже (разница — 2 знака после запятой, p — 3): differs, если p меньше level.
  3. Посчитай количество столбцов, в которых есть различие.

Другая ферма, уровень 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

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

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

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

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