Referencia técnica · Paso 4b · Indicadores — target y depuración
La segunda mitad del paso de indicadores: la etiqueta (target) que consumirán el lift y las combinaciones, y las tres defensas del dataset — winsorización, chequeo de leakage y limpieza de NaN.
Sobre la ventana futura [i+1, i+H] se miden tres cantidades auxiliares. Se calculan, sirven de insumo, y luego se eliminan del dataset (no son features — mirarían el futuro).
La etiqueta binaria: ¿el trade que arranca en la barra i habría tocado el TP antes que el SL dentro de las H barras siguientes? Se resuelve por barrido, con el primer toque decidiendo.
El desempate intra-barra (cuando TP y SL caen en la misma vela) es conservador: en una vela alcista se asume que primero bajó (SL), en una bajista que primero subió — nunca acredita una ganancia que pudo no ocurrir. Mismo criterio que usa el Monte Carlo de la calibración.
Opción additional_targets: una etiqueta agnóstica de magnitud, útil en activos sin drift claro donde el TP/SL fijo deja demasiados timeouts.
Recorta outliers extremos con una escala robusta (mediana, no media) para que un par de valores locos no distorsionen los percentiles que usan los pasos siguientes.
1.4826 = factor teórico que lleva MAD a la escala de σ bajo distribución normal. Detecta a 10, clipea a 5 MAD-sigma. Excluye OHLCV, targets, temporales y time; columnas con MAD==0 se saltean. El fit (aprender bounds) va separado del apply: los bounds se aprenden en IS y se aplican a OOS sin recalcular → sin leakage OOS→IS.
Escanea los nombres de columna contra un catálogo de patrones. Un solo hallazgo CRITICAL bloquea el pipeline (HTTP 422); los WARNING solo informan.
| Tipo | Ejemplos | Severidad |
|---|---|---|
| substring | max_upside · max_downside · return_ · target_ · leaked_ | CRITICAL |
| prefix | y_ · output_ | CRITICAL |
| regex | shift(-N) · _-N | CRITICAL |
| suspicious | close_next · price_future · high_ahead | WARNING |
| whitelist | day_of_* · Target · Target_Long/Short · Target_*_Direction | seguro |
La whitelist es necesaria: Target, Target_Long/Short y los *_Direction son la y del problema (los genera este mismo paso), no leakage; y day_of_week contiene "day" pero no mira al futuro.
Los indicadores con lookback dejan NaN en las primeras barras (antes de que el período se complete).
Viene de 4a: familias, fórmulas propias, desfasajes y alineación multi-timeframe.
Fuentes:
· domain/indicators/transform.py — Max_Upside/Downside/Return, Target_Long/Short, additional_targets, drop_rows
· domain/indicators_quality/winsorize.py — MAD-sigma, compute/apply bounds
· domain/indicators_quality/leakage.py + binary_rules/leakage.py — patrones, scan, validate_column_map