ml_service / README.md
bldeaw's picture
Deploy to Hugging Face Spaces: Add application files and dependencies
8ccd4b2
|
Raw
History Blame Contribute Delete
7.12 kB
---
title: Job Failure Prediction & Anomaly Detection API
emoji: ๐Ÿ”ฎ
colorFrom: blue
colorTo: purple
sdk: docker
sdk_version: "latest"
app_file: app.py
pinned: false
---
# Job Failure Prediction & Anomaly Detection ML Service
Production-ready ML service for predicting job failures and detecting anomalies in job execution data.
## Features
- **Job Failure Prediction**: XGBoost-based classifier with SHAP explainability
- **Anomaly Detection**: Autoencoder-based unsupervised anomaly detection
- **FastAPI REST API**: Production-ready endpoints
- **Docker Support**: Containerized deployment
- **n8n Integration**: Ready-to-use workflow examples
## Quick Start
### 1. Training Models
Place your CSV files in the `data/` directory:
```bash
mkdir -p data models
# Copy your CSV files: true_export_report_20260120.csv, true_export_report_20260121.csv
```
Train the job failure prediction model:
```bash
python train_job_failure.py data/true_export_report_20260120.csv data/true_export_report_20260121.csv
```
Train the anomaly detection model:
```bash
python train_anomaly.py data/true_export_report_20260120.csv data/true_export_report_20260121.csv
```
Models will be saved to `models/` directory.
### 2. Running the Service
#### Local Development
```bash
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 8000
```
#### Docker
```bash
docker-compose up --build
```
The service will be available at `http://localhost:8000`
### 3. API Documentation
Once running, visit:
- Swagger UI: `http://localhost:8000/docs`
- ReDoc: `http://localhost:8000/redoc`
## API Endpoints
### Health Check
```bash
GET /health
```
### Job Failure Prediction
```bash
POST /predict/job-fail
Content-Type: application/json
{
"zone": "prod",
"job_nm": "daily_export_customer",
"job_start_time": "2026-01-21T01:00:00",
"duration_sec": 5400,
"status": "SUCCESS",
"err_msg": "",
"explain": true
}
```
**Response:**
```json
{
"fail_probability": 0.79,
"risk_level": "MEDIUM",
"top_drivers": [
{
"feature": "failure_rate_7",
"shap_value": 0.30,
"effect": "increase"
}
],
"recommended_actions": [
"Monitor upstream dependencies and recent job history"
]
}
```
### Anomaly Detection
```bash
POST /detect/anomaly
Content-Type: application/json
{
"features": {
"duration_sec": 5400,
"duration_zscore": 1.6,
"err_msg_len": 0
},
"threshold": 0.01
}
```
**Response:**
```json
{
"reconstruction_error": 0.0235,
"is_anomaly": true,
"threshold": 0.01,
"top_drivers": [
{
"feature": "duration_zscore",
"error": 0.0142
}
]
}
```
## Project Structure
```
ml_service/
โ”œโ”€โ”€ app.py # FastAPI application
โ”œโ”€โ”€ preprocessing.py # Data preprocessing and feature engineering
โ”œโ”€โ”€ model_utils.py # Model inference with SHAP
โ”œโ”€โ”€ train_job_failure.py # Training script for failure prediction
โ”œโ”€โ”€ train_anomaly.py # Training script for anomaly detection
โ”œโ”€โ”€ requirements.txt # Python dependencies
โ”œโ”€โ”€ Dockerfile # Docker image definition
โ”œโ”€โ”€ docker-compose.yml # Docker Compose configuration
โ”œโ”€โ”€ n8n_workflow_examples.md # n8n integration guide
โ”œโ”€โ”€ n8n_workflow_job_monitoring.json # Importable n8n workflow
โ”œโ”€โ”€ models/ # Trained models (created after training)
โ”‚ โ”œโ”€โ”€ job_fail_pipeline_cpu.joblib
โ”‚ โ”œโ”€โ”€ anomaly_autoencoder_cpu.keras
โ”‚ โ”œโ”€โ”€ anomaly_scaler.joblib
โ”‚ โ”œโ”€โ”€ feature_schema.json
โ”‚ โ””โ”€โ”€ ...
โ””โ”€โ”€ data/ # Training data (user-provided)
โ”œโ”€โ”€ true_export_report_20260120.csv
โ””โ”€โ”€ true_export_report_20260121.csv
```
## Features Engineering
The service automatically engineers the following features:
### Numeric Features
- `duration_sec`: Job duration in seconds
- `duration_zscore`: Z-score relative to rolling average
- `avg_duration_7`: 7-day rolling average duration
- `failure_rate_7`: 7-day rolling failure rate
- `err_msg_len`: Error message length
- `hour_sin`, `hour_cos`: Cyclical hour encoding
### Categorical Features
- `job_nm`: Job name
- `tasksgroup_nm`: Task group name
- `zone`: Environment/cluster
- `is_zeppelin`: Zeppelin flag
- `is_weekend`: Weekend indicator
## Model Details
### Job Failure Prediction
- **Algorithm**: XGBoost Classifier
- **Preprocessing**: StandardScaler for numeric, OneHotEncoder for categorical
- **Explainability**: SHAP values for feature importance
- **Output**: Failure probability (0-1), risk level, top drivers, recommended actions
### Anomaly Detection
- **Algorithm**: Autoencoder (TensorFlow/Keras)
- **Architecture**: Input โ†’ 64 โ†’ 32 โ†’ 64 โ†’ Output
- **Threshold**: Per-job 97th percentile or global threshold
- **Output**: Reconstruction error, anomaly flag, top contributing features
## n8n Integration
See `n8n_workflow_examples.md` for detailed integration examples and `n8n_workflow_job_monitoring.json` for an importable workflow.
### Quick n8n Setup
1. Import `n8n_workflow_job_monitoring.json` into n8n
2. Update the HTTP Request URLs to match your service endpoint
3. Configure Slack credentials (or replace with your alerting system)
4. Activate the workflow
## Risk Levels
- **MINIMAL**: `fail_probability < 0.3`
- **LOW**: `0.3 <= fail_probability < 0.5`
- **MEDIUM**: `0.5 <= fail_probability < 0.8`
- **CRITICAL**: `fail_probability >= 0.8`
## Alert Conditions
### WARNING
- `fail_probability >= 0.5 && fail_probability < 0.8`
- OR `is_anomaly === true` with moderate reconstruction error
### CRITICAL
- `fail_probability >= 0.8`
- OR `is_anomaly === true` with high reconstruction error (> 3x threshold)
## Development
### Running Tests
```bash
# Test prediction endpoint
curl -X POST http://localhost:8000/predict/job-fail \
-H "Content-Type: application/json" \
-d '{
"zone": "prod",
"job_nm": "test_job",
"job_start_time": "2026-01-21T01:00:00",
"duration_sec": 3600,
"status": "SUCCESS"
}'
```
### Model Retraining
Models should be retrained periodically as new data becomes available:
```bash
# Add new CSV files to data/ directory
python train_job_failure.py data/*.csv
python train_anomaly.py data/*.csv
# Restart service to load new models
docker-compose restart
```
## Monitoring
The service includes a health check endpoint that reports model loading status:
```bash
GET /health
```
Response:
```json
{
"status": "healthy",
"service": "job-failure-prediction",
"models_loaded": {
"predictor": true,
"anomaly_detector": true
}
}
```
## Production Deployment
1. **Train models** on historical data
2. **Save models** to `models/` directory
3. **Build Docker image**: `docker build -t job-ml-service .`
4. **Deploy** using docker-compose or Kubernetes
5. **Configure n8n** workflows for monitoring
6. **Set up alerting** (Slack, PagerDuty, etc.)
## License
[Your License Here]
## Support
For issues or questions, please refer to the documentation or contact the development team.