표본분포
표본통계량 : 더 큰 모집단에서 추출된 표본데이터들로부터 얻은 측정지표
데이터분포 : 어떤 데이터 집합에서의 각 개별 값의 도수분포표
표본분포 : 어려 표본들 혹은 재표본들로부터 얻은 표본통계량의 도수분포
중심극한정리 : 표본크기가 커질수록 표본평균의 분포가 정규분포를 따르는 경향
-> 추론을 위한 표본분포에(신뢰구간이나 가설검정을 계산하는데) t분포같은 정규근사 공식을 사용할 수 있게 함
-> 표본평균의 분포
표분오차(SE) : 여러 표본들로부터 얻은 표본통계량의 변량(분산, 표본분포의 변동성)
-> 표본값들의 표준편차 s를 표본크기n의 제곱근으로 나눈 값
-> 공식에 따라서 표분오차를 줄이기 위해선 n,표본의 크기를 키우면 된다
-> cf. 표준편차 : 개별 표본들의 분산, 표본조사로 얻은 각 관측값과 표본평균의 차이
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
loans_income = pd.read_csv('https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/loans_income.csv').reset_index()
sample_data = pd.DataFrame({
'income' : loans_income['x'].sample(100),
'type' : 'Data'})
sample_means_05 = pd.DataFrame({
'income':[loans_income['x'].sample(5).mean() for _ in range(1000)],
'type' : 'mean of 5'})
sample_means_20 = pd.DataFrame({
'income':[loans_income['x'].sample(5).mean() for _ in range(1000)],
'type' : 'mean of 20'})
result = pd.concat([sample_data, sample_means_05, sample_means_20])
g = sns.FacetGrid(result , col ='type', col_wrap= 1, height = 2, aspect =2)
g.map(plt.hist, 'income', range = [0,200000], bins = 40)
g.set_axis_labels('income', 'count')
g.set_titles('{col_name}')
데이터의 개수가 많을 수록 정규분포를 따른다 -> 중심극한정리
표본통계량의 도수분포표는 그 해당 지표가 표본마다 다르게 나타낼 수 있음
부트스트랩 방식 혹은 중심극한정리에 의존하는 공식을 통해 표본분포를 추정 가능
표준오차는 표본통계량의 변동성을 요약해주는 지표
부트스트랩
부트스트랩 표본 : 관측 데이터 집합으로부터 얻은 복원 추출
재표본추출(리샘플링) : 관측 데이터로부터 반복해서 표본추출하는 과정
1. 샘플값을 하나 뽑아서 기록하고 제자리에 놓는다
2. n번 반복한다
3. 재표본추출된 값의 평균을 R번 반복한다
-> 표분편차, 히스토그램, 신뢰구간 등에 활용
from sklearn.utils import resample
results = []
for nrepeat in range(1000):
sample = resample(loans_income)
results.append(sample.median())
results = pd.Series(results)
print('Boostrap Statistics:')
print(f'original: {loans_income.median()}')
print(f'bias: {results.mean()-loans_income.median()}')
print(f'std.error: {results.std()}')
Boostrap Statistics:
original: (x 62000.0, x 32872.03537)
bias: x -70.6805
std.error: 221.51749969793002
원본데이터보다 표준오차가 줄어들었다
부트스트랩은 모집단에서 추가적으로 표본을 뽑을 때 그 표본이 얼마나 원래표본과 비슷할지를 알려주는 것
예측 모델을 적용할 때 여러 부스트랩 표본들로부터 얻은 예측값을 모아서 결론을 만드는것(배깅)이 단일 보델을 사용하는 것보다 좋다
신뢰구간-> t분포를 통해 추정
신뢰수준 : 같은 모집단으로부터 같은 방식으로 얻은, 관심 통계량을 포함할 것으로 예상되는 신뢰구간의 백분율
신뢰구간 : 특정 범위 내에 모수의 참값이 존재할 것으로 예측되는 영역
1. 데이터에서 복원추출 방식으로 크기 n인 표본을 추출한다
2. 재표본추출한 표본에 대해 원하는 통계량을 기록한다
3. 1~2번을 R번 반복한다
4. x%신뢰구간을 구하기 위해 R개의 재표본의 결과의 분포 양쪽 끝에서 [(100-x)/2]%만큼 잘라낸다
5. 절단잔 점들은 x% 부트스트랩 신뢰구간의 양 끝점이다
정규분포
오차 : error, 데이터 포인트와 예측값 혹은 평균 사이의 차이
정규화(표준화)하다 : 평균을 빼고 표준편차로 나눈 값
Z-score : 개별 포인트를 정규화한 결과
-> 정규화한다고 해서 데이터가 정규분포를 따르는 것은 아니고, 비교목적을 위해 표준정규분포와 같은 척도로 만든 것
표준정규분포: 평균이 0, 표준편차가 1인 정규분포
QQ-plot: 표본분포가 특정분포(정규분포)에 얼마나 가까운지 보여주는 그림
-> Z-score을 오름차순으로 정렬하고 각 값의 z점수를 y축에 표시, x축-정규분포에서 해당 분위수
fig,ax = plt.subplots(figsize = (4,4))
norm_sample = stats.norm.rvs(size=100)
stats.probplot(norm_sample,plot=ax)
대각선 위에 놓이면 표본분포가 정규분포에 가까운 것으로 간주
긴꼬리 분포
꼬리 : 적은 수의 극단값이 주로 존재하는 도수분포의 길고 좁은 부분
왜도 : 분포의 한쪽 꼬리가 반대쪽 다른꼬리보다 긴 정도
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
# 넷플릭스의 일일 주식 수일률
nflx = sp500_px['NFLX']
nflx = np.diff(np.log(nflx[nflx>0]))
fig, ax = plt.subplots(figsize = (4,4))
stats.probplot(nflx, plot = ax)
낮은 값의 점들은 대각선보다 낮고, 높은 값들은 대각선보다 높기때문에 정뷰분포를 따른다고 할때 예상되는것보다 더 많은 극단값 관찰가능하다
T분포
정규분포와 생김새가 비슷하지만, 꼬리부분이 약간 더 두껍고 길다
표본통계량의 일반적인 모양으로, 표본이 클수록 정규분포를 닮아간다
n: 표본크기
df: 자유도, 다른 표본크기, 통계량, 그룹수에 따라 t분포를 조절하는 변수
이항분포
시행 : 독립된 결과를 가져오는 하나의 사건
성공: 시행에 대한 관심의 결과(=1)
이항식 : 두가지 결과를 갖는다
이항시행 : 두가지 결과를 가져오는 시행(베르누이 시행)
이항분포 : n번 시행에서 성공한 회수에 대한 분포
-> 각 시행마다 성공확률(P)이 정해져 있을 때, 주어진 시행횟수(n) 중에서 성공한 횟수(x)의 도수분포표
stats.binom.pmf(2, n=2, p=0.1)
stats.binom.cdf(2, n=2, p=0.1)
n=5인 시행에서 각 시행의 성공확률이 0.1일때 x=2인 성공이 나올 확률
이항 결과는 무엇보다 중요한 결정사항들(구매/비구매)을 나타내므로 모델을 만드는데 중요
n이 크고 p가 0.5에 가까울때 정규분포로 근사할 수 있다
카이제곱분포
카이제곱통계량 : 관측값과 기댓값의 차이를 기댓값의 제곱근으로 나눈 값을 다시 제곱하고 모든 범주에 대해 합산한 값
-> 통계량을 표준화하여 참고분포와 비교가 가능
-> 관측데이터가 특정 분포에 적합한 정도를 나타냄
카이제곱분포는 일반적으로 범주에 속하는 주제 또는 항목의 수와 관련
카이제곱통계는 귀무 모델의 기댓값에서 벗어난 정도
F분포
그룹 평균간 차이가 정규 무작위 변동에서 예상할 수 있는 것보다 얼마나 큰지 관심있을경우 사용
F통계량 분포 : 모든 그룹의 평균이 동일한 경우 무작위순열 데이터에 의해 생성되는 모든 값의 빈도 분포
기타 분포들
람다 : 단위 시간이나 단위 면적당 사건이 발생하는 비율
-> 가정 : 해당 기간동안 일정하게 유지됨
포아송 분포 : 표집된 단위 시간 및 단위공간에서 발생하는 도수분포
-> 예: 5초동안 서버에 도착한 인터넷 트래픽을 95%의 확률오 완벽하게 처리하는데 필요한 용량은 얼마일까?
stats.poisson.rvs(2, size=100)
지수분포 : 한 사건에서 그 다음 사건까지의 시간이나 거리에 대한 도수분포
-> 예: 웹사이트 방문이 일어나는 시간사이
stats.expon.rvs(scale =5, size =100)
베이블분포 : 사건 발생률이 시간에 따라 변화하는 지수분포의 일반화된 버전
stats.weibull_min.rvs(1.5, scale = 5000, size=100)
일정 비율로 발생하는 사건의 경우, 시간 단위 또는 공간단위당 발생하는 사건의 수를 포아송분포로 모델링할 수 있ㄷ다
또한 한 사건과 다음 사던의 시간/거리를 지수분포로 모델링할 수 있다
시간에 따라 변화하는 사건 발생률은 베이불분포로 모델링 할 수 있다
궁금점
신뢰구간과 t분포의 이해
t분포는 어떻게 계산하지?
->표준정규분포와 카이제곱분포의 결합
확률변수 T = 표준정규확률변수 X / (k자유도의 카이제곱확률변수.Y / 자유도k)의 제곱근
각 분포들의 활용방안
'학습노트 > 통계' 카테고리의 다른 글
[통계학습] 데이터와 표본분포(3) (2) | 2024.05.20 |
---|---|
[통계학습] 데이터와 표본분포(2) (0) | 2024.05.14 |
[학습노트] 통계1. 탐색적 데이터 분석 (0) | 2024.04.01 |
[강의노트] 통계 - 통계적 가설검정, p-value (1) | 2024.01.22 |
[강의노트] 통계 - 검정통계량, ANOVA (1) | 2024.01.22 |