30 промтов для Data Science: от сырых данных до продакшн-моделей — ваш AI-ассистент на каждом этапе пайплайна

Представьте: вы — data scientist, и у вас есть личный ассистент, который не спит, не устаёт и знает все библиотеки Python. Он может написать код для очистки данных, подобрать модель, объяснить метрики и даже подготовить отчёт для стейкхолдеров. Звучит как мечта? С появлением больших языковых моделей (LLM) это стало реальностью. Но чтобы ассистент работал эффективно, нужно уметь правильно формулировать запросы — промты.

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

Базовые промты: работа с данными

1. Первичный анализ данных (EDA)

Задача: Быстро получить общее представление о датасете.

Промт: "Проведи разведочный анализ данных (EDA) для датасета [название]. Выведи: первые 5 строк, описательную статистику, количество пропущенных значений, типы данных. Определи, есть ли выбросы, и покажи распределение ключевых признаков."

Пример использования: Вы получили новый датасет и хотите понять, с чем имеете дело. Скопируйте промт, вставьте название датасета и запустите в среде с Python (Jupyter, Colab).

Пример результата:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

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

# Визуализация распределения
sns.histplot(df['age'], bins=30)
plt.show()

2. Очистка данных

Задача: Удалить дубликаты, обработать пропуски и выбросы.

Промт: "Напиши код для очистки датасета: удали дубликаты, заполни пропуски в числовых колонках медианой, в категориальных — модой. Удали выбросы по методу IQR (межквартильного размаха) для колонки 'price'."

Пример использования: Перед построением модели нужно подготовить данные. Укажите свою колонку вместо 'price'.

Пример результата:

import pandas as pd
import numpy as np

df = pd.read_csv('data.csv')
df = df.drop_duplicates()
num_cols = df.select_dtypes(include=[np.number]).columns
df[num_cols] = df[num_cols].fillna(df[num_cols].median())
cat_cols = df.select_dtypes(include=['object']).columns
df[cat_cols] = df[cat_cols].fillna(df[cat_cols].mode().iloc[0])

Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
df = df[(df['price'] >= Q1 - 1.5*IQR) & (df['price'] <= Q3 + 1.5*IQR)]

3. Feature Engineering

Задача: Создать новые признаки из существующих.

Промт: "Создай новые признаки на основе датасета: для колонки 'date' извлеки год, месяц, день недели. Для колонки 'text' посчитай длину текста и количество уникальных слов. Создай бинарный признак 'is_weekend' для выходных."

Пример использования: Улучшение качества модели за счет дополнительных признаков.

Пример результата:

import pandas as pd

df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day_of_week'] = df['date'].dt.dayofweek
df['text_length'] = df['text'].apply(lambda x: len(str(x)))
df['unique_words'] = df['text'].apply(lambda x: len(set(str(x).split())))
df['is_weekend'] = df['day_of_week'].apply(lambda x: 1 if x >= 5 else 0)

4. Визуализация зависимостей

Задача: Понять, как признаки связаны с целевой переменной.

Промт: "Построй визуализацию зависимости целевой переменной 'target' от каждого числового признака. Используй pairplot для всех числовых колонок и boxplot для категориальных."

Пример использования: Выявление важных признаков и паттернов.

Пример результата:

import seaborn as sns
sns.pairplot(df[['target', 'age', 'income', 'score']], hue='target')
plt.show()

for col in df.select_dtypes(include=['object']).columns:
    sns.boxplot(x=col, y='target', data=df)
    plt.show()

5. Разделение данных

Задача: Разделить данные на обучающую, валидационную и тестовую выборки.

Промт: "Раздели датасет на train, validation и test в пропорции 70/15/15. Используй стратификацию по целевой переменной для сохранения распределения классов."

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

Пример результата:

from sklearn.model_selection import train_test_split

train, temp = train_test_split(df, test_size=0.3, stratify=df['target'], random_state=42)
val, test = train_test_split(temp, test_size=0.5, stratify=temp['target'], random_state=42)
print(f'Train: {len(train)}, Val: {len(val)}, Test: {len(test)}')

Продвинутые промты: построение и оценка моделей

6. Выбор модели

Задача: Подобрать подходящий алгоритм машинного обучения.

Промт: "Определи, какие модели машинного обучения подходят для задачи классификации с несбалансированными классами (доля редкого класса 5%). Сравни минимум 3 алгоритма: логистическая регрессия, случайный лес, XGBoost. Укажи, какие метрики использовать."

Пример использования: Начало работы над задачей классификации.

Пример результата:

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier

models = {
    'LogReg': LogisticRegression(class_weight='balanced'),
    'RF': RandomForestClassifier(class_weight='balanced'),
    'XGB': XGBClassifier(scale_pos_weight=19)
}

# Оценка через cross_val_score с f1-score

7. Обучение модели

Задача: Обучить модель и вывести метрики.

Промт: "Обучи модель RandomForestClassifier на тренировочных данных. Выведи accuracy, precision, recall, f1-score на валидационной выборке. Построй confusion matrix."

Пример использования: Быстрый старт с базовой моделью.

Пример результата:

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_val)
print(classification_report(y_val, y_pred))
print(confusion_matrix(y_val, y_pred))

8. Настройка гиперпараметров

Задача: Подобрать оптимальные гиперпараметры.

Промт: "Проведи настройку гиперпараметров для GradientBoosting с помощью GridSearchCV. Задай сетку: n_estimators [50, 100], max_depth [3, 5], learning_rate [0.01, 0.1]. Используй кросс-валидацию 5-fold и метрику f1."

Пример использования: Улучшение качества модели.

Пример результата:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import GradientBoostingClassifier

param_grid = {
    'n_estimators': [50, 100],
    'max_depth': [3, 5],
    'learning_rate': [0.01, 0.1]
}
grid = GridSearchCV(GradientBoostingClassifier(), param_grid, cv=5, scoring='f1')
grid.fit(X_train, y_train)
print(grid.best_params_)

9. Работа с несбалансированными данными

Задача: Применить методы борьбы с дисбалансом классов.

Промт: "Примени SMOTE для увеличения редкого класса в тренировочных данных. Обучи логистическую регрессию до и после SMOTE, сравни метрики precision, recall, f1."

Пример использования: Когда целевая переменная имеет редкий класс.

Пример результата:

from imblearn.over_sampling import SMOTE
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)

model = LogisticRegression()
model.fit(X_resampled, y_resampled)
y_pred = model.predict(X_val)
print(classification_report(y_val, y_pred))

10. Интерпретация модели

Задача: Понять, какие признаки важны для модели.

Промт: "Для обученной модели RandomForest выведи важность признаков (feature importance). Отсортируй их по убыванию и визуализируй с помощью barplot."

Пример использования: Объяснение модели стейкхолдерам.

Пример результата:

import matplotlib.pyplot as plt
import pandas as pd

importances = model.feature_importances_
features = X_train.columns
feat_imp = pd.Series(importances, index=features).sort_values(ascending=False)
feat_imp.plot(kind='bar', figsize=(10,6))
plt.show()

11. Оценка модели на тестовых данных

Задача: Финальная проверка модели на отложенных данных.

Промт: "Оцени качество модели на тестовой выборке: выведи accuracy, precision, recall, f1, ROC-AUC. Построй ROC-кривую и PR-кривую."

Пример использования: Подтверждение готовности модели к деплою.

Пример результата:

from sklearn.metrics import roc_auc_score, roc_curve, precision_recall_curve

y_proba = model.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, y_proba)
print(f'ROC-AUC: {auc:.3f}')

fpr, tpr, _ = roc_curve(y_test, y_proba)
plt.plot(fpr, tpr, label='ROC')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.legend()
plt.show()

Экспертные промты: от экспериментов к продакшену

12. Создание пайплайна

Задача: Автоматизировать весь процесс от данных до предсказания.

Промт: "Создай пайплайн с помощью sklearn.Pipeline, который включает: StandardScaler для числовых признаков, OneHotEncoder для категориальных, и модель RandomForestClassifier. Обучи пайплайн на train и оцени на test."

Пример использования: Упаковка всех шагов в один объект для удобства.

Пример результата:

from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder

numeric_features = ['age', 'income']
categorical_features = ['gender', 'city']

preprocessor = ColumnTransformer([
    ('num', StandardScaler(), numeric_features),
    ('cat', OneHotEncoder(), categorical_features)
])

pipeline = Pipeline([
    ('prep', preprocessor),
    ('clf', RandomForestClassifier())
])

pipeline.fit(X_train, y_train)
print(pipeline.score(X_test, y_test))

13. Эксперимент-трекинг

Задача: Логировать параметры и метрики экспериментов.

Промт: "Напиши код для логирования эксперимента с помощью MLflow: логируй параметры модели, метрики, и сохраняй модель. Используй автологирование для sklearn."

Пример использования: Отслеживание экспериментов в команде.

Пример результата:

import mlflow
import mlflow.sklearn

mlflow.set_experiment('my_experiment')
with mlflow.start_run():
    mlflow.log_params({'n_estimators': 100, 'max_depth': 5})
    mlflow.sklearn.autolog()
    model.fit(X_train, y_train)
    mlflow.log_metric('f1', f1_score(y_val, model.predict(X_val)))

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

Задача: Сохранить модель в файл и загрузить для использования.

Промт: "Сохрани обученную модель с помощью joblib в файл 'model.pkl'. Затем загрузи модель и сделай предсказание для нового наблюдения."

Пример использования: Деплой модели в веб-сервисе.

Пример результата:

import joblib

joblib.dump(model, 'model.pkl')
loaded_model = joblib.load('model.pkl')
new_data = [[30, 50000]]
prediction = loaded_model.predict(new_data)
print(prediction)

15. Создание API для модели

Задача: Обернуть модель в REST API с помощью FastAPI.

Промт: "Создай FastAPI-приложение, которое принимает POST-запрос с JSON-данными, передает их в загруженную модель и возвращает предсказание."

Пример использования: Предоставление доступа к модели через API.

Пример результата:

from fastapi import FastAPI
from pydantic import BaseModel
import joblib

app = FastAPI()
model = joblib.load('model.pkl')

class InputData(BaseModel):
    age: int
    income: float

@app.post('/predict')
def predict(data: InputData):
    features = [[data.age, data.income]]
    prediction = model.predict(features)[0]
    return {'prediction': int(prediction)}

16. Мониторинг дрейфа данных

Задача: Обнаружить изменение распределения данных в продакшене.

Промт: "Напиши код для обнаружения дрейфа данных с помощью библиотеки evidently. Сравни распределение обучающей выборки и новых данных, используя PSI (индекс стабильности населения)."

Пример использования: Отслеживание ухудшения качества модели.

Пример результата:

import evidently
from evidently.dashboard import Dashboard
from evidently.dashboard.tabs import DataDriftTab

dashboard = Dashboard(reference_data=df_train, current_data=df_current)
dashboard.add_tab(DataDriftTab())
dashboard.calculate()
dashboard.save('drift_report.html')

17. Автоматизация отчётов

Задача: Генерировать отчёт о качестве модели автоматически.

Промт: "Создай скрипт, который генерирует HTML-отчёт с метриками модели, важностью признаков и графиками, и отправляет его по электронной почте."

Пример использования: Регулярная отправка отчётов команде.

Пример результата:

import smtplib
from email.mime.text import MIMEText

# Создание отчёта
report = f"""
<h2>Model Report</h2>
<p>Accuracy: {accuracy}</p>
<p>F1: {f1}</p>
"""

# Отправка по почте
msg = MIMEText(report, 'html')
msg['Subject'] = 'Daily Model Report'
msg['From'] = 'sender@example.com'
msg['To'] = 'team@example.com'

with smtplib.SMTP('smtp.example.com') as server:
    server.login('user', 'password')
    server.send_message(msg)

18. Работа с большими данными

Задача: Обработать датасет, который не помещается в память.

Промт: "Обработай датасет размером 100 ГБ с помощью Dask: загрузи данные, вычисли среднее по колонке 'value', сгруппируй по категории."

Пример использования: Анализ логов или больших таблиц.

Пример результата:

import dask.dataframe as dd

df = dd.read_csv('huge_data/*.csv')
mean_value = df['value'].mean().compute()
grouped = df.groupby('category')['value'].mean().compute()
print(mean_value)
print(grouped)

19. Использование AutoML

Задача: Автоматически подобрать модель и гиперпараметры.

Промт: "Используй библиотеку PyCaret для автоматического подбора модели: сравни несколько алгоритмов, выбери лучший по метрике f1 и сохрани модель."

Пример использования: Быстрый бейзлайн для задачи.

Пример результата:

from pycaret.classification import *

clf = setup(data=df, target='target', session_id=42)
best_model = compare_models()
print(best_model)
save_model(best_model, 'best_model')

20. Обработка текстовых данных

Задача: Векторизировать тексты и обучить модель.

Промт: "Преобразуй колонку 'review' в TF-IDF векторы с помощью TfidfVectorizer, обучи логистическую регрессию для задачи сентимент-анализа, выведи метрики."

Пример использования: Анализ отзывов.

Пример результата:

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(df['review'])
y = df['sentiment']

model = LogisticRegression()
model.fit(X_train, y_train)

21. Работа с временными рядами

Задача: Прогнозирование временных рядов.

Промт: "Построй модель ARIMA для прогнозирования временного ряда 'sales'. Определи параметры p, d, q с помощью ACF и PACF, обучи модель, сделай прогноз на 30 дней и визуализируй."

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

Пример результата:

from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt

model = ARIMA(series, order=(1,1,1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=30)
plt.plot(series)
plt.plot(forecast, color='red')
plt.show()

22. Анализ кластеров

Задача: Сегментировать клиентов с помощью кластеризации.

Промт: "Проведи кластеризацию клиентов с помощью K-Means: стандартизируй данные, выбери оптимальное число кластеров по методу локтя, визуализируй кластеры на PCA-проекции."

Пример использования: Сегментация клиентов.

Пример результата:

from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

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

inertia = []
for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(X_scaled)
    inertia.append(kmeans.inertia_)

plt.plot(range(1, 11), inertia)
plt.show()

kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.scatter(X_pca[:,0], X_pca[:,1], c=clusters)
plt.show()

23. Обработка пропусков с помощью KNN

Задача: Заполнить пропуски, используя метод K-ближайших соседей.

Промт: "Заполни пропущенные значения в датасете с помощью KNNImputer (n_neighbors=5). Сравни результат с заполнением медианой на задаче классификации."

Пример использования: Когда пропуски не случайны.

Пример результата:

from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)

24. Обнаружение аномалий

Задача: Найти аномалии в данных.

Промт: "Используй Isolation Forest для обнаружения аномалий в датасете. Выведи количество аномалий и визуализируй их на графике."

Пример использования: Поиск мошеннических транзакций.

Пример результата:

from sklearn.ensemble import IsolationForest

model = IsolationForest(contamination=0.05)
predictions = model.fit_predict(X)
anomalies = X[predictions == -1]
print(f'Найдено аномалий: {len(anomalies)}')

25. Генерация синтетических данных

Задача: Создать синтетический датасет для тестирования.

Промт: "Сгенерируй синтетический датасет для бинарной классификации с помощью make_classification: 1000 примеров, 5 признаков, 2 информативных, добавь шум."

Пример использования: Тестирование алгоритмов без реальных данных.

Пример результата:

from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=5, n_informative=2, noise=0.1, random_state=42)

26. Оптимизация кода с помощью Numba

Задача: Ускорить вычисления.

Промт: "Перепиши функцию вычисления скользящего среднего с помощью Numba JIT для ускорения в 10 раз."

Пример использования: Обработка больших массивов.

Пример результата:

from numba import jit
import numpy as np

@jit(nopython=True)
def moving_average(data, window):
    result = np.empty_like(data)
    for i in range(len(data)):
        start = max(0, i - window + 1)
        result[i] = np.mean(data[start:i+1])
    return result

27. Параллельные вычисления с Dask

Задача: Распараллелить вычисления на нескольких ядрах.

Промт: "Используй Dask для параллельного вычисления корреляционной матрицы на датасете с 1 млн строк."

Пример использования: Ускорение анализа.

Пример результата:

import dask.dataframe as dd

# Загрузка данных
# df = dd.read_csv('big_data.csv')
# corr = df.corr().compute()

28. Сравнение моделей

Задача: Сравнить несколько моделей на одном датасете.

Промт: "Сравни LogisticRegression, RandomForest, SVM и XGBoost на датасете. Используй cross_val_score с 5-fold, выведи среднее и стандартное отклонение accuracy, построй boxplot."

Пример использования: Выбор лучшей модели.

Пример результата:

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

models = [LogisticRegression(), RandomForestClassifier(), SVC(), XGBClassifier()]
for model in models:
    scores = cross_val_score(model, X, y, cv=5)
    print(f'{model.__class__.__name__}: {scores.mean():.3f} ± {scores.std():.3f}')

29. Калибровка вероятностей

Задача: Откалибровать вероятности для корректной интерпретации.

Промт: "Примени CalibratedClassifierCV к RandomForestClassifier, чтобы получить откалиброванные вероятности. Сравни reliability curve до и после."

Пример использования: Когда важна точность вероятностей.

Пример результата:

from sklearn.calibration import CalibratedClassifierCV, calibration_curve

calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5)
calibrated.fit(X_train, y_train)

prob_pos = calibrated.predict_proba(X_test)[:, 1]
# построить кривую калибровки

30. Подготовка отчёта для стейкхолдеров

Задача: Сформулировать выводы и рекомендации.

Промт: "На основе метрик модели и важности признаков напиши краткий отчёт для нетехнических стейкхолдеров: объясни, что делает модель, насколько она точна, какие признаки влияют на результат."

Пример использования: Коммуникация результатов.

Пример результата:

**Отчёт о модели предсказания оттока клиентов**

Модель предсказывает вероятность ухода клиента с точностью 85%. Наиболее важные факторы: частота использования сервиса, длительность подписки, количество обращений в поддержку. Рекомендуется внедрить программу лояльности для клиентов с высоким риском оттока.

Финальные мысли

Эти 30 промтов — ваш стартовый набор для эффективной работы с данными. Используйте их как основу, адаптируйте под свои задачи, комбинируйте и совершенствуйте. Чем точнее вы формулируете запрос, тем полезнее ответ. И помните: лучший способ освоить промт-инжиниринг — практика. Начните с базовых промтов, затем переходите к продвинутым и экспертным. Через несколько недель вы заметите, как сильно ускорился ваш рабочий процесс.

Если вы хотите систематизировать знания и научиться создавать собственные промты под любые задачи, обратите внимание на курс «AI-инжиниринг» в ASI Biont. Там вы найдёте структурированные материалы по работе с LLM, включая продвинутые техники промптинга. Но даже без курса — экспериментируйте, и у вас всё получится!

← Все статьи

Комментарии