Cómo usar itertools de Python para el feature engineering de series temporales
itertools de Python ayuda a crear rápidamente features para series temporales. El nuevo artículo repasa ejemplos prácticos de feature engineering eficiente y có

Python itertools — este es un módulo integrado para trabajar con iteradores, que se convierte en una herramienta indispensable en feature engineering para series temporales. Si estás construyendo features a través de bucles y copiando datasets, itertools te ayudará a hacerlo varias veces más rápido y de forma más eficiente en memoria.
Qué es itertools y por qué lo necesitas
El módulo itertools contiene funciones para crear iteradores rápidos y eficientes en memoria. Para trabajar con series temporales, esto es crítico: en lugar de almacenar listas en memoria, generamos features sobre la marcha. En datasets con millones o miles de millones de puntos, esto no es solo conveniente — es necesario para trabajar en absoluto.
Principales funciones itertools para feature engineering:
- `combinations()` — todos los pares y combinaciones de elementos (features de rezago, interacciones de variables)
- `permutations()` — todas las permutaciones (probando órdenes e influencia de features)
- `islice()` — extracción de subsecuencias y ventanas deslizantes sin copia
- `zip_longest()` — combinación de series de longitudes diferentes con manejo de valores faltantes
- `chain()` — combinación de iteradores en un flujo único sin copia de datos
Ejemplos prácticos: del enfoque ingenuo al escalable
Problema clásico: una serie temporal de precios, necesitas construir features de rezago con rezagos 1, 2, 3.
Enfoque ingenuo (lento):
```python import pandas as pd data = pd.read_csv('prices.csv') for lag in range(1, 4): data[f'price_lag_{lag}'] = data['price'].shift(lag) ```
Problema: cada `shift()` crea una copia del dataset en memoria. En 10 millones de filas esto es ~300 millones de operaciones de copia más 3x de consumo de memoria.
Con itertools (rápido y eficiente):
```python from itertools import islice prices = [100, 102, 105, 103, 107, 110] for lag in range(1, 4): lagged = list(islice(prices, lag, None)) print(f'lag {lag}: {lagged}') ```
`islice` no copia la lista — simplemente desplaza el puntero a la posición requerida. En datasets grandes, esto ahorra horas de computación.
Segundo ejemplo — ventanas deslizantes:
```python from itertools import islice, tee
def sliding_window(iterable, n): iterables = tee(iterable, n) for i, it in enumerate(iterables): for _ in range(i): next(it, None) return zip(*iterables)
prices = [100, 102, 105, 103, 107, 110] windows = list(sliding_window(prices, 3)) ```
Esto crea ventanas deslizantes de tamaño 3, utilizando iteradores perezosos en lugar de copiar el array.
Desempeño: dónde se economiza memoria y tiempo
En datasets con miles de millones de puntos:
- Computación perezosa — elementos se generan bajo demanda, no se cargan en su totalidad
- Cadenas de operaciones — `chain()` combina fuentes sin copias intermedias
- Composición — combinando itertools, construimos un pipeline complejo con memoria mínima
Resultado: el consumo de memoria puede caer 10-100 veces. En la nube, esto significa una factura más barata. En una máquina local — funciona con lo que antes no cabía en la RAM.
Qué significa esto para ti
Para científicos de datos: trabaja con datasets que antes simplemente no cabían en memoria.
Para ingenieros de ML: un modelo de producción requiere menos recursos y es más estable.
itertools no es magia, es una forma integrada de trabajar con datos de forma más inteligente. Comienza con features de rezago y ventanas deslizantes, luego encuentra dónde más puedas aplicar computación perezosa.