Первая модель: от таблицы до предсказания

Признаки, цель и строки данных

Содержание курса

Разделение таблицы на матрицу признаков X и целевую переменную y

Когда целевой столбец определён, его нужно физически отделить от остальных. Делается это двумя строками:

y = df['цена']
X = df.drop(columns=['цена'])

print(X.shape)   # (5, 3)
print(len(y))    # 5
print(X.shape[0] == len(y))  # True

df['цена'] возвращает Series — одномерный объект, где каждый элемент соответствует одной строке исходной таблицы. Это и есть y: то, что модель будет учиться воспроизводить.

df.drop(columns=['цена']) возвращает новый DataFrame без указанного столбца. В X остаются только признаки — площадь, комнаты, этаж. Важно: drop по умолчанию не изменяет df, а отдаёт копию. Исходная таблица остаётся нетронутой.

Проверка X.shape[0] == len(y) подтверждает, что количество наблюдений в обоих объектах одинаково. Это необходимое, но не достаточное условие корректного разделения: равенство размеров не гарантирует, что строки X и элементы y относятся к одним и тем же объектам.

Sklearn связывает X и y по позиции — нулевая строка X должна соответствовать нулевому элементу y, первая — первому, и так далее. Это соответствие можно нарушить двумя способами. Первый — отфильтровать строки только в одном из объектов: тогда X.shape[0] == len(y) сразу станет False, и ошибка обнаружится при первой же проверке. Второй, более коварный, — переставить строки только в X или только в y: длины останутся равны, но каждая квартира окажется привязана к чужой цене. Такую ошибку проверка длин не поймает. Именно поэтому надёжнее всего выделять X и y из одного и того же df без промежуточных перестановок строк между ними.

Теперь о границе, которую нельзя нарушать. Если цена останется в X — случайно, потому что забыли вызвать drop, — модель на обучающих данных получает ответ прямо среди входных переменных. Это называется утечкой данных: оценка качества может стать искусственно хорошей и не отражать реальную способность модели предсказывать. А когда потребуется применить модель к новым объектам, у них цены ещё нет — столбец будет отсутствовать. Sklearn обнаружит несовпадение набора признаков и вызов predict завершится ошибкой.

Таким образом, модель с утечкой не только даёт ненадёжную оценку качества, но и оказывается непригодной к реальному использованию.

После разделения структура зафиксирована: X с тремя признаками описывает квартиру, y содержит её цену. Именно это и является предметом задачи регрессии: по трём числам на входе предсказать одно число на выходе.

ПлощадьКомнатыЭтажЦена (y)
38134200
55276100
70317800
9041211500
45255300
Первые три столбца — признаки X; цена — целевая переменная y.