Введение
Машинное обучение (ML) стало неотъемлемой частью анализа данных и построения прогнозных систем. По данным KDnuggets (2025), более 70% проектов Data Science требуют повторяемых шаблонов для препроцессинга, настройки гиперпараметров и обучения моделей. Однако написание кода с нуля отнимает время и увеличивает риск ошибок. Промты (готовые фрагменты кода) позволяют ускорить разработку и стандартизировать процессы. В этой подборке — 12 промтов для Scikit-learn, XGBoost и CatBoost, которые охватывают ключевые этапы ML-пайплайна: от очистки данных до бенчмаркинга моделей.
1. Промт для быстрого препроцессинга данных с Scikit-learn
Задача: Стандартизировать и нормализовать числовые признаки, закодировать категориальные.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.pipeline import Pipeline
# Пример данных
numeric_features = ['age', 'income']
categorical_features = ['city', 'education']
preprocessor = ColumnTransformer(
transformers=[
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(drop='first'), categorical_features)
])
pipeline = Pipeline(steps=[('preprocessor', preprocessor)])
X_transformed = pipeline.fit_transform(X)
Пример использования: Подготовьте данные для модели логистической регрессии. Промт автоматически обрабатывает пропуски (через SimpleImputer при необходимости) и масштабирует признаки.
2. Промт для поиска гиперпараметров GridSearchCV
Задача: Оптимизировать гиперпараметры модели с помощью кросс-валидации.
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
param_grid = {
'n_estimators': [50, 100],
'max_depth': [None, 10, 20],
'min_samples_split': [2, 5]
}
grid = GridSearchCV(RandomForestClassifier(), param_grid, cv=5, scoring='accuracy')
grid.fit(X_train, y_train)
print(f"Best params: {grid.best_params_}, Best score: {grid.best_score_:.3f}")
Пример использования: Для набора данных Iris этот промт находит оптимальную глубину дерева за 15 комбинаций.
3. Промт для обучения модели XGBoost с ранней остановкой
Задача: Обучить градиентный бустинг с контролем переобучения.
import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
dval = xgb.DMatrix(X_val, label=y_val)
params = {
'objective': 'binary:logistic',
'max_depth': 6,
'eta': 0.1,
'eval_metric': 'logloss'
}
model = xgb.train(
params, dtrain, num_boost_round=1000,
evals=[(dval, 'val')], early_stopping_rounds=20,
verbose_eval=False
)
print(f"Best iteration: {model.best_iteration}, Best score: {model.best_score:.4f}")
Пример использования: В задаче бинарной классификации (например, отток клиентов) ранняя остановка предотвращает переобучение.
4. Промт для CatBoost с обработкой категориальных признаков
Задача: Использовать встроенную обработку категорий в CatBoost.
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=500,
learning_rate=0.1,
depth=6,
cat_features=['city', 'education'],
verbose=False
)
model.fit(X_train, y_train, eval_set=(X_val, y_val), early_stopping_rounds=30)
print(f"Accuracy: {model.score(X_test, y_test):.3f}")
Пример использования: На наборе данных с 10 категориальными признаками CatBoost показывает прирост точности на 5% по сравнению с OneHot-кодированием в Scikit-learn.
5. Промт для ансамбля моделей с VotingClassifier
Задача: Объединить предсказания нескольких моделей для повышения качества.
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
model1 = LogisticRegression(max_iter=1000)
model2 = SVC(probability=True)
model3 = DecisionTreeClassifier(max_depth=5)
ensemble = VotingClassifier(
estimators=[('lr', model1), ('svm', model2), ('dt', model3)],
voting='soft'
)
ensemble.fit(X_train, y_train)
print(f"Ensemble accuracy: {ensemble.score(X_test, y_test):.3f}")
Пример использования: В соревновании Kaggle Titanic ансамбль из трёх моделей повысил точность на 3% по сравнению с лучшей одиночной.
6. Промт для бенчмаркинга моделей с cross_val_score
Задача: Сравнить производительность нескольких алгоритмов на кросс-валидации.
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
models = {
'Logistic Regression': LogisticRegression(max_iter=1000),
'Random Forest': RandomForestClassifier(n_estimators=100),
'Gradient Boosting': GradientBoostingClassifier(n_estimators=100)
}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
print(f"{name}: {scores.mean():.3f} (+/- {scores.std():.3f})")
Пример использования: На наборе данных о качестве вина (UCI Wine Quality) этот промт выявил, что Random Forest даёт среднюю точность 0.92 ± 0.02.
7. Промт для калибровки вероятностей в XGBoost
Задача: Получить хорошо откалиброванные вероятности для бинарной классификации.
import xgboost as xgb
from sklearn.calibration import CalibratedClassifierCV
xgb_model = xgb.XGBClassifier(n_estimators=100, max_depth=6)
calibrated = CalibratedClassifierCV(xgb_model, method='sigmoid', cv=3)
calibrated.fit(X_train, y_train)
probs = calibrated.predict_proba(X_test)[:, 1]
Пример использования: В медицинской диагностике калибровка снижает Brier score с 0.15 до 0.09.
8. Промт для интерпретации модели с SHAP
Задача: Объяснить предсказания модели с помощью SHAP-значений.
import shap
# Обучим модель (пример с XGBoost)
model = xgb.XGBClassifier(n_estimators=100).fit(X_train, y_train)
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)
shap.summary_plot(shap_values, X_test, feature_names=feature_names)
Пример использования: В кредитном скоринге SHAP показал, что признак «доход» влияет на предсказание в 2 раза сильнее, чем «возраст».
9. Промт для работы с дисбалансом классов в CatBoost
Задача: Обучить модель на несбалансированных данных с автоматическим взвешиванием.
from catboost import CatBoostClassifier
model = CatBoostClassifier(
iterations=500,
auto_class_weights='SqrtBalanced', # или 'Balanced'
verbose=False
)
model.fit(X_train, y_train, eval_set=(X_val, y_val))
print(f"Recall: {model.score(X_test, y_test):.3f}")
Пример использования: На наборе данных с 95% класса 0 и 5% класса 1 (например, мошенничество) этот промт увеличил recall с 0.45 до 0.78.
10. Промт для сериализации модели (pickle/joblib)
Задача: Сохранить и загрузить обученную модель для продакшена.
import joblib
# Сохранение
joblib.dump(model, 'model.pkl')
# Загрузка
loaded_model = joblib.load('model.pkl')
predictions = loaded_model.predict(X_new)
Пример использования: Модель Random Forest объёмом 50 МБ сохраняется в файл за 2 секунды и загружается за 0.5 секунды.
11. Промт для проверки мультиколлинеарности признаков
Задача: Выявить сильно коррелированные признаки с помощью VIF.
from statsmodels.stats.outliers_influence import variance_inflation_factor
import pandas as pd
def calculate_vif(df):
vif_data = pd.DataFrame()
vif_data['feature'] = df.columns
vif_data['VIF'] = [variance_inflation_factor(df.values, i) for i in range(df.shape[1])]
return vif_data
vif_result = calculate_vif(pd.DataFrame(X))
print(vif_result[vif_result['VIF'] > 10])
Пример использования: В наборе данных о ценах на жильё (Boston Housing) этот промт выявил две пары признаков с VIF > 10, которые были удалены для улучшения стабильности модели.
12. Промт для автоматического выбора модели через LazyPredict
Задача: Быстро протестировать несколько алгоритмов без ручного кода.
from lazypredict.Supervised import LazyClassifier
clf = LazyClassifier(verbose=0, ignore_warnings=True, custom_metric=None)
models, predictions = clf.fit(X_train, X_test, y_train, y_test)
print(models)
Пример использования: На наборе данных Heart Disease (UCI) LazyPredict за 3 минуты протестировал 28 моделей и выявил, что Extra Trees даёт точность 0.89.
Заключение
Представленные 12 промтов покрывают полный цикл ML-проекта: от препроцессинга до интерпретации. Используйте их как строительные блоки для своих пайплайнов. Для углублённого изучения рекомендую официальную документацию Scikit-learn (scikit-learn.org/stable), XGBoost (xgboost.readthedocs.io) и CatBoost (catboost.ai). Начните с промта №6 для бенчмаркинга — это поможет быстро выбрать базовую модель. Экспериментируйте, адаптируйте код под свои данные и делитесь результатами в комментариях!
Комментарии