제3부분: 균일치를 바탕으로 한 샘플의 가설 검사
비례에 기반한 샘플에 대해 z테스트를 어떻게 실행하는지 개술한 코드 샘플들
이 글은 현재 균일치에 기초한 견본을 상세하게 소개할 것이다.
If any of the terms – Null Hypothesis, Alternative Hypothesis, p-value – are new to you, then before carrying on with this one.
무엇이 균일치에 기초한 견본입니까?
이런 상황에서 우리가 흥미를 느끼는 것은 일부 견본의 산술 평균치를 검사하는 것이다.이것은 샘플의 평균치가 어떤 예상치와 일치하는지 검사하거나 두 개의 서로 다른 그룹에서 온 두 샘플을 비교하거나 같은 그룹에서 온 두 샘플을 비교하여 관여 전후에 진행할 수 있다.
샘플 품질에 대한 요구
이러한 시험의 경우 다음과 같은 샘플링 규칙이 필요합니다.
랜덤이었어
샘플은 반드시 전체 인원에서 온 무작위 샘플이어야 한다
정상이었어
샘플의 예상치는 반드시 충분해야 한다. 이 테스트에 대해 좋은 경험법은 샘플의 양을 정하는 것이다. 변수마다 예상 계수는 적어도 5이어야 한다.
예를 들어 한 네트워크의 크기가 5%의 실시간 데이터와 95%의 전력을 다해 메시지를 전달한다고 가정하면 이것은 우리가 예상한 주파수이다.
샘플의 양이 50이라는 것은 우리가 이 샘플에 약 2.5개의 실시간 데이터 메시지가 있을 것으로 예상한다는 것을 의미한다. 이것은 5개보다 작기 때문에 샘플이 크지 않기 때문에 거절당할 것이다.
인디펜던트
샘플은 반드시 독립적이어야 한다. 이러한 테스트에 대해 좋은 경험법은 샘플의 양이 전체 인구의 10퍼센트보다 적다는 것이다.
f기 샘플의 테스트
this git repository에서 모든 코드 예시를 제공합니다. 이 코드들은 공공 statsmodels 라이브러리를 사용하여 테스트를 수행합니다.
샘플 t 검사
Compare the proportion in a sample to an expected value
여기에 우리는 평균치로 정의된 a가 하나 있는데, 우리는 기본인구의 전체 평균치가 어느 예상 평균치보다 크거나 작거나 같지 않다고 단언할 수 있는지 보고 싶다.
따라서 이 예에서 우리가 호출 센터에 대해 샘플을 추출하여 평균 호출 시간이 2분을 초과했는지 검사하고자 한다고 가정한다.
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")
두 샘플 독립 t 검사
Compare the mean of the samples from 2 different populations
여기서 우리는 두 가지 견본이 있다. 두 개의 서로 다른 집단에서 얻은 것이다. 평균수로 정의된 것이다. 우리는 한 기본 집단의 전체 평균수가 다른 집단보다 크거나 작거나 다르다고 단언할 수 있는지를 보고 싶다.
그래서 이 예에서 우리는 두 개의 서로 다른 호출 센터를 비교하고 그들의 호출 시간이 어떻게 서로 관련되어 있는지 보려고 한다.
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")
더블 샘플 배합 t 검사
Compare the mean of two samples from the same population
여기서 우리는 두 개의 견본이 있다. 같은 사람들로부터 얻은 것이다. 평균치로 정의된 것이다. 우리는 두 번째 견본에서 기초인들의 평균치가 첫 번째 견본의 평균치보다 크거나 작거나 같지 않다고 단언할 수 있는지 보고 싶다.
그래서 이 예에서 우리가 코드 변경을 했다고 가정하면 속도가 느려진 것 같아서 변경 전후의 성능을 샘플링하여 속도가 정말 느려졌는지 보려고 한다.
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")
다음 글에서 나는 주파수를 바탕으로 하는 샘플 테스트를 중점적으로 소개할 것이다.Reference
이 문제에 관하여(제3부분: 균일치를 바탕으로 한 샘플의 가설 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sonalake/part-3-hypothesis-testing-of-mean-based-samples-5c16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)