Home Statistics
Post
Cancel

Statistics

statistical inference : 통계적 추론

  • 표본의 통계량을 이용하여 모집단의 모수에 대해 추측하고자 하는 것.
  • 추정(estimation) + 가설검증(hypothesis testing) 으로 구성된다.
    • estimation : 표본을 통해 모집단의 특성을 추측하는 과정
    • hypothesis testing : 모집단 가설에 대해, 표본이 가진 정보를 통해 이를 검증하는 과정

Table of contents

  1. statistical inference : 통계적 추론
    1. 모집단(Population)
    2. 표본(Sample)
    3. 좋은 표본이란?
    4. 모수(parameter)와 통계량(statistic)
    5. 확률변수(ramdom variable)
    6. estimation (추정)
    7. hypothesis testing (가설검증)
    8. 유의확률 (p-value)
  2. (예) 새로운 시스템 도입 후 12개 지역의 연간 민원 접수 건수 비교
  3. (예) 새로운 시스템 도입 후 20개 지역의 연간 민원 접수 건수에 차이가 나는지를 검정
  4. 실제로는 지역에 관한 정보로 전/후 관측치가 연결되어 있고 관심은 전/후 값의 차이이므로 단일 표본의 평균 검정과 동일함 : paired t-test 고려
  5. (양측검정) 𝐻0
  6. : 𝜇𝑏𝑒𝑓𝑜𝑟𝑒=𝜇𝑎𝑓𝑡𝑒𝑟
  7. vs. 𝐻1
  8. : 𝜇𝑏𝑒𝑓𝑜𝑟𝑒≠𝜇𝑎𝑓𝑡𝑒𝑟
  9. paired T-test 시행
  10. (참고) 다른 출력 방식

모집단(Population)

정보를 얻고자 하는 전체 대상(집단)을 의미한다.

표본(Sample)

모집단 전체 집단을 알기 힘들거나, 수집하는데 비효율 적이므로, 모집단을 대표해주는 부분집합을 표본(sample) 이라 한다.

  • 표뵨평균
  • 중심극한정리 : 표본크기가 충분히 커짐에 따라, 정규분포로 근사한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# 파이썬 numpy의 확률변수 생성 함수를 활용한 중심극한정리 이해

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

np.random.seed(0) # 재생산을 위해 seed 고정 (고정하지 않으면 매번 생성되는 값이 달라진다.)

### **균등분포(uniform distribution)**를 가진 모집단에서 표본평균의 분포를 보기 위해 여러 개의 표본 추출

# 하나의 표본 - 가상의 모집단
uniform_sample = np.random.uniform(0, 5, 1000) 
sns.histplot(uniform_sample)
plt.title('Uniform distribution')
plt.show()

# uniform 분포에서 1000개의 표본을 생성하는 함수 
def sample_u_means(low, high, sample_size): 
    means = np.zeros(1000)
    for i in range(0, 1000):
        sample = np.random.uniform(low, high, sample_size)
        means[i] = sample.mean()
    return means

# uniform 분포에서 1000개의 표본을 생성하는 함수 
def sample_u_means(low, high, sample_size): 
    means = np.zeros(1000)
    for i in range(0, 1000):
        sample = np.random.uniform(low, high, sample_size)
        means[i] = sample.mean()
    return means


# 표본 크기가 작은 경우 : 표본크키 = 1
sample_size =  1
low = 0
high = 5

sns.histplot(sample_u_means(low, high, sample_size))
plt.title('sample size = 1')
plt.show()


# 1000개의 표본 생성 : 표본크기 = 30
# 표본의 크기가 큰 경우는 표본평균의 분포가 정규분포와 유사함을 알 수 있음 
sample_size =  30
low = 0
high = 5

sns.histplot(sample_u_means(low, high, sample_size))
plt.title('sample size = 30')
plt.show()



### **이항분포 B(5, 0.7)**를 가진 모집단에서 표본평균의 분포를 보기 위해 여러 개의 표본 생성 

# 하나의 표본
n = 5
p = 0.7
sample_size =  1000
binom_sample = np.random.binomial(n, p, sample_size)
sns.histplot(binom_sample)
plt.title('Binomial distribution')
plt.show()


# 이항분포에서 1000개의 표본을 생성하는 함수 
def sample_means(sample_size, n, p): 
    means = np.zeros(1000)
    for i in range(0, 1000):
        sample = np.random.binomial(n, p, sample_size)
        means[i] = sample.mean()
    return means


# 표본 크기가 작은 경우 : 표본크키 = 3
sample_size =  3
sns.histplot(sample_means(sample_size, n, p))
plt.title('sample size = 3')
plt.show()


# 표본 크기가 큰 경우 : 표본크키 = 5000
# 표본의 크기가 큰 경우는 표본평균의 분포가 정규분포와 유사함을 알 수 있음
sample_size =  5000
sns.histplot(sample_means(sample_size, n, p))
plt.title('sample size = 5000')
plt.show()

좋은 표본이란?

  • 관심있는 특성을 가진 개체들의 의식적 선택을 피해야 한다.
  • 연구목적을 얻기 위한 표본 선택을 하지 말아야 한다.
  • 추출된 표본을 다른 값으로 대채하거나 결측치를 함부로 대체하지 않아야 한다.

모수(parameter)와 통계량(statistic)

모수 : 모집단의 특성을 나타내는 양적인 척도를 의미하며, 모평균 모분산 등이 있다. 통계량 : 표본에서 얻어진 특성치들로, 표본평균 표본분산 등이 있다.

확률변수(ramdom variable)

  • 모집단에 대해, 어떤 값을 가질지에 대한 가능성을 확률로 표현
  • 이산형(discrete) 확률변수
    • 베르누이분포
    • 이항분포
  • 연속형(continous) 확률변수
    • 정규분포(normal distribution) : 좌우대칭(symmentric), 하나의 피크(unimodal), 벨모양(bell-shape)
      • 평균과 분산이 모양을 결정
      • 정규분포의 표준화를 통해, 어떤 정규분포든 간에 평균이 0이고 분산이 1인 표준정규분포로 변환이 가능함
    • T-분포 : 좌우대칭(symmentric), 하나의 피크(unimodal), 벨모양(bell-shape) + 자유도를 가짐
      • 언제나 평균이 0이다.
      • 정규분포에 비해 두꺼운 꼬리를 가진다.
      • 구간추정, 평균에 대한 가설검정 등에서 활용한다.

estimation (추정)

  • point estimation(점추정)
  • interval estimation(구간추정)
    • 신뢰수준 : 참값을 구하기 위한 작업을 반복하였을 때, 참값이 구해진 구간에 포함되어 있을 비율
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import pandas as pd
import numpy as np
from scipy import stats

sample = np.arange(0,10)
sample

# 표본에서 평균과 표준오차 계산 
sample_mean = np.mean(sample)
sample_se = stats.sem(sample)
print('표본평균= ', sample_mean, ', 표준오차= ', sample_se)
# 표본평균=  4.5 , 표준오차=  0.9574271077563381

# 모평균에 대한 99% 신뢰구간
confidence_level = 0.99
df = sample.size - 1
confidence_interval = stats.t.interval(confidence_level, df, sample_mean, sample_se)
print(confidence_interval)
# (1.388519354409619, 7.611480645590381) -> 모평균에 대한  99%  신뢰구간은 (1.39, 7.61)

# 모평균에 대한  95% 신뢰구간
confidence_level = 0.95
df = sample.size - 1
confidence_interval = stats.t.interval(confidence_level, df, sample_mean, sample_se)
print(confidence_interval)
# (2.3341494103866087, 6.665850589613392) -> 모평균에 대한  95% 신뢰구간은 (2.33, 6.67)로 신뢰수준이 낮아지면 구간의 크기가 작아짐

# 표본의 크기가 커지면?
sample = np.repeat(np.arange(0,10), 5)
sample

# 표본에서 평균과 표준오차 계산 
sample_mean = np.mean(sample)
sample_se = stats.sem(sample)
print('표본평균= ', sample_mean, ', 표준오차= ', sample_se)
# 표본평균=  4.5 , 표준오차=  0.41032590332414487

confidence_level = 0.95
df = sample.size - 1
confidence_interval = stats.t.interval(confidence_level, df, sample_mean, sample_se)
print(confidence_interval)
# (3.6754192266103853, 5.324580773389615)


## 아파트 실거래가 데이터 활용한 평균의 추정
import pandas as pd
apt = pd.read_excel('data/아파트_실거래가_서울.xlsx')
apt.rename(columns = {'전용면적(㎡)' : '면적', '거래금액(만원)' : '가격'}, inplace = True)
apt['단가'] = apt.가격 / apt.면적

# 데이터에서 단가의 평균과 표준오차 계산 
sample_mean = apt.단가.mean() # np.mean(apt.단가)도 동일
sample_se = apt.단가.sem() # stats.sem(apt.단가)도 동일
print('표본평균= ', sample_mean, ', 표준오차= ', sample_se)

confidence_level = 0.95
df = len(apt) - 1
confidence_interval = stats.t.interval(confidence_level, df, sample_mean, sample_se)
print(confidence_interval)

hypothesis testing (가설검증)

  • 귀무가설(null hypothesis : H0)
    • 그에 반하는 충분한 근거가 나올때까지 잠정적으로 참이라고 하는 가설
  • 대립가설(alternative hypothesis : H1)
    • 새로운 주장이고, 실제로 입증하기를 원하는 가설
  • 가설검증 절차
    1. 귀무가설, 대립가설 설정
    2. 검정통계량 계산 (기존에 통계학 바탕으로 수식이 이미 있음)
    3. 설정한 유의수준 하에서 검정통계량을 바탕으로 귀무가설 기각 여부 결정
  • T-Test : 모평균에 대한 가설검정
    • 모집단의 정규성을 가정할 수 있거나, 표본의 크기가 충분히 큰 경우 활용한다.

유의확률 (p-value)

  • 귀무가설 하에서 관찰된 통계량 만큼의 극단적인 값을 가질 확률
  • 검정통계량과 임계값을 비교하여 기각여부 결정 vs 유의확률(p-value)와 유의수준을 비교하는 방법은 결과적으로 동일함

  • 두 집단의 평균 비교 : 쌍체표본 T-검정 (Paired T-test) ```python

    (예) 새로운 시스템 도입 후 12개 지역의 연간 민원 접수 건수 비교

before = [130, 133, 132, 138, 140, 128, 140, 132, 126, 130, 125, 140] after = [120, 130, 121, 107, 132, 125, 141, 133, 118, 133, 111, 131]

import pandas as pd dat = pd.DataFrame({‘before’ : before, ‘after’ : after})

dat.mean()

import matplotlib.pyplot as plt import seaborn as sns

sns.boxplot(data=dat, showmeans=True) plt.show()

(예) 새로운 시스템 도입 후 20개 지역의 연간 민원 접수 건수에 차이가 나는지를 검정

실제로는 지역에 관한 정보로 전/후 관측치가 연결되어 있고 관심은 전/후 값의 차이이므로 단일 표본의 평균 검정과 동일함 : paired t-test 고려

(양측검정) 𝐻0

: 𝜇𝑏𝑒𝑓𝑜𝑟𝑒=𝜇𝑎𝑓𝑡𝑒𝑟

vs. 𝐻1

: 𝜇𝑏𝑒𝑓𝑜𝑟𝑒≠𝜇𝑎𝑓𝑡𝑒𝑟

paired T-test 시행

from scipy import stats

result = stats.ttest_rel(dat.before, dat.after) # (default) 양측검정 result

print(“검정통계량= %.3f , p-value = %.3f” % result)

(참고) 다른 출력 방식

t, p = result print(‘양측검정 p-value : %.4f’ % p)

p2 = p/2 print(‘단측검정 p-value : %.4f’ % p2)

```

This post is licensed under CC BY 4.0 by the author.