← Назад к вопросам
Какие артефакты должны остаться после твоей работы?
2.0 Middle🔥 122 комментариев
#Опыт и проекты#Софт-скиллы и мотивация
Комментарии (2)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие артефакты должны остаться после твоей работы?
Артефакты (artifacts) — это все созданные и сохранённые результаты работы Data Scientist. Они должны быть организованы, версионированы и документированы.
1. Модельные артефакты
import joblib
import pickle
import torch
import mlflow
# Сохранение обученной модели
model = train_model(X_train, y_train)
# Способ 1: joblib (для sklearn моделей)
joblib.dump(model, 'artifacts/model.pkl')
# Способ 2: pickle
with open('artifacts/model.pkl', 'wb') as f:
pickle.dump(model, f)
# Способ 3: PyTorch
torch.save(model.state_dict(), 'artifacts/model_weights.pth')
# Способ 4: MLflow (рекомендуется)
mlflow.sklearn.log_model(model, 'model')
mlflow.pytorch.log_model(model, 'pytorch_model')
# Проверка загрузки
loaded_model = joblib.load('artifacts/model.pkl')
y_pred = loaded_model.predict(X_test)
2. Метрики и результаты
import json
import pandas as pd
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# Вычисляем метрики
metrics = {
'accuracy': accuracy_score(y_test, y_pred),
'precision': precision_score(y_test, y_pred),
'recall': recall_score(y_test, y_pred),
'f1': f1_score(y_test, y_pred),
'training_time_sec': 125.5,
'num_features': X_train.shape[1],
'num_samples': len(X_train)
}
# Сохраняем метрики в JSON
with open('artifacts/metrics.json', 'w') as f:
json.dump(metrics, f, indent=2)
# Сохраняем результаты в CSV
results_df = pd.DataFrame({
'actual': y_test,
'predicted': y_pred,
'probability': y_pred_proba
})
results_df.to_csv('artifacts/predictions.csv', index=False)
print("Метрики сохранены:")
for key, value in metrics.items():
print(f"{key}: {value}")
3. Обработанные данные (preprocessors)
from sklearn.preprocessing import StandardScaler, LabelEncoder
import pickle
# Обучаем препроцессоры
scaler = StandardScaler()
scaler.fit(X_train)
le = LabelEncoder()
le.fit(y_train)
# Сохраняем для использования при inference
with open('artifacts/scaler.pkl', 'wb') as f:
pickle.dump(scaler, f)
with open('artifacts/label_encoder.pkl', 'wb') as f:
pickle.dump(le, f)
# При inference
X_test_scaled = scaler.transform(X_test) # Используем FITTED scaler
y_pred = model.predict(X_test_scaled)
y_pred_decoded = le.inverse_transform(y_pred)
4. Гиперпараметры и конфигурация
import json
import yaml
# Гиперпараметры модели
config = {
'model_type': 'RandomForest',
'hyperparameters': {
'n_estimators': 100,
'max_depth': 10,
'min_samples_split': 5,
'random_state': 42
},
'training_config': {
'test_size': 0.3,
'random_state': 42,
'stratified': True
},
'data_info': {
'num_features': 15,
'num_samples': 5000,
'target_variable': 'label'
}
}
# Сохраняем в JSON
with open('artifacts/config.json', 'w') as f:
json.dump(config, f, indent=2)
# Или в YAML
with open('artifacts/config.yaml', 'w') as f:
yaml.dump(config, f)
5. Отчёты и визуализация
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix, roc_curve, auc
# Confusion Matrix
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 1. Confusion Matrix
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', ax=axes[0, 0])
axes[0, 0].set_title('Confusion Matrix')
# 2. ROC Curve
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)
axes[0, 1].plot(fpr, tpr, label=f'AUC = {roc_auc:.3f}')
axes[0, 1].set_title('ROC Curve')
axes[0, 1].legend()
# 3. Feature Importance
feature_importance = pd.Series(model.feature_importances_, index=feature_names)
feature_importance.head(10).plot(kind='barh', ax=axes[1, 0])
axes[1, 0].set_title('Feature Importance')
# 4. Residuals Plot
residuals = y_test - y_pred
axes[1, 1].scatter(y_pred, residuals)
axes[1, 1].axhline(y=0, color='r', linestyle='--')
axes[1, 1].set_title('Residuals Plot')
plt.tight_layout()
plt.savefig('artifacts/model_analysis.png', dpi=300, bbox_inches='tight')
plt.close()
6. Отчёт в Markdown
report = f"""
# Модель ML: {model_name}
## Описание
{model_description}
## Данные
- Количество примеров: {len(X_train)}
- Количество признаков: {X_train.shape[1]}
- Целевая переменная: {target_column}
## Гиперпараметры
- Тип модели: RandomForest
- Количество деревьев: {n_estimators}
- Максимальная глубина: {max_depth}
## Результаты
- Точность (Accuracy): {metrics['accuracy']:.4f}
- Precision: {metrics['precision']:.4f}
- Recall: {metrics['recall']:.4f}
- F1-Score: {metrics['f1']:.4f}
- AUC-ROC: {metrics['auc']:.4f}
## Лучшие признаки
1. {top_features[0]} ({importances[0]:.4f})
2. {top_features[1]} ({importances[1]:.4f})
3. {top_features[2]} ({importances[2]:.4f})
## Выводы
{conclusions}
"""
with open('artifacts/REPORT.md', 'w') as f:
f.write(report)
7. Версионирование (DVC, MLflow)
# DVC для версионирования данных и моделей
dvc init
dvc add artifacts/model.pkl
git add artifacts/model.pkl.dvc .gitignore
git commit -m "Add trained model v1"
# MLflow для отслеживания экспериментов
mlflow.set_experiment("my_experiment")
with mlflow.start_run():
mlflow.log_params(config['hyperparameters'])
mlflow.log_metrics(metrics)
mlflow.sklearn.log_model(model, 'model')
mlflow.log_artifact('artifacts/REPORT.md')
8. Структура проекта
project/
├── artifacts/ # Все артефакты
│ ├── model.pkl # Обученная модель
│ ├── scaler.pkl # Fitted scaler
│ ├── label_encoder.pkl # Fitted encoder
│ ├── config.json # Гиперпараметры
│ ├── metrics.json # Метрики
│ ├── predictions.csv # Предсказания
│ ├── model_analysis.png # Визуализация
│ └── REPORT.md # Полный отчёт
├── data/
│ ├── raw/ # Исходные данные
│ └── processed/ # Обработанные данные
├── notebooks/
│ ├── 01_eda.ipynb
│ └── 02_modeling.ipynb
├── src/
│ ├── preprocessing.py
│ ├── model.py
│ └── utils.py
├── mlruns/ # MLflow tracking
├── README.md
└── requirements.txt
9. Чеклист артефактов
Обязательные:
- ✓ Обученная модель
- ✓ Метрики (accuracy, precision, recall, f1)
- ✓ Гиперпараметры и конфигурация
- ✓ Preprocessors (scaler, encoder)
Важные:
- ✓ Отчёт с выводами
- ✓ Визуализация (графики, матрица ошибок)
- ✓ Таблица с предсказаниями
- ✓ Feature importance
Дополнительные:
- ✓ Код проверки качества
- ✓ Документация
- ✓ Version control (git + DVC)
- ✓ MLflow experiments tracking
10. Производство (Production)
Для development моделей нужны дополнительные артефакты:
# requirements.txt
sklearn==1.2.0
pandas==1.5.0
numpy==1.23.0
# Dockerfile для deployment
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY artifacts/ artifacts/
COPY src/ src/
CMD ["python", "src/inference_api.py"]
Все артефакты должны быть:
- Воспроизводимы — можно пересоздать с теми же результатами
- Документированы — понятно, что это и как использовать
- Версионированы — есть история изменений
- Доступны — легко найти и использовать