trading-platform-database-v2/ddl/schemas/ml/tables/04-prediction_outcomes.sql
rckrdmrd 45e77e9a9c feat: Initial commit - Database schemas and scripts
DDL schemas for Trading Platform:
- User management
- Authentication
- Payments
- Education
- ML predictions
- Trading data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 04:30:23 -06:00

69 lines
2.7 KiB
SQL

-- =====================================================
-- ML SCHEMA - PREDICTION OUTCOMES TABLE
-- =====================================================
-- Description: Actual outcomes vs predictions for model evaluation
-- Schema: ml
-- Author: Database Agent
-- Date: 2025-12-06
-- =====================================================
CREATE TABLE ml.prediction_outcomes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- Predicción asociada
prediction_id UUID NOT NULL REFERENCES ml.predictions(id) ON DELETE CASCADE,
-- Resultado real
actual_result ml.prediction_result,
actual_value DECIMAL(20,8),
-- Evaluación
outcome_status ml.outcome_status NOT NULL DEFAULT 'pending',
is_correct BOOLEAN,
-- Métricas de error
absolute_error DECIMAL(20,8), -- |predicted - actual|
relative_error DECIMAL(10,6), -- (predicted - actual) / actual
-- Contexto de mercado en verificación
actual_price DECIMAL(20,8),
price_change_percent DECIMAL(10,6),
-- Timing
outcome_timestamp TIMESTAMPTZ NOT NULL, -- Cuando se verificó el outcome
time_to_outcome_hours DECIMAL(10,2), -- Horas desde predicción hasta outcome
-- Metadata
outcome_metadata JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
-- Constraints
CONSTRAINT unique_prediction_outcome UNIQUE(prediction_id)
);
-- Índices
CREATE INDEX idx_outcomes_prediction ON ml.prediction_outcomes(prediction_id);
CREATE INDEX idx_outcomes_status ON ml.prediction_outcomes(outcome_status);
CREATE INDEX idx_outcomes_correct ON ml.prediction_outcomes(is_correct)
WHERE is_correct IS NOT NULL;
CREATE INDEX idx_outcomes_timestamp ON ml.prediction_outcomes(outcome_timestamp DESC);
-- Comentarios
COMMENT ON TABLE ml.prediction_outcomes IS 'Actual results for model predictions, used for performance tracking';
COMMENT ON COLUMN ml.prediction_outcomes.actual_result IS 'What actually happened (buy/sell/hold/up/down/neutral)';
COMMENT ON COLUMN ml.prediction_outcomes.actual_value IS 'Actual numeric value (e.g., actual price reached)';
COMMENT ON COLUMN ml.prediction_outcomes.is_correct IS 'Whether prediction matched actual outcome';
COMMENT ON COLUMN ml.prediction_outcomes.absolute_error IS 'Absolute difference between predicted and actual';
COMMENT ON COLUMN ml.prediction_outcomes.relative_error IS 'Percentage error relative to actual value';
COMMENT ON COLUMN ml.prediction_outcomes.time_to_outcome_hours IS 'Time elapsed from prediction to outcome verification';
-- Ejemplo de outcome_metadata JSONB:
COMMENT ON COLUMN ml.prediction_outcomes.outcome_metadata IS
'Example: {
"verification_method": "automated",
"market_volatility": "high",
"external_events": ["fed_announcement"],
"notes": "Prediction incorrect due to unexpected news"
}';