Нормализация данных простыми словами

Проверь себя · 1/3разбор после ответа
Нужно выбрать пользователей без email. Какое условие в WHERE корректно найдёт строки, где email отсутствует (равен NULL)?

Зачем это знать

Нормализация — одна из базовых операций предобработки данных для ML. Если одна переменная age в диапазоне 0–100, другая salary от 0 до миллиона — модель будет «доминироваться» второй. Нормализация приводит всё к одинаковому масштабу.

На собесе спрашивают: «чем отличается нормализация и стандартизация», «для каких моделей нужно». Junior путает термины. Middle знает, что для линейных моделей и нейросетей обязательно, а для tree-based (Random Forest, XGBoost) — не нужно.

В статье:

  • Короткий ответ.
  • Min-max normalization.
  • Z-score (стандартизация).
  • Когда какая.
  • В sklearn.
  • Data leakage и pipeline.

Короткий ответ

  • Normalization (Min-Max): [0, 1] диапазон. x_new = (x - min) / (max - min)
  • Standardization (Z-score): mean=0, std=1. x_new = (x - mean) / std

В русском языке часто «нормализация» используется для обоих. В английском — normalization и standardization — разные.

Min-Max normalization

x_new = (x - min) / (max - min)

Результат в [0, 1].

Пример

Зарплаты: 50, 70, 100, 120, 200 тыс.

  • min = 50, max = 200, range = 150
  • 50 → 0.00
  • 70 → 0.13
  • 100 → 0.33
  • 120 → 0.47
  • 200 → 1.00

Когда использовать

  • Нейронные сети (активации лучше работают в [0, 1]).
  • Изображения (пиксели 0–255 → 0–1).
  • Когда распределение ненормальное.

Подвох

Чувствительна к выбросам. Один чек 10 миллионов — и большинство значений оказываются в [0, 0.01].

Z-score (Standardization)

x_new = (x - mean) / std

Результат: mean=0, std=1.

Пример

Зарплаты: 50, 70, 100, 120, 200 тыс. Mean ≈ 108, std ≈ 59.

  • 50 → -0.98
  • 70 → -0.65
  • 100 → -0.14
  • 120 → 0.20
  • 200 → 1.56

Когда использовать

  • Linear regression, logistic regression.
  • SVM, k-NN, k-means (основанные на расстояниях).
  • PCA.
  • Когда данные приблизительно нормальны.

Для каких моделей обязательна

Distance-based

k-NN, k-means, SVM считают расстояния. Без нормализации переменная с большим масштабом перетягивает результат на себя.

Gradient-based

Нейросети, линейная регрессия — градиенты зависят от масштаба.

Regularized models

Lasso, Ridge — штраф на коэффициенты зависит от масштаба.

Для каких не нужна

  • Decision Trees.
  • Random Forest.
  • XGBoost, LightGBM.
  • CatBoost.

Tree-based модели делают split по порогу одной переменной — масштаб не влияет.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

В sklearn

from sklearn.preprocessing import MinMaxScaler, StandardScaler

# min-max
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)  # только transform

# z-score
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)

Data leakage

Классическая ошибка — нормализовать на всём датасете до разбиения:

# ПЛОХО (leakage)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # mean/std знают про test
X_train, X_test = train_test_split(X_scaled)

# ХОРОШО
X_train, X_test = train_test_split(X)
scaler = StandardScaler()
scaler.fit(X_train)  # только на train
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)

Pipeline спасает

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model', LogisticRegression())
])

pipe.fit(X_train, y_train)  # leakage-safe

С cross_val_score scaler обучается на каждом train-фолде отдельно.

Другие scalers

  • RobustScaler — использует медиану и IQR (устойчив к выбросам).
  • MaxAbsScaler — делит на |max| (сохраняет знак).
  • QuantileTransformer — квантильное преобразование.
  • PowerTransformer — Box-Cox / Yeo-Johnson.

Для данных с тяжёлым хвостом — RobustScaler или PowerTransformer.

На собесе

«Нормализация или стандартизация?» В русском часто синонимы. Min-Max vs Z-score — разные методы.

«Когда обязательна?» Линейные модели, нейросети, k-means, SVM.

«Для tree-based?» Не нужна.

«Выбросы?» Z-score устойчивее, чем Min-Max.

Частые ошибки

1. Нормализация перед split

Data leakage. Всегда после split.

2. Нормализация на tree-based

Избыточно. Tree-based не зависит от масштаба.

3. Fit на test

StandardScaler.fit(X_test) — читерство. На test только transform.

4. Игнорировать выбросы

Min-Max на данных с выбросами сжимает большинство значений в узкий диапазон.

Связанные темы

FAQ

Normalization и standardization — одно?

В русском часто смешиваются. Технически — разные: Min-Max vs Z-score.

Какую выбрать?

Min-Max для neural nets. Z-score для linear / SVM / PCA. RobustScaler при outliers.

Для категорий?

One-Hot / Label encoding, не нормализация.

После split как fit?

fit_transform на train. transform на test.