Pandas에서 층화 샘플링 수행

Preet Sanghavi 2023년6월21일
  1. 통계의 층화 샘플링
  2. 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의 데이터 프레임에서 비례 및 불균형 샘플링을 성공적으로 수행할 수 있습니다.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

관련 문장 - Pandas Statistics