Когда человек только заходит в Machine Learning, у него очень быстро начинают мелькать одни и те же обозначения:

  • X

  • Y

  • признаки

  • target

  • train

  • test

Проблема в том, что эти слова часто объясняют слишком быстро. В итоге у новичка в голове остается набор терминов, но не появляется цельная картина: что именно подается в модель, что она должна предсказать и как вообще проверять, что она чему-то научилась.

А без этого дальше действительно начинается путаница почти во всем: в моделях, метриках, коде и даже в понимании того, что именно делает ML.

В этой статье спокойно разберем базовую конструкцию, на которой держится почти все классическое машинное обучение:

  • что такое признаки;

  • что такое target;

  • что такое X и Y;

  • чем регрессия отличается от классификации;

  • зачем делить данные на train и test.


Почему здесь так часто путаются

Одна из причин путаницы очень простая: многие помнят из школы, что x и y — это координаты на плоскости.

В Machine Learning это не так.

Здесь:

  • X — это входные данные;

  • y — это правильный ответ, который модель должна научиться предсказывать.

То есть в ML это не оси координат, а просто удобные обозначения для данных.

Если совсем коротко, то можно запомнить так:

  • X — что модель видит;

  • y — что модель должна угадать.

Или еще проще:

  • X — вход;

  • y — ответ.


С чего вообще начинается ML-модель

Любая базовая ML-задача выглядит примерно так:

  1. У нас есть объект.

  2. У объекта есть какие-то характеристики.

  3. Мы хотим по этим характеристикам предсказать результат.

Например, мы хотим предсказывать зарплату человека по данным о нем.

Допустим, у нас есть такая информация:

{
  "experience_years": 3,
  "english_level": 4
}

И есть результат:

{
  "salary": 120000
}

Тогда логика такая:

  • experience_years и english_level — это входные данные;

  • salary — это ответ, который нужно предсказать.

В терминах ML:

  • X = [experience_years, english_level]

  • y = salary


Что такое признаки

Признаки (features) — это характеристики объекта, по которым модель пытается найти закономерность.

Например, признаками могут быть:

  • опыт работы;

  • уровень английского;

  • возраст;

  • площадь квартиры;

  • количество комнат;

  • история покупок.

Если говорить совсем просто, признаки — это входные параметры.

Именно они попадают в модель на вход. Модель смотрит на них и пытается понять, как они связаны с нужным ответом.


Что такое target

Target или целевая переменная — это то, что мы хотим предсказать.

Например:

  • зарплату;

  • цену квартиры;

  • факт ухода клиента;

  • спам или не спам;

  • класс изображения.

То есть target — это правильный ответ для модели во время обучения.

Это очень важное разделение:

  • признаки — то, по чему мы предсказываем;

  • target — то, что предсказываем.

На практике многие ошибки начинаются именно в тот момент, когда человек перестает четко разделять эти две роли.


Что такое X и y на практике

Теперь можно перейти к самым популярным обозначениям.

X — матрица признаков

X — это все входные данные, обычно в виде таблицы.

Например:

experience_years

english_level

1

2

2

3

3

4

4

4

Это и есть X.

Каждая строка — отдельный объект.

Каждый столбец — отдельный признак.

y — целевая переменная

y — это колонка с правильными ответами для каждой строки из X.

Для той же таблицы это может быть:

salary

70000

90000

120000

150000

Это и есть y.

Именно поэтому базовая схема в ML выглядит так:

  • X — входные признаки;

  • y — правильные ответы.


Полный пример: как это выглядит вместе

Допустим, у нас есть такая таблица:

experience_years

english_level

salary

1

2

70000

2

3

90000

3

4

120000

4

4

150000

Что здесь происходит?

Шаг 1. Выделяем признаки

То, по чему модель будет предсказывать:

  • experience_years

  • english_level

Это наш X.

Шаг 2. Выделяем target

То, что нужно предсказать:

  • salary

Это наш y.

В коде такая логика часто выглядит так:

import pandas as pd

df = pd.DataFrame({
    "experience_years": [1, 2, 3, 4],
    "english_level": [2, 3, 4, 4],
    "salary": [70000, 90000, 120000, 150000]
})

# X — только признаки
X = df[["experience_years", "english_level"]]

# y — целевая переменная
y = df["salary"]

Здесь важно не само количество строк, а сам принцип: мы явно отделяем вход от ответа.


Это регрессия или классификация

Как только у нас появляется y, сразу возникает следующий вопрос: а что именно мы предсказываем?

От этого зависит тип задачи.

Когда это регрессия

Если y — это число, которое может принимать разные значения на числовой шкале, то это регрессия.

Например:

  • зарплата;

  • цена;

  • температура;

  • выручка;

  • время доставки.

В примере выше salary — это число, значит перед нами задача регрессии.

Когда это классификация

Если y — это не число как непрерывная величина, а категория или класс, то это уже классификация.

Например:

  • spam / not spam

  • yes / no

  • junior / middle / senior

  • cat / dog

То есть разница очень простая:

  • регрессия — предсказываем число;

  • классификация — предсказываем класс.


Почему без train/test нельзя честно оценить модель

Вот здесь начинается одна из самых важных идей во всем ML.

Нельзя обучать модель и проверять ее на одних и тех же данных.

Потому что в этом случае модель может не понять закономерность, а просто запомнить ответы.

Тогда получится ложное ощущение, что все работает отлично.

Простая аналогия

Представьте экзамен.

Если человек заранее увидел ответы, а потом решает ровно тот же вариант, это не означает, что он реально понял тему.

Это означает только то, что он смог воспроизвести уже знакомый набор ответов.

С моделью происходит то же самое.


Что такое train и test

Train

Train — это данные, на которых модель обучается.

На них она ищет закономерности:

  • какие признаки влияют на ответ;

  • как связаны вход и результат;

  • какие паттерны повторяются.

Test

Test — это данные, которые модель не видела во время обучения.

На них мы проверяем, умеет ли модель работать на новых примерах.

Именно здесь становится видно, произошло ли обучение на закономерности или просто запоминание train-части.


Как это выглядит в коде

На практике разделение данных часто делают так:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X,          # признаки
    y,          # target
    test_size=0.25,   # 25% данных уходит в test
    random_state=42   # чтобы разбиение воспроизводилось
)

Что здесь получается:

  • X_train — признаки для обучения;

  • y_train — правильные ответы для обучения;

  • X_test — признаки для проверки;

  • y_test — правильные ответы для проверки.

Дальше модель обучают на train-части, а качество оценивают на test-части.


Что ломается, если понять это неправильно

Вот несколько типичных ошибок новичков.

Ошибка 1. Путают признаки и target

Например, человек случайно кладет в X колонку, которую модель должна предсказывать.

В результате получается нечестное обучение: модель как будто “угадывает”, но на деле просто получает ответ прямо на вход.

Ошибка 2. Проверяют модель на тех же данных, на которых обучали

Это одна из самых опасных ошибок, потому что внешне все может выглядеть отлично: метрика высокая, предсказания красивые, код работает.

Но на новых данных модель внезапно начинает сыпаться.

Ошибка 3. Не понимают, что именно предсказывают

Если не зафиксировать, какой именно у нас y, можно легко начать путать регрессию и классификацию, а вместе с этим — выбирать не ту модель и не те метрики.

Например:

  • для регрессии не подойдет accuracy;

  • для классификации не подходят ошибки вроде MAE как основной способ оценки.


Как правильно держать это в голове

Есть простая схема, которую полезно помнить почти всегда:

  • объект — то, про что у нас есть данные;

  • признаки — характеристики объекта;

  • X — таблица признаков;

  • y — колонка правильных ответов;

  • train — данные для обучения;

  • test — данные для честной проверки.

Если эта логика у человека в голове зафиксирована, то дальше уже намного проще понимать:

  • как устроено обучение модели;

  • что такое предсказание;

  • зачем нужны метрики;

  • почему бывает переобучение;

  • как интерпретировать результат.


Мини-проверка на понимание

Возьмем ту же таблицу:

experience_years

english_level

salary

1

2

70000

2

3

90000

3

4

120000

4

4

150000

Здесь:

  • признаки: experience_years, english_level;

  • target: salary;

  • X: таблица из двух признаков;

  • y: колонка salary;

  • тип задачи: регрессия.

Если вместо salary была бы колонка job_level со значениями junior, middle, senior, то это уже была бы классификация.