YAML Metadata Warning: The pipeline tag "time-series-classification" is not in the official list: text-classification, token-classification, table-question-answering, question-answering, zero-shot-classification, translation, summarization, feature-extraction, text-generation, fill-mask, sentence-similarity, text-to-speech, text-to-audio, automatic-speech-recognition, audio-to-audio, audio-classification, audio-text-to-text, voice-activity-detection, depth-estimation, image-classification, object-detection, image-segmentation, text-to-image, image-to-text, image-to-image, image-to-video, unconditional-image-generation, video-classification, reinforcement-learning, robotics, tabular-classification, tabular-regression, tabular-to-text, table-to-text, multiple-choice, text-ranking, text-retrieval, time-series-forecasting, text-to-video, image-text-to-text, visual-question-answering, document-question-answering, zero-shot-image-classification, graph-ml, mask-generation, zero-shot-object-detection, text-to-3d, image-to-3d, image-feature-extraction, video-text-to-text, keypoint-detection, visual-document-retrieval, any-to-any, video-to-video, other

Time-RCD: Zero-Shot Time Series Anomaly Detection

Time-RCD is a transformer-based model for zero-shot anomaly detection in time series data.

⚠️ IMPORTANT: Custom Model Loading

This model uses a custom architecture not built into transformers.
You MUST include trust_remote_code=True when loading:

# ✅ CORRECT - Will work
from transformers import AutoModel
model = AutoModel.from_pretrained("your-repo/Time-RCD", trust_remote_code=True)

# ❌ WRONG - Will throw KeyError: 'time_rcd'
model = AutoModel.from_pretrained("your-repo/Time-RCD")  # Missing trust_remote_code=True

Quick Start

from transformers import AutoModel, AutoConfig
import numpy as np

# Load model (trust_remote_code=True is REQUIRED!)
model = AutoModel.from_pretrained(
    "thu-sail-lab/Time_RCD",
    trust_remote_code=True
)

# Load processor
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained(
    "thu-sail-lab/Time_RCD",
    trust_remote_code=True
)

# Prepare data
data = np.random.randn(10000, 1)  # [n_samples, n_features]

# Process data
processed = processor(
    data,
    return_tensors="pt"
)

# Get anomaly scores
outputs = model(**processed)
anomaly_scores = outputs.anomaly_scores.numpy()

Model Details

  • Architecture: Transformer encoder with patch embedding
  • Parameters: ~5M parameters
  • Patch Size: 4
  • Hidden Dimension: 512
  • Projection Dimension: 256
  • Layers: 8 transformer layers
  • Attention Heads: 8 heads

Features

Zero-shot detection - No training required
Multi-variate support - Handle multiple features
Flexible windows - Configurable window sizes
Robust normalization - Built-in preprocessing

Usage Examples

Basic Anomaly Detection

from transformers import AutoModel
import numpy as np

# IMPORTANT: trust_remote_code=True is required!
model = AutoModel.from_pretrained("thu-sail-lab/Time_RCD", trust_remote_code=True)

# Your time series (n_samples, n_features)
data = np.random.randn(10000, 1)

# Get anomaly scores using the zero_shot method
scores, logits = model.zero_shot(data)

# Flatten scores from list of batches
import numpy as np
all_scores = np.concatenate(scores, axis=0).flatten()

# Detect anomalies (e.g., top 5%)
threshold = np.percentile(all_scores, 95)
anomalies = all_scores > threshold

With Custom Processing

from transformers import AutoModel
from processing_time_rcd import TimeRCDProcessor
import numpy as np

# IMPORTANT: trust_remote_code=True is required!
model = AutoModel.from_pretrained("thu-sail-lab/Time_RCD", trust_remote_code=True)

# Create and configure processor
processor = TimeRCDProcessor(win_size=5000, normalize=True)

# Process data
data = np.random.randn(10000, 1)
processed = processor(data, return_tensors="pt")

# Get predictions
outputs = model(**processed)
anomaly_scores = outputs.anomaly_scores

Configuration

Parameter Default Description
patch_size 4 Patch size for embedding
d_model 512 Model dimension
d_proj 256 Projection dimension
num_layers 8 Transformer layers
num_heads 8 Attention heads
use_rope True Rotary position embeddings

Performance

Evaluated on various time series anomaly detection benchmarks.

Limitations

  • Requires sufficient data (> window size)
  • Performance varies by domain
  • High-dimensional data may need preprocessing

Troubleshooting

KeyError: 'time_rcd'

If you see this error:

KeyError: 'time_rcd'
The checkpoint you are trying to load has model type `time_rcd` but Transformers does not recognize this architecture.

Solution: Add trust_remote_code=True to your loading code:

# This will fix the error
model = AutoModel.from_pretrained("your-repo/Time-RCD", trust_remote_code=True)

This is required because Time-RCD is a custom architecture not built into the transformers library. The trust_remote_code=True flag tells transformers to load and execute the custom model code from the repository.

Other Common Issues

Issue: ModuleNotFoundError: No module named 'einops'
Solution: Install einops: pip install einops

Issue: Model runs slowly on CPU
Solution: Move model to GPU: model = model.to('cuda')

Issue: Out of memory errors
Solution: Reduce window size or batch size in the processor:

processor = TimeRCDProcessor(win_size=2000, batch_size=32)

Citation

@misc{lan2025foundationmodelszeroshottime,
      title={Towards Foundation Models for Zero-Shot Time Series Anomaly Detection: Leveraging Synthetic Data and Relative Context Discrepancy}, 
      author={Tian Lan and Hao Duong Le and Jinbo Li and Wenjun He and Meng Wang and Chenghao Liu and Chen Zhang},
      year={2025},
      eprint={2509.21190},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2509.21190}, 
}

License

Apache 2.0

Downloads last month
88
Safetensors
Model size
37.1M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support