t-критерий
Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 45 из 64.
До появления компьютеров в статистике было сокращение: t-тест. Формула сразу преобразует средние значения, разбросы и размеры групп в p-значение:
from scipy import stats
result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))Для исследования шрифтов это выводит 0.031 и -2.61. При 1000 перемешиваниях получилось 0.039: как обычно, близко.
Значение t — это разница в стандартных ошибках; его знак лишь указывает, какая группа была первой. Формула предполагает, что данные имеют колоколообразное распределение, поэтому при небольших группах с асимметричным распределением доверяй перестановкам.
Также проверяется, действительно ли одна модель превосходит другую.
Задание
СреднеПроизводитель краски измерил время высыхания трёх видов покрытия. В стартовом коде минуты высыхания для каждого вида покрытия записываются в times, перечислены три pairs, определена функция permutation_p(a, b) и считывается level.
- Выведи p-значение t-теста для матового и сатинового покрытий рядом с p-значением симуляции перестановок.
- Проверь каждую пару, сохраняя исходный порядок покрытий, и выведи пару с наименьшим p-значением.
- Посчитай количество пар, для которых p-значение меньше
level.
Округли p-значения до 3 знаков после запятой. Для другого производителя, level равен 0.05:
matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3Попробуйте сами
import numpy as np
import pandas as pd
from scipy import stats
# Перестановочный тест из двух предыдущих уроков: возвращает p-значение для сравнения a и b
def permutation_p(a, b, shuffles=1000, seed=0):
rng = np.random.default_rng(seed)
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())
real = b.mean() - a.mean()
return (np.abs(np.array(diffs)) >= np.abs(real)).mean()
paint = pd.read_csv("paint.csv")
times = {
"matte": paint[paint["finish"] == "matte"]["minutes"],
"satin": paint[paint["finish"] == "satin"]["minutes"],
"gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Статистика для машинного обучения
1Центр и разброс
Среднее и медианаПроцентили и квартилиДисперсия и стандартное отклонениеВыборка или генеральная совокупность?Самое частое значениеПовторение: сроки доставки4Выборки и генеральные совокупности
Генеральная совокупность и выборкаСредние значения выборок различаютсяРаспределение выборочных среднихЧем больше выборка, тем меньше шумИтоги: опрос жителей города2Распределения
Гистограммы плотностиФормы распределения данныхНормальная криваяПравило 68–95–99,7Z-оценкиПовторение: время работы батареи8Сравнение групп
Диаграммы размаха по группамРазность среднихА вдруг это случайность?P-значенияt-критерийПовторение: A/B-тест3Вероятность с помощью моделирования
Вероятность как частотаЗакон больших чиселСуммы значений на кубикахМатематическое ожиданиеУсловная вероятностьПовторение: шансы в игре в кости6Взаимосвязи
Чтение диаграмм рассеянияКорреляцияМатрица корреляцийТепловые карты корреляцийКорреляция не означает причинностьПовторение: мороженое и солнцеПотренируйтесь самостоятельно: Онлайн-компилятор Python