Statistics/Concepts(+codes)

<추정과 검정> - 표본추출법 (w/ python code) (2/2)

metamong 2022. 3. 30.

- 오늘은 하단 두개 (좌) 집락추출법 (우) 층화추출법에 대해서 배워보자 - 

 

Q) 모집단에서 표본을 추출하는 또 다른 두가지 방법?

A) 집락추출법/층화추출법 (단순임의추출/계통추출은 하단 포스팅 참조 ↓↓↓↓↓↓)

 

 

<추정과 검정> - 표본추출법 (w/ python code) (1/2)

- (아래) (제 1 - 2 - 3 - 4분면 순서대로) 단순임의추출법 - 계통추출법 - 집락추출법 - 층화추출법 - ** 앞선 포스팅에서 우리는 통계적 추론에 대해서 배웠고, 모집단에서 표본을 추출하여 여러 통

sh-avid-learner.tistory.com


☝️ 여기서, 모집단을 대표할 수 있도록 표본을 추출하는 것이 가장 중요하다..!

(표본추출'방법'에 따라 분석 결과 및 해석에 큰 차이가 발생할 수 있기 때문)

 

✌️ code 예시 구현을 위해서 random module을 사용할 예정 (랜덤하게 수를 발생시키고 표본추출에 제일 적절한 module이라 생각됨!)

(random documentation → https://docs.python.org/3/library/random.html)

 

import random

 

🤝 code 상의 모집단(population)은 1~25(집락추출) / 1~20(층화추출) 가정하고 설정..! (여러 그룹으로 구성된 2차원 배열 list 형태)


1. 집락추출법(cluster sampling)

 '모집단을 대표하는 잘 섞여 있는 원소들로 cluster끼리 뭉쳐 구성'

- 표본추출이 상대적으로 쉽고 비용도 적게 든다

① (상단그림) A, B, C, D 4개의 cluster로 나뉨. 각 cluster에는 모집단을 잘 대표할 수 있게끔 다양한 색깔의 공으로 구성

② 각 집락(cluster)에서 원소들에게 일련번호 부여

 일부 cluster를 랜덤하게 선택

④ 선택된 cluster에서 표본 임의로 선택

 

→ code demo)

가정1> 총 5개의 cluster로 나누었으며, 각 cluster에는 '5로 나눈 나머지가 같은 자연수끼리 모여있다' 가정

가정2> '5로 나눈 나머지가 같은 자연수끼리 모여있는 cluster 특성이 모집단을 잘 대표한다'라고 가정

가정3> population 모집단은 2차원 배열 형태로 되어 있다 가정

 

※ 주의) cluster를 나누는 기준 및 cluster 개수는 상황에 따라 다르므로 특수한 상황을 고려하여 가정했을 뿐 따로 code 구현은 안함

※ 즉, cluster를 나누는 기준 & cluster 개수가 정해진 한 population(2차원 배열)을 예로 들음

(- component가 일련번호가 정해진 population이라면 하단 code cluster_sampling이 가능할 것 같아요~-)

 

- ①② 과정 생략 -

 

def cluster_sampling(population, number_of_samples):
    N = random.randint(1,len(population)) #Nth chosen cluster #과정3
    print(random.sample(population[N],number_of_samples)) #과정4

 

- population 모집단에서 3개의 sample을 뽑고 싶으면

(출력 결과 나머지가 2로 나눈 cluster가 임의로 뽑혔고 그 중 3개가 sample로 임의로 뽑힘)

 

cluster_sampling(population, 3)
#[7, 22, 17]

 

- population 모집단에서 4개의 sample을 뽑고 싶으면

(출력 결과 나머지가 4로 나눈 cluster가 임의로 뽑혔고 그 중 4개가 sample로 임의로 뽑힘)

 

cluster_sampling(population, 4)
#[24, 4, 9, 14]

 

 집락추출법의 효과)

- 모집단을 잘 대표하는 여러 cluster로 나누어 cluster에서 임의로 sampling을 한다는 점에서 시간&비용 절약!

- 굳이 모집단에서 sampling 안해도 충분히 모집단을 대표하는 sample이 뽑혀진다는 장점이 존재!


2. 층화추출법(stratified sampling)

→ '집락추출과는 다르게 서로 이질적인 층들이 구성되어 있다.'

- 층 내의 원소들은 서로 동질적이다

- 하지만 층 간 원소들은 이질적임!

- 각 층의 비중을 감안하여 층 별로 표본을 추출한다 (각 계층을 고루 대표할 수 있도록 표본 추출)

- 즉, 이질적인 모집단의 원소들을 서로 유사한 것까지 몇 개의 층(stratum)으로 나눈 후, 각 층에서 표본을 랜덤하게 추출

 

→ code demo)

가정 1> 유사한 것끼리 몇 개의 층(stratum)으로 population에서 나누어 이미 형성되었다 가정
(population 만들어짐 - 2차원 배열 list)

가정 2> 총 4개의 stratum으로 나누었으며 각 층에는 1~5, 6~10, 11~15, 16~20으로 구성

가정 3> 각 층에서 n개씩 랜덤하게 추출

 

sample_list = []

def stratified_sampling(population,number_of_samples_per_stratum):
    for i in range(0,len(population)):
        sample_list.append(random.sample(population[i],number_of_samples_per_stratum))
    print(sample_list)

 

- population 모집단에서 각 stratum 마다 2개씩 sample을 뽑고 싶으면

 

stratified_sampling(population,2)
#[[3, 1], [9, 6], [15, 12], [16, 17], [23, 24]]

 

- population 모집단에서 각 stratum 마다 1개씩 sample을 뽑고 싶으면

 

stratified_sampling(population,1)
#[[3], [8], [15], [20], [24]]

 

 층화추출법의 효과)

- 서로 비슷한 data끼리 한 stratum을 나누어 시간 절약

- 비슷한 층마다 일부 sample만 뽑으면 되므로 전체적인 sampling 관점에서 큰 시간&비용 안 들이고도 모집단을 잘 설명하는 표본을 추출할 수 있음..!


* 썸네일 출처) https://www.vectorstock.com/royalty-free-vector/crowd-behaviors-measuring-social-sampling-vector-16312866

- 내용 출처) 공공데이터 청년인턴(일경험수련생) 상시 교육 ProDS 데이터분석이론 (초급+중급)1

댓글