HOWTO · Pandas
Pandas에서 층화 샘플링 수행
이 자습서에서는 Pandas에서 층화 샘플링을 수행하는 방법을 설명합니다.
이 페이지의 내용
다음 자습서에서는 데이터 프레임의 Pandas에서 층화 샘플링을 수행하는 방법을 설명합니다.
통계의 층화 샘플링
층화 샘플링은 모집단을 대표하는 샘플을 얻기 위한 전략입니다. 모집단을 계층이라고 하는 동질적인 그룹으로 분리하고 각 계층에서 무작위로 데이터를 샘플링하면 표본 선택의 편향이 줄어듭니다.
각 계층의 평균값이 다른 경우 통계에서 계층화된 샘플링이 사용됩니다. 층화 샘플링은 주로 데이터 세트가 방대하고 고르지 않을 때 모델을 평가하기 위한 테스트 데이터 세트를 구성하기 위해 머신 러닝에서 자주 사용됩니다.
Pandas에서 층화 샘플링 수행
층화 샘플링을 수행하는 첫 번째 단계는 Pandas 라이브러리를 가져오는 것입니다.
import pandas as pd
이제 층화 샘플링과 관련된 단계를 알아보겠습니다.
- 인구를 계층으로 구분합니다. 모집단은 이 단계에서 비교 가능한 특성을 기반으로 계층으로 분류되며 각 개인은 정확히 하나의 계층에 속해야 합니다.
- 샘플 크기를 결정합니다. 이 단계에서 표본이 클지 작을지 결정해야 합니다.
- 각 계층을 무작위로 샘플링합니다. 모집단 크기와 관계없이 각 계층의 표본 크기가 동일한 불균형 샘플링 또는 모든 계층의 표본 크기가 모집단 크기에 비례하는 비례 샘플링을 사용하여 각 계층에서 무작위 표본을 선택합니다.
이제 샘플을 고려하고 불균형하고 비례적인 층화 샘플링을 수행합니다. 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의 데이터 프레임에서 비례 및 불균형 샘플링을 성공적으로 수행할 수 있습니다.