Bootstrap Sampling을 이해하고 활용하기
Bootstrap Sampling이란 무엇인가?
- Bootstrap Sampling은 통계학(Statistics)과 데이터 과학(Data Science)에서 널리 사용되는 강력한 방법론(Methodology) 중 하나임.
- 이는 기존의 데이터를 활용하여 통계적 추정치(Statistical Estimates)를 계산하고 신뢰 구간(Confidence Intervals)을 추정하는 방법임.
- 특히, 표본의 크기(Sample Size)가 작거나 데이터의 분포(Distribution)에 대한 가정이 어려운 경우에 유용함.
Bootstrap Sampling의 기본 개념
Bootstrap Sampling의 핵심 아이디어는 Resampling with Replacement(복원 추출)임.
Bootstrap Sampling은
- Resampling with Replacement를 통해 다양한 샘플을 얻고,
- 이를 바탕으로 통계적 추정치를 계산함.
Bootstrap Sampling을 통해
- n개의 데이터 포인트를 가지는 dataset 1개를
- n개 (더 작게도 사용가능)의 데이터 포인트를 가지는 dataset 1000개를 얻어내는 것도 가능하다.
- 이를 통해 population의 variance를 잘 근사할 수 있음.
population의 variance를 잘 근사하는 이유
복원 추출로 다양한 샘플 생성: Bootstrap Sampling은 원본 데이터를 복원 추출하여 여러 개의 샘플을 생성함. 이를 통해 모집단의 특성을 반영한 다양한 샘플 분포를 얻을 수 있음.
통계적 추정의 안정성: Bootstrap Sampling은 반복 추출을 통해 많은 샘플 (n개의 데이터포인트를 가지는 1000개의 샘플)을 생성하고, 각 샘플의 통계량을 계산하여 평균화함. 이는 통계적 추정의 변동성을 줄이고 안정성을 높이는 데 기여함.
원본 데이터의 분포 반영: Bootstrap Sampling은 원본 데이터의 분포를 그대로 반영함. 이를 통해 모집단 분산을 추정할 때, 원본 데이터의 특성을 고려한 추정을 할 수 있음.
큰 표본 크기의 중요성: 많은 Bootstrap Sample을 생성함으로써, 추정치의 신뢰성을 높일 수 있음. 위의 언급처럼 1000개의 Bootstrap Sample을 생성하여 population variance을 추정하므로 높은 신뢰성을 가짐.
참고로, 같은 수의 샘플로 Resampling with Replacement를 한다면, 확률적으로 원래 샘플 중 2/3 만이 사용되기 때문에 나머지 1/3 (out of bag이라고 불림)로 validation도 가능해진다 .
2024.06.20 - [.../Math] - [ML] Out of Bag: 유도하기.
Resampling with Replacement(복원 추출)이란,
- 원래 데이터에서 샘플을 추출한 후
- 다시 그 샘플을 원래 데이터에 포함시켜
- 또 다른 샘플을 추출하는 과정을 말함.
Bootstrap Sampling의 일반적인 단계
Bootstrap Sampling 과정은 다음과 같음.
- 데이터 준비(Data Preparation):
- 분석하고자 하는 원본 데이터를 준비함.
- 목적 설정(Goal Setting):
- Population(모집단)의 특정 통계량(Population Parameter, 예: 평균(Mean), 분산(Variance) 등)과 같이
- 추정하고자 하는 목적을 설정함.
- 부트스트랩 샘플 생성(Bootstrap Sample Generation):
- 원래 데이터에서
- 동일한 크기(더 작게도 사용하는 경우도 있음)의 샘플을 "Resampling with Replacement"하여
- 여러 개의 새로운 샘플을 만듦.
- 통계적 추정 계산(Calculation of Statistical Estimates):
- 각 부트스트랩 샘플에서 관심 있는 통계량을 계산함.
- 정렬 및 신뢰 구간 계산(Sorting and Confidence Interval Calculation):
- 여러 부트스트랩 샘플로부터 얻은 통계량을 정렬하고,
- 신뢰 구간을 계산함.
- 해석(Interpretation):
- 계산된 신뢰 구간을 해석함.
예시: 학생 성적 데이터로 부트스트랩 신뢰 구간 계산하기
아래의 예시는 구체적인 수치를 사용하여 Bootstrap Sampling을 이용해 95% 신뢰 구간을 계산하는 과정을 보여줌.
- 데이터 준비(Data Preparation):
- 한 반 학생들의 성적 데이터 100개가 있다고 가정함. (n = 100)
- 목적 설정(Goal Setting):
- 이 데이터로부터 모집단의 평균 성적을 추정하고,
- 95% 신뢰 구간을 계산하고자 함. (α = 0.05)
- 부트스트랩 샘플 생성(Bootstrap Sample Generation):
- 원래 데이터에서 크기 40의 샘플을 "Resampling with Replacement(복원 추출)"하여 새로운 샘플을 만듦.
- 이 과정을 여러 번 반복하여 많은 부트스트랩 샘플을 생성함.
- 일반적으로 1000번 정도 반복함. (R = 1000)
- 통계적 추정 계산(Calculation of Statistical Estimates):
- 각 부트스트랩 샘플에서 관심 있는 통계량, 여기서는 평균 성적을 계산함.
- 정렬 및 신뢰 구간 계산(Sorting and Confidence Interval Calculation):
- 1000개의 샘플 평균 값을 오름차순으로 정렬함.
- 그 후, 하위 2.5% 백분위수와 상위 97.5% 백분위수를 확인하여 신뢰 구간을 계산함.
- 해석(Interpretation):
- 이 두 값 사이의 범위가 95% 신뢰 구간이며,
- 이 범위 안에 모집단의 실제 평균 성적이 포함될 확률이 95%임.
예시 코드: 학생 성적 데이터로 부트스트랩 신뢰 구간 계산하기
아래의 예시 코드는 Bootstrap Sampling을 이용하여 95% 신뢰 구간을 계산하는 과정을 Python 코드로 보여줌.
import numpy as np
# 원래 데이터 (예시 데이터)
original_data = np.random.randint(60, 100, size=100)
# 신뢰 수준 설정
alpha = 0.05
# Bootstrap Sampling
bootstrap_samples = np.random.choice(original_data, (1000, 40), replace=True)
# 각 샘플의 평균 계산
sample_means = np.mean(bootstrap_samples, axis=1)
# 오름차순 정렬
sorted_means = np.sort(sample_means)
# 신뢰 구간 계산
lower_bound = np.percentile(sorted_means, 2.5)
upper_bound = np.percentile(sorted_means, 97.5)
print(f"95% 신뢰 구간: ({lower_bound}, {upper_bound})")
이 예시에서
np.random.choice
함수는 복원 추출을 사용하여 원래 데이터에서 새로운 샘플을 생성함.- 각 샘플은 원래 데이터의 일부 (크기 40)로 구성되며, 데이터 포인트의 조합은 매번 달라짐.
- 이렇게 생성된 부트스트랩 샘플을 사용하여 평균을 계산하고 신뢰 구간을 추정할 수 있음.
예시: Bootstrap Sampling 활용하여 population mean 과 variance 추정
본 예시에서는 Bootstrap Sampling 을 활용하여 모집단 분산을 추정하는 방법을 보여주는 것임.
데이터:
다음 표는 온라인 쇼핑몰에서 판매되는 제품의 가격 데이터를 나타낸 것임.
이 데이터를 기반으로 모집단 mean과 variance를 추정하고자 함.
제품 번호 | 가격 |
---|---|
1 | 52000 |
2 | 38000 |
3 | 45000 |
4 | 61000 |
5 | 49000 |
6 | 32000 |
7 | 43000 |
8 | 55000 |
9 | 47000 |
10 | 39000 |
1. 부트스트랩 샘플링 수행:
- 샘플 크기 설정: 본 예시에서는 모집단 크기와 동일한 크기인 10개의 데이터 포인트로 구성된 부트스트랩 샘플을 1000번 생성함.
- 샘플 생성: 다음 코드는 Python 라이브러리를 사용하여 부트스트랩 샘플을 생성하는 예시임.
import numpy as np
# 원본 데이터
original_data = np.array([52000, 38000, 45000, 61000, 49000, 32000, 43000, 55000, 47000, 39000])
# 부트스트랩 샘플링 수행
num_samples = 1000
sample_size = len(original_data)
bootstrap_samples = np.empty((num_samples, sample_size))
for i in range(num_samples):
# 복원 추출로 부트스트랩 샘플 생성
bootstrap_sample = np.random.choice(original_data, size=sample_size, replace=True)
bootstrap_samples[i] = bootstrap_sample
2. 각 부트스트랩 샘플의 mean과 variance 계산:
각 부트스트랩 샘플에서 mean과 variance를 다음 공식을 사용하여 계산함.
$$ \text{sample_mean} = \frac{1}{n} \sum x_i $$
$$ \text{sample_variance} = \frac{1}{(n - 1)} \sum (x_i - \text{sample_mean})^2 $$
여기서,
- $\text{sample_variance}$: 부트스트랩 샘플 분산
- $x_i$: 부트스트랩 샘플 데이터 포인트
- $\text{sample_mean}$: 부트스트랩 샘플 평균
- $n$: 부트스트랩 샘플 크기
3. Population mean 과 variance 추정:
부트스트랩 샘플 variance와 mean의 평균을 모집단 variance와 mean으로 추정함.
# 각 부트스트랩 샘플의 평균 및 분산 계산
sample_means = np.mean(bootstrap_samples, axis=1)
sample_variances = np.var(bootstrap_samples, axis=1, ddof=1)
# 모집단 평균 및 분산 추정
population_mean_estimate = np.mean(sample_means)
population_variance_estimate = np.mean(sample_variances)
print(f"추정된 모집단 평균: {population_mean_estimate}")
print(f"추정된 모집단 분산: {population_variance_estimate}")
결과 해석:
본 예시에서 부트스트랩 샘플링을 통해 추정된 모집단 평균은 약 45,100원이며, 모집단 분산은 약 102,400,000원^2임.
Bootstrap Sampling의 장점
- 분포에 대한 가정 불필요:
- Bootstrap Sampling은 데이터의 분포에 대한 가정을 필요로 하지 않음.
- 이는 데이터의 분포를 사전에 알기 어려운 경우에 특히 유용함.
- 적용 범위의 넓음:
- Bootstrap Sampling은 표본 크기가 작을 때나 복잡한 통계 모델에서도 사용 가능함.
- 다양한 상황에서 유연하게 적용할 수 있음.
- 실용적이고 직관적:
- 실제 데이터에 기반한 추정을 제공하여 해석이 직관적임.
- 통계적 추정을 쉽게 이해할 수 있음.
Bootstrap Sampling의 단점
- 계산 비용이 높음:
- Bootstrap Sampling은 많은 반복 추출과 계산이 필요하기 때문에 계산 비용이 높음.
- 대규모 데이터셋이나 복잡한 모델에서는 계산 시간이 많이 소요될 수 있음.
- 추정의 정확성 한계:
- 원본 데이터가 모집단을 충분히 대표하지 못하는 경우(not representative),
- Bootstrap Sampling을 통해 얻은 추정치 역시 정확하지 않을 수 있음.
- 이는 샘플링의 근본적인 한계임.
- 복잡한 의존성 문제:
- 데이터 포인트 간의 강한 (또는 복잡한) correlation 이 있는 경우,
- Bootstrap Sampling의 결과가 왜곡될 수 있음.
- 독립성 가정이 위배될 때 신뢰성이 떨어질 수 있음.
결론
Bootstrap Sampling을 활용하여 더 정확한 통계적 추정치를 얻고, 데이터 분석의 신뢰성을 높일 수 있음.
그러나 단점도 고려하여 적절한 상황에서 사용하는 것이 중요함.
같이 읽어보면 좋은 자료들
https://ds31x.blogspot.com/2023/07/term-bootstrap.html
'... > Math' 카테고리의 다른 글
[CV] Intersection and Ideal Point; Homogeneous Coordinate and Cross Product (1) | 2024.06.16 |
---|---|
[Math] Weighted Least Square (1) | 2024.06.13 |
[Math] Importance of Continuous and Smooth Functions in Optimization Problems (0) | 2024.06.01 |
[Math] Optimization Problem 의 종류 (0) | 2024.06.01 |
[Math] Optimization 이란 (Introduction) (0) | 2024.06.01 |