Рубрики
Без рубрики

Часть 3: Гипотеза Испытания средних образцов

В части одной из этой серии мы представили идею проверки гипотезы, а также полное описание … Теги от науки о данных, Python.

В части одной из этой серии мы представили идею проверки гипотезы, а также полное описание различных элементов, которые входят в использование этих инструментов. Он закончился с чит-листом, который поможет вам выбрать, какой тест использовать на основе типа данных, которые вы тестируете.

Часть вторая изложила некоторые образцы кода для того, как выполнить Z-тесты на образцах на основе пропорции.

Этот пост теперь будет работать более подробно для среднее значение Образцы.

Если какой-либо из условий – Нулевая гипотеза , Альтернативная гипотеза , p-значение – Новые для вас, то Я бы предложил просмотреть первую часть этой серии перед перевозкой с этим.

Что такое средний образец?

В этих случаях мы заинтересованы в проверке арифметического среднего значения некоторых образцов. Это может быть проверить, означает ли среднее значение образца некоторое ожидаемое значение или сравнивает два образца из двух разных популяций или сравнения двух образцов из той же популяции, взятой до и после некоторого вмешательства.

Требования к качеству образца

Для этих тестов требуются следующие правила выборки:

Случайный Образец должен быть случайным образцом от всей населения
Нормальный Ожидаемые значения в образце должны быть «достаточно большими» – для этих тестов хорошее правило – это то, что – учитывая размер выборки – ожидаемый счет каждой переменной должен быть не менее 5. Например: предположим, что сеть была размерена, чтобы иметь 5% дорожного движения в реальном времени и 95% лучших сообщений усилий: это наша ожидаемая частота. Размер образца 50 будет означать, что «ожидать» примерно 2,5 сообщений о трафике в реальном времени в этом образце – это менее 5, поэтому образец будет отклонен, как не было достаточно большим.
Независимый Образец должен быть независимым – для этих испытаний хорошее правило, что размер выборки составляет менее 10% от общей численности населения.

Испытания для образцов на основе F

Все эти образцы кода доступны в Это репозиторий Git. Они используют общие statsmodels. Библиотека для выполнения тестов.

1-образец T-теста

Сравните пропорцию в образе к ожидаемой стоимости

Здесь у нас есть, определяемая средним – и мы хотим посмотреть, сможем ли мы внести некоторые утверждение о том, значит ли общий средний популяцию, чем/меньше/отличается от некоторого ожидаемого среднего.

Итак, в этом примере предположим, что мы хотим попробовать образец Call-центр, чтобы проверить, если среднее время вызова более 2 минут.

  • Наша нулевая гипотеза: Среднее время вызова – ровно 2 минуты
  • Наша альтернативная гипотеза: Среднее время вызова больше 2 минут
  • Из одной популяции мы выбирали 500 звонков и нашли среднее время вызова 122 секунды, со стандартным отклонением 73 секунд
  • Мы используем тест с 1 образцом T для проверки, если образец позволяет принимать или отклонить нулевую гипотезу

Для расчета P-значения в Python:

from scipy.stats import truncnorm
from statsmodels.stats.weightstats import DescrStatsW as stats
# can we assume anything from our sample?
significance = 0.025
# we're checking if calls can be resolved in over 2 minutes
# so Ho == 120 seconds
null_hypothesis = 120
# Normally, in the real world, you would process an entire sample (i.e. sample_a)
# But for this test, we'll generate a sample from this shape, wherE:
# - min/max is the range of available options
# - sample mean/dev are used to define the normal distribution
# - size is how large the sample will be
min, max, sample_mean_a, sample_dev_a, sample_size_a = (0, 300, 121, 50, 500)
########################
# here - for our test - we're generating a random string of durations to be our sample
# these are in a normal distribution between min/max, normalised around the mean
sample_a = truncnorm(
  (min - sample_mean_a) / sample_dev_a,
  (max - sample_mean_a) / sample_dev_a,
  loc=sample_mean_a,
  scale=sample_dev_a).rvs(sample_size_a)
# Get the stat data
(t_stat, p_value, degree_of_freedom) = stats(sample_a).ttest_mean(null_hypothesis, 'larger')
# report
print('t_stat: %0.3f, p_value: %0.3f' % (t_stat, p_value))
if p_value > significance:
  print("Fail to reject the null hypothesis - we have nothing else to say")
else:
  print("Reject the null hypothesis - suggest the alternative hypothesis is true")

2 образца независимый T-тест T-теста

Сравните среднее значение образцов из 2 разных популяций

Здесь у нас есть два образца – взятые из двух разных групп населения – определены средним – и мы хотим увидеть, сможем ли мы внести некоторые утверждение о том, могут ли общие средства одного базового населения превышать/меньше/отличаться от другого.

Итак, в этом примере предположим, что мы хотим сравнить два разных центра звонков, чтобы увидеть, как их время вызова связаны друг с другом.

  • У нас два образца – A и B: наша нулевая гипотеза: средства из двух популяций то же
  • Наша альтернативная гипотеза: средство от населения A> означает от населения B
  • Из одной популяции мы выбирали 500 звонков и нашли среднее время вызова 121 секунд, со стандартным отклонением 56 секунд.
  • Из другого населения мы выбрали 500 звонков и нашли среднее время вызова 125 секунд, со стандартным отклонением 16 секунд
  • Мы используем 2-образную независимую T-тест T-тестирование для проверки, если образец позволяет нам принимать или отклонить нулевую гипотезу

Для расчета P-значения в Python:

from scipy.stats import truncnorm
from statsmodels.stats.weightstats import ttest_ind
# can we assume anything from our sample?
significance = 0.025
# we're checking if calls can be resolved in over 2 minutes
# so Ho == 120 seconds
null_hypothesis = 120
# Normally, in the real world, you would process an entire sample (i.e. sample_a)
# But for this test, we'll generate a sample from this shape, wherE:
# - min/max is the range of available options
# - sample mean/dev are used to define the normal distribution
# - size is how large the sample will be
min, max = (0, 300)
sample_mean_v1, sample_dev_v1, sample_size_v1 = (121, 56, 500)
sample_mean_v2, sample_dev_v2, sample_size_v2 = (125, 16, 500)
########################
# here - for our test - we're generating a random string of durations to be our sample
# these are in a normal distribution between min/max, normalised around the mean
sample_v1 = truncnorm(
(min - sample_mean_v1) / sample_dev_v1,
(max - sample_mean_v1) / sample_dev_v1,
loc=sample_mean_v1,
scale=sample_dev_v1).rvs(sample_size_v1)
sample_v2 = truncnorm(
(min - sample_mean_v2) / sample_dev_v2,
(max - sample_mean_v2) / sample_dev_v2,
loc=sample_mean_v2,
scale=sample_dev_v2).rvs(sample_size_v2)
# Get the stat data
# note that we're comparing V2 to V1 - so the sample we expect to be larger goes first here
(t_stat, p_value, degree_of_freedom) = ttest_ind(sample_v2, sample_v1, alternative='larger')
# report
print('t_stat: %0.3f, p_value: %0.3f' % (t_stat, p_value))
if p_value > significance:
 print("Fail to reject the null hypothesis - we have nothing else to say")
else:
 print("Reject the null hypothesis - suggest the alternative hypothesis is true")

2 образца парного T-теста

Сравните среднее количество двух образцов из той же популяции

Здесь у нас есть два образца – взяты из то же самое Население – определяется средним, и мы хотим посмотреть, сможем ли мы внести некоторые утверждение о том, является ли среднее значение основной популяции во втором образце больше/меньше/отличается от того, как он был в первом.

Итак, в этом примере предположим, что мы сделали некоторые изменения кода, и он выглядит так, как будто он замедлил вещи, и поэтому мы хотим попробовать производительность раньше, и после изменения, чтобы увидеть, действительно ли все будет замедлены.

  • У нас два образца – A и B: наша нулевая гипотеза: средства из двух популяций то же
  • Наша альтернативная гипотеза: средство от населения A> означает от населения B
  • Перед изменением мы отбирали 500 событий от населения и нашли среднее время обработки 121 миллисекунд, со стандартным отклонением 56 миллисекунд.
  • После изменения мы выбрали 500 событий от населения и обнаружили среднее время обработки 128 миллисекунд, со стандартным отклонением 16 миллисекунд.
  • Мы используем 2-образное пробы сопряженного T-теста для проверки, если образец позволяет нам принимать или отклонить нулевую гипотезу

Примечание. В этом случае предполагается, что те же элементы были отобраны несколько раз. Так, Это, по сути, тестируют 1 выборку на различия между двумя образцами с:

  • Нулевая гипотеза: Разница 0
  • Альтернативная гипотеза: Разница больше 0

Для расчета P-значения в Python:

from scipy.stats import truncnorm
from statsmodels.stats.weightstats import DescrStatsW as stats
# can we assume anything from our sample?
significance = 0.05
# we're checking if calls can be resolved in over 2 minutes
# so Ho == 120 seconds
null_hypothesis = 120
# Normally, in the real world, you would process an entire sample (i.e. sample_a)
# But for this test, we'll generate a sample from this shape, wherE:
# - min/max is the range of available options
# - sample mean/dev are used to define the normal distribution
# - size is how large the sample will be
min, max = (0, 300)
sample_mean_v1, sample_dev_v1, sample_size_v1 = (121, 56, 500)
sample_mean_v2, sample_dev_v2, sample_size_v2 = (125, 16, 500)
########################
# here - for our test - we're generating a random string of durations to be our sample
# these are in a normal distribution between min/max, normalised around the mean
sample_v1 = truncnorm(
 (min - sample_mean_v1) / sample_dev_v1,
 (max - sample_mean_v1) / sample_dev_v1,
 loc=sample_mean_v1,
 scale=sample_dev_v1).rvs(sample_size_v1)
sample_v2 = truncnorm(
 (min - sample_mean_v2) / sample_dev_v2,
 (max - sample_mean_v2) / sample_dev_v2,
 loc=sample_mean_v2,
 scale=sample_dev_v2).rvs(sample_size_v2)
# Get the stat data
# note that this is, in effect, a sample t-test on the differences
# we want to see if v2 is slower than V1 so we get the differences and check the probability that they
# are larger than the null hypothesis here (of the default = 0.0)
(t_stat, p_value, degree_of_freedom) = stats(sample_v2 - sample_v1).ttest_mean(alternative='larger')
# report
print('t_stat: %0.5f, p_value: %0.5f' % (t_stat, p_value))
if p_value > significance:
  print("Fail to reject the null hypothesis - we have nothing else to say")
else:
  print("Reject the null hypothesis - suggest the alternative hypothesis is true")

В следующем посте я сосредоточен на тестировании частотных образцов.

  • ЧАСТЬ Я: Введение в гипотезу тестирования
  • Часть II: Гипотеза тестирования образцов на основе пропорции
  • Часть IV: Гипотеза тестирования частотных образцов

Оригинал: “https://dev.to/sonalake/part-3-hypothesis-testing-of-mean-based-samples-5c16”