부트스트랩 (Bootstrap Resampling)
쉽게 풀면
주머니 속에 구슬 100개가 들어 있다고 해봅시다. 이 구슬들의 "평균 무게"가 얼마나 안정적인 값인지 알고 싶은데, 새로운 구슬을 더 구할 수는 없습니다. 이럴 때 부트스트랩은 이렇게 합니다. 주머니에서 구슬 하나를 뽑아 무게를 기록하고, 그 구슬을 다시 주머니에 넣습니다(복원추출). 이 과정을 100번 반복해 "새로운 100개짜리 표본"을 하나 만들고, 그 표본의 평균을 계산합니다. 이 작업을 수천 번 되풀이하면 "평균 무게"가 매번 조금씩 다르게 나오는데, 그 값들이 흩어진 정도를 보면 원래 평균 추정치가 얼마나 믿을 만한지 감을 잡을 수 있습니다. 즉, 딱 하나 가진 표본을 이리저리 재활용해서 마치 여러 번 실험한 것과 비슷한 정보를 얻어내는 방법입니다.
왜 중요한가
많은 실증 연구에서 다루는 통계량(평균 차이, 회귀계수, 상관계수 등)은 이론적으로 정규분포를 가정해야만 신뢰구간이나 p값을 깔끔하게 계산할 수 있습니다. 하지만 실제 데이터는 표본 크기가 작거나 분포가 치우쳐 있는 경우가 많아 이 가정이 성립하지 않을 때가 흔합니다. 부트스트랩은 분포에 대한 가정 없이도 불확실성을 추정할 수 있게 해주기 때문에, 심리학·의학·경제학·머신러닝 평가 등 분야를 가리지 않고 "이 결과가 우연이 아니라고 얼마나 확신할 수 있는가"를 답하는 표준 도구로 자리 잡았습니다. 계산 능력이 저렴해진 오늘날에는 복잡한 통계량이나 모델 성능 지표에도 손쉽게 적용할 수 있어 활용 범위가 계속 넓어지고 있습니다.
논문에서는 이렇게 쓰입니다
이 문장은 "원래 표본에서 복원추출을 1,000번 반복해 1,000개의 새로운 표본을 만들고, 그 결과들의 분포를 이용해 신뢰구간을 계산했다"는 뜻입니다. 이 방법은 데이터가 정규분포를 따른다는 가정이 부담스러울 때 특히 유용합니다.
머신러닝 논문에서는 단일 테스트셋 점수만으로는 성능 차이가 우연에 의한 것인지 판단하기 어렵기 때문에, 테스트 샘플을 반복 재추출해 정확도나 F1 점수 같은 지표가 얼마나 흔들리는지를 함께 보고하는 경우가 많습니다.
사회과학 분야에서는 매개효과나 조절효과처럼 여러 계수를 곱해서 얻는 간접효과의 분포가 정규분포를 따르지 않는 경우가 많아, 전통적인 검정 대신 부트스트랩으로 신뢰구간을 구해 유의성을 판단하는 방식이 널리 쓰입니다.
조금 더 깊게 보면
부트스트랩에는 몇 가지 변형이 있습니다. 가장 기본적인 방식은 표준오차만을 이용해 정규분포 기반으로 신뢰구간을 만드는 방법이고, 재추출된 값들을 크기순으로 늘어놓아 그 자체의 백분위수(percentile)를 신뢰구간으로 사용하는 percentile bootstrap도 널리 쓰입니다. 편향과 비대칭성을 보정한 BCa(bias-corrected and accelerated) 방법은 더 정교하지만 계산이 복잡해 소프트웨어 패키지에 의존하는 경우가 많습니다. 또한 회귀분석처럼 관측치들 사이에 구조가 있는 경우에는 개별 관측치가 아니라 잔차(residual)를 재추출하는 방식이 쓰이기도 하며, 시계열이나 군집 데이터처럼 독립성 가정이 깨지는 상황에서는 블록 단위로 재추출하는 block bootstrap 같은 확장이 사용됩니다. 재추출 횟수(B)가 너무 적으면 추정치가 불안정해지므로, 논문에서 B값과 함께 어떤 종류의 신뢰구간을 사용했는지 밝히는 것이 일반적입니다.
주의할 점
부트스트랩은 원래 표본을 반복해서 재사용하는 방법이기 때문에, 원래 표본 자체가 모집단을 제대로 대표하지 못하면 아무리 반복해도 편향된 결과만 계속 재생산하게 됩니다. "표본이 작으니 부트스트랩으로 데이터를 늘리면 된다"는 생각은 오해이며, 부트스트랩은 새로운 정보를 만들어내는 것이 아니라 가진 정보의 불확실성을 가늠하는 도구입니다. 신뢰구간과 함께 이해하면 좋습니다.