← Volver al índice · 20_calibration

Calibración isotónica

Ajuste PAV sobre la confianza cruda del master_agent para que refleje probabilidad real de acierto.

Resumen fase 20_isotonic_calibration

Estado: OK. Los 3 endpoints (/, /report, /analyze) devuelven 200. /report contiene "Informe Diario" y "13. Calibracion (post-isotonic)".

Archivos

Acción Path md5
Nuevo /opt/trading-web/calibration.py 21634e714c8aff355970fd437567f5a9
Editado /opt/trading-web/agents.py 07996dbdbce93721ef8e04fde293a6fe
Editado /opt/trading-web/daily_report.py caa223906c16a34b1522951b95384001
Modelo entrenado /opt/trading-web/data/calibrator.json 051ffacf5229200ed3a431e5d76896f5

Backups

  • /opt/backups/trading-web/agents.py.20260418-0938.bak (md5 671689425ca583ff782f912d1c0a4528)
  • /opt/backups/trading-web/daily_report.py.20260418-0938.bak (md5 2793cd40cdba9a5dd2353b481386f20d)

Entrenamiento

  • Fuente: quant_errors JOIN quant_predictions (tabla predictions WHERE evaluated=1 sólo tenía 48 filas, se adaptó al data source real con 82 495 muestras — documentado en source_query del JSON).
  • n_samples: 82 495
  • Knots (raw_conf → hit_rate): [(0.0, 0.478), (0.0, 0.487), (14.0, 0.489), (41.8, 0.499), (100.0, 0.510), (100.0, 1.000)] (monotonía no decreciente ✔).
  • Integración en agents.py: master_agent devuelve confidence = _calibrate_confidence(confidence) y preserva raw_confidence para auditoría. Sólo afecta al flujo nuevo; el histórico de la BD queda intacto.

Comparativa pre/post calibración (últimas 5 000 evaluaciones)

Bucket N raw HR raw N calib HR calib
00-30 3682 58.7% 0 N/A
30-50 1085 55.9% 4570 57.9%
50-60 143 46.9% 430 51.6%
60-70 78 37.2% 0 N/A
70-80 12 25.0% 0 N/A
80-100 0 N/A 0 N/A

Criterio de éxito bucket 80+ ≥ 70%

NO alcanzable con los datos actuales, documentado en la sección 13 del informe. Razón: el raw signal está anti-calibrado (hit rate decrece con confidence en el histórico). PAV sólo puede producir mapas no-decrecientes, por lo que la calibración correcta colapsa casi todo al entorno del hit rate real global (≈50%) — no "asciende" confidencias altas porque los datos no lo soportan. Para recuperar un bucket 80+ real habría que corregir el generador de confidence en el master_agent o invertir la dirección (fase futura), no el calibrador.