Данные, признаки и целевая переменная

Основы машинного обучения · Урок 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, а в задаче оттока — поле «дата отключения услуги». Метрика получится великолепной, в проде модель развалится, потому что нужного признака в момент предсказания просто нет. Проверка простая: для каждого столбца спросите, будет ли он заполнен в тот момент, когда модель должна дать ответ.

Инсайт. Формулируйте признаки как «то, что известно на момент принятия решения». Это одно правило снимает большую часть утечек ещё до первого обучения.
Частая ошибка. Считать среднее для заполнения пропусков по всему датасету, а потом делить на train и test. Статистика теста уже просочилась в обучение, и оценка станет оптимистичной.
Про-совет. Заведите словарь данных: столбец, тип, источник, момент появления, доля пропусков. На проекте длиннее недели он окупается многократно.

Шпаргалка

  • X — объекты по строкам, признаки по столбцам; y — ответ той же длины.
  • Репрезентативность выборки важнее её размера.
  • Любая статистика считается на train и применяется к test.
  • Признак, недоступный в момент предсказания, — утечка.
1. Что такое утечка целевой переменной?
2. Где считать среднее для заполнения пропусков?
3. Столбец оказался типа object, хотя вы ждали число. Что вероятнее всего?
Задание — проверяет ИИ

Возьмите свой рабочий или открытый датасет и опишите его как ML-задачу. Укажите: что является объектом (строкой), какая колонка становится целью y, и почему именно она. Выпишите не меньше восьми признаков с типами (числовой, категориальный, временной, текстовый) и долей пропусков — числа берите из кода, а не из головы. Отдельно перечислите все колонки, которые вы выбрасываете, и для каждой напишите причину: утечка, идентификатор, константа, дубль. Приложите вывод shape, dtypes и isna().mean().

← Назад

🔒 Ответьте на вопрос верно, чтобы перейти к следующему уроку.

Данные, признаки и целевая переменная — Основы машинного обучения — Skilvy