Ответ
В статистических методах обнаружения выбросов, таких как тест Граббса или Диксона, 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 и расстояния, для которых просто порог выставляешь. Короче, не пытайся винду переустановить через БИОС, для каждой задачи свой инструмент, ядрёна вошь.