10 промтов для машинного обучения: Scikit-learn, XGBoost, CatBoost — от препроцессинга до обучения моделей

Введение

Машинное обучение (ML) давно перестало быть уделом только крупных корпораций и исследовательских лабораторий. Благодаря мощным библиотекам с открытым исходным кодом — Scikit-learn, XGBoost и CatBoost — построить модель классификации или регрессии может любой разработчик. Однако часто самая трудоёмкая часть — не написание кода, а его конфигурация: подбор параметров, препроцессинг данных, валидация. В этой статье мы собрали 10 готовых промтов (подсказок или шаблонов), которые ускорят вашу работу и помогут избежать типичных ошибок. Каждый промт — это конкретный фрагмент кода с пояснением, когда и зачем его использовать.

1. Промт для быстрого препроцессинга с Scikit-learn

Когда использовать: У вас есть сырой датасет с пропусками и категориальными признаками, и нужно быстро подготовить его для обучения.

Промт:

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

# Определяем типы колонок
numeric_features = ['age', 'income', 'score']
categorical_features = ['gender', 'city']

# Пайплайны для разных типов данных
numeric_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

categorical_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='most_frequent')),
    ('onehot', OneHotEncoder(handle_unknown='ignore'))
])

# Объединяем в ColumnTransformer
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('cat', categorical_transformer, categorical_features)
    ])

Пример использования: Вы загрузили данные о клиентах (возраст, доход, город) и хотите обучить модель. Этот промт автоматически заполнит пропуски медианой (для чисел) и модой (для категорий), нормализует числовые признаки и закодирует категории методом One-Hot. Просто передайте preprocessor в Pipeline вместе с моделью.

2. Промт для подбора гиперпараметров GridSearchCV

Когда использовать: Нужно найти оптимальные параметры для модели (например, RandomForest или SVC).

Промт:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(random_state=42)
param_grid = {
    'n_estimators': [100, 200],
    'max_depth': [10, 20, None],
    'min_samples_split': [2, 5, 10]
}
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy', n_jobs=-1)
grid_search.fit(X_train, y_train)
print(f'Лучшие параметры: {grid_search.best_params_}')
print(f'Лучшая точность: {grid_search.best_score_:.4f}')

Пример использования: Вы обучили базовый RandomForest с параметрами по умолчанию, но точность на валидации 0.82. Запустите GridSearch с сеткой выше — часто результат улучшается до 0.87–0.90 за счёт правильного max_depth и min_samples_split. Обратите внимание: n_jobs=-1 использует все ядра процессора, что ускоряет перебор.

3. Промт для обучения XGBoost с ранней остановкой

Когда использовать: Работаете с большим датасетом и хотите избежать переобучения, а также сэкономить время.

Промт:

import xgboost as xgb

# Преобразуем данные в формат DMatrix
dtrain = xgb.DMatrix(X_train, label=y_train)
dval = xgb.DMatrix(X_val, label=y_val)

# Параметры
params = {
    'objective': 'binary:logistic',
    'eval_metric': 'logloss',
    'max_depth': 6,
    'eta': 0.1,
    'subsample': 0.8,
    'colsample_bytree': 0.8
}

# Обучение с ранней остановкой
model = xgb.train(params, dtrain, num_boost_round=1000, evals=[(dval, 'eval')], early_stopping_rounds=20, verbose_eval=50)
print(f'Лучшая итерация: {model.best_iteration}')

Пример использования: Предположим, вы строите модель бинарной классификации для оттока клиентов. С early_stopping_rounds=20 обучение остановится, если метрика на валидации не улучшится за 20 итераций. Это предотвращает переобучение и сокращает время обучения с 500 до 150–200 итераций.

4. Промт для интерпретации модели с XGBoost

Когда использовать: Нужно понять, какие признаки сильнее всего влияют на предсказания.

Промт:

import matplotlib.pyplot as plt
from xgboost import plot_importance

plot_importance(model, max_num_features=10)
plt.show()

Пример использования: После обучения модели вы видите, что признаки income и age имеют наибольшую важность (F-score выше 50), а city — почти нулевую. Это сигнал: можно удалить city и переобучить модель, что может даже повысить точность и ускорить обучение.

5. Промт для обработки дисбаланса классов в CatBoost

Когда использовать: Целевая переменная сильно несбалансирована (например, 95% отрицательных и 5% положительных примеров).

Промт:

from catboost import CatBoostClassifier

model = CatBoostClassifier(
    iterations=500,
    learning_rate=0.1,
    depth=6,
    auto_class_weights='SqrtBalanced',  # Автоматический расчёт весов
    eval_metric='F1',
    random_seed=42,
    verbose=100
)
model.fit(X_train, y_train, eval_set=(X_val, y_val), early_stopping_rounds=50, plot=True)

Пример использования: В задаче обнаружения мошеннических транзакций положительный класс составляет всего 2%. Параметр auto_class_weights='SqrtBalanced' автоматически назначает веса, обратно пропорциональные частоте класса, что повышает F1-меру с 0.3 до 0.65. CatBoost также поддерживает Balanced (прямая пропорция) и SqrtBalanced (квадратный корень) — второй часто работает лучше.

6. Промт для работы с категориальными признаками в CatBoost

Когда использовать: В данных много категориальных признаков с большим числом уникальных значений (например, почтовые индексы или ID товаров).

Промт:

from catboost import CatBoostRegressor, Pool

# Указываем индексы категориальных признаков
cat_features = [0, 2, 5]  # например, первые, третий и шестой столбцы
train_pool = Pool(X_train, y_train, cat_features=cat_features)
val_pool = Pool(X_val, y_val, cat_features=cat_features)

model = CatBoostRegressor(iterations=300, learning_rate=0.1, depth=8, loss_function='RMSE')
model.fit(train_pool, eval_set=val_pool, early_stopping_rounds=30, verbose=100)

Пример использования: CatBoost умеет напрямую работать с категориями без One-Hot кодирования, используя встроенные методы (например, Target Encoding). Это особенно эффективно для признаков с высокой кардинальностью — модель обучается быстрее и часто показывает лучшую точность. Укажите индексы категориальных колонок в Pool, и библиотека сама обработает их.

7. Промт для кросс-валидации с Scikit-learn

Когда использовать: Нужно оценить стабильность модели на разных разбиениях данных.

Промт:

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier

model = GradientBoostingClassifier(n_estimators=100, max_depth=3, random_state=42)
scores = cross_val_score(model, X, y, cv=5, scoring='roc_auc')
print(f'Средний AUC: {scores.mean():.4f} ± {scores.std():.4f}')

Пример использования: Вы обучили градиентный бустинг на тренировочной выборке и получили AUC 0.92, но на тесте — 0.85. Кросс-валидация покажет, что средний AUC на 5 фолдах составляет 0.87 ± 0.03, что говорит о небольшом переобучении. Это повод уменьшить n_estimators или увеличить min_samples_leaf.

8. Промт для сохранения и загрузки модели

Когда использовать: Модель обучена, и нужно сохранить её для использования в продакшене или для дальнейшего анализа.

Промт:

import joblib

# Сохранение
joblib.dump(model, 'model.pkl')
joblib.dump(preprocessor, 'preprocessor.pkl')

# Загрузка
loaded_model = joblib.load('model.pkl')
loaded_preprocessor = joblib.load('preprocessor.pkl')

Пример использования: Вы обучили модель на сервере и хотите развернуть её через Flask или FastAPI. Сохраните модель и препроцессор отдельно, чтобы при инференсе сначала применить препроцессинг, а потом передать данные в модель. joblib быстрее pickle для больших объектов с numpy-массивами.

9. Промт для ансамбля моделей (стэкинг)

Когда использовать: Хотите объединить несколько моделей для повышения точности.

Промт:

from sklearn.ensemble import StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

base_models = [
    ('rf', RandomForestClassifier(n_estimators=100, random_state=42)),
    ('xgb', xgb.XGBClassifier(n_estimators=100, learning_rate=0.1, random_state=42)),
    ('cat', CatBoostClassifier(iterations=100, verbose=0, random_seed=42))
]
meta_model = LogisticRegression()

stacking = StackingClassifier(estimators=base_models, final_estimator=meta_model, cv=5)
stacking.fit(X_train, y_train)
print(f'Точность стэкинга: {stacking.score(X_test, y_test):.4f}')

Пример использования: Каждая из трёх моделей по отдельности даёт точность ~0.85, но их комбинация через стэкинг (с LogisticRegression в качестве мета-модели) может поднять точность до 0.88–0.90, так как разные модели «видят» разные паттерны в данных.

10. Промт для мониторинга дрейфа данных

Когда использовать: Модель работает в продакшене, и нужно проверять, не изменилось ли распределение признаков со временем.

Промт:

from scipy.stats import ks_2samp
import numpy as np

# Сравниваем распределение признака 'income' на обучающей выборке и новых данных
stat, p_value = ks_2samp(X_train['income'], X_new_data['income'])
alpha = 0.05
if p_value < alpha:
    print(f'Дрейф обнаружен: p-value={p_value:.4f}')
else:
    print(f'Дрейфа нет: p-value={p_value:.4f}')

Пример использования: Вы развернули модель для прогноза продаж, и через месяц метрики резко упали. Запустите KS-тест для каждого признака — если income показывает p-value < 0.05, значит распределение доходов клиентов изменилось, и модель нужно переобучить на новых данных.

Заключение

Scikit-learn, XGBoost и CatBoost — три кита современного машинного обучения, и каждый из них предоставляет богатый инструментарий для решения реальных задач. Представленные промты покрывают основные этапы: от препроцессинга и настройки гиперпараметров до ансамблирования и мониторинга моделей. Ключевой совет: не копируйте код слепо — адаптируйте его под свои данные и метрики. Например, для несбалансированных задач лучше использовать не accuracy, а F1 или ROC-AUC. Помните, что правильный препроцессинг и валидация часто важнее выбора самой модели. Если вы хотите углубиться в продвинутые техники ML, обратите внимание на официальную документацию Scikit-learn (scikit-learn.org) и репозитории XGBoost и CatBoost на GitHub — там есть множество примеров и кейсов.

ASI Biont поддерживает подключение к популярным ML-библиотекам через API — подробнее на asibiont.com/courses. Используйте эти промты как стартовую точку, и ваши модели станут точнее и надёжнее.

← Все статьи

Комментарии

Читайте также

Mobile Security — безопасность мобильных приложений (iOS и Android): как стать востребованным специалистом в 2026 году

10 июля 2026

Курс «AI-тестировщик (авто-тесты AI)»: как автоматизировать тестирование с помощью нейросетей и ускорить релизы на 40%

10 июля 2026

Vibe Coding в 2026 году: полное руководство разработчика по созданию AI-First приложений

10 июля 2026

Компьютерное зрение на OpenMV и OV2640: интеграция с AI-агентом ASI Biont для умной автоматизации

10 июля 2026

Освоение количественных финансов и структурированных продуктов: от теории к бумажной торговле с ИИ

10 июля 2026

Сенсорный экран FT6206 и XPT2046 под управлением AI-агента ASI Biont: интеграция без кода для киосков, умного дома и промышленности

10 июля 2026

Криптография на практике: как защитить данные с помощью AES, TLS 1.3 и post-quantum алгоритмов — курс asibiont.com

10 июля 2026

Интеграция ASI Biont со Сбербанком: Полный гайд по автоматизации финансов без кода через AI-агента

10 июля 2026

7 промтов для Go: микросервисы, API и утилиты командной строки

10 июля 2026