Эффективные методы разделения данных на обучающие и тестовые наборы по идентификатору в Python

При работе с данными в Python крайне важно разделить их на отдельные наборы обучения и тестирования для разработки и оценки модели. Хотя существуют различные подходы для достижения этой цели, в этой статье блога мы рассмотрим различные методы разделения данных на основе идентификатора. Мы рассмотрим популярные методы и предоставим примеры кода, которые помогут вам реализовать их в ваших проектах. Итак, приступим!

Метод 1: случайная выборка по идентификатору
Один простой подход заключается в случайной выборке точек данных на основе их уникальных идентификаторов. Это гарантирует, что наборы для обучения и тестирования будут иметь одинаковое распределение идентификаторов, что сводит к минимуму потенциальные ошибки.

import pandas as pd
from sklearn.model_selection import train_test_split
# Load data into a DataFrame
data = pd.read_csv('data.csv')
# Split data into train and test sets
train_ids, test_ids = train_test_split(data['id'], test_size=0.2, random_state=42)
train_data = data[data['id'].isin(train_ids)]
test_data = data[data['id'].isin(test_ids)]

Метод 2: разделение по времени по идентификатору
Если ваши данные имеют временной компонент, вы можете разделить их на основе временных интервалов. Такой подход гарантирует, что модель обучается на более ранних данных и тестируется на более поздних данных, моделируя реальные сценарии.

import pandas as pd
from sklearn.model_selection import train_test_split
# Load data into a DataFrame
data = pd.read_csv('data.csv')
data['timestamp'] = pd.to_datetime(data['timestamp'])
# Sort data by timestamp
data = data.sort_values('timestamp')
# Split data into train and test sets
train_ids, test_ids = train_test_split(data['id'], test_size=0.2, shuffle=False)
train_data = data[data['id'].isin(train_ids)]
test_data = data[data['id'].isin(test_ids)]

Метод 3: стратифицированное разделение по идентификаторам
В сценариях, где распределение определенных групп идентификаторов несбалансировано, может оказаться полезным стратифицированное разделение. Это гарантирует, что как в обучающем, так и в тестовом наборах сохраняется одинаковая доля каждой группы идентификаторов.

import pandas as pd
from sklearn.model_selection import train_test_split
# Load data into a DataFrame
data = pd.read_csv('data.csv')
# Calculate the distribution of ID groups
id_group_counts = data['id'].value_counts(normalize=True)
# Split data into train and test sets, maintaining proportion
train_ids, test_ids = train_test_split(data['id'], test_size=0.2, stratify=data['id'])
train_data = data[data['id'].isin(train_ids)]
test_data = data[data['id'].isin(test_ids)]

Метод 4: пользовательское разделение по идентификатору
В некоторых случаях у вас могут быть особые требования к разделению данных на основе пользовательских условий. Вы можете определить собственную логику разделения, используя Python и pandas.

import pandas as pd
# Load data into a DataFrame
data = pd.read_csv('data.csv')
# Define custom splitting conditions
train_ids = data[data['condition'] == 'train']['id']
test_ids = data[data['condition'] == 'test']['id']
# Split data into train and test sets
train_data = data[data['id'].isin(train_ids)]
test_data = data[data['id'].isin(test_ids)]

В этой статье блога мы рассмотрели несколько эффективных методов разделения данных на обучающие и тестовые наборы по идентификатору в Python. В зависимости от ваших конкретных требований вы можете выбрать наиболее подходящий подход. Помните, что правильное разделение данных имеет важное значение для разработки надежных и надежных моделей машинного обучения. Так что вперед, внедряйте эти методы и усовершенствуйте свои проекты по науке о данных!