Español · English
Soy científico de datos en Santiago. Lo que más me interesa del trabajo es lo que viene después de entrenar el modelo: comprobar si el resultado se sostiene con datos reales y si sirve para tomar una decisión. Por eso la mayoría de mis proyectos usan datos públicos de Chile, como Cochilco, la CMF, ChileCompra o la CNE, y abordan problemas reales de minería, energía y finanzas.
En varios casos el resultado no fue el que esperaba. Un modelo de reingreso hospitalario alcanzaba un AUC de 0,805, pero porque contaba todas las visitas del paciente, incluido el mismo reingreso que debía predecir. Usando solo la información disponible al momento del alta, y evaluándolo con pacientes nuevos, el AUC baja a 0,671. En otro proyecto, cambiarse de fondo de pensiones cuando el mercado está en su punto más bajo parece prudente, pero en 2.000 historias construidas con 24 años de valores cuota reduce la rentabilidad real en 1,9 puntos al año. Publico estos resultados igual que los positivos, y todas las cifras provienen de código que se ejecuta de principio a fin. Y cuando llevé diez proyectos de datos simulados a datos reales, casi todos perdieron su resultado principal; más abajo está cuánto y por qué.
|
datos reales · página
24 años de valores cuota diarios, en UF. Cambiarse al fondo E en el piso de una caída resta 1,9 puntos de rentabilidad real al año; cambiarse antes logra el mismo Sharpe que una mezcla fija: no es acertar el momento, es tener menos renta variable. duckdb counterfactual-analysis behavioral-finance
|
real + simulado · página
¿Funcionó el programa de mantenimiento, y en qué camiones? Con sensores reales de 60.000 camiones Scania, el DRLearner por defecto colapsa (r = −0,01); se aisló la causa y se recupera a 0,61–0,79. causal-inference econml difference-in-differences
|
|
datos reales · página
3.000.888 filas de ventas. Un cuarto de la "demanda cero" eran locales que aún no abrían, y el modelo con mejor métrica deja quiebre de stock en 41% de los días-local. demand-forecasting lightgbm quantile-regression
|
datos reales · página
Un agente con Qwen 2.5 corriendo en CPU, sobre datos reales de planta y ChileCompra, medido en 100 consultas: elige bien la herramienta 99 veces, pero copia mal los montos grandes; devolverlos en millones sube las respuestas ancladas de 67 a 86. llm-agent tool-calling evaluation
|
Doce proyectos partieron con datos simulados y después los corrí, sin cambiar el método, sobre datos reales. Casi todos perdieron su resultado principal, y entender por qué fue más útil que el número original.
| Proyecto | Métrica | Simulado | Real | Por qué |
|---|---|---|---|---|
| Pipeline de fraude e-commerce IEEE-CIS, 590 mil transacciones |
PR-AUC | 0,993 | 0,052 | Las variables de comportamiento casi no tienen señal en fraude real. |
| Motor de fraude C + Ruby + Python IEEE-CIS |
PR-AUC | 1,000 | 0,098 | Dos de sus cuatro reglas nunca se disparan: sus listas eran inventadas. |
| AML no supervisado sobre grafo Elliptic, 204 mil transacciones Bitcoin |
ROC-AUC | 0,893 | 0,17–0,33 | Lo ilícito es típico, no anómalo: queda bajo el azar. |
| Fragmentación de tronadura 97 tronaduras publicadas, mina nueva |
R² | 0,957 | −0,59 | Con split aleatorio el modelo reconoce la faena; en una mina nueva es peor que el promedio. |
| Detector de order flow (C++) IEX y Binance |
Alertas (meta 0,27%) | 0,02% | 1,4–24% | Las colas reales son mucho más pesadas que la Student-t supuesta. |
| 19 detectores de anomalías ULB e IEEE-CIS |
ROC-AUC del baseline | 0,383 | 0,931 | El baseline 'peor que el azar' era un artefacto del simulador; el ranking casi no se transfiere. |
| Red multi-task de mantenimiento 23.550 camiones SCANIA |
AUC vs. LightGBM | empata | 0,62 vs. 0,71 | La red compartida pierde en las dos tareas con camiones reales, aun corrigiendo la escala de validación. |
| Laboratorio de riesgo crediticio Lending Club, 621 mil créditos |
AUC, scorecard vs. boosting | 0,733 vs. 0,716 | 0,647 vs. 0,660 | Con la señal débil de una cartera real el boosting gana; la restricción monótona sigue sin costar nada. |
| Experimentación A/B Criteo, 14 millones de usuarios |
Efecto tras ajustar con CUPED | no se mueve | −24% a −39% | El SRM pasa, pero las variables previas predicen el brazo: el archivo se rebalanceó y el ajuste corrige la estimación. |
| Logística de última milla OSRM, 86 mil pares de calles |
Km del plan de rutas | 572 | 835 manejado | La circuidad simulada se queda corta: 19% de los trayectos reales supera su máximo. |
| Demanda eléctrica horaria (R) CEN, 2 años de demanda horaria |
MAPE horario, TBATS vs. ingenuo | 4,28% vs. 6,73% | 7,01% vs. 5,81% | Sin calendario, Navidad y Fiestas Patrias hunden a los modelos clásicos; el ingenuo se adapta en un día. |
| Precio horario del SEN por barra Informes diarios del CEN, 4 años, 6 barras |
WAPE del precio, LightGBM | 8,77% | 18,84% | Precios con ceros en el norte, cambios de régimen y desacople norte-sur; en Puerto Montt pierde contra la persistencia. |
datoschile: datos públicos de Chile en una línea
Librería de Python para bajar la UF, el dólar, el cobre, los valores cuota de las AFP y la morosidad bancaria de la CMF, limpios y en un DataFrame. Corrige errores reales de las fuentes, como el dólar filtrado en la UF en 2014 o los tres formatos de los Excel de la CMF, y cada semana verifica que las fuentes no hayan cambiado.
import datoschile as dc
dc.indicadores.uf(desde=2020)
dc.pensiones.indice(fondos="A", desde=2008, real=True)
dc.cmf.morosidad(solo_sistema=True)Control de combustible de una flota de buses · trabajo real, datos de ejemplo ficticios
Cada uno de los 17 terminales llevaba el combustible en su propio Excel. Primero hice un script en Python que une las planillas, las comprime en consolidados por terminal, por día y por mes, calcula los km por litro de cada bus contra su carga anterior y marca las que quedan fuera del rango de su modelo. Después, una app en AppSheet que reemplazó las planillas: el operador registra cargas, pistolas y estanques desde el celular, y la app calcula consumo por pistola, stock teórico y AdBlue. Al revisar el código corregí tres errores: fechas mal ordenadas entre meses, buses que quedaban sin rango por cómo estaba escrita la norma, y la primera carga de cada bus marcada por error.
python pandas appsheet excel data-cleaning
43 proyectos en 9 tipos de problema; haz clic en una categoría para abrirla, o míralos todos en el portafolio.
1. Pronosticar lo que viene · 7 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Demanda retail (Favorita) datos reales · página |
Pronóstico evaluado como decisión de compra: los cuantiles solo convienen sobre una razón de costos ~3:1. | lightgbm quantile-regression newsvendor |
| Morosidad bancaria en Chile (CMF) datos reales · página |
Panel desde 128 Excel de la CMF. Prueba de tensión con rezago y signos elegidos sin mirar el futuro: solo consumo y comercial le ganan a «sin cambio» (0,73 y 0,85). LightGBM por banco no le gana; SHAP muestra que aprende el régimen. | stress-testing shap fastapi |
| Sistema Eléctrico Nacional, horario datos reales · página |
4 años de datos horarios reales leídos de los gráficos vectoriales de los informes diarios del Coordinador (residuo 0,04 USD/MWh). Precio por barra: WAPE 18,84% vs 21,87% del ingenuo; en Puerto Montt el modelo pierde. | lightgbm pdf-extraction time-series |
| Sistema Eléctrico Nacional, en R real + simulado · página |
70.128 horas reales del SEN (archivo público del Coordinador): LightGBM con calendario pronostica el día siguiente con MAPE 2,48% vs 3,61% del ingenuo; sobre la misma demanda real, ARIMA y TBATS pierden contra el ingenuo en los feriados. | r lightgbm forecasting |
| Volatilidad del cobre datos reales · página |
14 años de precios reales de la LME: GARCH(1,1) tiene el mejor QLIKE y solo HAR-X, con el VIX y el dólar, lo empata. CatBoost ajustado en cada fold no le gana. | garch catboost shap |
| Volatilidad de alta frecuencia datos reales · página |
24,8 M de trades de Binance: a 30 s, la persistencia (RMSPE 4,58) le gana a LightGBM y a la red neuronal. | high-frequency-trading lightgbm duckdb |
| Valor de vida del cliente datos reales · página |
BG/NBD y Gamma-Gamma programados desde la verosimilitud. Prediciendo 26 semanas: -2% de error en compras totales, frente a +68% de la tasa ingenua y +24% de LightGBM. | bg-nbd gamma-gamma retention |
2. Detectar fraude y anomalías · 7 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Laboratorio de fraude y AML datos reales · página |
Cuatro técnicas, todas con datos reales: el pipeline de e-commerce cae de PR-AUC 0,993 sintético a 0,052 en IEEE-CIS, y el ensamble AML no supervisado queda bajo el azar en Elliptic (ROC-AUC 0,17-0,33) porque el flujo ilícito es típico, no anómalo. | fraud-detection aml xgboost |
| 16 detectores sobre fraude móvil real + simulado · página |
19 detectores en PaySim y en fraude real (tarjetas ULB, e-commerce IEEE-CIS): el ranking casi no se transfiere (Spearman 0,28-0,38) y en e-commerce ningún detector supera PR-AUC 0,22. | isolation-forest local-outlier-factor imbalanced-data |
| Anomalías en compras públicas datos reales · página |
13,7 M de líneas de ChileCompra: las Compras Ágiles se acumulan bajo el tope y la acumulación se movió con la ley, pero casi no hay señal de compras partidas. Isolation Forest encuentra el 38,8% de las anomalías plantadas revisando el 5%. | public-procurement bunching isolation-forest |
| Motor de fraude políglota real + simulado · página |
El mismo motor C + Ruby + Python sobre 590.540 transacciones reales (IEEE-CIS): PR-AUC 0,098 frente al 1,000 sintético, y sus capas no aportan sobre las features nativas. | c ruby prometheus |
| Anomalías en ticks de mercado (C++) datos reales |
EWMA y CUSUM validados contra el crash cripto de marzo 2020, a 7,26 M ticks/s. | cpp cusum ewma |
| Order flow en acciones de litio (C++) real + simulado · página |
En cintas reales (IEX y Binance) el detector alerta 1,4-24% de las ventanas, no 0,27%, y no anticipa el precio; el día de la noticia del litio (abr 2023) fue un evento de volumen (12x), no de desbalance. | cpp order-flow market-microstructure |
| Anomalías en series de sensores (NAB) datos reales · página |
Scorer de NAB reimplementado y validado 9/9 contra lo publicado. Reportar solo el inicio de cada excursión lleva un detector estacional de 2,4 a 41; con validación cruzada queda en 42,4, sobre el baseline gaussiano publicado. | anomaly-detection time-series benchmark |
3. Anticipar fallas de equipos · 3 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Mantenimiento predictivo (4 datasets) datos reales · página |
4 datasets públicos (2 de camiones Scania reales, un compresor de metro, turbinas simuladas de la NASA), 8 familias de modelos y demo en Docker: SCANIA reescala cada variable distinto en train, validación y test (AUC adversarial 1,00); corregirlo baja el riesgo predicho de 16,9% a 4,2% (2,7% real). En APS, costo 9.150 vs 9.920 del ganador IDA 2016. | predictive-maintenance distribution-shift deep-learning |
| Falla desde señal continua datos reales |
Rodamientos (NASA IMS), sismos (LANL) y 23.550 camiones SCANIA reales: el boosting espectral le gana a una CNN por 2,5×, y la red multi-task que empataba en la flota sintética pierde con camiones reales, aun corrigiendo la escala de validación (AUC 0,62 vs 0,71). | remaining-useful-life signal-processing fft |
| Gemelo digital de molino SAG real + simulado · página |
Kalman estima la dureza del mineral con 79% menos error; energía valorizada con costos marginales reales de la CNE (95 meses). | digital-twin kalman-filter lightgbm |
4. Medir causas y evaluar decisiones · 5 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Impacto causal en flota minera real + simulado · página |
Uplift y DiD escalonado; el ATT coincide con una implementación de referencia en un panel real. | causal-inference econml uplift-modeling |
| Experimentación A/B real + simulado · página |
Tamaño muestral, SRM, CUPED, comparaciones múltiples y un mSPRT que se puede revisar a diario, verificados en simulación y en el experimento real de Criteo (14 millones de usuarios): el SRM pasa, pero el ajuste por covariables mueve el efecto 39%. | ab-testing cuped sequential-testing |
| Fondos de pensiones datos reales · página |
Una señal de régimen que "ganaba" 1,4–2,3% al año empata en Sharpe con una mezcla fija fuera de muestra. En UF, 2021–23 cayó 26%. | duckdb counterfactual-analysis pensions |
| Atrasos de entrega en un marketplace (Olist) datos reales · página |
96 mil pedidos reales. Llegar tarde causa -1,97 puntos de reseña (AIPW), y casi todo el daño ocurre en la primera semana. Filtrar reseñas previas a la entrega habría botado el 74% de los atrasos. | causal-inference aipw survival-analysis |
| Elasticidad precio en supermercado datos reales · página |
580 productos y 2.500 hogares reales. Ignorar exhibición y folleto exagera la elasticidad un 40%; double ML da -1,50. Una rebaja de 10% solo se paga sola con margen bruto sobre 50%, incluso en cerveza. | double-machine-learning fixed-effects pricing |
5. Optimizar operaciones · 4 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Planta de flotación datos reales · página |
Planta real de hierro: el R² 0,83 de una partición al azar es -0,43 en orden temporal; solo con laboratorio reciente se le gana a la persistencia, y cuatro modelos recetan pH opuestos. | soft-sensor walk-forward optimization |
| Logística de última milla real + simulado · página |
Ruteo multi-depósito con ventanas horarias sobre población real (Kontur ajustado al Censo 2017) y calles reales (OSRM): un plan hecho con distancias simuladas resulta 46% más largo al manejarlo. | or-tools vrptw h3 osrm |
| Churn como decisión de negocio datos reales · página |
10.000 clientes bancarios reales: la columna de quejas era una fuga (AUC 1,00 vs 0,85); umbral por valor recupera US$189.930 contactando al 42%, vs US$143.842 contactando a todos. | mlflow fastapi docker |
| Fallas de calidad en una línea Bosch datos reales · página |
1,18 M piezas reales: las fallas vienen por lote (11x junto a una pieza fallada). El CV mezclado exagera (0,40 vs 0,21 en piezas futuras). Inspeccionar el 5% más riesgoso atrapa el 61% de las fallas. | lightgbm imbalanced-learning quality-control |
6. Medir y gestionar riesgo financiero · 4 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Laboratorio de riesgo crediticio real + simulado · página |
26 técnicas sobre carteras simuladas (scorecard R+Python+C a 270,6 M filas/s, PD para IFRS 9, ciclo shadow/canary/reentrenamiento) y una 27 que las prueba con 621 mil créditos reales de Lending Club: la restricción monótona sigue siendo gratis y el scorecard ya no gana. | scorecard ifrs9 mlops |
| Riesgo sistémico en Chile datos reales · página |
Seis lenguajes sobre datos del Banco Central. El LSTM (51,0%) no le gana a la clase mayoritaria (53,6%). | julia r cplusplus |
| Laboratorio cuantitativo cripto datos reales · página |
Ocho técnicas. Las cinco estrategias pierden tras costos; la detección de spoofing sí funciona (precisión 0,92). | quantitative-finance cointegration nlp |
| Opciones asiáticas sobre cobre (C++) modelo de precios · página |
Monte Carlo C++20 bajo GBM, Schwartz y Heston: 9,64× con 16 hilos y un sesgo real corregido. | cpp20 monte-carlo heston-model |
7. Ordenar y preparar los datos · 4 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Toolkit de limpieza en 4 dominios datos reales · página |
El mismo toolkit sobre Banco Central, COCHILCO y Banco Mundial; detectó un dato corrupto en la fuente. | data-quality pydantic pytest |
| Data warehouse minero real + simulado · página |
Anuario real de Cochilco 2000-2025 en dbt + DuckDB: la ley cayó 39% y la electricidad por tonelada solo 9%; 121 tests, capa de faena simulada. | dbt duckdb star-schema |
| Lakehouse de e-commerce (110M eventos) datos reales · página |
110M eventos reales en DuckDB: faltan 48 h de compras y el tracking de carritos cambia 6 veces, así que el embudo se mide por régimen. | duckdb polars pyspark parquet |
| Datos de Chile, actualizados cada día datos reales · página |
dbt + DuckDB + GitHub Actions: nueve series públicas (UF, dólar, cobre, IPC, TPM, IMACEC, desempleo, fondos AFP, morosidad CMF) se descargan, prueban y publican cada día; si mindicador se cae, la UF y el dólar salen del SII. | dbt duckdb github-actions |
8. Clasificar y estimar · 4 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| Recomendador de e-commerce datos reales · página |
85M eventos reales: el ranker LightGBM sube el recall@20 de 0,244 a 0,395, pero el 71% de lo comprado nunca se había visto. | lightgbm learning-to-rank duckdb |
| Clasificación científica datos reales · página |
Bosón de Higgs (AMS 3,64 vs 3,8–3,9 de los ganadores) y exoplanetas Kepler (79,3% vs 49,8%). | gradient-boosting pytorch astronomy |
| Ley y fragmentación (.NET) real + simulado · página |
ML.NET + ONNX en app de escritorio; sobre 97 tronaduras reales publicadas el modelo explica 0,76 con split aleatorio pero -0,59 en una mina nueva, frente al 0,957 sintético. | csharp ml-net onnx |
| Reingreso hospitalario a 30 días datos reales · página |
99 mil hospitalizaciones reales. Contar visitas futuras infla el AUC de 0,67 a 0,80. Modelo calibrado con beneficio neto en umbrales de 5% a 39%; sin brecha por raza, pero peor en mayores de 70. | calibration decision-curve fairness |
9. Texto, lenguaje e imágenes · 5 proyectos
| Proyecto | Qué resuelve y qué encontró | Stack |
|---|---|---|
| RAG de seguridad minera normativa real · página |
Búsqueda híbrida sobre el DS 132; el re-ranking sube el MRR de 0,920 a 0,981. | rag hybrid-search cross-encoder |
| Agente de operaciones mineras datos reales · página |
Agente con datos reales de planta y ChileCompra, medido en 100 consultas con Qwen local: elige bien la herramienta 99 veces, y pasar los montos a millones sube las respuestas ancladas de 67 a 86. | llm-agent tool-calling duckdb |
| Modelo de lenguaje local para industria real + simulado · página |
Evaluado con 100 casos de una planta de flotación real: listar los argumentos de las herramientas baja las llamadas inválidas de 69 a 16, y auditar la solicitud deja 25 de 25 decisiones de seguridad correctas. | llama-cpp qlora guardrails |
| YOLOv8 en Raspberry Pi (tesis) datos reales (COCO) · página |
68% menos parámetros y ~10× más rápido en Raspberry Pi, a cambio de mAP50 0,175 vs 0,212. | yolov8 computer-vision edge-computing |
| Estelas de aviones en imágenes satelitales datos reales · página |
Segmentación en GOES-16 sin bajar 451 GB: lectura remota del zip de Kaggle y de OpenContrails. Agrandar la entrada 2x vale +0,05 de Dice; apilar frames empeora. 0,597 en el privado de Kaggle. | pytorch segmentation satellite-imagery |
| Lenguajes | |
| Datos | |
| ML y estadística | |
| Lenguaje, visión y edge | |
| Producción |

