Масштабирование признаков в Machine Learning: когда без него нельзя

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

Содержание Следующие статьи
Содержание Масштабирование признаков в Machine Learning: когда без него нельзя
  1. Почему одинаково полезные признаки могут мешать друг другу только из-за единиц измерения
  2. Что меняет масштабирование в математическом смысле
  3. Когда без масштабирования правда нельзя
  4. Как это выглядит в Python

Почему одинаково полезные признаки могут мешать друг другу только из-за единиц измерения

Представь два признака: возраст пользователя и годовой доход. Первый измеряется десятками, второй — сотнями тысяч. Если отдать их некоторым алгоритмам как есть, модель начнет воспринимать пространство неравномерно. Один признак станет визуально и численно доминировать просто из-за масштаба, а не потому, что он действительно важнее. Именно поэтому масштабирование — не косметическая обработка, а способ вернуть признакам честные геометрические отношения.

Особенно это заметно в моделях, где расстояния, градиенты или регуляризация зависят от масштаба координат. KNN, SVM, логистическая регрессия с регуляризацией, линейные модели, PCA — все они чувствуют разницу очень быстро.

Что меняет масштабирование в математическом смысле

Формула: раздел математики — математическая статистика
$$ z = \frac{x - \mu}{\sigma} $$
Что означает эта формула

Стандартизация переводит признак в шкалу, где среднее становится нулем, а разброс — единичным. Благодаря этому признаки сравниваются в сопоставимом масштабе.

Что означает каждый символ
  • z — стандартизированное значение признака
  • x — исходное значение объекта
  • \mu — среднее значение признака по выборке
  • \sigma — стандартное отклонение признака

Интуитивно это значит, что модель начинает видеть не абсолютные числа, а относительное положение объекта внутри распределения признака. Один доход уже не «кричит» громче только потому, что записан большими числами.

Когда без масштабирования правда нельзя

Без него почти всегда плохо чувствуют себя методы, работающие через расстояния или через оптимизацию коэффициентов в чувствительном пространстве. Например, в KNN один крупномасштабный признак может полностью задавить остальные в евклидовом расстоянии. В линейных моделях с L1 и L2-регуляризацией коэффициенты начинают сравниваться некорректно, если признаки имеют разные масштабы. В PCA главные компоненты могут отражать не структуру данных, а просто размер единиц измерения.

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

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

example.pyPython
import pandas as pd  # задаем небольшой пример с признаками разных масштабов
from sklearn.preprocessing import StandardScaler  # используем стандартное масштабирование признаков

frame = pd.DataFrame({  # собираем таблицу с несопоставимыми единицами измерения
    'age': [21, 28, 35, 42],  # возраст измеряется десятками
    'income': [45000, 70000, 120000, 160000],  # доход записан числами на порядки больше
})

scaler = StandardScaler()  # создаем объект масштабирования
scaled = scaler.fit_transform(frame)  # переводим оба признака в общую шкалу со средним 0 и std 1
scaled_frame = pd.DataFrame(scaled, columns=['age_z', 'income_z'])  # оформляем результат в читаемую таблицу
print(scaled_frame.round(3))  # смотрим, как признаки стали сопоставимыми по масштабу

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

Что читать дальше

Связанные статьи по этой теме

Canary deployment для моделей: как выкатывать новую версию без лишнего риска Latency в ML API: почему быстрая модель важна не меньше точной Batch inference и real-time inference: как выбирать режим работы модели
Вернуться в блог