Skill: time-series-analysis
Series temporales. El tiempo es la dimensión más traicionera de los datos.
Trigger
- Tus datos tienen una columna de fecha/hora
- Querés saber si hay tendencia, estacionalidad o ciclos
- Necesitás pronosticar valores futuros
- Comparás períodos (mes contra mes, año contra año)
Workflow LEND
1. ANALIZAR
├── Frecuencia: diaria, horaria, mensual? ¿es regular o tiene gaps?
├── Componentes: tendencia, estacionalidad, residuo
├── Estacionariedad: ¿la media y varianza cambian en el tiempo? (Dickey-Fuller)
└── Outliers temporales: feriados, eventos extraordinarios, errores de medición
2. OFRECER (Menú del Senior)
├── A) Descomposición clásica — statsmodels, tendencia + estacionalidad + residuo
├── B) Prophet — maneja feriados, change points, outliers. Bueno para negocios.
└── C) ML-based — LightGBM con features temporales (lag, rolling window, día de semana, mes)
3. ELEGIR → confirmación
4. HACER
├── timestamp como índice, freq explícita
├── Descomposición: seasonal_decompose o STL (más robusto)
├── Test de estacionariedad: ADF (p-value < 0.05 = estacionaria)
├── Si no es estacionaria → diferencias o transformación (log, Box-Cox)
├── Prophet: df con ds (fecha) e y (valor), feriados del país
├── ML: features de calendario + lags + rolling window + diff
└── Evaluar forecast con MAE, RMSE, MAPE (y siempre contra un baseline naive)
5. VERIFICAR
├── El forecast es mejor que un baseline naive (último valor = próximo valor)
├── Los residuos son ruido blanco (no hay patrón en los errores)
└── Los intervals de confianza tienen sentido (no son absurdamente anchos)
Patrones
- Frecuencia explícita:
.asfreq('D') para evitar gaps silenciosos
- Estacionariedad: modelos clásicos (ARIMA) requieren series estacionarias. ML no.
- Prophet para negocios: maneja automáticamente feriados, change points, outliers
- Baseline naive: el forecast del mes siguiente = valor de este mes. Si tu modelo no le gana a eso, no sirve.
- Cross-validation temporal: siempre en orden cronológico, nunca aleatorio
Anti-patrones
- ❌ No fijar la frecuencia — gaps silenciosos sesgan tendencias
- ❌ Modelar sin descomponer primero — no sabés si hay estacionalidad
- ❌ Forecast sin intervalo de confianza — "va a subir" sin rango no es útil
- ❌ Cross-validation aleatoria en tiempo — rompés la estructura temporal
- ❌ Ignorar feriados — "diciembre tiene ventas bajas" porque nadie labura, no porque sea tendencia
1---2name: time-series-analysis3description: Analiza series temporales: tendencia, estacionalidad y pronóstico con Prophet, statsmodels y ML, incluyendo descomposición, tests de estacionariedad y evaluación contra baselines.4license: MIT5---67# Skill: time-series-analysis89Series temporales. El tiempo es la dimensión más traicionera de los datos.1011## Trigger1213- Tus datos tienen una columna de fecha/hora14- Querés saber si hay tendencia, estacionalidad o ciclos15- Necesitás pronosticar valores futuros16- Comparás períodos (mes contra mes, año contra año)1718## Workflow LEND1920```211. ANALIZAR22 ├── Frecuencia: diaria, horaria, mensual? ¿es regular o tiene gaps?23 ├── Componentes: tendencia, estacionalidad, residuo24 ├── Estacionariedad: ¿la media y varianza cambian en el tiempo? (Dickey-Fuller)25 └── Outliers temporales: feriados, eventos extraordinarios, errores de medición26272. OFRECER (Menú del Senior)28 ├── A) Descomposición clásica — statsmodels, tendencia + estacionalidad + residuo29 ├── B) Prophet — maneja feriados, change points, outliers. Bueno para negocios.30 └── C) ML-based — LightGBM con features temporales (lag, rolling window, día de semana, mes)31323. ELEGIR → confirmación33344. HACER35 ├── timestamp como índice, freq explícita36 ├── Descomposición: seasonal_decompose o STL (más robusto)37 ├── Test de estacionariedad: ADF (p-value < 0.05 = estacionaria)38 ├── Si no es estacionaria → diferencias o transformación (log, Box-Cox)39 ├── Prophet: df con ds (fecha) e y (valor), feriados del país40 ├── ML: features de calendario + lags + rolling window + diff41 └── Evaluar forecast con MAE, RMSE, MAPE (y siempre contra un baseline naive)42435. VERIFICAR44 ├── El forecast es mejor que un baseline naive (último valor = próximo valor)45 ├── Los residuos son ruido blanco (no hay patrón en los errores)46 └── Los intervals de confianza tienen sentido (no son absurdamente anchos)47```4849## Patrones5051- **Frecuencia explícita**: `.asfreq('D')` para evitar gaps silenciosos52- **Estacionariedad**: modelos clásicos (ARIMA) requieren series estacionarias. ML no.53- **Prophet para negocios**: maneja automáticamente feriados, change points, outliers54- **Baseline naive**: el forecast del mes siguiente = valor de este mes. Si tu modelo no le gana a eso, no sirve.55- **Cross-validation temporal**: siempre en orden cronológico, nunca aleatorio5657## Anti-patrones5859- ❌ No fijar la frecuencia — gaps silenciosos sesgan tendencias60- ❌ Modelar sin descomponer primero — no sabés si hay estacionalidad61- ❌ Forecast sin intervalo de confianza — "va a subir" sin rango no es útil62- ❌ Cross-validation aleatoria en tiempo — rompés la estructura temporal63- ❌ Ignorar feriados — "diciembre tiene ventas bajas" porque nadie labura, no porque sea tendencia