Ответ
Взвешенное среднее (Weighted Mean) — это обобщение среднего арифметического, где каждому элементу выборки присваивается вес, отражающий его важность или частоту. Элементы с большим весом вносят больший вклад в итоговое значение.
Формула:
weighted_mean = Σ (w_i * x_i) / Σ w_i
где x_i — значения, w_i — их веса.
Зачем это нужно в ML/Data Science:
- Обработка несбалансированных данных: При вычислении средней ошибки или метрики по классам можно дать больше веса редкому, но важному классу.
- Агрегация оценок моделей: Например, ensemble-модель, где итоговый прогноз — это взвешенное среднее прогнозов базовых моделей, а веса отражают их точность.
- Метрики качества:
F1-scoreс параметромaverage='weighted'вычисляет метрику для каждого класса, а затем усредняет их, взвешивая по поддержке класса (количеству экземпляров).
Примеры на Python:
import numpy as np
# Пример 1: Базовый расчет
values = np.array([85, 90, 78])
weights = np.array([0.3, 0.5, 0.2]) # Важность каждой оценки
weighted_mean = np.average(values, weights=weights)
print(f"Взвешенное среднее оценок: {weighted_mean}") # 85.7
# Пример 2: Имитация вычисления взвешенного MSE для несбалансированных классов
y_true = np.array([1, 1, 0, 0, 0, 0, 0]) # 2 позитивных, 5 негативных
predicted = np.array([0.9, 0.8, 0.3, 0.2, 0.1, 0.4, 0.2])
class_weights = np.array([2.5, 0.4]) # Вес для класса 1 и класса 0
# Создаем массив весов для каждого образца
sample_weights = np.where(y_true == 1, class_weights[1], class_weights[0])
# Вычисляем взвешенную среднеквадратичную ошибку
weighted_mse = np.average((y_true - predicted) ** 2, weights=sample_weights)
print(f"Взвешенная MSE: {weighted_mse:.4f}")
# Сравним с обычным MSE
regular_mse = np.mean((y_true - predicted) ** 2)
print(f"Обычная MSE: {regular_mse:.4f}")
Ключевой вывод: Взвешенное среднее позволяет управлять вкладом отдельных наблюдений или групп в итоговую агрегированную статистику, что критически важно при работе с неоднородными данными.