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

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

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

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

На собесе спрашивают: «чем отличается нормализация и стандартизация», «для каких моделей нужно». Junior путает термины. Middle знает, что для linear / neural networks — обязательно, для 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

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

  • Neural networks (activation functions work best в [0, 1])
  • Image data (pixels 0-255 → 0-1)
  • Когда distribution не normal

Подвох

Чувствительна к outliers. Один чек 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 (distance-based)
  • PCA
  • Когда data approximately normal

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

Distance-based

k-NN, k-means, SVM — считают расстояния. Без нормализации feature с большим масштабом dominate.

Gradient-based

Neural networks, linear regression — gradients зависят от масштаба.

Regularized models

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

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

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

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

В 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 danger

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

# ПЛОХО (leakage)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # mean/std из test included
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 spасает

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 fit-ится на каждом train-fold отдельно.

Другие scalers

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

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

На собесе

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

«Когда обязательна?» Linear, neural networks, k-means, SVM.

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

«Outliers?» Z-score устойчивее Min-Max.

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

1. Normalization перед split

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

2. Normalization на tree-based

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

3. Fit на test

StandardScaler.fit(X_test) = читерство. Только transform.

4. Игнорировать outliers

Min-Max на данных с outliers → большинство values в узком диапазоне.

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

FAQ

Normalization и standardization — одно?

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

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

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

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

One-Hot / Label encoding, не normalization.

После split как fit?

fit_transform на train. transform на test.


Тренируйте ML — откройте тренажёр с 1500+ вопросами для собесов.