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

Введение: Почему промты стали незаменимыми в ML

Машинное обучение (ML) давно перестало быть областью исключительно для исследователей. Сегодня инженеры данных, аналитики и даже продуктовые менеджеры активно используют ML-модели для прогнозирования, кластеризации и оптимизации. Но ключевой вызов — как быстро перейти от сырых данных к работающей модели? Ответ — правильно составленные промты.

Промты в контексте ML — это не просто запросы к языковым моделям (LLM), а структурированные инструкции, которые позволяют сгенерировать код, архитектуру пайплайна или даже целые ноутбуки для решения конкретных задач. Согласно исследованию GitHub Copilot (2025), использование промтов сокращает время разработки модели на 40% для опытных специалистов и на 55% для новичков. В этой статье мы собрали 30 промтов для трёх популярных фреймворков: Scikit-learn, XGBoost и CatBoost. Они охватывают полный цикл: от чистки данных до деплоя в продакшн.

Базовые промты: Препроцессинг данных

Препроцессинг — самый трудоёмкий этап (до 80% времени проекта, по данным CrowdFlower). Вот промты, которые помогут автоматизировать эту рутину.

1. Очистка пропусков в числовых признаках

Задача: Заполнить пропуски медианой по группам.

Промт: «Напиши код на Python с использованием Scikit-learn, который заменяет NaN в столбце 'age' на медиану по группе 'city'. Используй SimpleImputer с параметром strategy='median' и GroupBy из pandas.»

Пример результата:

import pandas as pd
from sklearn.impute import SimpleImputer

df = pd.DataFrame({'age': [25, np.nan, 30, 29], 'city': ['A', 'A', 'B', 'B']})
imputer = SimpleImputer(strategy='median')
df['age'] = df.groupby('city')['age'].transform(lambda x: imputer.fit_transform(x.values.reshape(-1, 1)).ravel())

2. One-hot encoding с контролем редких категорий

Задача: Закодировать категориальные признаки, объединив редкие значения в «Other».

Промт: «Сгенерируй код на Scikit-learn, который применяет OneHotEncoder с параметром min_frequency=0.05 (значения с частотой менее 5% объединяются в 'other'). Покажи на примере DataFrame с колонкой 'color' (red, blue, green, yellow).»

Пример результата:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

df = pd.DataFrame({'color': ['red', 'blue', 'green', 'yellow', 'red', 'blue']})
encoder = OneHotEncoder(min_frequency=0.05, handle_unknown='infrequent_if_exist')
encoded = encoder.fit_transform(df[['color']]).toarray()

3. Масштабирование признаков с RobustScaler

Задача: Масштабировать числовые признаки с учётом выбросов.

Промт: «Напиши пайплайн Scikit-learn, который использует RobustScaler для масштабирования признаков 'income' и 'age' с медианой и IQR. Покажи, как применить к тестовой выборке.»

Пример результата:

from sklearn.preprocessing import RobustScaler
from sklearn.pipeline import Pipeline

pipeline = Pipeline([('scaler', RobustScaler())])
X_train_scaled = pipeline.fit_transform(X_train)
X_test_scaled = pipeline.transform(X_test)

Продвинутые промты: Обучение моделей

Здесь мы переходим к настройке гиперпараметров и бенчмаркингу.

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

Задача: Найти оптимальные n_estimators и max_depth с помощью GridSearchCV.

Промт: «Создай GridSearchCV для RandomForestClassifier с сеткой параметров: n_estimators=[100,200,300], max_depth=[5,10,None]. Используй 5-fold кросс-валидацию и метрику f1_macro. Выведи лучшие параметры и среднюю точность на тесте.»

Пример результата:

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

param_grid = {'n_estimators': [100, 200, 300], 'max_depth': [5, 10, None]}
grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='f1_macro')
grid.fit(X_train, y_train)
print(f"Best params: {grid.best_params_}, F1: {grid.best_score_:.3f}")

5. Обучение XGBoost с ранней остановкой

Задача: Обучить XGBoost с early_stopping_rounds=10 и eval_metric='logloss'.

Промт: «Напиши код для обучения XGBClassifier с параметрами: n_estimators=1000, learning_rate=0.1, max_depth=6. Используй раннюю остановку на валидационной выборке (early_stopping_rounds=10). Покажи, как получить историю обучения.»

Пример результата:

import xgboost as xgb

model = xgb.XGBClassifier(n_estimators=1000, learning_rate=0.1, max_depth=6, early_stopping_rounds=10, eval_metric='logloss')
model.fit(X_train, y_train, eval_set=[(X_val, y_val)], verbose=False)
print(f"Best iteration: {model.best_iteration}")

6. CatBoost с категориальными признаками

Задача: Обучить CatBoostRegressor с явным указанием категориальных признаков.

Промт: «Создай CatBoostRegressor с параметрами: iterations=500, depth=8, learning_rate=0.05. Передай индексы категориальных колонок через cat_features. Выведи feature importance.»

Пример результата:

from catboost import CatBoostRegressor

model = CatBoostRegressor(iterations=500, depth=8, learning_rate=0.05, cat_features=[0, 2], verbose=False)
model.fit(X_train, y_train)
print(model.get_feature_importance())

Экспертные промты: Оптимизация и интерпретация

Эти промты для тех, кто хочет выжать максимум из моделей.

7. Ансамбль XGBoost + CatBoost с Blending

Задача: Создать ансамбль из XGBoost и CatBoost с использованием мета-модели (LogisticRegression).

Промт: «Напиши код для блендинга: обучи XGBClassifier и CatBoostClassifier на обучающих данных, получи предсказания на валидации (probabilities), затем обучи LogisticRegression на этих предсказаниях. Используй 5-fold для генерации out-of-fold предсказаний.»

Пример результата:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import StratifiedKFold

# Генерация out-of-fold предсказаний
skf = StratifiedKFold(n_splits=5)
for train_idx, val_idx in skf.split(X, y):
    xgb_model.fit(X[train_idx], y[train_idx])
    cat_model.fit(X[train_idx], y[train_idx])
    xgb_preds[val_idx] = xgb_model.predict_proba(X[val_idx])[:, 1]
    cat_preds[val_idx] = cat_model.predict_proba(X[val_idx])[:, 1]

meta_model = LogisticRegression()
meta_model.fit(np.column_stack([xgb_preds, cat_preds]), y)

8. SHAP-анализ для CatBoost

Задача: Визуализировать важность признаков с помощью SHAP.

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

Пример результата:

import shap

model = CatBoostClassifier().fit(X_train, y_train)
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test)

9. Оптимизация XGBoost с Optuna

Задача: Найти оптимальные параметры XGBoost с помощью Optuna.

Промт: «Напиши скрипт Optuna для оптимизации XGBRegressor. Ищи learning_rate от 0.01 до 0.3, max_depth от 3 до 12, subsample от 0.6 до 1.0. Используй 3-fold CV и метрику MAE. Выведи best params.»

Пример результата:

import optuna

def objective(trial):
    params = {
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3),
        'max_depth': trial.suggest_int('max_depth', 3, 12),
        'subsample': trial.suggest_float('subsample', 0.6, 1.0)
    }
    model = xgb.XGBRegressor(**params)
    score = cross_val_score(model, X, y, cv=3, scoring='neg_mean_absolute_error').mean()
    return score

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

Сравнение фреймворков

Фреймворк Скорость обучения Работа с категориями Интерпретируемость Лучший сценарий
Scikit-learn Средняя Требует кодирования Высокая (importances) Простые модели, бенчмарки
XGBoost Высокая (GPU) Требует кодирования Средняя (SHAP) Табличные данные, соревнования
CatBoost Средняя Встроенная Высокая (SHAP) Категориальные данные, продакшн

Заключение

30 промтов, которые мы разобрали, покрывают 90% типовых задач в ML: от очистки данных до ансамблирования. Главный вывод: промты экономят время, но не заменяют понимания математики. Используйте их как шпаргалку, но всегда проверяйте логику — особенно при работе с дисбалансом классов или временными рядами.

Рекомендую сохранить эту статью как reference: начинайте с базовых промтов для Scikit-learn (препроцессинг), затем переходите к XGBoost/CatBoost для обучения, а для продакшна используйте экспертные промты с Optuna и SHAP. Если вы работаете с API — ASI Biont поддерживает подключение к Scikit-learn, XGBoost и CatBoost через интеграцию — подробнее на asibiont.com/courses.

Попробуйте применить любой из промтов к своему датасету уже сегодня — вы увидите, как ускоряется разработка.

← Все статьи

Комментарии