Что такое коэффициент Джини (Gini) в машинном обучении?

«Что такое коэффициент Джини (Gini) в машинном обучении?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Коэффициент Джини (Gini coefficient) — метрика качества бинарной классификации, тесно связанная с AUC-ROC. Он измеряет способность модели ранжировать положительные и отрицательные примеры.

Математическая связь с AUC:

Gini = 2 × AUC - 1

где AUC (Area Under ROC Curve) — площадь под ROC-кривой.

Диапазон значений:

  • 0 — случайная модель (AUC = 0.5)
  • 1 — идеальная модель (AUC = 1.0)
  • Отрицательные значения — модель хуже случайной (AUC < 0.5)

Интерпретация: Gini = вероятность того, что случайно выбранный положительный пример будет иметь более высокую оценку (score), чем случайно выбранный отрицательный пример, минус обратная вероятность.

Пример расчета в Python для деревьев решений:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score

# Генерация данных
X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Обучение модели
clf = DecisionTreeClassifier(max_depth=5, random_state=42)
clf.fit(X_train, y_train)

# Предсказание вероятностей
y_pred_proba = clf.predict_proba(X_test)[:, 1]

# Расчет AUC и Gini
auc = roc_auc_score(y_test, y_pred_proba)
gini = 2 * auc - 1

print(f"AUC: {auc:.3f}")    # AUC: 0.892
print(f"Gini: {gini:.3f}")  # Gini: 0.784

Особенности в контексте деревьев и ансамблей:

  1. Критерий Джини (Gini impurity) в деревьях — мера неоднородности, используемая для разделения узлов
  2. В ансамблях (Random Forest, GBDT) — Gini importance показывает вклад признаков
  3. Чувствительность к дисбалансу — как и AUC, требует осторожности при несбалансированных классах