Машинное обучение (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. Удачи в обучении!
Комментарии