Валидация и интерпретируемость

Переобучение

Если ошибка на новых данных значительно больше ошибки на обучающей выборке — это переобучение. Модель запомнила обучающие примеры вместо того, чтобы выучить закономерность.

Отложенная выборка (Hold-out)

Простейший способ оценить обобщающую способность: делим данные на train и test, обучаем на train, оцениваем на test. Test трогаем только один раз.

Кросс-валидация

Делим выборку на \(k\) равных частей. Поочерёдно каждая часть становится тестовой, остальные — обучающими. Итоговая оценка — среднее по \(k\) экспериментам.

При \(k = \ell\) получаем Leave-One-Out (LOO).

После подбора гиперпараметров итоговую модель можно обучить двумя способами:

  • Усреднить предсказания \(k\) моделей: \(a(x) = \frac{1}{k} \sum_{i=1}^k a_i(x)\).
  • Обучить финальную модель на всех данных.
При большой выборке кросс-валидация даёт мало пользы — выброс одного объекта незначителен. Кросс-валидация требует обучить модель \(k\) раз.

Важность признаков

Линейные модели

Значимость признака оценивается по его весу \(w_j\). Это работает только при нормированных и некоррелированных признаках. Нормированный вес:

\[w^* = \frac{\text{std}(x_j)}{\text{std}(y)} \cdot w_j\]

Корреляция не обнаруживает нелинейные зависимости между признаками.

Деревья и ансамбли

Важность признака — суммарное снижение impurity (дисперсии, энтропии, индекса Джини) по всем сплитам, где использовался этот признак. Деревья и Random Forest хорошо интерпретируются. Бустинги — сложнее.

Бустинги: permutation importance

Два подхода:

  • Удалить признак и посмотреть на изменение качества.
  • Зашумить признак и посмотреть на изменение качества (используется чаще).

LIME

Local Interpretable Model-agnostic Explanations. Идея: для каждого объекта \(x\) строим простую интерпретируемую модель \(g\), которая локально аппроксимирует сложную модель \(f\):

\[\xi(x) = \mathop{\text{argmin}}_{g \in G} \left( L(f, g, \pi_x) + \Omega(g) \right)\]

где \(\pi_x\) — окрестность точки \(x\), \(\Omega(g)\) — мера сложности модели \(g\).

LIME объясняет предсказание локально — в окрестности конкретного объекта. Для другого объекта объяснение будет другим.

SHAP

Shapley Additive Explanations. Использует значения Шепли из теории игр для оценки вклада каждого признака:

\[\phi_i = \sum_{S \subseteq F \setminus \{i\}} \frac{|S|!\,(|F| - |S| - 1)!}{|F|!} \left[ f_{S \cup \{i\}}(x_{S \cup \{i\}}) - f_S(x_S) \right]\]

Требования:

  • Local accuracy: \(f(x) = \phi_0 + \sum_{i=1}^n \phi_i x_i\)
  • Missingness: \(x_i = 0 \implies \phi_i = 0\)
  • Consistency: если признак стал важнее в новой модели, его SHAP-значение не уменьшится.
SHAP особенно хорошо работает для деревьев и ансамблей из деревьев. Для нейросетей применяется через дифференцирование входа по выходу.

Target Encoding

Для категориального признака \(x_j\) заменяем категорию средним значением таргета по объектам этой категории:

\[g(x_j, \mathbb{X}) = \frac{\sum_{i=1}^\ell [x_{ij} = x_j]\, y_i}{\sum_{i=1}^\ell [x_{ij} = x_j]}\]

Target Encoding приводит к переобучению: для редких категорий в признак записывается почти точное значение таргета (target leakage).

Способы борьбы:

1. Зашумление

\[\bar{g}(x_j, \mathbb{X}) + \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, \sigma^2)\]

2. Сглаживание

\[\bar{g}(x_j, \mathbb{X}) = \lambda(n(x_j)) \cdot \frac{\sum [x_{ij}=x_j] y_i}{\sum [x_{ij}=x_j]} + (1 - \lambda(n(x_j))) \cdot \frac{\sum y_i}{\ell}\]

где \(\lambda(n)\) — монотонно возрастающая функция \(\in [0; 1]\):

  • \(n \gg 1 \implies \lambda(n) = 1\) — обычное значение счётчика.
  • \(n \sim 1 \implies \lambda(n) < 1\) — добавляем глобальное среднее как регуляризацию.

3. Кросс-валидация

Считаем Target Encoding на фолдах, исключая текущий объект из расчёта.

4. Кодирование по времени (Ordered TS)

Для кодирования объекта \(j\) используем только объекты с 1 по \((j-1)\)-й. Делаем несколько перемешиваний и усредняем. Именно этот подход используется по умолчанию в CatBoost.

← Назад к списку тем