Промты для 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.
А какие промты используете вы? Поделитесь в комментариях — самые удачные добавлю в следующую версию подборки.
Комментарии