Датасет для машинного обучения: объекты, признаки и целевая переменная
Датасет — не просто таблица, которую удалось выгрузить. Это зафиксированное представление объектов в определённый момент времени. Чтобы модель отвечала на нужный вопрос, каждая строка, каждый признак и целевая переменная должны иметь однозначный смысл.
Что означает строка таблицы
Единица наблюдения задаёт объект прогноза. В одной задаче строка описывает заказ, в другой — клиента, день или отдельное измерение датчика. Если смешать уровни, признаки перестанут соответствовать цели: годовой доход клиента нельзя бездумно повторять в строках его покупок и затем случайно делить покупки между выборками.
Сначала напишите фразу: «одна строка — это ... на момент ...». Указание времени особенно важно. Признак должен быть известен к моменту, когда продукт запросит прогноз, иначе в таблице появится информация из будущего.
Признаки и цель
Матрицу признаков принято обозначать X, а целевой вектор — y. Столбцы могут быть числовыми, категориальными, временными, текстовыми или составными. Тип хранения не всегда совпадает со смыслом: почтовый индекс записан цифрами, но расстояние между индексами обычно не имеет арифметического значения.
Цель должна отражать наблюдаемый исход. Поле «клиент ушёл» требует точного окна: не совершил покупку 30, 60 или 180 дней? Разные определения создают разные модели и не должны смешиваться в одном эксперименте.
Паспорт данных
До обучения полезно сохранить для каждого поля:
| Поле | Что зафиксировать |
|---|---|
| Объект | единица наблюдения и уникальный ключ |
| Время | момент формирования признаков и окно цели |
| Признак | смысл, тип, единицы и допустимые значения |
| Цель | правило вычисления и источник подтверждения |
| Пропуск | означает отсутствие, неизвестность или ошибку |
Такой паспорт помогает заметить, что ноль в столбце возраста обозначает неизвестное значение, а сумма заказа записана в разных валютах.
Быстрый аудит в pandas
import pandas as pd
data = pd.DataFrame({
'order_id': [101, 102, 103, 103, 104],
'amount': [890.0, 1_240.0, None, 760.0, 2_100.0],
'city': ['Казань', 'Москва', 'Казань', 'Казань', None],
'target': [0, 1, 0, 0, 1],
})
print(data.shape)
print(data.dtypes)
print(data.isna().mean().sort_values(ascending=False).head())
print(data['target'].value_counts(dropna=False, normalize=True))
print(data.duplicated(subset='order_id').sum())Эти команды не доказывают пригодность набора, но находят явные проблемы: неожиданный тип, массовые пропуски, дисбаланс ответа и повторные идентификаторы.
Идентификатор почти никогда не является признаком
Уникальный номер полезен для соединения таблиц и расследования ошибок. Как вход модели он часто создаёт ложные закономерности, завязанные на порядок загрузки или источник данных. Исключение возможно, если из идентификатора извлекается реальный стабильный смысл, но это нужно обосновать отдельно.
Также проверяйте дубликаты и связанные объекты. Две фотографии одного товара или события одного пользователя не должны случайно оказаться по разные стороны тестового разделения, если это делает проверку слишком лёгкой.
Практика: составьте карточку датасета
Возьмите открытую таблицу и опишите одной строкой объект, момент прогноза и цель. Для пяти столбцов укажите смысл, тип и доступность во времени. Найдите потенциальный идентификатор, категорию, сохранённую числом, и способ появления дубликатов. Решите, по какому ключу их проверять.
Что важно запомнить
- Одна строка должна обозначать один ясно определённый объект и момент.
- Тип значения задаётся смыслом, а не только форматом хранения.
- Цель требует точного правила и окна наблюдения.
- Паспорт полей выявляет проблемы раньше дорогого обучения.