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

Машинное обучение (ML) перестало быть уделом исключительно исследователей. С появлением библиотек вроде Scikit-learn, XGBoost и CatBoost построить модель может практически любой разработчик. Однако качество модели напрямую зависит от того, как вы задаёте промты (запросы) — не только к нейросетям, но и к самому коду. В этой подборке — 15 готовых промтов для ключевых этапов ML-пайплайна: от препроцессинга данных до тюнинга гиперпараметров. Каждый промт сопровождается реальным кодом и пояснением, чтобы вы могли сразу применить его в своём проекте.

1. Загрузка и первичный осмотр данных

Промт: "Загрузи данные из CSV-файла в pandas DataFrame, выведи первые 5 строк и основную статистику."
Пример:

import pandas as pd

df = pd.read_csv('data.csv')
print(df.head())
print(df.describe())

Пояснение: Этот промт — база. Он помогает быстро оценить структуру данных, типы колонок и наличие выбросов. Всегда начинайте с него, чтобы избежать сюрпризов на этапе обучения.

2. Обработка пропусков

Промт: "Заполни пропуски в числовых колонках медианным значением, а в категориальных — модой."
Пример:

from sklearn.impute import SimpleImputer

num_imputer = SimpleImputer(strategy='median')
df[['age', 'salary']] = num_imputer.fit_transform(df[['age', 'salary']])

cat_imputer = SimpleImputer(strategy='most_frequent')
df[['city']] = cat_imputer.fit_transform(df[['city']])

Пояснение: Пропуски — частая проблема реальных данных. Медиана устойчива к выбросам, мода сохраняет распределение категорий. Никогда не удаляйте строки с пропусками без анализа.

3. Кодирование категориальных признаков

Промт: "Преобразуй категориальные колонки в численные с помощью OneHotEncoder."
Пример:

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(sparse_output=False, handle_unknown='ignore')
encoded = encoder.fit_transform(df[['color', 'size']])
feature_names = encoder.get_feature_names_out(['color', 'size'])
df_encoded = pd.DataFrame(encoded, columns=feature_names)

Пояснение: OneHotEncoder — стандарт для категорий без порядка. Параметр handle_unknown='ignore' защищает от новых категорий в тестовых данных.

4. Масштабирование признаков

Промт: "Стандартизируй числовые признаки с помощью StandardScaler (среднее=0, std=1)."
Пример:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaled = scaler.fit_transform(df[['age', 'salary']])

Пояснение: Многие алгоритмы (SVM, kNN, нейросети) чувствительны к масштабу. StandardScaler — выбор по умолчанию. Для устойчивости к выбросам используйте RobustScaler.

5. Разделение на train/test

Промт: "Раздели данные на обучающую и тестовую выборки в соотношении 80/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, random_state=42)

Пояснение: random_state гарантирует воспроизводимость. Всегда фиксируйте его для экспериментов.

6. Обучение логистической регрессии

Промт: "Обучи логистическую регрессию на тренировочных данных и выведи точность."
Пример:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
print(f'Accuracy: {model.score(X_test, y_test):.3f}')

Пояснение: Логистическая регрессия — простой, но мощный алгоритм для бинарной классификации. Параметр max_iter увеличивают, если модель не сходится.

7. Обучение Random Forest

Промт: "Обучи Random Forest с 100 деревьями и выведи важность признаков."
Пример:

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
importances = pd.Series(rf.feature_importances_, index=feature_names)
print(importances.sort_values(ascending=False))

Пояснение: Random Forest не требует масштабирования и даёт интерпретируемую важность признаков. Хорош для старта.

8. Обучение XGBoost

Промт: "Обучи XGBoost-классификатор с 50 деревьями и оценкой F1."
Пример:

import xgboost as xgb
from sklearn.metrics import f1_score

model = xgb.XGBClassifier(n_estimators=50, max_depth=3, learning_rate=0.1, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f'F1: {f1_score(y_test, y_pred):.3f}')

Пояснение: XGBoost — чемпион табличных данных. Параметр max_depth мал (3-6) для предотвращения переобучения. learning_rate замедляет обучение для лучшей обобщаемости.

9. Обучение CatBoost

Промт: "Обучи CatBoost-классификатор с автоматической обработкой категорий."
Пример:

from catboost import CatBoostClassifier

model = CatBoostClassifier(iterations=100, learning_rate=0.1, cat_features=['city', 'color'], verbose=0)
model.fit(X_train, y_train)
print(f'Accuracy: {model.score(X_test, y_test):.3f}')

Пояснение: CatBoost сам обрабатывает категориальные признаки — не нужно OneHotEncoder. Параметр verbose=0 отключает лог обучения.

10. Кросс-валидация

Промт: "Выполни 5-кратную кросс-валидацию для Random Forest."
Пример:

from sklearn.model_selection import cross_val_score

scores = cross_val_score(RandomForestClassifier(n_estimators=100), X, y, cv=5)
print(f'Mean accuracy: {scores.mean():.3f} +/- {scores.std():.3f}')

Пояснение: Кросс-валидация даёт более надёжную оценку, чем одно разделение. 5-folds — хороший компромисс между точностью и временем.

11. Grid Search для тюнинга

Промт: "Найди лучшие гиперпараметры для XGBoost с помощью GridSearchCV."
Пример:

from sklearn.model_selection import GridSearchCV

param_grid = {
    'max_depth': [3, 5, 7],
    'n_estimators': [50, 100],
    'learning_rate': [0.01, 0.1]
}
grid = GridSearchCV(xgb.XGBClassifier(random_state=42), param_grid, cv=3, scoring='f1')
grid.fit(X_train, y_train)
print(f'Best params: {grid.best_params_}')

Пояснение: Grid Search перебирает все комбинации. Для больших сеток используйте RandomizedSearchCV — быстрее.

12. Сохранение и загрузка модели

Промт: "Сохрани обученную модель в файл .pkl и загрузи обратно."
Пример:

import joblib

joblib.dump(model, 'model.pkl')
loaded = joblib.load('model.pkl')

Пояснение: joblib эффективнее pickle для больших numpy-массивов внутри моделей. Всегда сохраняйте и scaler, и encoder вместе с моделью.

13. Предсказание на новых данных

Промт: "Примени сохранённую модель к новым данным и выведи предсказания."
Пример:

new_data = pd.DataFrame({'age': [30], 'salary': [50000], 'city': ['Moscow']})
new_data_processed = scaler.transform(new_data[['age', 'salary']])
pred = loaded.predict(new_data_processed)
print(f'Prediction: {pred[0]}')

Пояснение: Ключевой момент — применить те же преобразования, что и к тренировочным данным. Никогда не обучайте scaler заново на новых данных.

14. Визуализация кривых обучения

Промт: "Построй кривые обучения для XGBoost, чтобы оценить переобучение."
Пример:

import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve

train_sizes, train_scores, test_scores = learning_curve(
    xgb.XGBClassifier(n_estimators=100), X, y, cv=5, train_sizes=[0.2, 0.4, 0.6, 0.8, 1.0])
plt.plot(train_sizes, train_scores.mean(axis=1), label='Train')
plt.plot(train_sizes, test_scores.mean(axis=1), label='Test')
plt.legend()

Пояснение: Большой разрыв между кривыми — признак переобучения. Увеличьте регуляризацию или соберите больше данных.

15. Интерпретация модели с SHAP

Промт: "Рассчитай SHAP-значения для XGBoost и выведи summary plot."
Пример:

import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values, X_test, feature_names=feature_names)

Пояснение: SHAP показывает вклад каждого признака в предсказание. Это критично для бизнес-отчётов и доверия к модели. Требует установки библиотеки shap.

Заключение

Эти 15 промтов покрывают 90% задач типичного ML-пайплайна: от загрузки данных до интерпретации модели. Начните с препроцессинга (промты 1-5), выберите алгоритм (6-9), настройте его (10-12) и проверьте качество (13-15). Комбинируя эти блоки, вы сможете построить production-ready решение за пару часов. Экспериментируйте с гиперпараметрами и не забывайте про валидацию — это сэкономит вам дни отладки. Если хотите углубиться — изучите документацию Scikit-learn, официальные гайды XGBoost и CatBoost. Удачи в обучении!

← Все статьи

Комментарии