Español · English
Soy científico de datos, de Santiago. Lo que más me gusta de la pega es lo que viene después de entrenar el modelo: cachar si el número aguanta con datos reales y si a alguien le sirve para tomar una decisión. Por eso casi todos mis proyectos usan datos públicos de Chile, como Cochilco, la CMF, ChileCompra o la CNE, y problemas reales de minería, energía y finanzas.
Hartas veces el resultado no fue el que esperaba. Un modelo de reingreso hospitalario me daba un AUC de 0,805, pero era trampa: contaba todas las visitas del paciente, incluido el mismo reingreso que tenía que predecir. Usando solo lo que el hospital sabe al dar el alta, y probándolo con pacientes nuevos, baja a 0,671. Otro caso: cambiarse de fondo de pensiones cuando el mercado está en el suelo suena prudente, pero en 2.000 historias armadas con 24 años de valores cuota te quita 1,9 puntos de rentabilidad real al año. Esos resultados los publico igual que los buenos, y todas las cifras salen de código que corre de principio a fin.
|
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
|
Monte Carlo · página
Revisar un test A/B todos los días infla el falso positivo de 5% a 24,2%, y la regla bayesiana que se suele asumir "segura" casi no ayuda (20,5%). ab-testing cuped sequential-testing
|
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, 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
42 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 real + simulado |
5 barras del SEN con clima real (ERA5) y precio anclado al costo marginal real de Crucero. Solar: WAPE 5,55% vs 28,89% del ingenuo; precio 8,77%. | lightgbm optuna time-series |
| Sistema Eléctrico Nacional, en R real + simulado · página |
Demanda del SEN con energía mensual real y clima ERA5: TBATS MAPE 4,28% vs 6,73% del ingenuo; el MAPE engaña en demanda neta. | r arima garch |
| 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 real + simulado · página |
El ROC-AUC hace parecer casi igual (0,938 vs 0,965) un modelo con PR-AUC 2,6× peor; AML por grafos sin etiquetas: ROC-AUC 0,893. | fraud-detection aml xgboost |
| 16 detectores sobre fraude móvil simulado · página |
El baseline estadístico queda bajo el azar (ROC-AUC 0,383) y los ensambles no ganan. 266 tests. | 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 simulado · página |
C + Ruby + Python, cada capa perfilada: 31 ns por llamada en C; 4,68 ms p50 la solicitud completa. | 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++) simulado · página |
Cero falsos positivos fuera del shock inyectado en 43.200 ventanas. | 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 (SCANIA) datos reales · página |
23.550 camiones: −31% del costo oficial en test, pero el ahorro se agota si la visita cuesta el doble, porque el modelo exagera el riesgo. | predictive-maintenance survival-analysis shap |
| Falla desde señal continua real + simulado |
Rodamientos (NASA IMS) y señal sísmica (LANL): features espectrales con boosting le ganan 2,5× a una CNN. | 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 Monte Carlo · página |
Tamaño muestral, SRM, CUPED y comparaciones múltiples, con un arnés que verifica el error de cada regla. | ab-testing cuped power-analysis |
| 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 comunas reales, demanda simulada · página |
Ruteo multi-depósito con ventanas horarias sobre polígonos reales: 0 de 173 zonas sin atender. | or-tools vrptw h3 |
| 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 macro real, cartera simulada · página |
26 técnicas: scorecard R+Python+C a 270,6 M filas/s, PD para IFRS 9, auditoría de sesgo y ciclo shadow/canary/reentrenamiento. | 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 · 3 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 |
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) simulado · página |
ML.NET + ONNX en app de escritorio: P80 con R² 0,957. | 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 |
