HOWTO · Pandas

Pandas에서 층화 샘플링 수행

이 자습서에서는 Pandas에서 층화 샘플링을 수행하는 방법을 설명합니다.

이 페이지의 내용

다음 자습서에서는 데이터 프레임의 Pandas에서 층화 샘플링을 수행하는 방법을 설명합니다.

통계의 층화 샘플링

층화 샘플링은 모집단을 대표하는 샘플을 얻기 위한 전략입니다. 모집단을 계층이라고 하는 동질적인 그룹으로 분리하고 각 계층에서 무작위로 데이터를 샘플링하면 표본 선택의 편향이 줄어듭니다.

각 계층의 평균값이 다른 경우 통계에서 계층화된 샘플링이 사용됩니다. 층화 샘플링은 주로 데이터 세트가 방대하고 고르지 않을 때 모델을 평가하기 위한 테스트 데이터 세트를 구성하기 위해 머신 러닝에서 자주 사용됩니다.

Pandas에서 층화 샘플링 수행

층화 샘플링을 수행하는 첫 번째 단계는 Pandas 라이브러리를 가져오는 것입니다.

import pandas as pd

이제 층화 샘플링과 관련된 단계를 알아보겠습니다.

  1. 인구를 계층으로 구분합니다. 모집단은 이 단계에서 비교 가능한 특성을 기반으로 계층으로 분류되며 각 개인은 정확히 하나의 계층에 속해야 합니다.
  2. 샘플 크기를 결정합니다. 이 단계에서 표본이 클지 작을지 결정해야 합니다.
  3. 각 계층을 무작위로 샘플링합니다. 모집단 크기와 관계없이 각 계층의 표본 크기가 동일한 불균형 샘플링 또는 모든 계층의 표본 크기가 모집단 크기에 비례하는 비례 샘플링을 사용하여 각 계층에서 무작위 표본을 선택합니다.

이제 샘플을 고려하고 불균형하고 비례적인 층화 샘플링을 수행합니다. 10명의 학생 중 성적에 따라 6명의 학생을 샘플링합니다.

먼저 작업할 샘플 데이터 프레임을 생성해 보겠습니다. 여기에서는 이름, ID, 등급 및 범주를 포함하여 4개의 열을 사용합니다.

아래 코드를 사용하여 이 데이터 프레임을 생성합니다.

students = {
    "Name": [
        "sanay",
        "shivesh",
        "rutwik",
        "preet",
        "yash",
        "mann",
        "pritesh",
        "hritesh",
        "raj",
        "tarun",
    ],
    "ID": ["001", "002", "003", "004", "005", "006", "007", "008", "009", "010"],
    "Grade": ["A", "A", "C", "B", "B", "B", "C", "A", "A", "A"],
    "Category": [2, 3, 1, 3, 2, 3, 3, 1, 2, 1],
}
df = pd.DataFrame(students)
print(df)

출력:

      Name   ID Grade  Category
0    sanay  001     A         2
1  shivesh  002     A         3
2   rutwik  003     C         1
3    preet  004     B         3
4     yash  005     B         2
5     mann  006     B         3
6  pritesh  007     C         3
7  hritesh  008     A         1
8      raj  009     A         2
9    tarun  010     A         1

아이들의 50%가 A등급, 30%가 B등급, 20%가 C등급이라는 점은 주목할 가치가 있습니다. 이제 불균형 샘플링을 수행하여 6명의 학생 샘플을 만듭니다.

불균형 샘플링의 경우 학생들을 A, B, C 등급에 따라 그룹으로 나눈 다음 샘플 기능을 사용하여 각 학년 그룹에서 2명의 학생을 무작위로 샘플링합니다. 아래 코드를 사용하여 이 작업을 수행합니다.

df.groupby("Grade", group_keys=False).apply(lambda x: x.sample(2))

출력:

      Name   ID Grade  Category
0    sanay  001     A         2
7  hritesh  008     A         1
5     mann  006     B         3
4     yash  005     B         2
2   rutwik  003     C         1
6  pritesh  007     C         3

비례 샘플링을 위해 학생을 등급(예: A, B, C)에 따라 그룹으로 나눈 다음 Pandas groupby()를 사용하여 인구 비율을 기준으로 각 그룹에서 무작위 샘플을 가져옵니다. 전체 표본 크기는 모집단의 60%(0.6)입니다.

아래 코드를 사용하여 이를 수행합니다.

df.groupby("Grade", group_keys=False).apply(lambda x: x.sample(frac=0.6))

출력:

      Name   ID Grade  Category
7  hritesh  008     A         1
9    tarun  010     A         1
0    sanay  001     A         2
3    preet  004     B         3
5     mann  006     B         3
6  pritesh  007     C         3

따라서 위의 접근 방식을 사용하여 Pandas의 데이터 프레임에서 비례 및 불균형 샘플링을 성공적으로 수행할 수 있습니다.