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

Промты для ML — это готовые формулировки запросов к ИИ-ассистентам, которые помогают быстрее решать типовые задачи: от очистки данных до настройки градиентного бустинга. В этой подборке — 15 проверенных промтов, которые я использую в реальной работе с библиотеками scikit-learn, XGBoost и CatBoost. Каждый промт сопровождается примером использования, кодом и пояснением, чтобы вы могли сразу применить его в своём проекте.

1. Препроцессинг данных: обработка пропусков и масштабирование

Промт: «Напиши код на Python с использованием scikit-learn для обработки пропусков (стратегия median) и стандартизации признаков. Покажи, как применить это в пайплайне.»

Пример использования:

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler

pipeline = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])
X_transformed = pipeline.fit_transform(X)

Почему это работает: Промт задаёт конкретные параметры (медиана, стандартизация) и контекст (пайплайн). ИИ генерирует компактный и надёжный код, который легко интегрировать в существующий проект.

2. Стратифицированное разделение данных

Промт: «Сгенерируй код для стратифицированного разделения датасета на train/test с сохранением пропорций классов. Размер тестовой выборки — 20%.»

Пример использования:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

Пояснение: Стратификация критична для несбалансированных датасетов — без неё модель может не увидеть редкие классы. Такой промт экономит время на вспоминание параметров функции.

3. Сравнение базовых моделей

Промт: «Сравни RandomForestClassifier из scikit-learn и XGBClassifier из xgboost на моих данных. Выведи accuracy и ROC-AUC на кросс-валидации. Код должен быть готов к запуску.»

Пример использования:

from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from sklearn.model_selection import cross_val_score

models = {
    'rf': RandomForestClassifier(n_estimators=100, random_state=42),
    'xgb': XGBClassifier(n_estimators=100, random_state=42)
}
for name, model in models.items():
    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc')
    print(f'{name}: {scores.mean():.3f} ± {scores.std():.3f}')

Совет: Такой промт даёт первичную оценку, но для финального выбора модели нужно больше метрик (precision, recall, f1) и проверка на тестовой выборке.

4. Настройка гиперпараметров с Optuna

Промт: «Напиши код для оптимизации гиперпараметров CatBoostClassifier с помощью Optuna. Целевая метрика — ROC-AUC. Ограничь количество trials до 50.»

Пример использования:

import optuna
from catboost import CatBoostClassifier
from sklearn.model_selection import cross_val_score

def objective(trial):
    params = {
        'iterations': trial.suggest_int('iterations', 100, 500),
        'depth': trial.suggest_int('depth', 4, 10),
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3, log=True),
        'l2_leaf_reg': trial.suggest_float('l2_leaf_reg', 1, 10)
    }
    model = CatBoostClassifier(**params, silent=True, random_state=42)
    scores = cross_val_score(model, X_train, y_train, cv=3, scoring='roc_auc')
    return scores.mean()

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50)
print(study.best_params)

Почему Optuna: Optuna — популярная библиотека для байесовской оптимизации, которая часто даёт лучшие результаты, чем GridSearchCV, за меньшее время.

5. Полный набор метрик классификации

Промт: «Создай функцию, которая принимает y_true и y_pred и выводит accuracy, precision, recall, f1-score, а также confusion matrix. Используй scikit-learn.»

Пример использования:

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

def evaluate_model(y_true, y_pred):
    print(f'Accuracy: {accuracy_score(y_true, y_pred):.3f}')
    print(classification_report(y_true, y_pred))
    print('Confusion matrix:')
    print(confusion_matrix(y_true, y_pred))

Применение: Эта функция экономит время при каждом эксперименте и помогает быстро заметить проблемы (например, низкий recall на редком классе).

6. Отбор признаков с SelectFromModel

Промт: «Покажи, как использовать SelectFromModel с XGBoost для отбора важных признаков. Выведи список выбранных колонок.»

Пример использования:

from sklearn.feature_selection import SelectFromModel
from xgboost import XGBClassifier

model = XGBClassifier(n_estimators=100, random_state=42)
selector = SelectFromModel(model, threshold='mean', max_features=15)
selector.fit(X_train, y_train)
selected_cols = X_train.columns[selector.get_support()]
print(selected_cols)
X_train_selected = selector.transform(X_train)

Экспертный совет: Отбор признаков помогает уменьшить переобучение и ускорить обучение. Порог можно подбирать экспериментально.

7. Кросс-валидация для временных рядов

Промт: «Реализуй TimeSeriesSplit для временных рядов из scikit-learn. Покажи на примере с 5 фолдами.»

Пример использования:

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, val_idx in tscv.split(X):
    print(f'Train: {len(train_idx)}, Val: {len(val_idx)}')

Важно: При работе с временными рядами нельзя использовать обычную K-Fold — это приводит к утечке данных из будущего. TimeSeriesSplit сохраняет порядок.

8. Важность признаков в XGBoost

Промт: «Выведи важность признаков для XGBClassifier, используя feature_importances_. Отсортируй по убыванию и построй горизонтальную столбчатую диаграмму.»

Пример использования:

import matplotlib.pyplot as plt
import pandas as pd

model = XGBClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
importance = pd.Series(model.feature_importances_, index=X_train.columns).sort_values(ascending=False)
importance.plot(kind='barh', figsize=(10, 8))
plt.title('Feature Importance (XGBoost)')
plt.show()

Интерпретация: Важность признаков помогает понять, какие факторы влияют на прогноз. Это ключевой шаг для объяснимости модели (XAI).

9. Работа с дисбалансом классов

Промт: «У меня несбалансированные классы (10:1). Что делать? Предложи код с использованием class_weight в RandomForest и параметра scale_pos_weight в XGBoost.»

Пример использования:

from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier

rf = RandomForestClassifier(class_weight='balanced', random_state=42)
xgb = XGBClassifier(scale_pos_weight=10, random_state=42)

Пояснение: Указание весов классов заставляет алгоритм штрафовать ошибки на минорном классе сильнее. Это стандартный подход, описанный в документации XGBoost.

10. Пайплайн с предобработкой и моделью

Промт: «Собери единый пайплайн из SimpleImputer, StandardScaler и LogisticRegression с указанием параметров. Выведи схему пайплайна.»

Пример использования:

from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = make_pipeline(
    SimpleImputer(strategy='median'),
    StandardScaler(),
    LogisticRegression(C=1.0, random_state=42)
)
print(pipe)

Пайплайны упрощают процесс обучения и предотвращают утечку данных при применении к тестовой выборке.

11. Сохранение модели в ONNX

Промт: «Покажи, как сохранить модель CatBoost в формат ONNX и загрузить её обратно. Учти, что у нас есть категориальные признаки.»

Пример использования:

from catboost import CatBoostClassifier
from catboost import Pool
import onnx
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

model = CatBoostClassifier().fit(X_train, y_train)
model.save_model('model.cbm')
# Конвертация в ONNX (требует onnxruntime и catboost-onnx)
# Код для конвертации зависит от версий, используйте официальную документацию

Альтернатива: Просто сохраняйте модель в .cbm файл и загружайте через load_model — этого достаточно для большинства продакшен-задач.

12. Разница между XGBoost, LightGBM и CatBoost

Промт: «Объясни основные различия между XGBoost, LightGBM и CatBoost. Когда что выбирать? Приведи примеры сценариев.»

Ответ ИИ-ассистента (резюме):
- XGBoost — классический градиентный бустинг, хорошо работает на табличных данных, контролирует переобучение через регуляризацию.
- LightGBM — быстрее на больших датасетах, использует GOSS (односторонняя выборка на основе градиента), хорошо работает с категориальными признаками, если их закодировать.
- CatBoost — автоматически обрабатывает категориальные признаки с помощью ordered target statistics, часто лучший выбор для данных с большим количеством категорий.

Рекомендация: Для классических табличных данных начните с XGBoost; если данных много (>100k строк) и есть категориальные признаки — попробуйте CatBoost.

13. Стекинг моделей

Промт: «Создай стекинг из RandomForest, XGBoost и LogisticRegression в scikit-learn. Используй логистическую регрессию в качестве финального классификатора.»

Пример использования:

from sklearn.ensemble import StackingClassifier
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression

base_models = [
    ('rf', RandomForestClassifier(n_estimators=100, random_state=42)),
    ('xgb', XGBClassifier(n_estimators=100, random_state=42))
]
stack = StackingClassifier(estimators=base_models, final_estimator=LogisticRegression(), cv=5)
stack.fit(X_train, y_train)

Стекинг часто даёт прирост точности за счёт комбинации сильных моделей. Но он требует больше времени на обучение.

14. Выбор порога классификации

Промт: «У меня бинарная классификация. Как подобрать оптимальный порог, чтобы максимизировать F1-меру? Напиши код с использованием precision_recall_curve.»

Пример использования:

from sklearn.metrics import precision_recall_curve, f1_score
import numpy as np

probs = model.predict_proba(X_val)[:, 1]
precision, recall, thresholds = precision_recall_curve(y_val, probs)

best_threshold = thresholds[np.argmax([f1_score(y_val, (probs >= t).astype(int)) for t in thresholds])]
print(f'Best threshold: {best_threshold:.3f}')

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

15. Автоматический подбор модели

Промт: «Напиши скрипт, который перебирает несколько моделей (LogisticRegression, RandomForest, XGBoost, CatBoost) и выбирает лучшую по ROC-AUC на кросс-валидации. Выведи итоговую таблицу результатов.»

Пример использования:

from sklearn.model_selection import cross_val_score
from catboost import CatBoostClassifier
import pandas as pd

models = {
    'logreg': LogisticRegression(random_state=42),
    'rf': RandomForestClassifier(n_estimators=100, random_state=42),
    'xgb': XGBClassifier(n_estimators=100, random_state=42),
    'cat': CatBoostClassifier(verbose=False, random_state=42)
}

results = {}
for name, model in models.items():
    scores = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc')
    results[name] = [scores.mean(), scores.std()]

results_df = pd.DataFrame(results, index=['mean_auc', 'std_auc']).T
print(results_df.sort_values('mean_auc', ascending=False))

Этот промт — отличная отправная точка для любого ML-проекта: вы быстро получаете базовую линию и понимаете, какие модели заслуживают дальнейшей настройки.

Заключение

Промты не заменяют экспертизу, но сильно экономят время на рутинных задачах. Сохраните себе эту подборку и используйте её как шпаргалку в следующих проектах. Если хотите углубиться в тему, загляните в официальную документацию: scikit-learn, XGBoost, CatBoost.

А какие промты используете вы? Поделитесь в комментариях — самые удачные добавлю в следующую версию подборки.

← Все статьи

Комментарии

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

Интеграция Fleet Management с AI-агентом ASI Biont: GPS, телематика и автоматизация автопарка

1 августа 2026

Торговля по паттернам с точки зрения алгоритмов: как ИИ находит закономерности на рынке

1 августа 2026

Solid Queue 1.6.0: поддержка fiber workers — новый уровень эффективности фоновых задач в Rails

1 августа 2026

Jetson Nano и Orin + ASI Biont: Edge AI под управлением чат-агента — практический гайд по интеграции

1 августа 2026

3D-принтер на Marlin и Klipper + AI-агент ASI Biont: интеграция за минуты через Moonraker и MQTT

1 августа 2026

Операционные системы и системное программирование: как в 2026 году выучить C и Rust с помощью AI-курса Asibiont

1 августа 2026

ИИ-автоматизация Yahoo Mail с ASI Biont: ассистент для входящих без кода, который действительно работает

1 августа 2026

Интеграция I2S MEMS-микрофонов с ASI Biont: голосовое управление и Edge AI

1 августа 2026

Интеграция LoRaWAN с AI-агентом ASI Biont: как подключить умные датчики и автоматизировать телеметрию без сложного кода

1 августа 2026