| ---
|
| license: mit
|
| library_name: waveguard
|
| pipeline_tag: tabular-classification
|
| tags:
|
| - anomaly-detection
|
| - time-series
|
| - time-series-classification
|
| - physics
|
| - waveguard
|
| - zero-training
|
| - tabular
|
| - cybersecurity
|
| - monitoring
|
| - iot
|
| - financial-data
|
| - server-monitoring
|
| language: en
|
| datasets:
|
| - emergentphysicslab/waveguard-benchmarks
|
| ---
|
|
|
| # WaveGuard: Physics-Based Time-Series Anomaly Detection
|
|
|
| **Zero-training anomaly detection using Klein-Gordon wave equation dynamics on a 3D lattice.**
|
|
|
| No neural networks. No gradient descent. No hyperparameter tuning.
|
| Deterministic, interpretable, and instantly deployable.
|
|
|
| ## How It Works
|
|
|
| WaveGuard encodes your data onto a 3D lattice and evolves it under two coupled wave equations:
|
|
|
| 1. **Plastic Phase**: Normal data sculpts the lattice's `chi` field (mass landscape)
|
| 2. **Frozen Phase**: Test data propagates through the learned landscape. Normal data resonates; anomalies scatter.
|
|
|
| The physics fingerprint (52-dimensional) captures the wave response, and Mahalanobis distance gives the anomaly score.
|
|
|
| ### The Equations
|
|
|
| ```
|
| GOV-01: E(n+1) = 2E(n) - E(n-1) + dt^2 * [Laplacian(E) - chi^2 * E]
|
| GOV-02: chi(n+1) = 2chi(n) - chi(n-1) + dt^2 * [Laplacian(chi) - kappa * E^2]
|
| ```
|
|
|
| Where `chi_0 = 19` (vacuum stiffness) and `kappa = 1/63` (coupling constant).
|
|
|
| ## Quick Start
|
|
|
| ### Install
|
|
|
| ```bash
|
| pip install WaveGuardClient
|
| ```
|
|
|
| ### Python SDK
|
|
|
| ```python
|
| from waveguard_client import WaveGuardClient
|
|
|
| client = WaveGuardClient()
|
|
|
| # Create baseline from normal data
|
| client.create_baseline("my_service", [
|
| {"cpu": 45, "memory": 62, "latency_ms": 120},
|
| {"cpu": 48, "memory": 65, "latency_ms": 115},
|
| # ... more normal samples
|
| ])
|
|
|
| # Detect anomalies
|
| result = client.detect({"cpu": 95, "memory": 92, "latency_ms": 850}, "my_service")
|
| print(result)
|
| # {'is_anomaly': True, 'score': 312.5, 'confidence': 0.999, ...}
|
| ```
|
|
|
| ### One-Shot Detection (No Setup)
|
|
|
| ```python
|
| training_data = [normal_sample_1, normal_sample_2, ...]
|
| test_data = [sample_to_check_1, sample_to_check_2, ...]
|
|
|
| results = client.scan(training_data, test_data)
|
| for r in results:
|
| print(f"Score: {r['score']:.2f} Anomaly: {r['is_anomaly']}")
|
| ```
|
|
|
| ## Benchmarks
|
|
|
| | Dataset | Precision | Recall | F1 | Latency/sample |
|
| |---------|-----------|--------|-----|----------------|
|
| | Server Metrics (5 features, 50 train) | 0.789 | 1.000 | 0.882 | 8ms |
|
| | Synthetic TS - Sinusoidal | 0.625 | 0.500 | 0.556 | 9ms |
|
| | Synthetic TS - Seasonal | 0.400 | 0.600 | 0.480 | 8ms |
|
| | Synthetic TS - Random Walk | 0.545 | 0.600 | 0.571 | 8ms |
|
| | Synthetic TS - Trend | 0.400 | 0.200 | 0.267 | 8ms |
|
|
|
| *CPU-only, N=24 grid, 30-50 training samples. Larger grids and more training data improve results. GPU (CuPy) gives 10-50x speedup.*
|
|
|
| ## Supported Data Types
|
|
|
| | Type | Encoder | Example |
|
| |------|---------|---------|
|
| | JSON/Dict | `json` | `{"cpu": 45, "mem": 62}` |
|
| | Time Series | `timeseries` | `[1.2, 3.4, 5.6, ...]` |
|
| | Numeric Array | `numeric_array` | `[0.1, 0.2, 0.3]` |
|
| | Tabular (CSV) | `tabular` | Pandas DataFrame rows |
|
| | Text | `text` | Any string (hashed) |
|
| | Image | `image` | 2D/3D numpy arrays |
|
|
|
| ## Key Advantages
|
|
|
| | Feature | WaveGuard | IsolationForest | LOF | AutoEncoder |
|
| |---------|-----------|-----------------|-----|-------------|
|
| | Training needed | None (physics) | Yes (trees) | Yes (neighbors) | Yes (epochs) |
|
| | Hyperparameters | 1 (sensitivity) | 5+ | 3+ | 10+ |
|
| | Deterministic | Yes | No (random) | Yes | No (init) |
|
| | Streaming | Yes | No | No | No |
|
| | GPU acceleration | Optional | No | No | Required |
|
| | Interpretable | Yes (chi landscape) | Partial | No | No |
|
|
|
| ## Architecture
|
|
|
| ```
|
| Input Data --> Encoder --> 3D Lattice (N^3)
|
| |
|
| GOV-01 + GOV-02 Evolution
|
| |
|
| 52-dim Physics Fingerprint
|
| |
|
| Mahalanobis Distance Score
|
| |
|
| Anomaly Decision + Confidence
|
| ```
|
|
|
| ## Model Details
|
|
|
| - **Type**: Physics-based (no learned parameters beyond chi landscape)
|
| - **Grid size**: Adaptive (16-256 based on input dimensionality)
|
| - **Fingerprint**: 52 dimensions (chi statistics + E-field response + histogram)
|
| - **Scoring**: Multi-resolution (global Mahalanobis + per-feature z-scores)
|
| - **Threshold**: Adaptive (baseline mean + 2/sensitivity * baseline std)
|
|
|
| ## Limitations
|
|
|
| - Best for structured/semi-structured data (JSON, time-series, tabular)
|
| - CPU-only mode is slower for large grids (N>64)
|
| - Requires at least 5 normal samples for stable baseline
|
| - Not designed for image anomaly detection (use Anomalib instead)
|
|
|
| ## Citation
|
|
|
| ```bibtex
|
| @software{waveguard2025,
|
| title={WaveGuard: Physics-Based Anomaly Detection},
|
| author={Partin, Greg},
|
| year={2025},
|
| url={https://huggingface.co/gpartin/waveguard-timeseries-ad}
|
| }
|
| ```
|
|
|
| ## Links
|
|
|
| - [Live Demo (HF Space)](https://huggingface.co/spaces/emergentphysicslab/waveguard-demo)
|
| - [API Documentation](https://gpartin--waveguard-api-fastapi-app.modal.run/docs)
|
| - [Python SDK (PyPI)](https://pypi.org/project/WaveGuardClient/)
|
| - [GitHub](https://github.com/gpartin)
|
|
|