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

Введение

Машинное обучение перестало быть уделом исключительно исследователей. Сегодня инженеры и аналитики данных используют библиотеки вроде 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

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

← Все статьи

Комментарии

Читайте также

Как AI меняет фриланс: обзор курса «Фриланс — работа на себя» от Asibiont

22 июля 2026

Как я освоил системы реального времени на Asibiont: WebSockets, WebRTC и обучение с ИИ

22 июля 2026

Как интегрировать телеметрию и SCADA с ASI Biont: AI-агент без кода для мониторинга датчиков в реальном времени

22 июля 2026

Excel и Google Таблицы: как AI-обучение на Asibiont помогает освоить формулы, дашборды и автоматизацию отчетов

22 июля 2026

Flutter и Dart — кроссплатформенная разработка: создавайте реальные приложения с обучением на основе ИИ на Asibiont

22 июля 2026

Как AI-репетитор помог мне выучить немецкий: честный обзор курса «Немецкий язык с AI» от Asibiont

22 июля 2026

Управляйте своей почтой: как ИИ-агент ASI Biont преобразует интеграцию с Outlook с помощью автоматизации без кода

22 июля 2026

Как подключить Instagram к AI-агенту: полный гайд по автоматизации публикаций, комментариев и рекламы без кода

22 июля 2026

MCP-серверы и инструменты для AI: как превратить агентов из игрушки в рабочую лошадку — разбор курса Asibiont

22 июля 2026