Представьте: вы — 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, включая продвинутые техники промптинга. Но даже без курса — экспериментируйте, и у вас всё получится!
Комментарии