Нормализация данных простыми словами
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 по порогу одной переменной — масштаб не влияет.
В 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 на данных с выбросами сжимает большинство значений в узкий диапазон.
Связанные темы
- 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, не нормализация.
После split как fit?
fit_transform на train. transform на test.