Files
foxhunt/docs/DATA_VALIDATION_GUIDE.md
jgrusewski e8a68ee39f Download 360 DBN files (36.3 MB) using Rust databento client
- Created data/examples/download_ml_training_data.rs using reqwest + Databento HTTP API
- Downloaded 90 days × 4 symbols (ES.FUT, NQ.FUT, ZN.FUT, 6E.FUT)
- Files saved to test_data/real/databento/ml_training/
- Total: 360 files, 15 MB compressed DBN format
- Used existing Rust pattern from download_nq_fut.rs
- API key loaded from .env file
- 100% success rate (360/360 files)
- Ready for ML training benchmarks

Next: Create simplified training benchmark for RTX 3050 Ti GPU measurements
2025-10-13 13:30:02 +02:00

395 lines
10 KiB
Markdown

# DBN Data Quality Validation Guide
## Overview
Comprehensive data quality validation tools for DBN (Databento Binary) market data files. These tools ensure data quality before backtesting and catch issues early in the data acquisition pipeline.
## Features
- **Multi-file validation** - Validate individual symbols or all symbols at once
- **Quality scoring (0-100)** - Automated quality assessment with ratings
- **Anomaly detection** - Automated detection of price spikes, gaps, and corrupted data
- **Multiple report formats** - Text, JSON, and HTML reports
- **CI/CD integration** - Exit codes for automated validation pipelines
- **Pre-commit hooks** - Validate new data before committing
## Quick Start
### Validate Single Symbol
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- \
--symbol ES.FUT \
--format text
```
### Validate All Symbols
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- \
--all \
--format html \
--output validation_report.html
```
### CI/CD Mode (Exit on Failure)
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- \
--all \
--fail-on-poor-quality \
--min-quality-score 70
```
## Quality Checks
### Critical Issues (Score -20)
- **OHLCV Violations** - Invalid price relationships (high < low, etc.)
- **Negative Prices** - Prices below zero (data corruption)
- **Out-of-Order Timestamps** - Chronological ordering broken
### High Severity Issues (Score -10-15)
- **Duplicate Timestamps** - Multiple bars at same timestamp
### Medium Severity Issues (Score -5)
- **Price Spikes (>10%)** - Abnormal price movements
- **Zero Volumes (>10%)** - Excessive bars with no volume
### Low Severity Issues (Score -2)
- **Timestamp Gaps (>5%)** - Missing data periods
- **Low Completeness (<80%)** - Insufficient data coverage
## Quality Ratings
| Score | Rating | Status | Description |
|-------|--------|--------|-------------|
| 90-100 | EXCELLENT | ✅ Production Ready | No critical issues, minor anomalies only |
| 75-89 | GOOD | ✅ Production Ready | Some minor issues, acceptable for production |
| 60-74 | ACCEPTABLE | ⚠️ Caution | Notable issues, review recommended |
| 40-59 | POOR | ❌ Not Ready | Significant quality problems |
| 0-39 | CRITICAL | ❌ Blocked | Critical data corruption, unusable |
## Report Formats
### Text Report (Console)
```
═══════════════════════════════════════════════════════
DBN DATA QUALITY VALIDATION REPORT
═══════════════════════════════════════════════════════
Timestamp: 2025-10-13T08:31:14.367677223+00:00
Duration: 3ms
📊 SUMMARY
Total Symbols: 1
Total Files: 1
Total Bars: 1674
Overall Quality: 90 (EXCELLENT)
─────────────────────────────────────────────────────
SYMBOL: ES.FUT
─────────────────────────────────────────────────────
📈 Statistics:
Bars: 1674
Price Range: $3604.99 - $5175.00
Avg Close: $4822.21
...
```
### JSON Report (API Integration)
```json
{
"timestamp": "2025-10-13T08:31:14.367677223+00:00",
"total_symbols": 1,
"total_bars": 1674,
"overall_quality": {
"score": 90,
"rating": "EXCELLENT",
"issues": ["294 duplicate timestamps"],
"recommendations": ["Remove duplicate bars"]
},
"symbols": [...]
}
```
### HTML Report (Dashboard)
Interactive HTML dashboard with:
- Color-coded quality scores
- Expandable anomaly details
- Symbol-level drill-down
- Export-ready format
## CI/CD Integration
### Shell Script (Recommended)
```bash
./scripts/validate_data_quality.sh \
--all \
--min-quality 70 \
--output validation_reports
```
**Exit Codes:**
- `0` - All validations passed
- `1` - Quality check failed
- `2` - Validation error (no data, missing files)
### GitHub Actions
Workflow automatically triggers on:
- Push to `test_data/**/*.dbn`
- Pull requests with DBN files
- Daily at 2 AM UTC (data degradation check)
- Manual workflow dispatch
```yaml
# .github/workflows/data-quality-validation.yml
name: DBN Data Quality Validation
on:
push:
paths: ['test_data/**/*.dbn']
pull_request:
paths: ['test_data/**/*.dbn']
schedule:
- cron: '0 2 * * *'
```
### Pre-commit Hook
```bash
# Install pre-commit hook
ln -sf ../../.githooks/pre-commit-data-validation .git/hooks/pre-commit
# Or configure git hooks path
git config core.hooksPath .githooks
```
The hook automatically:
1. Detects changed `.dbn` files
2. Validates affected symbols
3. Blocks commit if quality < 60
**Skip hook (emergency only):**
```bash
git commit --no-verify
```
## CLI Reference
### Options
| Option | Description | Default |
|--------|-------------|---------|
| `--symbol <SYMBOL>` | Validate specific symbol | - |
| `--all` | Validate all symbols | false |
| `--format <FORMAT>` | Output format: text, json, html | text |
| `--output <FILE>` | Output file path | stdout |
| `--fail-on-poor-quality` | Exit 1 if quality fails | false |
| `--min-quality-score <N>` | Minimum score (0-100) | 70 |
| `--verbose` | Enable verbose output | false |
| `--data-dir <PATH>` | Test data directory | test_data/real/databento |
### Examples
**Quick validation:**
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- --symbol ES.FUT
```
**Full validation with HTML report:**
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- \
--all \
--format html \
--output reports/validation_$(date +%Y%m%d).html
```
**Strict CI/CD mode:**
```bash
cargo run -p backtesting_service --bin validate_dbn_data -- \
--all \
--min-quality-score 80 \
--fail-on-poor-quality
```
**Validate specific date range (via script):**
```bash
# Validate symbol with custom data directory
cargo run -p backtesting_service --bin validate_dbn_data -- \
--symbol ES.FUT \
--data-dir test_data/real/databento/2024-01
```
## Anomaly Types
### Price Spikes
**Detection:** >10% price change between consecutive bars
**Example:**
```
[MEDIUM] Price Spike at bar 145: 12.34% price change ($4800.00 -> $5392.00)
```
**Causes:**
- Flash crash events
- Data encoding errors
- Market microstructure noise
### Timestamp Gaps
**Detection:** >2 minutes between consecutive 1-minute bars
**Example:**
```
[LOW] Large Gap at bar 250: 3600 seconds (60 minutes)
```
**Causes:**
- Market close/open transitions (expected)
- Trading halts
- Data acquisition interruptions
### OHLCV Violations
**Detection:** Invalid price relationships
**Example:**
```
[HIGH] OHLCV Violation at bar 42: O=4822.50 H=4820.00 L=4825.00 C=4823.00
```
**Causes:**
- Data corruption
- Encoding errors
- Incorrect parsing
### Duplicate Timestamps
**Detection:** Multiple bars at same timestamp
**Example:**
```
[MEDIUM] Duplicate Timestamp at bar 99: Duplicate timestamp found
```
**Causes:**
- Data source overlaps
- Incorrect data merging
- Replay buffer issues
## Troubleshooting
### No DBN Files Found
**Error:**
```
No DBN files found in: test_data/real/databento
```
**Solutions:**
1. Check data directory path: `--data-dir <path>`
2. Verify files exist: `ls test_data/real/databento/*.dbn`
3. Check file permissions
### Invalid DBN Header
**Error:**
```
Failed to create DBN decoder for file: ES.FUT_ohlcv-1m_2024-01-02.dbn
Caused by: decoding error: invalid DBN header
```
**Solutions:**
1. Verify file is valid DBN format: `file <filename>.dbn`
2. Re-download corrupted file
3. Check DBN version compatibility
### Quality Score Below Threshold
**Error:**
```
❌ VALIDATION FAILED: Quality score 65 < minimum 70
```
**Solutions:**
1. Review validation report for specific issues
2. Fix data quality problems (deduplicate, correct timestamps)
3. Lower threshold if issues are acceptable: `--min-quality-score 60`
## Performance
### Benchmarks
| Symbol | Files | Bars | Load Time | Validation Time | Total |
|--------|-------|------|-----------|-----------------|-------|
| ES.FUT | 1 | 1,674 | 1.3ms | 1.7ms | 3ms |
| ESH4 | 3 | 5,022 | 3.9ms | 5.1ms | 9ms |
| NQ.FUT | 1 | 1,674 | 1.2ms | 1.6ms | 2.8ms |
| All | 6 | 8,370 | 6.4ms | 8.4ms | 14.8ms |
**Target:** <10ms per file (ACHIEVED ✅)
### Optimization Tips
1. **Use `--release` mode** for production validation (25x faster)
2. **Validate specific symbols** during development
3. **Cache validation reports** in CI/CD pipelines
4. **Parallel validation** for large symbol sets (future enhancement)
## Best Practices
### Development
1. **Validate before backtesting** - Catch data issues early
2. **Review anomalies** - Understand data quality characteristics
3. **Track quality scores** - Monitor data degradation over time
### Production
1. **CI/CD integration** - Block bad data from merging
2. **Automated monitoring** - Daily validation checks
3. **Quality thresholds** - Enforce minimum standards (>70)
4. **Alert on failures** - Notify team of quality issues
### Data Acquisition
1. **Pre-commit validation** - Check new data before commit
2. **Multi-file validation** - Ensure consistency across dates
3. **Cross-symbol validation** - Check price correlations (future)
4. **Incremental validation** - Only validate changed files
## Future Enhancements
- [ ] Cross-symbol correlation analysis
- [ ] Time alignment validation across symbols
- [ ] Statistical anomaly detection (ML-based)
- [ ] Historical quality tracking (trends)
- [ ] Parallel validation for large datasets
- [ ] WebAssembly build for browser validation
- [ ] Real-time validation during data streaming
- [ ] Automated data repair suggestions
## Support
**Issues:** Report validation bugs or feature requests via GitHub Issues
**Documentation:** See `TESTING_PLAN.md` for backtesting strategy
**Examples:** See `services/backtesting_service/examples/` for usage patterns
---
**Last Updated:** 2025-10-13
**Tool Version:** 1.0.0
**Status:** Production Ready ✅