Чему равно p-value при обнаружении выбросов?

Ответ

В статистических методах обнаружения выбросов, таких как тест Граббса или Диксона, p-value — это вероятность наблюдать данную экстремальную точку (или более экстремальную) в предположении, что все данные взяты из одной нормальной генеральной совокупности. Если рассчитанное p-value меньше выбранного уровня значимости α (обычно 0.05), нулевая гипотеза (точка не является выбросом) отвергается.

Практический пример на Python:

import numpy as np
from scipy import stats

# Пример данных с потенциальным выбросом
data = np.array([15.2, 15.3, 15.1, 15.5, 15.4, 25.0])

# Расчет Z-оценок и соответствующих p-значений (двусторонний тест)
z_scores = np.abs(stats.zscore(data))
p_values = stats.norm.sf(z_scores) * 2  # survival function * 2 для two-tailed

print(f"Z-оценки: {z_scores}")
print(f"P-значения: {p_values}")
# Для последней точки (25.0) p-value будет близко к 0,
# что указывает на статистически значимый выброс.

Важно: В алгоритмических методах (Isolation Forest, Local Outlier Factor) p-value обычно не используется. Вместо этого применяются пороговые значения для scores или расстояний.

Ответ 18+ 🔞

А, ну вот, объясняю на пальцах, как эти ваши p-value в выбросах работают. Представь, что у тебя компания друзей, все примерно одного роста, и тут вдруг заходит один — хуй с горы, под три метра. Так вот, p-value — это, грубо говоря, вероятность, что этот дядя Степа просто так, случайно, сюда зашёл, а не потому что он из цирка сбежал. Если эта вероятность овердохуища маленькая (ну, там, меньше 0.05), то все делают круглые глаза и говорят: «Ёпта, да это же выброс! Нафиг его!». Гипотезу, что он свой парень, нахуй отправляют.

Код на Python, смотри:

import numpy as np
from scipy import stats

# Допустим, замеряли что-то, всё ровно, а потом — бац!
data = np.array([15.2, 15.3, 15.1, 15.5, 15.4, 25.0])

# Считаем Z-оценки (насколько каждая точка отстоит от среднего в попугаях сигм) и p-значения
z_scores = np.abs(stats.zscore(data))
p_values = stats.norm.sf(z_scores) * 2  # survival function * 2 для two-tailed

print(f"Z-оценки: {z_scores}")
print(f"P-значения: {p_values}")
# Для последней точки (25.0) p-value будет близко к нулю,
# что значит — чувак, это пиздец какой выброс, доверия к нему ебать ноль.

А теперь главное, запомни раз и навсегда: эти p-value — они как презервативы для классических методов, вроде теста Граббса. Но есть же и другие способы, алгоритмические — Isolation Forest там, Local Outlier Factor. Так вот там уже не до этих ваших p-value, там другие игрушки: всякие scores и расстояния, для которых просто порог выставляешь. Короче, не пытайся винду переустановить через БИОС, для каждой задачи свой инструмент, ядрёна вошь.