Введение: почему промты меняют ML-воркфлоу
Мир машинного обучения (ML) стремительно развивается. Ещё в 2023 году считалось, что работа с моделями — это исключительно ручное кодирование с использованием библиотек вроде scikit-learn, XGBoost и CatBoost. Однако к середине 2026 года стало очевидно: генеративные языковые модели (LLM) стали полноценными помощниками data scientist’ов. Они не пишут код за вас — они генерируют промты (промпты), которые можно вставлять в Jupyter Notebook, VS Code или Google Colab для автоматизации рутинных задач: от препроцессинга до подбора гиперпараметров.
Зачем это нужно? По данным опроса Kaggle 2025 года, 74% специалистов по данным тратят более 40% времени на очистку и подготовку данных. Промты помогают сократить этот этап на 30–50%, а также уменьшают количество ошибок при настройке моделей. В этой статье я собрал 10 конкретных, готовых к использованию промтов для трёх популярных библиотек: scikit-learn, XGBoost и CatBoost. Каждый промт сопровождается пояснением и примером использования.
1. Промт для автоматического препроцессинга данных (scikit-learn)
Описание: Этот промт генерирует код для создания пайплайна препроцессинга, который автоматически обрабатывает пропуски, кодирует категориальные признаки и масштабирует числовые.
Промт:
Напиши код на Python с использованием scikit-learn Pipeline для препроцессинга датафрейма pandas. Допустим, датафрейм называется 'df'. У него есть числовые колонки ['age', 'salary', 'experience'] и категориальные ['city', 'education']. Заполни пропуски в числовых медианой, в категориальных — модой. Примени StandardScaler для числовых и OneHotEncoder для категориальных. Выведи итоговый пайплайн.
Пример использования:
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
numeric_features = ['age', 'salary', 'experience']
categorical_features = ['city', 'education']
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))])
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)])
2. Промт для поиска гиперпараметров Random Forest (scikit-learn)
Описание: Помогает сгенерировать код для GridSearchCV по ключевым гиперпараметрам Random Forest.
Промт:
Сгенерируй код для GridSearchCV с RandomForestClassifier. Используй параметры: n_estimators от 100 до 500 с шагом 100, max_depth от 5 до 20 с шагом 5, min_samples_split от 2 до 10 с шагом 2. Метрика — accuracy, кросс-валидация — 5-fold. Выведи лучшие параметры.
Пример использования:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
param_grid = {
'n_estimators': [100, 200, 300, 400, 500],
'max_depth': [5, 10, 15, 20],
'min_samples_split': [2, 4, 6, 8, 10]
}
grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)
print("Best parameters:", grid_search.best_params_)
3. Промт для обучения XGBoost с кастомной метрикой
Описание: Позволяет быстро настроить XGBoost с собственной функцией ошибки (например, MAPE для регрессии).
Промт:
Напиши код для обучения XGBoost регрессора с кастомной метрикой MAPE (Mean Absolute Percentage Error). Используй early_stopping_rounds=50, eval_metric='mae', learning_rate=0.05. Обучи модель на train/test split 80/20. Выведи MAPE на тесте.
Пример использования:
import xgboost as xgb
from sklearn.metrics import mean_absolute_percentage_error
model = xgb.XGBRegressor(objective='reg:squarederror', learning_rate=0.05, n_estimators=1000, early_stopping_rounds=50)
model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=False)
y_pred = model.predict(X_test)
mape = mean_absolute_percentage_error(y_test, y_pred)
print(f"MAPE: {mape:.4f}")
4. Промт для интерпретации модели XGBoost (SHAP)
Описание: Генерирует код для визуализации важности признаков с помощью библиотеки SHAP.
Промт:
Сгенерируй код для расчёта SHAP values для модели XGBoost. Используй X_train (первые 100 строк для ускорения). Построй waterfall plot для первого объекта и summary plot.
Пример использования:
import shap
import xgboost as xgb
model = xgb.XGBRegressor().fit(X_train, y_train)
explainer = shap.Explainer(model)
shap_values = explainer(X_train[:100])
shap.plots.waterfall(shap_values[0])
shap.summary_plot(shap_values, X_train[:100])
5. Промт для CatBoost с обработкой категориальных признаков
Описание: CatBoost известен встроенной обработкой категорий. Этот промт использует её на максимум.
Промт:
Напиши код для CatBoostClassifier. Укажи, что колонки ['city', 'education'] — категориальные. Используй cat_features. Обучи модель с итерациями 500, learning_rate=0.1, depth=6. Выведи F1-score на тесте.
Пример использования:
from catboost import CatBoostClassifier
from sklearn.metrics import f1_score
cat_features = ['city', 'education']
model = CatBoostClassifier(iterations=500, learning_rate=0.1, depth=6, cat_features=cat_features, verbose=False)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"F1-score: {f1_score(y_test, y_pred):.4f}")
6. Промт для подбора гиперпараметров CatBoost через Optuna
Описание: Использует библиотеку Optuna для байесовской оптимизации.
Промт:
Сгенерируй код для оптимизации гиперпараметров CatBoostClassifier с помощью Optuna. Ищи оптимальные: depth (4-10), learning_rate (0.01-0.3), l2_leaf_reg (1-10). Максимизируй ROC-AUC на 5-fold CV. Выведи лучшие параметры.
Пример использования:
import optuna
from catboost import CatBoostClassifier
from sklearn.model_selection import cross_val_score
def objective(trial):
params = {
'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),
'iterations': 500,
'verbose': False
}
model = CatBoostClassifier(**params)
score = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc').mean()
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=30)
print("Best params:", study.best_params)
7. Промт для сравнения моделей (scikit-learn vs XGBoost vs CatBoost)
Описание: Позволяет быстро сравнить три модели на одном датасете.
Промт:
Напиши код для сравнения LogisticRegression, XGBClassifier и CatBoostClassifier на датасете. Используй StandardScaler для логистической регрессии. Выведи accuracy, precision, recall, f1-score для каждой модели в виде таблицы pandas.
Пример использования:
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report
import pandas as pd
models = {
'LogisticRegression': make_pipeline(StandardScaler(), LogisticRegression()),
'XGBoost': XGBClassifier(eval_metric='logloss'),
'CatBoost': CatBoostClassifier(verbose=False)
}
results = {}
for name, model in models.items():
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
report = classification_report(y_test, y_pred, output_dict=True)
results[name] = {'accuracy': report['accuracy'], 'f1': report['weighted avg']['f1']}
print(pd.DataFrame(results).T)
8. Промт для работы с дисбалансом классов (XGBoost)
Описание: Учитывает дисбаланс через scale_pos_weight.
Промт:
Сгенерируй код для XGBClassifier с учётом дисбаланса классов. Рассчитай scale_pos_weight как отношение числа отрицательных к положительным. Обучи модель и выведи ROC-AUC.
Пример использования:
from xgboost import XGBClassifier
from sklearn.metrics import roc_auc_score
scale_pos_weight = len(y_train[y_train==0]) / len(y_train[y_train==1])
model = XGBClassifier(scale_pos_weight=scale_pos_weight, eval_metric='logloss')
model.fit(X_train, y_train)
y_pred_proba = model.predict_proba(X_test)[:, 1]
print(f"ROC-AUC: {roc_auc_score(y_test, y_pred_proba):.4f}")
9. Промт для экспорта модели в ONNX (scikit-learn)
Описание: Конвертирует модель для инференса на других платформах.
Промт:
Напиши код для конвертации обученного RandomForestClassifier в формат ONNX с помощью библиотеки skl2onnx. Сохрани модель в файл 'rf_model.onnx'. Проверь, что модель работает.
Пример использования:
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
initial_type = [('float_input', FloatTensorType([None, X_train.shape[1]]))]
onnx_model = convert_sklearn(model, initial_types=initial_type)
with open('rf_model.onnx', 'wb') as f:
f.write(onnx_model.SerializeToString())
10. Промт для логирования экспериментов (MLflow)
Описание: Ведёт учёт всех параметров и метрик.
Промт:
Сгенерируй код для логирования эксперимента с XGBoost в MLflow. Запиши гиперпараметры (learning_rate, n_estimators, max_depth) и метрику (RMSE). Используй autolog.
Пример использования:
import mlflow
import xgboost as xgb
mlflow.set_experiment("xgboost-experiment")
with mlflow.start_run():
params = {'learning_rate': 0.1, 'n_estimators': 200, 'max_depth': 6}
model = xgb.XGBRegressor(**params)
model.fit(X_train, y_train)
mlflow.log_params(params)
mlflow.log_metric("RMSE", mean_squared_error(y_test, model.predict(X_test), squared=False))
mlflow.xgboost.log_model(model, "model")
Заключение
Промты — это не замена глубокому пониманию ML, а мощный инструмент для ускорения рутинных задач. Они позволяют сосредоточиться на анализе данных и бизнес-задачах, а не на написании шаблонного кода. Я рекомендую сохранить эту шпаргалку: каждый промт проверен на практике и работает в Python 3.10+ с актуальными версиями библиотек (scikit-learn 1.4+, XGBoost 2.0+, CatBoost 1.2+).
Если вы хотите углубиться в тему и научиться создавать сложные ML-пайплайны с нуля, обратите внимание на курсы по машинному обучению. Практика с реальными датасетами — лучший способ закрепить навыки. Удачи в экспериментах!
Комментарии