Промпт-гайд 📚 Гайды

7 промптов для прогнозирования и ML-моделирования

Готовые шаблоны для прогноза временных рядов, регрессии, классификации, кластеризации, выбора модели, валидации и деплоя в продакшен. Под ChatGPT, Claude, Gemini.

🎯 7 промптов

Различие между «аналитиком» и «data scientist» в одной фразе: первый объясняет, что было, второй предсказывает, что будет. ИИ-помощники в моделировании — не замена data science образования (статистика, теорвер, основы ML), но хороший ассистент: написать код для scikit-learn / Prophet, проверить корректность выбранной метрики, диагностировать overfit. Главное — критическое отношение к выводам.

Внутри — 7 шаблонов: прогнозирование временных рядов (продажи, метрики), регрессия для численного прогноза, классификация (бинарная и мультиклассовая), кластеризация для сегментации, выбор и сравнение моделей, валидация и контроль переобучения, деплой модели в продакшен.

Жёсткое предупреждение: ML-модель — не хрустальный шар. Любой прогноз имеет доверительный интервал, и хороший data scientist его всегда указывает. Бизнес-руководитель захочет «одну цифру», но честный ответ — «с вероятностью 80% значение будет в диапазоне X-Y». Соблазн дать «однозначный прогноз» ради удобства — путь к катастрофическим решениям, когда реальность выйдет за модель.

1

📈 Прогнозирование временных рядов

Помоги построить прогноз временного ряда.

Контекст:
Что прогнозируем: [продажи / трафик / загрузка серверов / спрос].
Гранулярность: [час / день / неделя / месяц].
Глубина истории: [сколько периодов есть данных].
Горизонт прогноза: [на сколько вперёд].
Сезонность (известная): [недельная / месячная / годовая / нет].
Внешние факторы (если есть): [промо-акции / праздники / погода / макроэкономика].

План работы:

1) EDA временного ряда:
Тренд (есть ли направленное движение).
Сезонность (декомпозиция STL).
Стационарность (ADF тест).
Аномалии и выбросы.

2) Выбор модели:
**Простые baseline:**
Naive (последнее значение / среднее).
Seasonal naive (значение год назад).
Moving average / Exponential smoothing.
**Классические:**
ARIMA / SARIMA — для стационарных рядов с сезонностью.
Prophet (Facebook) — robust, легко интерпретируется, держит holidays.
**ML:**
XGBoost / LightGBM на feature-engineered признаках (lags, rolling, calendar features).
**Deep Learning:**
LSTM / Transformer — для очень длинных рядов с нелинейностями. Для коротких рядов overkill.

3) Метрики качества:
MAE — средняя абсолютная ошибка (в единицах).
MAPE — средняя процентная ошибка (не работает на нулях).
RMSE — штрафует крупные ошибки.
Какую выбрать — зависит от бизнес-смысла.

4) Кросс-валидация для time series:
TimeSeriesSplit (НЕ random!).
Walk-forward validation.
Никогда не использовать будущие данные для тренировки прошлых (data leakage).

5) Доверительные интервалы — обязательно. Прогноз без них вводит в заблуждение.

6) Готовый код на Python (Prophet — самый простой старт):
```python
from prophet import Prophet
import pandas as pd

df = pd.read_csv('data.csv')
df.columns = ['ds', 'y']

model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    interval_width=0.95
)
model.fit(df)

future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)
```

Запрет: прогноз без доверительных интервалов, экстраполяция на горизонт длиннее 30% от истории данных, использование random train/test split на time series.
💡 Примечание

Random train/test split на time series — классическая ошибка новичков. Это data leakage: модель тренируется на данных из «будущего» (относительно тестовых) и показывает нереально хорошие метрики. В продакшене точно так же не сработает. TimeSeriesSplit — единственный правильный способ. Доверительные интервалы — для честности. Прогноз «продажи будут 1000» без CI лжёт. «Будут 850-1150 с 95%» — честная информация для решений.

2

📊 Регрессия для численного прогноза

Помоги построить регрессионную модель.

Контекст:
Что прогнозируем (numeric target): [цена квартиры / время выполнения / сумма следующего заказа / etc].
Признаки (features): [список или описание dataset'а].
Размер выборки: [N строк × M колонок].
Бизнес-цель прогноза: [что будем делать с предсказаниями].

План:

1) EDA + feature engineering:
Распределения признаков, корреляции, выбросы.
Категориальные → one-hot / target encoding.
Числовые → нормализация (если модель чувствительна).
Новые признаки (взаимодействия, log-преобразования, polynomial).
Обработка пропусков (mean / median / model-based imputation).

2) Выбор модели по сложности данных:
**Линейная регрессия** — baseline, интерпретируемая. Если зависимость линейная и признаков мало — лучший выбор.
**Ridge / Lasso / ElasticNet** — регуляризация для много признаков и мультиколлинеарности.
**Random Forest / Gradient Boosting (XGBoost, LightGBM, CatBoost)** — нелинейные зависимости, обработка категориальных. Default выбор для табличных данных в 2026.
**Нейросети** — для очень больших выборок (1M+) и сложных нелинейностей. Чаще всего overkill.

3) Метрики:
MAE — интерпретируемая, устойчива к выбросам.
RMSE — штрафует большие ошибки.
R² — доля объяснённой дисперсии (0..1, чем выше тем лучше).
MAPE — для процентной интерпретации.
**Бизнес-метрика** — обязательно перевести точность модели в деньги / ресурсы.

4) Кросс-валидация:
K-Fold (k=5 стандарт).
Stratified — если есть субпопуляции в данных.
GroupKFold — если в данных есть зависимости (например, несколько строк от одного пользователя).

5) Интерпретация:
Важность признаков (feature importance / SHAP values).
Partial dependence plots.
Конкретные примеры предсказаний с объяснением (особенно если будете оправдываться перед бизнесом).

6) Готовый код (LightGBM):
```python
import lightgbm as lgb
from sklearn.model_selection import KFold
from sklearn.metrics import mean_absolute_error

model = lgb.LGBMRegressor(
    n_estimators=500,
    learning_rate=0.05,
    early_stopping_rounds=50
)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
scores = []
for train_idx, val_idx in kf.split(X):
    model.fit(
        X.iloc[train_idx], y.iloc[train_idx],
        eval_set=[(X.iloc[val_idx], y.iloc[val_idx])]
    )
    pred = model.predict(X.iloc[val_idx])
    scores.append(mean_absolute_error(y.iloc[val_idx], pred))
```

Запрет: финальная модель без кросс-валидации (одной train/test split недостаточно), сложная модель без сравнения с простым baseline (часто Linear Regression не уступает XGBoost), отсутствие feature importance.
💡 Примечание

Сравнение с baseline (Linear Regression) — обязательный шаг. Часто оказывается, что XGBoost даёт +2% метрики при +50× сложности интерпретации. Если разница маленькая, берите линейную: проще объяснить бизнесу, легче дебажить, быстрее в продакшене. SHAP values — lifesaver для интерпретации сложных моделей: показывают, какой признак какое влияние оказал на конкретное предсказание.

3

🎯 Классификация (бинарная и мультикласс)

Помоги построить классификационную модель.

Контекст:
Что классифицируем: [уйдёт ли клиент / одобрить кредит / тип обращения / спам vs не-спам].
Тип задачи: [binary / multiclass / multilabel].
Распределение классов (балансировка): [сбалансированные / дисбаланс какой степени].
Цена ошибок:
False Positive (предсказали +, на самом деле −): [последствие].
False Negative (предсказали −, на самом деле +): [последствие].

План:

1) EDA + balancing:
Распределение классов.
Если дисбаланс >1:10 — обработать (SMOTE / undersampling / class weights).
Признаки vs target — корреляции.

2) Выбор модели:
Logistic Regression — baseline, интерпретируемая.
Random Forest / Gradient Boosting — нелинейные.
SVM — для маленьких выборок с чёткой границей.
Neural Networks — для очень больших / сложных задач (NLP, computer vision).

3) Метрики (для дисбаланса Accuracy НЕ подходит):
**Confusion matrix** — основа всего.
Precision = TP / (TP + FP) — какая доля предсказанных «+» реально «+».
Recall = TP / (TP + FN) — какую долю реальных «+» поймали.
F1 = 2 × P × R / (P + R) — балансир.
ROC-AUC — для ранжирования (порядок важнее порога).
PR-AUC — для дисбалансных задач.

**Какая метрика бизнес-критична?**
Спам-фильтр: важнее Precision (не блокировать настоящие письма).
Скрининг рака: важнее Recall (не пропустить больного).
Кредит: бизнес сам решает (баланс лимита риска).

4) Threshold tuning:
Default 0.5 — почти никогда не оптимален.
Найти threshold по PR-curve / F1-curve / бизнес-функции.

5) Probability calibration:
Если используете predict_proba — проверьте калибровку (Brier score, calibration plot).
Деревья и SVM часто плохо откалиброваны — нужен CalibratedClassifierCV.

6) Код (Logistic + class weights):
```python
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score

model = LogisticRegression(
    class_weight='balanced',
    max_iter=1000
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_proba = model.predict_proba(X_test)[:, 1]
print(classification_report(y_test, y_pred))
print(f'ROC-AUC: {roc_auc_score(y_test, y_proba):.3f}')
```

Запрет: использование Accuracy на дисбалансных данных (даёт иллюзию качества), single threshold 0.5 без оптимизации, отсутствие анализа ошибок (какие именно примеры модель путает).
💡 Примечание

Accuracy на дисбалансных данных — источник самообмана. Если у вас 1% позитивов и модель всегда предсказывает «−», Accuracy = 99%. Прекрасно, но модель бесполезна. Precision/Recall/F1 и confusion matrix — обязательный минимум. Threshold tuning часто даёт +20-40% к F1: default 0.5 — компромисс, оптимум зависит от бизнес-функции потерь.

4

🧩 Кластеризация для сегментации

Помоги провести кластеризацию для сегментации (клиентов / товаров / транзакций).

Контекст:
Что кластеризуем: [конкретно].
Объекты: [N штук с M признаками].
Бизнес-цель: [таргетинг кампаний / персонализация / выявление аномальных групп].
Известные категории (если есть): [или unsupervised полностью].

План:

1) Feature engineering:
Все признаки — численные (категориальные → one-hot или embeddings).
Нормализация (StandardScaler / MinMaxScaler) — обязательно для distance-based методов.
PCA / UMAP для уменьшения размерности (если M > 20).

2) Выбор алгоритма:
**K-Means** — быстрый, простой, требует знания K. Хорош для сферических кластеров одинакового размера.
**Hierarchical (Ward)** — даёт дендрограмму, удобно интерпретировать.
**DBSCAN** — находит кластеры произвольной формы, выявляет outliers. Не требует K.
**Gaussian Mixture Models** — soft clustering (вероятности принадлежности).
**HDBSCAN** — улучшенный DBSCAN, часто лучший дефолт.

3) Определение оптимального K (для K-Means):
Elbow method — изгиб на графике WCSS.
Silhouette score — выше = лучше разделение.
Gap statistic.
**Бизнес-логика > математика** — если K=7 даёт лучший silhouette, но бизнес может работать с 4 сегментами — берите 4.

4) Профилирование кластеров — **самый важный шаг!**:
Средние значения каждого признака по кластеру.
Размеры кластеров.
Названия (по доминирующим характеристикам — например: «Премиум-молодые», «Бюджетные-лояльные»).
Если кластер не интерпретируется — он бесполезен для бизнеса.

5) Валидация:
A/B тест на разных сегментах (одинаково ли реагируют на стимулы).
Стабильность во времени (кластеризация на свежих данных даёт похожие сегменты?).

6) Код:
```python
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Поиск оптимального K
for k in range(2, 11):
    model = KMeans(n_clusters=k, random_state=42, n_init=10)
    labels = model.fit_predict(X_scaled)
    score = silhouette_score(X_scaled, labels)
    print(f'K={k}: silhouette={score:.3f}')
```

Запрет: кластеры без интерпретации (если не можете назвать — бесполезно), K-Means без нормализации (доминируют признаки с большими значениями), использование на категориальных без преобразования.
💡 Примечание

Профилирование кластеров — этап, который начинающие пропускают и получают «5 групп клиентов» без понимания, чем они отличаются. Без интерпретации кластеризация бесполезна для бизнеса. Маркетолог не может работать с «Кластером 3» — он работает с «Молодыми премиум-покупателями». Принцип «бизнес-логика > математика» критичен: иногда меньшее K с худшим silhouette практически удобнее, чем теоретически оптимальное.

5

⚖️ Выбор и сравнение моделей

Помоги системно сравнить несколько моделей для выбора лучшей.

Контекст:
Тип задачи: [регрессия / классификация].
Главная метрика: [конкретная].
Бизнес-ограничения: [скорость inference / интерпретируемость / размер модели].
Кандидаты на сравнение: [список — например: Linear, Random Forest, XGBoost, LightGBM, CatBoost, Neural Net].

Структура сравнения:

1) Унифицированный pipeline:
Одинаковая предобработка для всех моделей.
Одинаковое разбиение train/val/test.
Одинаковые метрики.
Random seed зафиксирован.

2) Hyperparameter tuning для каждой:
GridSearchCV / RandomizedSearch / Optuna.
**Одинаковый бюджет времени** — иначе нечестно (XGBoost будет выглядеть лучше Linear, потому что больше тюнили).
Стандартные сетки гиперпараметров из best practices, не ad-hoc.

3) Метрики для сравнения (минимум 4):
Главная бизнес-метрика (F1 / MAE / etc).
Скорость inference (мс на предсказание) — критично для real-time.
Скорость training (для переобучения).
Размер модели (МБ) — для edge deployment.
Интерпретируемость (subjective scoring 1-5).
Робастность (как падает качество на «слегка изменённых» данных).

4) Cross-validation на k=5 минимум:
Среднее ± стандартное отклонение по фолдам.
Если разница между моделями меньше std — статистически не значимая, простую модель брать.

5) Сводная таблица:
Модель | F1 | Inference (мс) | Train (мин) | Размер (МБ) | Interpretability | Recommendation

6) Финальное решение:
Бизнес-обоснование выбора, не только «у этой выше F1».
Если модель А лучше А-Б на 1%, но в 100 раз медленнее — берём Б.

Принципы:
Простая модель с meaningful результатом > сложная с marginal улучшением.
Время на feature engineering > время на выбор модели в 90% случаев.
Ensemble нескольких моделей часто > single best, но сложнее в продакшене.

Запрет: сравнение без одинакового tuning budget (нечестно), сравнение только по одной метрике (упрощение), выбор сложной модели без бизнес-оправдания (перфекционизм без ROI).
💡 Примечание

Принцип «одинаковый бюджет на tuning» — критичен для честного сравнения. Если на XGBoost потратили 1000 trials в Optuna, а на Linear — defaults, XGBoost «выиграет» автоматически. Реальное сравнение требует равных шансов. Время inference часто игнорируется на research-стадии и становится блокером в продакшене: модель, которая считает 500мс на предсказание, не пригодна для real-time scoring.

6

🔍 Валидация модели и контроль переобучения

Помоги проверить модель на переобучение (overfitting) и корректность.

Контекст:
Модель: [какая].
Метрика на train: [значение].
Метрика на test: [значение].
Размер выборки: [N].

Чек-лист на overfitting:

1) **Train vs Test gap:**
Если train F1 = 0.95, test F1 = 0.65 — overfit очевиден.
Если разница <5% — обычно ок.
Если train F1 = test F1 = низкий — underfit (модель слишком слабая).

2) **Learning curves:**
Plot train/val метрики как функция размера выборки.
Если train flat высокий, val flat низкий — overfit.
Если оба растут — нужно больше данных.

3) **Validation curves:**
Plot train/val метрик как функция гиперпараметра (complexity).
Найти оптимум (где val максимум).

4) **Cross-validation consistency:**
Стандартное отклонение по фолдам.
Если std большая — модель нестабильна, чувствительна к выборке.

5) **Shuffle test:**
Перемешайте target случайно.
Заново обучите модель.
Метрика должна упасть до random baseline. Если нет — data leakage.

6) **Holdout test set:**
Должен быть **никогда не виданный** моделью set.
Не использовать для tuning.
Финальная оценка только на нём.

Стратегии борьбы с overfit:
**Больше данных** — лучшее лекарство.
**Регуляризация** (L1/L2/dropout/early stopping).
**Упрощение модели** (меньше deep, меньше features).
**Feature selection** (только важные признаки).
**Ensemble** (bagging/boosting).
**Data augmentation** (для изображений / NLP).

Стратегии борьбы с underfit:
Более сложная модель.
Больше features (feature engineering).
Снизить регуляризацию.
Дольше тренировать.

Запрет: использование test set для tuning (test уходит в train неявно), отсутствие holdout для финальной оценки, игнорирование стандартного отклонения по фолдам.
💡 Примечание

Shuffle test — недооценённая техника обнаружения data leakage. Если перемешать target случайно и модель всё равно даёт хорошую метрику, значит, в данных есть leakage (target информация просочилась в признаки). Самые катастрофические ошибки в production — именно от пропущенного leakage: модель показывает 99% accuracy в test и 50% в проде.

7

🚀 Деплой модели в продакшен

Помоги задеплоить ML-модель в продакшен.

Контекст:
Модель: [тип, размер, framework].
Сценарий использования: [batch / real-time / edge].
Ожидаемая нагрузка: [requests/sec].
SLA на latency: [мс].
Инфраструктура: [AWS / GCP / VPS / on-premise].

Чек-лист деплоя:

**1. Сериализация модели:**
pickle / joblib (Python native, простое).
ONNX (cross-platform, быстрее).
TorchScript / TensorFlow SavedModel.
Версионирование (MLflow / DVC / Weights & Biases).

**2. API endpoint:**
FastAPI / Flask — простой REST.
Triton / TorchServe — оптимизированы для ML.
gRPC — низкая latency.
Контракт: input schema, output schema, версионирование API.

**3. Препроцессинг consistency:**
Тот же scaler, encoders, imputers, что были в training.
Сериализуйте preprocessor вместе с моделью.
Тестируйте: production preprocessing должен дать те же признаки, что и в training (byte-identical).

**4. Performance:**
Latency p50, p95, p99 (не только среднее).
Throughput (RPS).
Memory usage.
Batching для эффективности.

**5. Monitoring:**
**Data drift** — статистика входных признаков в проде vs training.
**Model drift** — снижение метрик качества на production-данных.
**Prediction distribution** — распределение outputs.
**Latency tracking.**
**Error rate.**
Алерты на отклонения.

**6. Логирование:**
Каждое предсказание (privacy-aware).
Inputs (анонимизированные).
Outputs.
Confidence / probabilities.
Время.
Для аудита и переобучения.

**7. Retraining стратегия:**
Триггеры (drift detected / по расписанию / новые labeled данные).
A/B тест новой модели vs старой.
Shadow deployment (параллельный запуск без влияния на пользователей) — для сравнения.
Canary deployment (на 5% трафика → 100%).
Rollback план.

**8. Безопасность:**
Authentication / authorization.
Rate limiting.
Input validation (защита от adversarial examples и DoS).
PII handling.

Принципы:
**Модель в продакшене — это только 10% работы**. 90% — MLOps инфраструктура.
Никогда не деплойте без monitoring — модель будет деградировать, и вы узнаете слишком поздно.
A/B тест перед заменой production-модели — обязательно. «Лучше в offline» ≠ «лучше в production».

Запрет: деплой без monitoring (медленная деградация = катастрофа), обновление модели без A/B теста (не знаете, улучшение или регресс), preprocessing inline в коде вместо сериализованного артефакта (training/serving skew гарантирован).
💡 Примечание

Training/serving skew — главная боль ML в продакшене. В training scaler нормализовал по train mean=10. В проде пишут новый scaler, получается mean=12. Модель видит другое распределение признаков, качество падает. Решение — сериализуйте preprocessor вместе с моделью, используйте идентичный артефакт. Monitoring обязателен потому что мир меняется: данные drift, поведение пользователей drift, и модель потеряет качество тихо. Без alerts вы узнаете об этом из жалоб.