Из каких компонентов состоит байесовское ансамблирование моделей (Bayesian Ensembling Composition)?

«Из каких компонентов состоит байесовское ансамблирование моделей (Bayesian Ensembling Composition)?» — вопрос из категории Статистика и теория вероятностей, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Байесовское ансамблирование (Bayesian Model Averaging/Ensembling) — это продвинутая техника объединения прогнозов нескольких моделей, где веса моделей не фиксированы, а являются случайными величинами с апостериорным распределением, выведенным из данных. Это позволяет корректно учесть неопределенность как в данных, так и в выборе лучшей модели.

Ключевые компоненты:

  1. Набор базовых моделей (M1, M2, ..., Mk): Это могут быть модели разной архитектуры (например, линейная регрессия, случайный лес, градиентный бустинг, нейросеть) или одна модель, обученная на разных подвыборках данных (как в Bagging).
  2. Априорное распределение на веса моделей (Prior): Обычно используется Дирихле распределение (Dirichlet), так как оно определено на симплексе (веса неотрицательны и в сумме дают 1). Параметры Дирихле задают наши априорные ожидания о важности каждой модели.
    # Пример: априорное распределение Дирихле с параметром alpha = [1,1,1]
    # Это означает равновероятный выбор любой из трех моделей до наблюдения данных.
  3. Правдоподобие (Likelihood): Вероятность наблюдаемых данных при заданных весах моделей и их прогнозах. Часто предполагается нормальное распределение ошибки ансамбля. [ P(Data | w, M) propto expleft(-frac{1}{2sigma^2} sum (yi - sum{j=1}^k wj hat{y}{ij})^2 right) ] где ( hat{y}_{ij} ) — прогноз j-й модели для i-го наблюдения.
  4. Апостериорное распределение весов (Posterior): Распределение весов моделей после учета данных. Вычисляется по теореме Байеса: [ P(w | Data, M) propto P(Data | w, M) cdot P(w) ] Это распределение редко имеет аналитическую форму и оценивается методами Монте-Карло (MCMC) или вариационным выводом.
  5. Прогноз ансамбля: Финальный прогноз — это среднее прогнозов базовых моделей, взвешенное по апостериорному распределению весов. Это не простое среднее, а среднее, учитывающее неопределенность. [ hat{y}{new} = int left( sum{j=1}^k wj hat{y}{new, j} right) P(w | Data) dw ]

Практическая реализация с PyMC3:

import numpy as np
import pymc3 as pm
import arviz as az

# Допустим, у нас есть прогнозы 3-х моделей (preds1, preds2, preds3) и истинные значения y_true
preds = np.column_stack([preds1, preds2, preds3])  # Массив [n_samples, 3]

with pm.Model() as bayesian_ensemble:
    # 1. Априорное распределение для весов (равномерное Дирихле)
    weights = pm.Dirichlet('weights', a=np.ones(3))

    # 2. Определяем среднее ансамбля как взвешенную сумму прогнозов
    mu = pm.math.dot(preds, weights)

    # 3. Правдоподобие (предполагаем нормальный шум с неизвестной дисперсией)
    sigma = pm.HalfNormal('sigma', sigma=1)
    likelihood = pm.Normal('y', mu=mu, sigma=sigma, observed=y_true)

    # 4. Получаем апостериорное распределение с помощью MCMC
    trace = pm.sample(2000, tune=1000, cores=2, return_inferencedata=True)

# Анализ результатов
print(az.summary(trace, var_names=['weights']))  # Средние апостериорные веса и доверительные интервалы

# Прогноз для новых данных (используем апостериорные средние весов)
posterior_weights_mean = trace.posterior['weights'].mean(dim=('chain', 'draw')).values
new_pred = np.dot(new_preds_from_3_models, posterior_weights_mean)

Преимущества перед простым ансамблированием:

  • Учет неопределенности модели: Дает не только точечный прогноз, но и распределение, отражающее уверенность в комбинации моделей.
  • Адаптивные веса: Веса могут меняться в зависимости от области входного пространства (если модель параметризована соответствующим образом).
  • Защита от переобучения: Байесовский подход естественным образом регулирует сложность ансамбля.