데이터 샘플링: 통계적 및 비통계적


출처: 언스플래쉬

데이터 샘플링은 많은 양의 데이터를 분석할 때 전체 데이터를 나타내기 위해 데이터의 일부를 “샘플링”하는 작업입니다. 이 샘플링은 처리할 데이터의 양이 많을 때 절대적으로 필요한 중요한 단계입니다.

샘플링은 통계 용어입니다. 사실 통계가 나온 2학년 때부터 수학을 싫어했던 경험이 있는 저로서는 세세한 부분에는 별로 관심이 없습니다. 다만, 내용을 모른다고 해서 분석 업무를 못하는 것은 아니니, 그런 것이 존재한다는 것을 아는 정도까지 이해하고 넘어가도록 합시다.

데이터 샘플링 방법은 크게 통계적 기법에 의한 샘플링과 비통계적 기법에 의한 샘플링으로 나뉜다.

샘플링 유형 방법 장점 불리 데이터 분석의 사용 빈도
통계적 그냥 무작위 모집단에서 무작위화 편향되지 않은 샘플 전체 인구 데이터 목록이 필요합니다. 가다
체계 특정 간격으로 추출 인구의 동등한 대표성 보장 모집단 데이터의 전체 목록이 필요하며 데이터가 주기적일 때 왜곡된 결과 가다
오일층 동일한 특성을 가진 하위 그룹(계층)으로 세분화하여 추출 단순 난수보다 모집단 대표성을 더 ​​정확하게 반영 인구에 대한 기본적인 이해가 선행되어야 하고, 많은 시간이 소요됨 가다
클러스터 주로 지리적 특징 등을 기준으로 클러스터를 분류한 후 추출합니다. 추출된 표본의 오차가 작고 군집의 대표성이 높다 높은 분산 및 바이어스 가능 센터
다단계 여러 공정을 결합하여 추가 정제 후 추출 다른 방법에 비해 비용 및 시간 절약 높은 산포와 편향이 있을 수 있으며 계획에 많은 시간이 소요됩니다. 센터
통계적이지 않음 편의 시료 추출 선택 용이 간단하고 빠르고 저렴한 편견과 과소대표로 이어짐 아래에
과제 표본은 모집단의 특성 비율에 따라 추출됩니다. 기능적이라기보다는 대표적일 수 있음 아마도 여전히 과소 대표되고 편향된 아래에
스노볼 연관 또는 소개를 통해 첫 번째 샘플에서 다음 샘플로 확장 검체 접근 자체가 어려운 전문 분야에 유용 바이어스 및 대표성은 초기 샘플 선택에 의해 결정됩니다. 아래에

1. 통계적 샘플링 방법

통계 샘플링은 지정된 0이 아닌 확률로 모집단의 모든 데이터를 무작위로 선택합니다. 즉, 특정 확률로 샘플을 추출합니다. 통계 샘플링에는 다음 방법이 포함됩니다.

  • 단순임의표본(단순임의표본, 단순임의표본, 단순임의표본)(단순임의표본)
  • 체계적인 샘플링
  • 계층화된 샘플
  • 클러스터 샘플링
  • 다단계 샘플링

1.1 단순 무작위 샘플링 (단순 무작위 샘플)

단순 무작위 샘플링은 모집단이 N일 때 동일한 확률로 n 크기의 가능한 모든 샘플을 추출하는 기법입니다. 말하기는 어렵지만 10개의 데이터 모집단에서 3개만 뽑는다고 한다면 그냥 무작위로 3개를 뽑아서 샘플로 사용하면 됩니다.

n개의 임의의 숫자를 간단한 함수로 임의로 선택하는 방식으로 보통 프로그래밍 언어별로 지정되어 있으며 데이터를 빠르고 직접적으로 표현하고자 할 때 유용합니다. 가장 원시적인 샘플링 방법이기도 하다.

아르 자형

# 단순 랜덤 샘플링 예시
#install.packages("tidyverse")
library(tidyverse)
store_data <- read.csv("stores.csv")

# store_data에서 임의로 100개의 샘플을 추출
simple_random_sample <- store_data %>%
  sample_n(100)

파이썬

# 단순 랜덤 샘플링 예시
import pandas as pd
import numpy as np

store_data = pd.read_csv("stores.csv")

# store_data에서 임의로 100개의 샘플을 추출
simple_random_sample = store_data.sample(n=100)

1.2 시스템 샘플링 (체계적인 샘플링)

계통 발생 샘플링은 계통 발생 샘플링, 체계적 샘플링 등으로도 알려져 있습니다. 단순 무작위 표본처럼 무작위로 추출되지만 조건이 추가됩니다. 즉, 첫 번째 샘플을 무작위로 선택한 후 일정 간격으로 후속 샘플을 선택합니다. 따라서 시스템을 스캔할 때 간격을 지정해야 합니다. 그러나 데이터에 주기성이 있는 경우에는 주기를 염두에 두고 샘플링 간격을 설정해야 합니다. 그렇지 않으면 샘플이 왜곡될 수 있습니다.

아르 자형

# 계통 샘플링 예시 (R)
#install.packages("tidyverse")
library(tidyverse)
student_data <- read.csv("student_data.csv")

# 첫번째 학생부터 매 10번째 학생들을 샘플로 선택
systematic_sample <- student_data %>%
  slice(seq(1, nrow(student_data), by = 10))

파이썬

# 계통 샘플링 예시 (Python)
import pandas as pd

student_data = pd.read_csv("student_data.csv")

# 첫번째 학생부터 매 10번째 학생들을 샘플로 선택
systematic_sample = student_data.iloc(::10, :)

1.3 유층 샘플링 (층화 샘플)

계층화, 계층화, 계층화 및 계층화된 표본이라고도 합니다. 모집단에 유사한 특성을 가진 집단(하위 집단)이 있다고 가정하여 모집단을 특성별로 계층으로 분류하고 각 계층에서 단순무작위추출을 수행하는 절차이다. 즉, 부분군이 있다는 점을 제외하고는 기본적으로 단순임의표본과 동일하다.

연령별로 계층을 구분하기 위해 특정 특성을 사용하여 층화 샘플링 하위 그룹을 형성합니다.(10대, 20대, 30대, 40대 등)성별, 소득(연소득 3천만원 미만, 3천만원~4천만원, 4천만원~5천만원, 5천만원~6천만원, 6천만원 초과 등) 등이 대표적이다. 샘플링은 일반적으로 실제 분석 전에 수행되므로 의미가 있으려면 모집단을 어떤 특성으로 분류해야 하는지에 대한 도메인 지식이 있어야 합니다.

아르 자형

# 유층 샘플링 예시(R)
#install.packages("dplyr")
library(dplyr)

# 예시를 위한 데이터 세트 생성
set.seed(123)
dataset <- data.frame(age = sample(18:70, 100, replace = T), 
                      salary = sample(35000:180000, 100, replace = T), 
                      group = sample(c("A", "B", "C"), 100, replace = T, prob = c(0.3, 0.4, 0.3)))

# 'sample_frac()' 함수를 사용한 그룹별 유층 샘플링
strata_sample <- dataset %>% 
  group_by(group) %>% 
  sample_frac(size = 0.5) %>% 
  ungroup()

# 샘플의 분포 확인
table(strata_sample$group)

파이썬

# 유층 샘플링 예시(python)
import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedShuffleSplit

# 데이터 세트 입력
df = pd.read_csv('population.csv')

# y를 target variable로, x를 feature로 지정
y = df('target')
X = df.drop('target', axis=1)

# 'StratifiedShuffleSplit'를 생성하여 Training과 testing set을 구분하기 위한 준비
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=0)

# 'sss'를 사용하여 training 과 testing set으로 나눠 줌
for train_index, test_index in sss.split(X, y):
    X_train, X_test = X.iloc(train_index), X.iloc(test_index)
    y_train, y_test = y.iloc(train_index), y.iloc(test_index)

1.4 클러스터(클러스터) 샘플링 (클러스터 샘플링)

클러스터(클러스터) 샘플링은 전체 모집단을 여러 개의 클러스터(클러스터)로 나눈 다음 일부 클러스터를 무작위로 선택하고 일부 클러스터를 다시 무작위로 선택하는 방법입니다. 이 샘플링 방법은 전체 모집단을 조사하는 데 시간이 너무 많이 걸리거나 비용이 많이 들거나 어려울 때 유용할 수 있습니다.

앞에서 살펴본 계층 샘플링은 하위 그룹을 만들고 하위 그룹에서 샘플을 임의로 선택한다는 점에서 클러스터 샘플링과 유사합니다. 그러나 클러스터 샘플링은 일반적으로 지정학적 기능을 사용하여 하위 그룹을 세분화합니다. 예를 들어 시, 학군 등

아르 자형

#클러스터 샘플링 예시
#install.packages("sampling")
library(sampling)

# 모집단 'pop' 생성
pop <- c(1:100)

# 모집단을 5개의 클러스터로 나눔
clusters <- cutree(hclust(dist(pop)), k = 5)

# 클러스터 중 일부를 선택
sample_clusters <- sample(unique(clusters), size = 3, replace = FALSE)

# 선택된 클러스터에 대해서 무작위로 샘플을 추출
sample_indices <- which(clusters %in% sample_clusters)
sample <- pop(sample_indices)

파이썬

# 클러스터 샘플링 예시
import random
import numpy as np

# 모집단 'pop'생성
pop = np.arange(1,101)

# 모집단을 5개의 클러스터로 나눔
clusters = np.array_split(pop, 5)

# 클러스터 중 일부를 선택
sample_clusters = random.sample(clusters, 3)

# 선택된 클러스터에 대해서 무작위로 샘플을 추출
sample = np.concatenate(sample_clusters)

1.5 다단계 샘플링 (다단계 샘플링)

다단계 샘플링은 원하는 샘플 크기에 도달할 때까지 여러 단계로 샘플링 프로세스를 수행하는 기술입니다. 이 방법은 클러스터 샘플링과 유사하지만 클러스터 샘플링은 한 번 클러스터링되고 다단계 샘플링은 두 번 이상 클러스터링된다는 차이점이 있습니다. 즉, 클러스터링을 여러 번 수행하여 샘플의 크기가 충분히 작아질 때까지 클러스터링과 샘플링을 반복한다. 때로는 액체층 샘플링과 클러스터 샘플링이 함께 사용됩니다.

아래 예제 코드는 다소 길지만 참고용으로만 활용하시기 바랍니다.

아르 자형

# 클러스터 샘플링과 유층 샘플링을 포함한 다단계 샘플링 예시
# 랜덤으로 데이터를 생성
set.seed(123)
population <- data.frame(
  id = 1:1000,
  cluster = sample(1:20, 1000, replace = TRUE),
  strata = sample(1:4, 1000, replace = TRUE),
  variable = rnorm(1000)
)

# 임의로 3개의 계층(strata)를 선택
strata_sample <- sample(unique(population$strata), 3, replace = FALSE)
strata_population <- population(population$strata %in% strata_sample, )

# 선택된 계층 중에서 임의로 2개의 클러스터를 선택
cluster_sample <- lapply(strata_sample, function(str) {
  sample(unique(strata_population(strata_population$strata == str, "cluster")), 2, replace = FALSE)
})
cluster_sample <- unlist(cluster_sample)

# 각 클러스터에서 임의로 5개의 데이터(Observation)를 선택
final_sample <- strata_population(strata_population$cluster %in% cluster_sample, )
final_sample <- by(final_sample, final_sample$cluster, function(x) x(sample(nrow(x), 5, replace = FALSE),))
final_sample <- do.call(rbind, final_sample)

# 추출된 최종 샘플 확인
final_sample

파이썬

# 클러스터 샘플링과 유층 샘플링을 포함한 다단계 샘플링 예시
import pandas as pd
import numpy as np

# 랜덤으로 데이터를 생성
np.random.seed(123)
population = pd.DataFrame({
    'id': range(1, 1001),
    'cluster': np.random.choice(range(1, 21), 1000),
    'strata': np.random.choice(range(1, 5), 1000),
    'variable': np.random.normal(size=1000)
})

# 임의로 3개의 계층(strata)를 선택
strata_sample = np.random.choice(np.unique(population('strata')), 3, replace=False)
strata_population = population(population('strata').isin(strata_sample))

# 선택된 계층 중에서 임의로 2개의 클러스터를 선택
cluster_sample = ()
for stratum in strata_sample:
    clusters = strata_population.loc(strata_population('strata') == stratum, 'cluster').unique()
    selected_clusters = np.random.choice(clusters, 2, replace=False)
    cluster_sample.append(selected_clusters)
cluster_sample = np.concatenate(cluster_sample)

# 각 클러스터에서 임의로 5개의 데이터(Observation)를 선택
final_sample = pd.concat((
    strata_population.loc(strata_population('cluster').isin(cluster_sample))
    .groupby('cluster')
    .apply(lambda x: x.sample(5))
))

# 추출된 최종 샘플 확인
print(final_sample)

2. 비통계적 샘플링 방법

이전에 논의된 통계적 샘플링 방법과 달리 비통계적 방법은 샘플 크기 및 선택 프로세스를 결정하기 위해 수학적 확률 이론에 의존하지 않습니다. 대신 샘플링을 수행하는 사람의 판단에 의존합니다. 비통계적 샘플링 방법에는 다음이 포함됩니다.

  • 편의 샘플링
  • 할당 샘플 / 쿼터 샘플
  • 눈덩이 샘플링

2.1 편의 샘플링 (간편 샘플링)

편의 샘플링은 말 그대로 “편리한” 샘플을 찾아 시도합니다. 즉, 샘플을 채취하기 쉬운 상황에서 그냥 쉽게 샘플을 채취하는 것입니다. 예를 들어, 특정 상가에 대한 고객의 의견이 필요한 상황에서 임의로 표본을 추출하여 설문을 진행하는 것이 아니라, 조사 당시 상가에 있던 고객만을 대상으로 설문을 진행한다. 뭔가 이상함을 느끼는 것은 당연하다. 이러한 방식으로 표본을 추출하면 추출된 표본이 모집단을 대표하지 못하고 편향될 가능성이 있습니다.

이러한 한계에도 불구하고 편의성이 좋기 때문에 편의표본추출법을 많이 사용한다. 따라서 탐색적 데이터 분석(EDA) 또는 시간과 리소스가 너무 제한적일 때 쉽게 사용됩니다. 따라서 초기 가설을 형성하거나 통찰력에 대한 단서를 찾는 데만 사용하십시오.

2.2 샘플 주문(할당량 샘플링)

모집단에서 계층을 식별할 때 각 계층의 데이터 크기에 비례하여 표본을 추출하는 방법입니다. 예를 들어 모집단이 여성 60%, 남성 40%인 경우 무작위로 표본을 선택하지 않고 동일한 비율의 성별을 선택합니다. 모집단의 특성을 미리 알 수는 있지만 특성에 대한 완벽한 이해가 없기 때문에 잘못된 시료 구성을 설계할 가능성이 있습니다. 또한 선택된 표본이 모집단을 정확하게 대표하지 않고 편향될 가능성도 여전히 있습니다.

3.3 눈덩이 샘플링(눈덩이 샘플링)

눈덩이 또는 눈덩이 샘플링은 말 그대로 작은 눈덩이 같은 작은 표본으로 시작해 비슷한 성질의 추가 데이터를 연결해 더 큰 눈덩이처럼 표본을 키우는 방식이다. 일반적으로 전문 설문조사에서는 심층 설문조사에서도 샘플에 대한 액세스가 어려운 경우가 많습니다. 이 방법은 매우 특정한 모집단에 접근하는 데 유용할 수 있지만 시작이 잘못되면 편향되기 쉽다는 단점이 있습니다.