Гистограмма предсказаний – это визуальный инструмент, позволяющий быстро оценить распределение вероятностей, выдаваемых моделью машинного обучения; Она помогает понять, насколько уверена модель в своих ответах, выявить перекосы классов и найти аномалии в данных․
Почему гистограмма предсказаний так важна?
Самое главное помнить, что гистограмма позволяет сравнить распределение предсказаний на обучающем и тестовом наборе, а также увидеть, где модель переоценивает или недооценивает вероятность того или иного класса․
Очень важно, что без визуального контроля можно упустить систематические ошибки, которые потом будет трудно исправлять․
Подготовка данных
- Получите массив предсказанных вероятностей от модели (например,
model․predict_proba(X))․ - Отделите предсказания по каждому классу, если их несколько․
- Если необходимо, превратите массив в
DataFrameдля удобства․
Пример кода на Python:
import numpy as np
import pandas as pd
proba = clf․predict_proba(X_test) # shape = (n_samples, n_classes)
df_proba = pd․DataFrame(proba, columns=['Class_0', 'Class_1', 'Class_2'])
Построение гистограммы средствами matplotlib
Самый базовый способ – использовать функцию plt․hist․ Ниже пример, показывающий распределение предсказаний для первого класса․
import matplotlib․pyplot as plt
class0 = df_proba['Class_0']
plt․figure(figsize=(8, 4))
plt․hist(class0, bins=20, color='steelblue', edgecolor='black', alpha=0․7)
plt․title('Гистограмма предсказаний класса 0')
plt․xlabel('Вероятность')
plt․ylabel('Количество образцов')
plt․grid(True, linestyle='--', alpha=0․5)
plt․tight_layout
plt․show
Гистограмма предсказаний нескольких классов на одном графике
Для сравнения удобно построить боковые столбцы (side‑by‑side bars)․ Ниже – готовый шаблон, взятый из примеров в интернете․
import numpy as np
n_classes = df_proba․shape[1]
counts_train = [] # если есть отдельный train‑set
counts_test = []
for i in range(n_classes):
prob_i = df_proba․iloc[:, i]
# Условие «предсказанный» класс = i
pred_i = np․argmax(proba, axis=1) == i
counts_test․append(pred_i․sum / len(pred_i))
x = np․arange(n_classes)
width = 0․35
plt․figure(figsize=(9,5))
plt․bar(x ⎼ width/2, counts_test, width, label='Тест', color='tomato', alpha=0․8)
plt․xticks(x, [f'Класс {i}' for i in range(n_classes)])
plt․ylabel('Доля предсказаний')
plt․title('Распределение предсказаний по классам')
plt․legend
plt․grid(axis='y', linestyle='--', alpha=0․6)
plt․tight_layout
plt․show
Более продвинутый вариант: seaborn и KDE
Библиотека seaborn позволяет сразу добавить плотность распределения (KDE) и удобно группировать по классам․
import seaborn as sns
plt․figure(figsize=(10,4))
for cls in df_proba․columns:
sns․histplot(df_proba[cls], kde=True, bins=20,
label=cls, stat='density', alpha=0․5)
plt․title('Гистограммы предсказаний всех классов с KDE')
plt․xlabel('Вероятность')
plt․ylabel('Плотность')
plt․legend
plt․grid(True, linestyle='--', alpha=0․4)
plt․show
Интерпретация полученных графиков
- Смещение в сторону 1․0 – модель уверенно предсказывает данный класс․
- Большой разброс по всему диапазону [0,1] – модель «нерешительна», вероятно, данные недостаточно информативны․
- Пики в середине (≈0․5) часто указывают на два‑классовую задачу, где модель часто «сомневается» между двумя вариантами․
- Различия между обучающим и тестовым набором могут свидетельствовать о переобучении: если на train‑set вероятность почти всегда 1․0, а на test‑set распределена, модель слишком «запомнила» обучающие примеры․
Типичные ошибки и способы их избежать
- Недостаточное количество бинов․ При малом числе столбцов (bins) скрываются детали․ Рекомендуем пробовать 20‑30 бинов и проверять стабильность графика․
- Отсутствие нормализации․ Если сравниваете разные наборы, используйте параметр
density=Trueвhistилиstat='density'вseaborn․ - Переполнение оси Y․ При перекрытии нескольких гистограмм столбцы могут «съедать» друг друга – используйте полупрозрачность (
alpha) или отдельные подграфики (subplot)․ - Игнорирование несбалансированности классов․ Если один класс сильно преобладает, добавьте взвешивание или визуализируйте относительные частоты, а не абсолютные количества․
Полезные рекомендации
- Сохраняйте графики в векторных форматах (PDF, SVG) – они не теряют качества при печати․
- Для публикаций используйте
plt․savefig('histogram․pdf', dpi=300, bbox_inches='tight')․ - Записывайте в комментариях к графику основные выводы – так они будут видны сразу, без необходимости перечитывать текст статьи․
- Объединяйте гистограммы с другими типами визуализаций (ROC‑кривые, confusion‑matrix) – комплексный подход дает более полную картину․
Контакты для обращений
Если у вас возникли вопросы по построению гистограмм, интерпретации результатов или настройке визуализаций, вы можете связаться со мной любым удобным способом:
- Электронная почта: ml․helper@example․com
- Telegram: @ml_helper_bot
- GitHub: github․com/ml-helper (откройте issue с темой «Histogram Help»)
- Телефон (рабочее время 10:00–18:00 МСК): +7 (495) -23‑45‑67
Не стесняйтесь делиться своими результатами, задавать уточняющие вопросы и предлагать улучшения – совместно мы сделаем анализ предсказаний ещё более эффективным!
Дата публикации: 10 марта 2026 г․