팁뚠이 입니다. 통계학에서 부트스트랩(Bootstrap)이 1970년대에 개발되어, 당시엔 혁명적이었습니다. 80, 90년대에도 굉장히 대단한 이론으로 꼽히고, 현재에도 머신러닝, 여론조사 등 많은 부분에서 사용되는 혁명적인 이론입니다. 부트스트랩이 읽기만 해선 쉬운 데, 생각보다 감이 안 오는 경우가 많아서 다른 블로그들을 찾아봤는 데 대부분 읽어보면 내용은 좋은 데, 워낙 어렵게 썼고, 수식과 영어가 남발되는 경향이 있습니다. 용어에도 익숙하지 않은 데, 이렇게 어렵게 쓰면 전공자가 아니고선 바로 이해가 되지 않겠구나 생각이 들어서 본 포스팅을 작성합니다.
부트스트랩은 표본에서 다시 표본을 만들 수 있는 기술이다.
부트스트랩은 통계학에서 손꼽히는 굉장히 우수한 기술입니다. 표본에서 다시 표본을 만든다는 게 이해가 어려울 테니, 예로 설명을 드리면 일반적으로 여론조사 등의 통계를 낼 때, 표본을 추출하는 작업을 하는 데, 이때 비용과 시간이 많이 소요됩니다. 그래서 한 번만 표본을 뽑아서, 이걸 토대로 여러 표본을 만들려고 했는 데, 이때 사용하는 기술이 부트스트랩입니다. 저도 처음엔 이해를 못 했는 데, 어찌 보면 간단한 기술입니다.
복원 추출(하나를 뽑고 다시 그걸 넣어서 다시 뽑을 수도 있음)을 통해 표본 재생성
처음에 저는 이게 그냥 파이썬에서 shuffle과 같이 순서만 바꾸는 거 아닌가 생각했는 데, 조금 다릅니다. 그림을 통해 설명하도록 하겠습니다. 아래와 같이 공이 1~5까지 5개가 있는 표본이 1개 추출된 경우, 이 표본 1개로는 어떠한 통계 결과도 도출하기 어렵습니다. 이것만 가지고 표본 개수를 늘릴 수 있는 방법은, 기존에 뽑은 1번 표본에서, 중복이 허용되는 복원 추출 방식으로 표본을 2번, 3번, 4번 차례로 구합니다. 이렇게 되면, 모집단(=전체)에서 뽑은 표본은 1개고 나머지는 기존 표본에서 반복해서 복원 추출로 늘려갈 수 있습니다.
처음엔 이 방식이 과연 효과가 있을까 생각을 했습니다. 현재 예시는 방법을 이해하기 쉽게 하기 위해 임의로 만든 상황이다 보니 효과가 없겠지만 만약 모집단의 갯수가 수천 개고 1번 표본의 개수도 몇십 개 이상 된다면 새로운 표본은 중복되는 상황이 적을 것입니다. 다시 말해, 표본이 모집단의 분포를 잘 담고 있는 상황에서, 부트스트랩을 통해 중복으로 표본을 추출해도 모집단의 분포가 이어진다는 얘기입니다. 위 예시를 파이썬으로 간단히 확인하겠습니다.
import numpy as np
from sklearn.utils import resample
a = np.array([1,2,3,4,5])
for _ in range(3):
a_sample = resample(a)
print(a_sample)
# 결과
# [2 4 3 2 5]
# [5 1 3 4 3]
# [1 2 1 2 5]
sklearn 라이브러리의 resample 함수를 활용하면, 부트스트랩을 간단하게 사용할 수 있습니다. 1,2,3,4,5로 구성된 1번 표본을 가지고, 3개의 추가 표본을 만들어 낼 수 있습니다. 이렇게 표본을 늘리는 이유는 밑에 포스팅에 있는 중심 극한 정리에 연결됩니다. 표본이 많아지면 모집단의 분포가 어떠하든 간에 정규분포를 이룬다는 통계학에서 가장 손에 꼽는 정리입니다. 이 중심 극한 정리를 가정해 통계적 분포를 예상할 수 있기 때문에, 부트스트랩이 유용합니다. 중심 극한 정리에 이어 부트스트랩 개념은 꼭 숙지하시길 바랍니다.
'파이썬팁' 카테고리의 다른 글
AWS Sagemaker 초보자를 위한 개념과 실습(2) (0) | 2022.04.22 |
---|---|
AWS Sagemaker 초보자를 위한 개념과 실습(1) (0) | 2022.04.21 |
통계 중심극한정리 개념 파이썬 코드로 이해하기 (0) | 2022.04.17 |
파이썬 속도를 빠르게 numpy 브로드캐스트를 사용하기 (0) | 2022.04.16 |
파이썬 클래스 상속 개념 잡기 (0) | 2022.04.08 |