Menu
CoddyTech

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: как обычно, близко.

1000 перемешанных разностей в исследовании шрифтов в виде бледной гистограммы, поверх которой проходит колоколообразная кривая t-теста, и пунктирная красная линия на уровне реальной разницы -6.6. В легенде указано p = 0.039 для перемешиваний и 0.031 для формулы

Значение t — это разница в стандартных ошибках; его знак лишь указывает, какая группа была первой. Формула предполагает, что данные имеют колоколообразное распределение, поэтому при небольших группах с асимметричным распределением доверяй перестановкам.

Также проверяется, действительно ли одна модель превосходит другую.

challenge icon

Задание

Средне

Производитель краски измерил время высыхания трёх видов покрытия. В стартовом коде минуты высыхания для каждого вида покрытия записываются в times, перечислены три pairs, определена функция permutation_p(a, b) и считывается level.

  1. Выведи p-значение t-теста для матового и сатинового покрытий рядом с p-значением симуляции перестановок.
  2. Проверь каждую пару, сохраняя исходный порядок покрытий, и выведи пару с наименьшим p-значением.
  3. Посчитай количество пар, для которых 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())

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

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

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

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