Нормализация данных простыми словами
Карьерник — квиз-тренажёр в 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 в узком диапазоне.
Связанные темы
- Overfitting простыми словами
- Data leakage простыми словами
- Bias-variance tradeoff
- Стандартное отклонение
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+ вопросами для собесов.