Введение: Почему промты стали незаменимыми в 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.
Попробуйте применить любой из промтов к своему датасету уже сегодня — вы увидите, как ускоряется разработка.
Комментарии