Pandas で階層化サンプリングを実行する
次のチュートリアルでは、データ フレームのパンダで階層化サンプリングを実行する方法を説明します。
統計における層化サンプリング
層化サンプリングは、母集団を代表するサンプルを取得するための戦略です。 母集団を層と呼ばれる均質なグループに分け、各層からデータをランダムにサンプリングすることで、サンプル選択の偏りが減少します。
各層の平均値が異なる場合、統計では層別抽出が使用されます。 層化サンプリングは、主にデータセットが膨大で不均一な場合に、モデルを評価するためのテスト データセットを構築するために、機械学習でよく使用されます。
Pandas で階層化サンプリングを実行する
階層化サンプリングを実行する最初のステップは、Pandas ライブラリをインポートすることです。
import pandas as pd
層化サンプリングに関連する手順を学びましょう。
- 人口を階層に分けます。 この段階では、集団は比較可能な形質に基づいて層に分類され、各個人は正確に 1つの層に属している必要があります。
- サンプル サイズを決定します。 この段階で、サンプルが大きいか小さいかを決定する必要があります。
- 各階層をランダムにサンプリングします。 各層のサンプル サイズがその母集団のサイズに関係なく等しい不均衡サンプリング、またはすべての層のサンプル サイズがその母集団のサイズに比例する比例サンプリングを使用して、各層から無作為にサンプルを選択します。
ここでサンプルを検討し、不均衡および比例層化サンプリングを実行します。 10 名の生徒のうち、成績に基づいて 6 名の生徒を抽出します。
まず、作業するサンプル データ フレームを作成しましょう。 ここでは、name、id、grade、category の 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) に分けてから、関数 sample を使用して各成績グループから 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 のデータ フレームで比例および不均衡サンプリングを正常に実行できます。