통계학 2주차 강의
1. 모집단과 표본
- 모집단 : 관심의 대상이 되는 전체 집단
- 표본 : 모집단에서 추출한 일부
- 표본을 사용하는 이유
- 현실적인 제약
- 비용과 시간 : 전체 모집단을 조사하는 것은 비용과 시간이 많이 들기 때문에 대부분의 경우 불가능하거나 비효율적이다. 표본 조사는 이러한 자원을 절약하면서도 유의미한 결과를 도출할 수 있는 방법
- 접근성 : 모든 데이터를 수집하는 것이 물리적으로 불가능한 경우가 많다.
- 대표성
- 표본의 대표성 : 잘 설계된 표본은 모집단의 특성을 반영할 수 있다. 이를 통해 표본에서 얻은 결과를 모집단 전체에 일반화할 수 있다
- 무작위로 표본을 추출하면 편향을 최소화하고 모집단의 다양한 특성을 포함할 수 있다
- 데이터 관리
- 데이터 처리의 용이성 : 표본 데이터를 사용하는 것은 전체보다 데이터 처리와 분석이 훨씬 용이. 큰 데이터셋은 분석에 많은 컴퓨팅 자원이 필요할 수 있지만, 작은 표본은 이런 부담을 줄여줌
- 데이터 품질 관리 : 작은 표본에서는 데이터 품질을 더 쉽게 관리하고, 오류나 이상값을 식별하여 수정할 수 있다.
- 모델 검증 용이
- 모델 적합도 테스트 : 표본 데이터를 사용하여 통계적 모델을 검증할 수 있다.
- 전수조사 : 모집단 전체를 조사하는 방법. 대규모일 경우 비용과 시간이 많이 듦
- 표본조사 : 표본만 조사하는 방법. 비용과 시간이 적게 들지만, 표본이 대표성을 가져야함
- numpy.random
- 다양한 확률 분포에 따라 난수를 생성하는 기능
- 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, 즉 스칼라 값 반환)
- 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이어야 합니다.
- bins : 히스토그램의 빈의 개수 또는 경계
- 데이터 몇 개의 구간으로 나눌 것인지에 대한 것
- alpha : 히스토그램 막대의 투명도 지정 (0 : 투명, 1 : 불투명)
- label : 히스토그램의 레이블 지정
- color : 히스토그램 막대 색상 지정
2. 표본오차와 신뢰구간
- 표본오차 : 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
- 표본 크기가 클수록 표본오차는 작아짐
- 이는 표본이 모집단을 완벽하게 대표하지 못하기 때문에 발생하며, 표본의 크기와 표본 추출 방법에 따라 달라질 수 있습니다.
- 표본의 크기: 표본의 크기가 클수록 표본오차는 줄어듭니다. 더 많은 데이터를 수집할수록 모집단을 더 잘 대표하게 됩니다.
- 표본 추출 방법: 무작위 추출 방법을 사용하면 표본오차를 줄일 수 있습니다. 모든 모집단 요소가 선택될 동등한 기회를 가지게 해야 합니다.
- 신뢰구간 : 모집단의 특정 파라미터(ex. 평균, 비율)에 대해 추정된 값이 포함될 것으로 기대되는 범위
- 신뢰구간 계산 방법
- 신뢰구간=표본평균±z×표준오차
- 여기서 z는 선택된 신뢰수준에 해당하는 z-값입니다. 예를 들어, 95% 신뢰수준의 z-값은 1.96입니다.
- 일반적으로 95% 신뢰수준을 많이 사용
- 신뢰구간 계산 방법
- 예시
- scipy.stats는 SciPy 라이브러리의 일부로, 통계 분석을 위한 다양한 함수와 클래스들을 제공하는 모듈입니다.
- scipy.stats.t.interval 함수는 주어진 신뢰 수준에서 t-분포(밑에서 얘기하는 student t 분포)를 사용하여 신뢰 구간(confidence interval)을 계산하는 데 사용됩니다.
- 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)).
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}")
3. 정규분포
- 종모양의 대칭 분포로, 대부분의 데이터가 평균 주위에 몰려 있는 분포
- 대부분의 데이터가 평균 주변에 몰려 있으며, 평균에서 멀어질수록 빈도가 줄어듦.
- 표준편차는 분포의 퍼짐 정도를 나타냄 (숫자가 낮을수록 뾰족)
# 정규분포 생성
normal_dist = np.random.normal(170, 10, 1000)
# 히스토그램으로 시각화
plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')
# 정규분포 곡선 추가
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()
4. 긴 꼬리 분포
- 긴꼬리분포는 대부분의 데이터가 분포의 한쪽 끝에 몰려 있고, 반대쪽으로 긴꼬리가 이어지는 형태의 분포
- 정규분포와 달리 대칭적이지 않고 비대칭적
- 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포(예: 파레토 분포, 지프의 법칙, 멱함수)를 포함할 수 있음
- 특징 : 소득 분포, 웹사이트 방문자 수 등에서 관찰됨
- ex. 소득 분포, 온라인 쇼핑(롱테일 현상 : 상위 20%가 전체 매출의 80%), 도서 판매
# 긴 꼬리 분포 생성 (예: 소득 데이터)
long_tail = np.random.exponential(1, 1000)
# 히스토그램으로 시각화
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
plt.title('long tail distribution histogram')
plt.show()
5. 스튜던트 t 분포
- t분포는 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우(일반적으로 30미만)에 사용되는 분포
- 정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징
- 자유도가 커질 수록 정규분포에 가까워짐 (여기서 자유도란 표본의 크기와 관련이 있는 값이라고 이해!)
- ex. 작은 표본의 평균 비교, 약물 시험
# 스튜던트 t 분포 생성
t_dist = np.random.standard_t(df=10, size=1000)
# 히스토그램으로 시각화
plt.hist(t_dist, bins=30, density=True, alpha=0.6, color='r')
# 스튜던트 t 분포 곡선 추가
x = np.linspace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()
6. 카이제곱분포
- 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
- 자유도에 따라 모양이 달라짐.
- 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 ‘완벽하게 서로 다른 질적 자료’일 때 활용
- ex) 성별이나 나이에 따른 선거 후보 지지율
- 범주형 데이터 분석에 사용
# 카이제곱분포 생성
chi2_dist = np.random.chisquare(df=2, size=1000)
# 히스토그램으로 시각화
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')
# 카이제곱분포 곡선 추가
x = np.linspace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.title('카이제곱 분포 히스토그램')
plt.show()
7. 이항분포
- 결과가 2개 나오는 상황일 때 사용하는 분포
- 성공/실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포
- 독립적인 시행이 n번 반복되고, 각 시행에서 성공과 실패 중 하나의 결과만 가능한 경우를 모델링하는 분포
- 성공 확률을 p라 할 때, 성공의 횟수를 확률적으로 나타냄
- 실험 횟수(n)와 성공 확률(p)로 정의됨.
- ex. 동전 던지기, 품질 관리
# 이항분포 생성 (예: 동전 던지기 10번 중 앞면이 나오는 횟수)
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)
# 히스토그램으로 시각화
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.title('이항 분포 히스토그램')
plt.show()
8. 푸아송 분포
- 희귀한 사건이 발생할 때 사용하는 분포
- 단위 시간 또는 단위 면적 당 발생하는 사건의 수를 모델링할 때 사용하는 분포
- 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타냄
- 푸아송 분포는 단위 시간 또는 단위 면적당 희귀하게 발생하는 사건의 수를 모델링하는 데 적합
- 이항 분포처럼 연속된 값을 가지지 않기 때문에 이 분포도 역시 이산형 분포에 해당
- 평균 발생률 λ가 충분히 크다면 정규분포에 근사
- 평균 발생률이란 주어신 시간이나 공간에서 사건이 몇번 발생했는지?
- ex. 콜센터, 교통사고, 문자 메시지, 웹사이트 트래픽
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson
# 푸아송 분포 파라미터 설정
lambda_value = 4 # 평균 발생률
x = np.arange(0, 15) # 사건 발생 횟수 범위
# 푸아송 분포 확률 질량 함수 계산
poisson_pmf = poisson.pmf(x, lambda_value)
# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Poisson PMF (lambda={lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
plt.title('Poisson Distribution')
plt.legend()
plt.grid(True)
plt.show()
9. 분포 정리하기
- ☑️ 데이터 수가 충분하다 → (무조건) 정규분포
- ☑️ 일부 데이터가 전체적으로 큰 영향을 미친다 → 롱 테일 분포 (파레토 분포)
- ☑️ 결과가 두 개(성공 or 실패)만 나오는 상황 → 이항 분포
- ☑️ 특정 시간, 공간에서 발생하는 사건 → 푸아송 분포
- ☑️ 범주형 데이터의 독립성 검정이나 적합도 검정 → 카이 제곱 분포
- ☑️ 데이터 수가 작다 → 스튜던트 t 분포
데이터 분석과 통계 아싸 이거 나중에 봐야지
통계야 놀자 1회차
- 데이터분석가는 데이터의 종류에 따라 관련된 계산을 어떤식으로 수행할 지 결정하게 됩니다.
- 데이터 종류는 대표적으로 수치형, 범주형 데이터가 있습니다.
- 데이터 대표값에는 평균, 중간값, 최빈값이 있습니다. 데이터 분포를 보다 명확히 파악하기 위해 편차, 분산, 표준편차를 학습했습니다.
- 편차는 그 합이 0 으로 분포를 확인할 수 없습니다. → 음수값을 없애기 위해 제곱을 취해주는 분산의 개념이 도입되었습니다. → 분산은 제곲값으로 그 단위가 달라 제곱근의 씌워 다시 단위를 맞춰주었습니다. 이것이 표준편차 입니다.
- 무수히 많은 데이터를 대상으로 효과적인 통계분석을 위해 표본추출이 이뤄지고 있습니다.
- 모집단은 어떤 데이터 집합을 구성하는 전체이고, 표본은 그 중 일부(부분집합)입니다.
- 표본의 분포를 가지고 모집단의 분포를 추정하며, 해당 과정에서 무수히 많은 경우의 수의 표본이 생성될 수 있습니다. 모집단의 크기가 충분히 크다면 어떤 분포에서도 표본평균이 정규분포를 따른다는 것이 중심극한정리 입니다.
- 정규분포는 종 모양을 띄고 있으며, 분포는 좌우 대칭의 형태입니다. 평균치에서 그 확률이 가장높습니다.
- 정규분포에서 평균 0, 분산 1을 가지는 경우, 이를 표준정규분포라고 합니다. 데이터분석시 이를 표준화라고 부릅니다.
- 데이터분석시 표준화가 필요한 경우: 머신러닝 모델을 만들 때, 데이터의 범위가 많이 차이나는 경우. 예시로 최근 일주일 접속일수의 1과 결제금액의 1 은 같은 의미가 아니며, 범위가 큰 데이터의 경우 숫자가 가지는 절대치를 잘못 받아들일 수 있어 표준화는 반드시 필요합니다.
베이직 반. 1회차