Today I Learned (TIL)/Python

[TIL] 통계학 기초 - 2주차(1)

신짜린 2024. 8. 1. 15:26

1. 모집단과 표본

- 모집단과 표본

 모집단이란 관심의 대상이 되는 전체 집단을 말하고 표본이란 이 모집단에서 추출한 일부를 말한다.

 표본을 사용하는 이유는 모든 데이터를 수집하는 것은 물리적으로 불가능한 경우가 많고 비용과 시간을 절약할 수 있다는 현실적인 제약 때문이다.

- 대표성

 잘 설계된 표본은 모집단의 특성을 반영할 수 있다. 이를 통해 표본에서 얻은 결과를 모집단 전체에 일반화할 수 있다.

 무작위로 표본을 추출하면 편향을 최소화하고 모집단의 다양한 특성을 포함할 수 있다.

- 데이터 관리 및 모델 검증

 큰 데이터셋은 분석에 많은 컴퓨팅 자원이 필요할 수 있지만 작은 표본은 이런 부담을 줄여준다. 또한, 작은 표본은 데이터 품질을 더 쉽게 관리하고 오류나 이상값을 식별하여 수정할 수 있다.

 표본 데이터를 사용하여 통계적 모델을 검증할 수 있는데 모델이 표본 데이터에 잘 맞는다면 모집단에도 잘 맞을 가능성이 높다.

 

2. 전수조사와 표본조사

- 전수조사

 모집단 전체를 조사하는 방법으로 대규모일 경우 비용과 시간이 많이 든다.

- 표본조사

 표본만을 조사하는 방법으로 비용과 시간이 적게 들지만 표본이 대표성을 가져야 한다.

- 실제 적용

 실제로 모든 데이터를 다 수집할 수 없을 때 표본을 사용하는데 도시연구/의료연구/시장조사/정치여론조사 등에 사용된다.

import numpy as np
import matplotlib.pyplot as plt

# 모집단 생성 (예: 국가의 모든 성인의 키 데이터)
population = np.random.normal(170, 10, 1000) # (평균, 편차, 1000개)로 이루어진 데이터를 생성

# 표본 추출
sample = np.random.choice(population, 100) # 생성된 1000개의 모집단 중 100개를 무작위로 추출

plt.hist(population, bins=50, alpha=0.5, label='population', color='blue') # alpha 히스토그램 막대의 투명도를 지정. 0(투명)/1(불투명)
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')
plt.legend()
plt.title('population and sample distribution')
plt.show()

 

- numpy.random

 numpy.random모듈은 NumPy 라이브러리의 일부로 다양한 확률 분포에 따라 난수를 생성하는 기능을 제공한다. 데이터 분석, 시뮬레이션 방법 등 다양한 분야에서 사용된다.

 1) np.random.normal: 정규분포(가우시안 분포)를 따르는 난수를 생성한다.

numpy.random.normal(loc=0.0, scale=1.0, size=None)
# `loc` (float): 정규분포의 평균 (기본값: 0.0)
# `scale` (float): 정규분포의 표준편차 (기본값: 1.0)
# `size` (int 또는 tuple of ints): 출력 배열의 크기 (기본값: None, 즉 스칼라 값 반환)

 

 2) np.random.choice: 주어진 배열에서  무작위로 선택된 요소를 반환하는 기능을 제공한다.

numpy.random.choice(a, size=None, replace=True, p=None)
# `a` (1-D array-like or int): 샘플링할 원본 배열. 정수인 경우 `np.arange(a)`와 동일하게 간주됩니다.
# `size` (int 또는 tuple of ints): 출력 배열의 크기 (기본값: None, 즉 단일 값 반환)
# `replace` (boolean): 복원 추출 여부를 나타냅니다. True면 동일한 요소가 여러 번 선택될 수 있습니다 (기본값: True)
# `p` (1-D array-like, optional): 각 요소가 선택될 확률. 배열의 합은 1이어야 합니다.

 

3. 표본오차와 신뢰구간

- 표본오차 (Sampling Error)

 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이를 말하며 표본 크기가 클수록 표본오차는 작아진다. 표본오차는 표본이 모집단을 완벽하게 대표하지 못하기 때문에 발생하는 것으로 표본의 크기와 표본 추출 방법에 따라 달라질 수 있다.

- 신뢰구간 (Confidence Interval)

 모집단의 특정 파라미터(평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위를 나타낸다.

 신뢰구간 계산 방법은 |신뢰구간 = 표본평균 ± z x 표준오차| 형태이다. z는 선택된 신뢰수준(z값의 95% 신뢰수준 값은 1.96)에 해당하는 z-값이다.

모집단과 표본 분포(왼쪽) ❘ 신뢰구간 시각화(오른쪽)

# 수학점수 표본으로부터 모집단의 평균 범위를 계산해보기
# 100명의 학생을 표본으로 추출하여 그들의 평균 수학 점수를 구하고, 이 점수의 신뢰구간을 계산.
import scipy.stats as stats

# 표본 평균과 표본 표준편차 계산
sample_mean = np.mean(sample)
sample_std = np.std(sample)

# 95% 신뢰구간 계산
conf_interval = stats.t.interval(0.95, len(sample)-1, loc=sample_mean, scale=sample_std/np.sqrt(len(sample)))

print(f"표본 평균: {sample_mean}")
print(f"95% 신뢰구간: {conf_interval}")

 

- stats.t.interval

 scipy.stats는 SciPy 라이브러리의 일부로, 통계 분석을 위한 다양한 함수와 클래스들을 제공하는 모듈이다.

 scipy.stats.t.interval 함수는 주어진 신뢰 수준에서 t-분포(밑에서 얘기하는 student t 분포)를 사용하여 신뢰 구간(confidence interval)을 계산하는 데 사용된다.

scipy.stats.t.interval(alpha, df, loc=0, scale=1)
# alpha: 신뢰 수준(confidence level)을 의미합니다. 예를 들어, 95% 신뢰 구간을 원하면 `alpha`를 0.95로 설정합니다.
# df: 자유도(degrees of freedom)를 나타냅니다. 일반적으로 표본 크기에서 1을 뺀 값으로 설정합니다 (`df = n - 1`).
# loc: 위치(parameter of location)로, 일반적으로 표본 평균을 설정합니다.
# scale: 스케일(parameter of scale)로, 일반적으로 표본 표준 오차(standard error)를 설정합니다. 표본 표준 오차는 표본 표준편차를 표본 크기의 제곱근으로 나눈 값입니다 (`scale = sample_std / sqrt(n)`).

'Today I Learned (TIL) > Python' 카테고리의 다른 글

[TIL] 통계학 기초 - 3주차  (0) 2024.08.02
[TIL] 통계학 기초 - 2주차(2)  (0) 2024.08.01
[TIL] 통계학 기초 - 1주차  (0) 2024.08.01
[TIL] Python 베이직 - 5회차  (0) 2024.07.30
[TIL] Python 베이직 - 4회차  (0) 2024.07.25