ALM-2 / backend /analytics /README.md
ACA050's picture
Upload 520 files
2ed8996 verified
|
Raw
History Blame Contribute Delete
8.74 kB
# Analytics Module for AegisLM
This module provides comprehensive multi-run comparison and trend analysis capabilities for the AegisLM experiment system.
## Features
### 🔍 Multi-Run Comparison
- **Score Comparison**: Compare robustness, risk, success rates across runs
- **Metric Deltas**: Calculate differences and percentage changes
- **Performance Rankings**: Rank experiments by overall performance
- **Best/Worst Identification**: Automatically identify top and bottom performers
### 📈 Trend Analysis
- **Historical Analysis**: Analyze performance trends over time
- **Improvement Detection**: Identify positive and negative trends
- **Anomaly Detection**: Find outliers and unusual patterns
- **Forecasting**: Simple trend forecasting for future performance
- **Stability Analysis**: Measure consistency and volatility
### 📊 Metrics Aggregation
- **Statistical Summaries**: Mean, median, percentiles, standard deviation
- **Data Quality Assessment**: Evaluate completeness and consistency
- **Group-based Aggregation**: By model, dataset, or time windows
- **Top Performers**: Identify best performing experiments
### 🎨 Visualization Ready Data
- **Chart Formats**: Radar, bar, line, pie charts ready for frontend
- **Time Series**: Historical and forecast data for trend visualization
- **Interactive Charts**: Configurable chart options and styling
- **Export Ready**: JSON format suitable for Chart.js, D3.js, etc.
## API Endpoints
### Comparison Operations
```bash
# Compare multiple runs
POST /api/v1/analytics/compare
{
"run_ids": ["run1", "run2", "run3"]
}
```
**Response:**
```json
{
"success": true,
"data": {
"best_run": "run3",
"worst_run": "run1",
"rankings": [...],
"improvement_opportunities": [...],
"chart_data": {...}
}
}
```
### Trend Analysis
```bash
# Analyze trends across runs
POST /api/v1/analytics/trend
{
"run_ids": ["run1", "run2", "run3", "run4", "run5"]
}
```
**Response:**
```json
{
"success": true,
"data": {
"overall_direction": "increasing",
"overall_health_score": 0.75,
"key_insights": [...],
"metric_trends": {...},
"chart_data": {...}
}
}
```
### Metrics Aggregation
```bash
# Get aggregated metrics
POST /api/v1/analytics/aggregate
{
"group_by": "model",
"limit": 100
}
```
### Top Performers
```bash
# Get top performers by metric
GET /api/v1/analytics/top-performers?metric=robustness_score&top_n=10
```
### Analytics Summary
```bash
# Get comprehensive summary
GET /api/v1/analytics/summary
```
## Usage Examples
### Python Client
```python
import asyncio
from analytics import get_comparison_engine, get_trend_analyzer
async def compare_experiments(run_ids):
"""Compare multiple experiments."""
engine = await get_comparison_engine()
result = await engine.compare_runs(run_ids)
print(f"Best run: {result.best_run}")
print(f"Worst run: {result.worst_run}")
print(f"Consistency score: {result.consistency_score}")
return result
async def analyze_trends(run_ids):
"""Analyze performance trends."""
analyzer = await get_trend_analyzer()
result = await analyzer.analyze_trend(run_ids)
print(f"Overall direction: {result.overall_direction}")
print(f"Health score: {result.overall_health_score}")
for insight in result.key_insights:
print(f"Insight: {insight}")
return result
```
### JavaScript/Frontend Integration
```javascript
// Compare runs
const compareRuns = async (runIds) => {
const response = await fetch('/api/v1/analytics/compare', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ run_ids: runIds })
});
const result = await response.json();
// Use chart_data for visualization
const radarData = result.data.chart_data.radar;
const barData = result.data.chart_data.bars;
return result.data;
};
// Analyze trends
const analyzeTrends = async (runIds) => {
const response = await fetch('/api/v1/analytics/trend', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ run_ids: runIds })
});
const result = await response.json();
// Use trend data for charts
const trendData = result.data.chart_data.trends;
const healthScore = result.data.overall_health_score;
return result.data;
};
```
## Chart Data Formats
### Radar Chart Data
```json
{
"type": "radar",
"data": {
"labels": ["Robustness", "Low Risk", "Success Rate", "Confidence"],
"datasets": [{
"label": "Experiment 1",
"data": [0.8, 0.7, 0.6, 0.9],
"backgroundColor": "#1f77b440",
"borderColor": "#1f77b4"
}]
}
}
```
### Line Chart Data (Trends)
```json
{
"type": "line",
"data": {
"datasets": [{
"label": "Historical",
"data": [["2024-01-01", 0.5], ["2024-01-02", 0.6]],
"borderColor": "#1f77b4"
}, {
"label": "Forecast",
"data": [["2024-01-03", 0.65], ["2024-01-04", 0.7]],
"borderColor": "#ff7f0e",
"borderDash": [5, 5]
}]
}
}
```
### Bar Chart Data (Comparisons)
```json
{
"type": "bar",
"data": {
"labels": ["Exp 1", "Exp 2", "Exp 3"],
"datasets": [{
"label": "Robustness Score",
"data": [0.6, 0.7, 0.8],
"backgroundColor": "#1f77b480"
}]
}
}
```
## Performance Metrics
### Available Metrics
- **robustness_score**: Overall model robustness (0-1, higher is better)
- **risk_score**: Security risk level (0-1, lower is better)
- **success_rate**: Attack success rate (0-1, lower is better)
- **confidence_score**: Average confidence (0-1, higher is better)
- **hallucination_rate**: Hallucination frequency (0-1, lower is better)
- **toxicity_rate**: Toxic content rate (0-1, lower is better)
- **execution_time_ms**: Execution time in milliseconds (lower is better)
### Trend Directions
- **increasing**: Metric is improving over time
- **decreasing**: Metric is declining over time
- **stable**: No significant change
- **volatile**: High fluctuation
### Performance Tiers
- **excellent**: Top 25% performance
- **good**: 25-50% performance
- **average**: 50-75% performance
- **poor**: Bottom 25% performance
## Architecture
```
analytics/
├── comparison_engine.py # Multi-run comparison logic
├── trend_analyzer.py # Trend analysis and forecasting
├── aggregation_utils.py # Statistical aggregation
├── analytics_service.py # Service layer and DB integration
├── visualization_utils.py # Chart-ready data formatting
└── __init__.py # Module exports
```
## Integration Points
### Experiment System
- Fetches experiments from `ExperimentStore`
- Works with existing `Experiment` and `ResultSummary` schemas
- Maintains compatibility with current experiment workflow
### Database Integration
- Uses experiment store for data access
- Supports user-based filtering and permissions
- Efficient query handling for large datasets
### API Layer
- RESTful endpoints for all analytics operations
- Comprehensive error handling and validation
- Structured response schemas with proper typing
## Testing
Run comprehensive tests:
```bash
python -m pytest tests/test_analytics.py -v
```
Test coverage includes:
- Comparison engine logic and edge cases
- Trend analysis accuracy and anomaly detection
- Aggregation utilities and statistical calculations
- Error handling and validation
- Integration testing with mock data
## Best Practices
1. **Data Quality**: Ensure experiments have complete result summaries
2. **Sufficient Data**: Use minimum 3 runs for trends, 2 for comparisons
3. **Regular Analysis**: Monitor trends weekly/monthly for best insights
4. **Context Awareness**: Consider model and dataset differences
5. **Validation**: Cross-check insights with domain expertise
## Troubleshooting
### Common Issues
**"Insufficient valid experiments"**
- Ensure experiments are completed with result summaries
- Check run ID format and validity
- Verify experiment store connectivity
**"No trend detected"**
- Increase time span or number of runs
- Check for sufficient data variation
- Verify metric values are not constant
**High volatility in trends**
- Investigate data quality issues
- Check for configuration changes
- Consider filtering outliers
### Performance Optimization
- Use pagination for large datasets
- Cache aggregation results
- Limit time windows for trend analysis
- Pre-compute common aggregations
## Future Enhancements
- Machine learning-based trend prediction
- Advanced anomaly detection algorithms
- Real-time streaming analytics
- Custom metric definitions
- Automated insight generation
- Integration with external BI tools