용사냥꾼69

np.random.choice 으로 구현하는 부트스트랩(bootstrapping) 본문

파이썬/파이썬-AI 기본

np.random.choice 으로 구현하는 부트스트랩(bootstrapping)

용사냥꾼69 2023. 2. 16. 22:30
728x90

부트스트랩


간단히 말해서 현재 가진 데이터를 활용하여 더 큰 범위의 집단을 파악하는 것이다.

대부분의 통계학에서 쓰이는 기법이 다 그렇듯이, 비용과 효율의 현실적인 문제로 인하여 쓰인다고 본다

np.random.choice


np.random.choice 공식문서 에 따르면

np.random.choice(a, size, replace, p)로 총 4개의 매개변수가 들어가는데

  • a 는 샘플 추출을 할 데이터를 말하며
  • size 는 한 번에 추출할 샘플의 크기
  • replace 는 True일 경우 복원 추출이며 기본값이 True이다.
  • p 는 데이터 내의 원소들이 각각 추출될 확률이다. 기본값은 모두 같은 확률.
aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']

np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])

array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], # random
 dtype='<U11')

예제처럼 pooh가 3번 같이 나온 것을 보면 복원추출이 되었다는 것을 확인할 수 있다.

기능 구현


이를 활용하여 부트스트랩을 구현하면

sample_of_10 = []

np.random.seed(10) # 같은 결과의 재생산을 위하여 seed를 배정한다. 엄밀히 말해서 완전한 무작위적인 난수는 아님

for _ in range(10000):
  sample = np.random.choice(data, 10)
  sample_of_10.append(sample.mean())

다음과 같고, 이는 10개의 표본을 복원추출하여 평균을 낸 값을 10000개를 생성한 것이다.

이러한 부트스트래핑을 이용하여 우리는 모수에 대한 추정이 가능하다.

유의점


그러나, 당연히 100% 신뢰성을 지닐 수는 없으며 이에 따라서 신뢰구간으로 오차에 대한 언급을 해줘야 한다.

ex) 여론 조사로 A 후보에 대한 지지율의 평균이 24%일 때,

신뢰구간 95% 구간이 20%와 28%라면

A후보의 지지율은 24%이며 신뢰수준 95%에 표본오차는 ±4%라고 말한다.

Comments