Введение
Машинное обучение перестало быть уделом исключительно исследователей. Сегодня инженеры и аналитики данных используют библиотеки вроде Scikit-learn, XGBoost и CatBoost для решения бизнес-задач: от прогнозирования спроса до обнаружения аномалий. Но даже опытные специалисты тратят до 60% времени на подбор гиперпараметров и препроцессинг данных (источник: отчет Kaggle State of Data Science 2025).
Промпты — это готовые шаблоны кода, которые ускоряют разработку. В этой подборке — 10 проверенных промтов для Scikit-learn, XGBoost и CatBoost. Каждый промт включает пояснение, пример использования и код, который можно скопировать и адаптировать под свой проект.
1. Промт для автоматического препроцессинга с ColumnTransformer
Задача: Быстро применить разные преобразования к числовым и категориальным признакам без ручного кодирования.
Пояснение: Scikit-learn предоставляет ColumnTransformer, который объединяет шаги препроцессинга. Это стандарт для промышленных пайплайнов.
Пример: У вас есть датасет с возрастом (числовой) и городом (категориальный). Промт создает пайплайн: стандартизация чисел + one-hot encoding категорий.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
# Данные
df = pd.DataFrame({'age': [25, 30, 35], 'city': ['Moscow', 'SPb', 'Kazan'], 'target': [0, 1, 0]})
X = df[['age', 'city']]
y = df['target']
# Промт: ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), ['age']),
('cat', OneHotEncoder(drop='first'), ['city'])
])
model = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', RandomForestClassifier())])
model.fit(X, y)
print("Model trained successfully")
2. Промт для поиска гиперпараметров с RandomizedSearchCV
Задача: Быстро перебрать комбинации гиперпараметров для любой модели.
Пояснение: RandomizedSearchCV эффективнее GridSearchCV при большом пространстве параметров (Bergstra & Bengio, 2012).
Пример: Подбор параметров для RandomForest.
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from scipy.stats import randint
param_dist = {
'n_estimators': randint(50, 200),
'max_depth': [None, 10, 20],
'min_samples_split': randint(2, 10)
}
search = RandomizedSearchCV(RandomForestClassifier(), param_distributions=param_dist,
n_iter=30, cv=5, scoring='accuracy', random_state=42)
search.fit(X, y)
print("Best params:", search.best_params_)
3. Промт для обучения XGBoost с early stopping
Задача: Обучить XGBoost с автоматической остановкой при переобучении.
Пояснение: Early stopping предотвращает переобучение, отслеживая метрику на валидации.
Пример: Классификация с XGBClassifier.
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgb.XGBClassifier(n_estimators=1000, learning_rate=0.05, early_stopping_rounds=10,
eval_metric='logloss', use_label_encoder=False)
model.fit(X_train, y_train, eval_set=[(X_val, y_val)], verbose=False)
y_pred = model.predict(X_val)
print("Accuracy:", accuracy_score(y_val, y_pred))
4. Промт для работы с дисбалансом классов в XGBoost
Задача: Настроить XGBoost для несбалансированных данных.
Пояснение: Параметр scale_pos_weight балансирует веса классов (Chen & Guestrin, 2016).
Пример: Дисбаланс 1:100.
import numpy as np
ratio = np.sum(y_train == 0) / np.sum(y_train == 1)
model = xgb.XGBClassifier(scale_pos_weight=ratio, eval_metric='aucpr')
model.fit(X_train, y_train)
5. Промт для CatBoost с категориальными признаками
Задача: Использовать CatBoost для данных с категориями без кодирования.
Пояснение: CatBoost автоматически обрабатывает категориальные признаки (Prokhorenkova et al., 2018).
Пример: Укажите индексы категориальных колонок.
from catboost import CatBoostClassifier
cat_features = [1] # индекс колонки city
model = CatBoostClassifier(iterations=100, learning_rate=0.1, cat_features=cat_features, verbose=0)
model.fit(X_train, y_train)
6. Промт для визуализации важности признаков
Задача: Вывести топ-10 важных признаков после обучения.
Пояснение: Важность признаков — стандартный метод интерпретации (Breiman, 2001).
Пример: Для XGBoost.
import matplotlib.pyplot as plt
importance = model.feature_importances_
indices = np.argsort(importance)[-10:]
plt.barh(range(len(indices)), importance[indices])
plt.yticks(range(len(indices)), [feature_names[i] for i in indices])
plt.show()
7. Промт для кросс-валидации с сохранением метрик
Задача: Оценить модель через K-fold и сохранить результаты.
Пояснение: Кросс-валидация дает стабильную оценку обобщающей способности.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5, scoring='f1_macro')
print("Mean F1:", scores.mean(), "Std:", scores.std())
8. Промт для калибровки вероятностей
Задача: Откалибровать вероятности для лучшей интерпретации.
Пояснение: Scikit-learn предоставляет CalibratedClassifierCV (Niculescu-Mizil & Caruana, 2005).
from sklearn.calibration import CalibratedClassifierCV
calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5)
calibrated.fit(X, y)
probs = calibrated.predict_proba(X_val)
9. Промт для сохранения и загрузки модели (joblib)
Задача: Сохранить обученную модель в файл и загрузить позже.
Пояснение: Joblib эффективнее pickle для больших массивов.
import joblib
joblib.dump(model, 'model.pkl')
loaded_model = joblib.load('model.pkl')
10. Промт для пайплайна с GridSearchCV и ColumnTransformer
Задача: Комбинировать препроцессинг и поиск параметров в одном пайплайне.
Пример: Полный цикл.
from sklearn.model_selection import GridSearchCV
pipeline = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', RandomForestClassifier())])
param_grid = {
'classifier__n_estimators': [50, 100],
'classifier__max_depth': [None, 10]
}
grid = GridSearchCV(pipeline, param_grid, cv=5, scoring='accuracy')
grid.fit(X, y)
print("Best score:", grid.best_score_)
Заключение
Эти 10 промтов покрывают ключевые этапы ML-пайплайна: от препроцессинга до сохранения модели. Используйте их как стартовый набор — адаптируйте под свои данные и метрики. Для углубленного изучения рекомендую официальные документы:
- Scikit-learn: scikit-learn.org/stable/user_guide.html
- XGBoost: xgboost.readthedocs.io
- CatBoost: catboost.ai/docs
Попробуйте применить любой промт на своих данных — и вы увидите, как ускоряется разработка. Делитесь результатами в комментариях к статье.
Комментарии