← Назад к вопросам
Какие метрики использовал?
1.7 Middle🔥 201 комментариев
#Метрики и оценка моделей#Опыт и проекты
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Метрики в Data Science: выбор и применение
Выбор метрик зависит от типа задачи. Как опытный Data Scientist, я использую разные метрики для разных сценариев.
Классификация
Бинарная классификация
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
# Accuracy — общая доля правильных предсказаний
accuracy = accuracy_score(y_true, y_pred)
# Precision — из предсказанных положительных, сколько верных
# Используем при высокой цене ложноположительных ошибок (spam detection)
precision = precision_score(y_true, y_pred)
# Recall — из реальных положительных, сколько найдено
# Используем при высокой цене ложноотрицательных (medical diagnosis)
recall = recall_score(y_true, y_pred)
# F1 — гармоническое среднее precision и recall
# Используем, когда нужен баланс
f1 = f1_score(y_true, y_pred)
# ROC-AUC — площадь под кривой ROC
# Независима от порога классификации, идеальна для оценки качества модели
roc_auc = roc_auc_score(y_true, y_pred_proba)
Многоклассовая классификация
# Macro-averaged F1 — среднее по классам (равный вес)
f1_macro = f1_score(y_true, y_pred, average='macro')
# Weighted F1 — взвешенное по количеству примеров каждого класса
f1_weighted = f1_score(y_true, y_pred, average='weighted')
# Confusion matrix для анализа ошибок
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true, y_pred)
Регрессия
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
# MAE — средняя абсолютная ошибка
# Интерпретируется в исходных единицах
mae = mean_absolute_error(y_true, y_pred)
# RMSE — корень из средней квадратичной ошибки
# Штрафует большие ошибки
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
# R² — доля объяснённой дисперсии
# От 0 до 1, где 1 — идеальное предсказание
r2 = r2_score(y_true, y_pred)
# MAPE — средняя абсолютная процентная ошибка
# Хороша для интерпретации
mape = np.mean(np.abs((y_true - y_pred) / y_true)) * 100
Кластеризация
from sklearn.metrics import silhouette_score, davies_bouldin_score, calinski_harabasz_score
# Silhouette Score — от -1 до 1, чем выше, тем лучше
# Показывает, насколько точка похожа на свой кластер
sil_score = silhouette_score(X, labels)
# Davies-Bouldin Index — средняя сходство кластеров
# Чем меньше, тем лучше (кластеры более отдельны)
db_score = davies_bouldin_score(X, labels)
# Calinski-Harabasz Index — отношение межкластерной к внутрикластерной дисперсии
# Чем выше, тем лучше
ch_score = calinski_harabasz_score(X, labels)
Бизнес-метрики
Для реальных проектов использую:
# Конверсия
conversion_rate = conversions / total_users
# Lifetime Value (LTV)
ltv = customer_revenue / customer_count
# Churn rate
churn_rate = lost_customers / initial_customers
# Precision at K — точность топ-K рекомендаций
precision_at_k = relevant_in_top_k / k
Мой подход к выбору метрики
- Понимаю бизнес-цель — что важнее: ложноположительные или ложноотрицательные ошибки?
- Анализирую дисбаланс классов — нужны ли взвешенные метрики?
- Выбираю первичную метрику — одна метрика для оптимизации
- Добавляю доп. метрики — для контроля других аспектов
- Визуализирую — confusion matrix, ROC-кривая, calibration plot
Пример комплексной оценки
def evaluate_model(y_true, y_pred, y_pred_proba):
return {
'accuracy': accuracy_score(y_true, y_pred),
'precision': precision_score(y_true, y_pred),
'recall': recall_score(y_true, y_pred),
'f1': f1_score(y_true, y_pred),
'roc_auc': roc_auc_score(y_true, y_pred_proba),
}
Ключ к успеху — выбирать метрику в зависимости от контекста задачи, а не использовать одну универсальную.