ЛР3
Перед защитой

Шпаргалка

Перед защитой

Короткая выжимка: лаба за минуту, команды из кода и словарик.

Лаба за минуту

  1. Энтропия, Джини, MSE: одной формулой numpy через доли классов. Значения 0.650, 1.585, 0.278, 0.667, 0.667, 66.67.
  2. Своё дерево: перебор признаков и порогов, взвешенный IG, 4 критерия остановки. Ирисы: 0.89-0.93, листья и глубина как у sklearn.
  3. TreeRegressor: MSE и среднее в листе. Делил по странам, лучшее дерево глубины 5: MAE 3.2 года, R² 0.69.
  4. Лес: бутстрап, случайные признаки, голосование. ROC-AUC из-за дисбаланса 80/20. Test 0.859 (sklearn 0.860, дерево 0.806).
  5. Важность: число продуктов, возраст, баланс, активность, Германия.
  6. Лес для регрессии лучше дерева при всех критериях, лучший R² 0.760.
  7. Потери и градиенты без циклов. В тестах: MAE 0.22 (не 0.21), градиент Lq для зеркальной потери, MSE без ½.
  8. Бустинг: синус MSE 0.026 против 0.236. Отток: ρ подбирается 0.850, ρ = 1 0.433, ρ всегда 0.5 из-за градиента 2(f - y).

Команды из кода

КомандаЧто делает
np.unique(y, return_counts=True)Разные значения и сколько раз каждое
np.log2Логарифм по основанию 2
np.argsortНомера элементов по возрастанию
np.flatnonzero(маска)Номера, где маска True
np.where(усл, a, b)a там, где условие верно, иначе b, для всего массива
np.signЗнак числа: 1, -1 или 0
np.linspace(-1, 1, 201)201 число от -1 до 1 с равным шагом
a[:, None]Сделать из вектора столбец, чтобы получить матрицу при умножении
np.eye(n)Единичная матрица n × n
np.random.default_rng(seed)Генератор случайных чисел с зерном
rng.integers(0, m, size=m)m случайных номеров с повторами (бутстрап)
rng.permutationПеремешать массив
df.drop(columns=...)Удалить столбцы
s.str[:4].astype(int)Первые 4 символа текста в число
pd.get_dummies(df, columns=[...])One-hot кодирование
df.to_dict('records')Таблица в список строк-словарей
train_test_split(..., stratify=y)Деление на train/test с сохранением долей классов
GroupShuffleSplitДеление по группам (странам) целиком
StratifiedKFold(n_splits=3)3 фолда для кросс-валидации
DecisionTreeClassifier / RegressorДерево sklearn: классы / числа
max_featuresСколько случайных признаков смотреть в каждом узле
feature_importances_Важность MDI у дерева sklearn
accuracy_score, f1_score, roc_auc_scoreМетрики классификации
mean_absolute_error, r2_scoreМетрики регрессии
kagglehub.dataset_downloadСкачать публичный датасет Kaggle без ключа
class B(A), super().__init__Наследование: взять всё от A, вызвать его конструктор
**kwargs«Все остальные параметры», передаются дальше как есть

Словарик

Дерево решений
Модель из вопросов «признак < порог?», ответ в листьях.
Энтропия / Джини
Мера перемешанности классов, 0 = все одного класса.
IG
Насколько деление уменьшило беспорядок (взвешенно по размеру частей).
Критерий остановки
Когда узел больше не делить.
Переобучение
Модель запомнила train вместе со случайностями, на test хуже.
Утечка данных
В test попала информация из train (у нас: та же страна в другой год).
Бэггинг
Много моделей на бутстрап-выборках, ответы усредняются.
Бутстрап
Выборка того же размера с возвращением.
Бустинг
Модели по очереди исправляют ошибки суммы предыдущих.
Стэкинг
Разные модели + мета-модель, которая учится на их ответах.
Антиградиент
Направление, в котором потеря уменьшается быстрее всего.
ρ
Длина шага в бустинге.
ROC-AUC
Вероятность, что ушедший клиент оценён выше оставшегося.
precision / recall / F1
Точность среди названных «уйдёт» / полнота среди ушедших / их баланс.
MAE / RMSE / MAPE / R²
Ошибка в годах / с упором на крупные / в процентах / доля объяснённого разброса.
MDI
Важность по суммарному уменьшению беспорядка в узлах.
Перестановочная важность
Падение качества после перемешивания признака.
Квантиль
Значение, ниже которого лежит заданная доля данных.
Одна фразаДерево задаёт вопросы, лес усредняет много случайных деревьев, бустинг добавляет деревья, исправляющие ошибку, а ρ подбирает длину шага.