Данные, признаки и целевая переменная
Основы машинного обучения · Урок 2 / 20
X, y и всё, что между ними
Любая задача обучения с учителем сводится к двум объектам: матрице признаков X и вектору целевой переменной y. Строка X — один объект (квартира, письмо, клиент, транзакция), столбец — один признак. Элемент y — правильный ответ для соответствующей строки. Если вы не можете нарисовать эту таблицу для своей задачи, задача ещё не поставлена, и садиться за модель рано.
Данные
Данные — это примеры, на которых учится модель. Для предсказания цены квартиры это таблица проданных квартир, где известны характеристики и реальная цена сделки. Важны три свойства. Объём: сотни строк хватает линейной модели, тысячи и десятки тысяч нужны бустингу и нейросетям. Чистота: дубли, ошибки разметки и битые значения бьют по качеству сильнее, чем выбор алгоритма. Репрезентативность: данные должны собираться так же, как будут приходить в проде. Модель, обученная на квартирах одного района, на другом районе плоха не потому, что «мало данных», а потому что выборка сдвинута.
Признаки
Признаки — характеристики объекта, по которым модель делает вывод: площадь, число комнат, этаж, район, состояние. Выбор признаков решает больше, чем выбор модели. Площадь предсказывает цену, цвет обоев — нет. Признаки бывают числовые, категориальные, бинарные, временные и текстовые, и каждый тип требует своей подготовки — этому посвящён отдельный урок дальше.
import pandas as pd
df = pd.read_csv("flats.csv")
y = df["price"]
X = df.drop(columns=["price", "deal_closed_at", "deal_id"])
print(X.shape, X.dtypes.value_counts())
print(X.isna().mean().sort_values(ascending=False).head())
print(y.describe())
Эти четыре строки диагностики стоит выполнять на каждом новом датасете: размер, типы столбцов, доля пропусков по признакам и распределение цели. Столбец с 90% пропусков почти всегда бесполезен; столбец типа object, который вы считали числом, почти всегда означает, что где-то в данных лежит строка вроде «нет данных».
Модель
Модель — это параметризованная функция, которую обучение подгоняет так, чтобы её выход на X был как можно ближе к y. После обучения она применяется к новым строкам: даёте признаки квартиры, которой не было в данных, — получаете предсказание цены. Два этапа, fit и predict, разделены жёстко: всё, что вычисляется по данным (средние, кодировки категорий, границы масштабирования), считается только на обучающей части.
Утечка цели — самая дорогая ошибка этапа
Утечка возникает, когда в X попадает признак, который в реальности становится известен позже y или вычисляется из него. Классика: в задаче «закроется ли сделка» оставить поле deal_closed_at, а в задаче оттока — поле «дата отключения услуги». Метрика получится великолепной, в проде модель развалится, потому что нужного признака в момент предсказания просто нет. Проверка простая: для каждого столбца спросите, будет ли он заполнен в тот момент, когда модель должна дать ответ.
Шпаргалка
- X — объекты по строкам, признаки по столбцам; y — ответ той же длины.
- Репрезентативность выборки важнее её размера.
- Любая статистика считается на train и применяется к test.
- Признак, недоступный в момент предсказания, — утечка.
Возьмите свой рабочий или открытый датасет и опишите его как ML-задачу. Укажите: что является объектом (строкой), какая колонка становится целью y, и почему именно она. Выпишите не меньше восьми признаков с типами (числовой, категориальный, временной, текстовый) и долей пропусков — числа берите из кода, а не из головы. Отдельно перечислите все колонки, которые вы выбрасываете, и для каждой напишите причину: утечка, идентификатор, константа, дубль. Приложите вывод shape, dtypes и isna().mean().