샘플링 기법(Sampling Methods)

KIDA·2022년 9월 4일
0
post-thumbnail

데이터가 큰 경우 무작정 전체 데이터로 분석을 진행하는 것 보다 점진적으로 데이터 사이즈를 늘리는 것이 좋다. 샘플링 기법은 크게 확률에 기반한 통계적인 방법(Probability sampling)과 확률에 기반하지 않은 Non-probability 두 가지로 나눌 수 있다. 여기서는 접근이 용이하고 보편적으로 사용하는 probability sampling을 다룬다.


Probabiltiy sampling

Random Sampling

  • Random sampling은 각 row를 선택할 확률은 같다 가정을 전제로 샘플링한다. 보통 많이 사용하는 중복을 허용하지 않는 방법과 bagging에서 사용하는 중복을 허용한 경우(bootstrapping) 두 가지가 있다.
import random

population = 100
data = range(population)

Stratified sampling

  • Stratified sampling은 target의 비율을 고려한다. classification 문제에서 y의 비율이 99:1이라 했을 때 random sampling을 한다면 비율 1에 해당하는 y가 등장하지 않을 가능성이 크다. 이 문제를 보완하기 위해 stratified sampling은 둘의 비율을 고려하여 y의 크기만큼 sampling을 진행한다.
from sklearn.model_selection import train_test_split

stratified_sample, _ = train_test_split(population, test_size=0.9, stratify=population[['label']])

Cluster sampling

  • Cluster sampling은 데이터를 지정된 수 만큼 균등 분할하여 클러스터를 형성한 후, 클러스터를 샘플링하는 방법이다. 비슷한 접근 방법으로 cross-validation을 떠올릴 수 있다.
import numpy as np
clusters=5
pop_size = 100
sample_clusters=2

cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)
cluster_to_select = random.sample(set(cluster_ids), sample_clusters)
indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]
cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]

Systematic sampling

  • Systematic sampling은 정해진 step마다 sampling을 하는 방법이다. (step nn에 대해 n,2n,3n,n, 2n, 3n, \cdots ). 여러 개의 스텝을 사용할 수도 있다. (ex) 8과 11의 배수
population = 100

step = 5
sample = [element for element in range(1, population, step)]

Multistage sampling

  • Multistage sampling은 위의 기법 여러 개를 동시에 사용하는 방법이다. (ex) cluster sampling 후 random sampling
import numpy as np

clusters=5
pop_size = 100
sample_clusters=2
sample_size=5

cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)
cluster_to_select = random.sample(set(cluster_ids), sample_clusters)
indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]
cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]

Non-probability sampling

Non-probability 샘플링의 종류는 아래와 같다.

  • Convenience sampling
  • Voluntary sampling
  • Snowball sampling

8 Types of Sampling Techniques

profile
까먹지 않기 위한 노트 (ว˙∇˙)ง

0개의 댓글