sampling 4가지 기법

신두다·2022년 4월 10일
0

공부노트

목록 보기
7/12

모집단의 특성을 알기 위해 모집단 전체에 대한 검증을 하기는 현실적으로 어려운 경우가 대부분이다. 그래서 우리는 모집단에서 표본을 추출하여 테스트를 진행하고, 이를 통해 모집단의 특성을 추정하게 된다.

오늘은 표본을 추출할 때의 샘플링 기법 4가지를 알아본다.
1. Simple Random Sampling
2. Systematic Sampling
3. Stratified Random Sampling
4. Cluster Sampling

(위 4개는 모두 probability sampling이다)

🔔 알림
1. 저작권 때문에 여기 가져오지는 못했지만, 각 샘플링 기법을 설명하는 이미지는 하단 참고한 자료의 첫 번째 링크를 봐주세요. 🙇 글보다 훨씬 이해가 쉽습니다.

2. python 구현은 자주 사용하는 simple random sampling에 대해서만 담았습니다. 나머지는 데이터셋을 그룹으로 구분하는 등 샘플링 이전 추가 과정이 들어가는 것 말고는 동일한 것 같습니다. 추후 직접 해보게 될 일이 있을 때 추가해보는 걸로 하겠습니다.

Simple Random Sampling


모집단에서 무작위로 sampling을 하는 방법이다.

  • ex - 1000명의 모집단 중 무작위로 100명을 추출한다.
  • 위 예시를 보면 알겠지만 1000명이라는 전체 모집단을 우리가 파악하고 그 중 샘플링하는 것이기 때문에, 현실적으로 구성하기 가장 어려운 표본 추출법이라고 한다.

Simple Random Sampling에는 복원 추출(replacement)과 비복원 추출(non-replacement) 2가지가 있다.

  • 복원 추출이란 한 샘플을 뽑고 난 후 다음 샘플을 뽑을 때 모집단에서 이미 뽑힌 샘플도 포함해서 다시 뽑는다. 즉, 복원 추출을 할 때에는 최종 샘플에 중복된 값이 존재할 수 있다.
  • 비복원 추출은 반대로 한번 뽑은 샘플은 다음 샘플을 뽑을 때 제외한다. 예를 들어, 1-1000중에 100개를 뽑는 샘플링을 한다고 했을 때, 처음 1이 뽑혔다면 2번째에는 99개 중에서 뽑게 된다.
  • python에서 이를 파라미터로 설정할 수 있다.

Python에서 해보기

numpy를 이용하면 간단하게 할 수 있다.
기본 코드: np.random.choice(data, size = n, replace = True)

예시
(데이터 프레임 df가 있다고 전제한다.)

#
import numpy as np

np.random.seed(42) 

sample_data = np.random.choice(df, size = 10)
sample_data #출력

이렇게 하면 df에서 10개를 무작위 추출하게 된다.

  • replace parameter를 사용하면 복원, 비복원 추출 설정이 가능하며, Default는 True(복원 추출)이다.
  • numpy.random.choice 공식 문서

참고로 np.random.seed(42) 는 random을 돌릴 때마다 결과가 달라지지 않도록 고정하는 것이다.

  • 다른 환경에서 다른 사람이 코드를 실행했을 때에도 내가 돌릴 때와 같은 샘플이 나온다.
  • 안의 숫자 42 자체는 큰 의미가 없다. 보통 42를 많이 쓰는데 어떤 소설에서 기인한 숫자라고 한다.

np.random.sample(data, n) 을 사용할 수도 있다.

  • 여기서 n은 size이다.
  • random.sample은 비복원 추출이기 때문에 뽑힌 것들 모두 unique한 값이다. 또한 n에 data의 실제 size보다 큰 값을 넣으면 에러가 난다. (예 - df size가 100인데, n에 200을 넣을 수 없다)

기본 df.sample() 함수를 쓸 수도 있다

  • 추출할 비율 (예. 10%를 무작위 추출하겠다)을 설정할 수도 있다.
  • random_state 는 위에서 본 random.seed()와 같은 역할을 한다.
  • 비복원 추출이 디폴트다. 복원추출을 하려면 replace = True로 설정하면 된다.
  • axis 파라미터를 사용하면 행을 기준으로 n만큼 추출할건지, 열을 기준으로 할건지 설정할 수 있다. (디폴트는 행이다)
  • 그 외 설명과 예시는 여기를 보자.

어떨 때 무엇을 쓰느냐가 궁금해서 각각의 예시들을 쭉 찾아보니까,
어떤 Input을 넣어 어떻게 리턴해주느냐의 차이인 것 같다.

  • 임의의 '값', '리스트', '데이터프레임'의 차이로 보면 될 것 같다.

Systematic Sampling


모집단에서 '어떤 규칙'을 가지고 sampling을 하는 방법이다.

  • ex 1000명의 모집단 중 10번째 사람부터 10의 배수번째 사람을 추출한다.
  • 위의 예시에서 '10'과 같은 것을 표집간격(Sampling Interval)이라고 부른다. (주로 배수를 하는 것 같다?! 🤔)

이 샘플링 기법을 이용할 때는 샘플의 편향성에 유의해야 한다고 한다.

  • 만약 그 특정한 규칙을 가진 표본들에 그들만의 어떤 공통된 특징이 있었다면, 전체 모집단을 대표하기는 어려울 것이기 때문이다.

Stratified Random Sampling


모집단을 미리 여러 그룹으로 나누고, 그 그룹별로 무작위 추출하는 방법이이다. 여기서 strata를 subgroup으로 생각하면 쉽다.

  • ex - 대통령 후보자 선호도 조사를 위해 연령대별로 그룹을 나누고, 해당 그룹 내에서 무작위로 sampling한다.

각 그룹별로 무작위 추출할 때 비율을 어떻게 할 것인지에 따라 Equal, proportional, disproportional로 종류가 나뉘는데, 우선은 이런 게 있구나만 하고 넘어가겠다.


Cluster Sampling


모집단을 미리 여러 그룹으로 나누고, 이후 특정 그룹을 무작위로 선택하는 방법이다.

  • 그룹을 나눌 때 Stratified Random Sampling과의 차이점은, 각 그룹의 특성이 유사해야 하며, 각 그룹은 모집단과 유사한 특성을 가져야 한다는 것이다. (그렇게 의도해야 한다)
  • 만약 '특정 그룹'을 골랐는데 그 그룹의 규모 또한 너무 크다면, 위에서 말한 다른 기법들을 통해 또 다시 샘플링해도 된다.
  • ex - 이커머스 B2B SaaS 스타트업의 기획자 평균 연봉을 알기 위해, 해당 분야의 특정 회사를 무작위로 골라 표본으로 샘플링한다. (각 회사들의 규모 등 상태는 유사하다고 전제한다)


참고한 자료

profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

0개의 댓글