Phase 02 - Lesson 15

Fundamentos de series temporales

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

El rendimiento pasado predice resultados futuros, si primero verifica la estacionariedad.

Tipo: Construcción Idioma: Python Requisitos previos: Fase 2, Lecciones 01-09 Tiempo: ~90 minutos

Objetivos de aprendizaje

  • Descomponer una serie de tiempo en tendencia, estacionalidad y componentes residuales y probar su estacionariedad.
  • Implementar funciones de retraso y estadísticas continuas para convertir una serie de tiempo en un problema de aprendizaje supervisado.
  • Construir un marco de validación que evite que datos futuros se filtren en la entrenamiento.
  • Explicar por qué las divisiones aleatorias de tren/prueba no son válidas para las series temporales y demostrar la brecha de rendimiento frente a las divisiones temporales adecuadas.

El problema

Tienes datos ordenados por tiempo. Ventas diarias, temperatura horaria, uso de CPU por minuto, precios de acciones semanales. Quiere predecir el próximo valor, la próxima semana, el próximo trimestre.

Busque su kit de herramientas de machine learning estándar: división aleatoria de entrenamiento/prueba, validación cruzada, entrada de matriz de características, salida de predicción. Cada paso es incorrecto.

Las series temporales rompen los supuestos en los que se basa el machine learning estándar. Las muestras no son independientes: la temperatura de hoy depende de la de ayer. Las divisiones aleatorias filtran inentrenamiento futura al pasado. Las características que lucen excelentes en el backtest fallan en producción porque dependen de patrones que cambian con el tiempo.

Un modelo que obtiene un 95 % de precisión con validación cruzada aleatoria podría obtener un 55 % con una evaluación adecuada basada en el tiempo. La diferencia no es un tecnicismo. Es la diferencia entre un modelo que funciona en papel y uno que funciona en producción.

Esta lección cubre los fundamentos: qué hace que los datos de tiempo sean diferentes, cómo evaluar modelos honestamente y cómo convertir una serie de tiempo en características que los modelos de ML estándar puedan consumir.

El concepto

¿Qué hace que las series temporales sean diferentes?

El ML estándar supone i.i.d. -- independientes e idénticamente distribuidos. Cada muestra se extrae de la misma distribución, independientemente de otras muestras. La serie temporal viola ambos:

  • No independiente. El precio de las acciones de hoy depende del de ayer. Las ventas de esta semana se correlacionan con las de la semana pasada.
  • No distribuida de manera idéntica. La distribución cambia con el tiempo. Las ventas de diciembre son diferentes a las de marzo.

Estas violaciones no son menores. Cambian la forma en que se crean funciones, cómo se evalúan los modelos y qué algoritmos funcionan.

flowchart LR
    subgraph IID["Standard ML (i.i.d.)"]
        direction TB
        S1[Sample 1] ~~~ S2[Sample 2]
        S2 ~~~ S3[Sample 3]
    end
    subgraph TS["Time Series (not i.i.d.)"]
        direction LR
        T1[t=1] --> T2[t=2]
        T2 --> T3[t=3]
        T3 --> T4[t=4]
    end

    style S1 fill:#dfd
    style S2 fill:#dfd
    style S3 fill:#dfd
    style T1 fill:#ffd
    style T2 fill:#ffd
    style T3 fill:#ffd
    style T4 fill:#ffd

En ML estándar, las muestras son intercambiables. Mezclarlos no cambia nada. En las series temporales, el orden lo es todo. La mezcla destruye la señal.

Componentes de una serie temporal

Cada serie temporal es una combinación de:

flowchart TD
    A[Observed Time Series] --> B[Trend]
    A --> C[Seasonality]
    A --> D[Residual/Noise]

    B --> E[Long-term direction: up, down, flat]
    C --> F[Repeating patterns: daily, weekly, yearly]
    D --> G[Random variation after removing trend and seasonality]
  • Tendencia: La dirección a largo plazo. Los ingresos crecen un 10% anual. Aumento de la temperatura global.
  • Estacionalidad: patrones repetidos a intervalos fijos. Las ventas minoristas aumentan en diciembre. El uso del aire acondicionado alcanza su punto máximo en julio.
  • Residual: Lo que queda después de eliminar tendencia y estacionalidad. Si el residuo parece ruido blanco, la descomposición capturó la señal.

Estacionariedad

Una serie de tiempo es estacionaria si sus propiedades estadísticas (media, varianza, autocorrelación) no cambian con el tiempo. La mayoría de los métodos de pronóstico asumen estacionariedad.

Por qué es importante: Una serie no estacionaria tiene una media que se desplaza. Un modelo entrenado con datos de enero ha aprendido una media diferente a la que mostrará febrero. Será sistemáticamente incorrecto.

Cómo comprobarlo: Calcule la media móvil y la desviación estándar móvil sobre las ventanas. Si se desvían, la serie no es estacionaria.

Cómo solucionarlo: Diferenciación. En lugar de modelar los valores brutos, modele el cambio entre valores consecutivos:

diff[t] = value[t] - value[t-1]

Si una ronda de diferenciación no hace que la serie sea estacionaria, aplíquela nuevamente (diferenciación de segundo orden). La mayoría de las series del mundo real necesitan como máximo dos rondas.

Ejemplo:

Serie original: [100, 102, 106, 112, 120] Primera diferencia: [2, 4, 6, 8] (todavía con tendencia ascendente) Segunda diferencia: [2, 2, 2] (constante - estacionaria)

La serie original tenía una tendencia cuadrática. La primera diferenciación la convirtió en una tendencia lineal. La segunda diferenciación lo hizo plano. En la práctica, rara vez se necesitan más de dos rondas.

Prueba formal: La prueba Dickey-Fuller aumentada (ADF) es la prueba estadística estándar de estacionariedad. La hipótesis nula es "la serie no es estacionaria". Un valor p inferior a 0,05 significa que puede rechazar el valor nulo y concluir que es estacionario. No implementamos ADF desde cero (requiere tablas de distribución asintóticas), pero el enfoque de estadísticas continuas en nuestro código brinda una verificación visual práctica.

Autocorrelación

La autocorrelación mide cuánto se correlaciona un valor en el momento t con el valor en el momento t-k (k pasos en el pasado). La función de autocorrelación (ACF) traza esta correlación para cada retraso k.

ACF te dice:

  • Qué tan atrás recuerda la serie. Si ACF cae a cero después del retraso 5, los valores de hace más de 5 pasos son irrelevantes.
  • Si existe estacionalidad. Si el ACF aumenta en el desfase 12 (datos mensuales), hay estacionalidad anual.
  • Cuántas funciones de retraso crear. Utilice retrasos hasta que el ACF se vuelva insignificante.

PACF (Función de Autocorrelación Parcial) elimina correlaciones indirectas. Si hoy se correlaciona con hace 3 días solo porque ambos se correlacionan con ayer, PACF en el retraso 3 será cero mientras que ACF en el retraso 3 no lo será.

Funciones de retraso: convertir series temporales en aprendizaje supervisado

Los modelos de ML estándar necesitan una matriz de características X y un objetivo y. Las series de tiempo le brindan una sola columna de valores. El puente tiene características de retraso.

Tome la serie [10, 12, 14, 13, 15] y cree funciones de retraso 1 y retraso 2:

retraso_2 retraso_1 objetivo
10 12 14
12 14 13
14 13 15

Ahora tienes un problema de regresión estándar. Cualquier modelo de ML (regresión lineal, random forest, aumento de gradiente) puede predecir el objetivo a partir de los retrasos.

Funciones adicionales que puede diseñar:

  • Estadísticas continuas: media, estándar, mín., máx. sobre los últimos k valores
  • Características del calendario: día de la semana, mes, is_holiday, is_weekend
  • Valores diferenciados: cambio desde el paso anterior
  • Estadísticas en expansión: media acumulada, suma acumulada
  • Características de la relación: valor actual/media móvil (a qué distancia del promedio reciente)
  • Características de interacción: lag_1 * day_of_week (efectos de los días laborables en el impulso)

¿Cuántos retrasos? Utilice la función de autocorrelación. Si el ACF es significativo hasta el desfase 10, utilice al menos 10 desfases. Si hay estacionalidad semanal, incluya el desfase 7 (y posiblemente el 14). Más retrasos le dan al modelo más historia pero también más características que ajustar, lo que aumenta el riesgo de sobreajuste.

La trampa de alineación del objetivo. Al crear funciones de retraso, el objetivo debe ser el valor en el momento t, y todas las funciones deben usar valores en el momento t-1 o antes. Si incluye accidentalmente el valor en el momento t como característica, tendrá un predictor perfecto y un modelo completamente inútil. Este es el error más común en la ingeniería de características de series temporales.

Validación de avance

Este es el concepto más importante de esta lección. La validación cruzada estándar k-fold asigna aleatoriamente muestras para entrenar y probar. Para series temporales, esto filtra inentrenamiento futura.

flowchart TD
    subgraph WRONG["Random Split (WRONG)"]
        direction LR
        W1[Jan] --> W2[Mar]
        W2 --> W3[Feb]
        W3 --> W4[May]
        W4 --> W5[Apr]
        style W1 fill:#fdd
        style W3 fill:#fdd
        style W5 fill:#fdd
        style W2 fill:#dfd
        style W4 fill:#dfd
    end

    subgraph RIGHT["Walk-Forward (CORRECT)"]
        direction LR
        R1["Train: Jan-Mar"] --> R2["Test: Apr"]
        R3["Train: Jan-Apr"] --> R4["Test: May"]
        R5["Train: Jan-May"] --> R6["Test: Jun"]
        style R1 fill:#dfd
        style R2 fill:#fdd
        style R3 fill:#dfd
        style R4 fill:#fdd
        style R5 fill:#dfd
        style R6 fill:#fdd
    end

Validación directa:

  1. Entrene con datos hasta el momento t
  2. Predecir en el momento t+1 (o t+1 a t+k para varios pasos)
  3. Desliza la ventana hacia adelante.
  4. Repetir

Cada pliegue de prueba solo contiene datos que vienen después de todos los datos de entrenamiento. Sin fugas futuras. Esto le brinda una estimación honesta de cómo funcionará el modelo cuando se implemente.

Ventana en expansión utiliza todos los datos históricos para el entrenamiento (la ventana crece). Ventana deslizante utiliza una ventana de entrenamiento de tamaño fijo (ventana deslizante). Utilice la expansión cuando crea que los datos más antiguos aún son relevantes. Utilice el deslizamiento cuando el mundo cambie y los datos antiguos duelan.

ARIMA Intuición

ARIMA es el modelo clásico de series temporales. Tiene tres componentes:

  • AR (Autoregresivo): Predecir a partir de valores pasados. AR(p) utiliza los últimos valores de p.
  • I (Integrado): Diferenciación para lograr estacionariedad. I(d) aplica d rondas de diferenciación.
  • MA (promedio móvil): Predice a partir de errores de pronóstico anteriores. MA(q) utiliza los últimos q errores.

ARIMA(p, d, q) combina los tres. Usted elige p, d, q según el análisis ACF/PACF o la búsqueda automática (auto-ARIMA).

No implementaremos ARIMA desde cero; requiere una optimización numérica que está más allá del alcance de esta lección. La idea clave es comprender qué hace cada componente para poder interpretar los resultados de ARIMA y saber cuándo usarlo.

Cuándo usar qué

Enfoque Mejor para Maneja la estacionalidad Maneja características externas
Funciones de retraso + ML Tabular con muchas características externas Con funciones de calendario
ARIMA Serie única univariada, a corto plazo Variante SARIMA No (ARIMAX limitado)
Suavizado exponencial Tendencia simple + estacionalidad Sí (Holt-Winters) No
Profeta Previsión de negocios, vacaciones Sí (términos de Fourier) Limitado
Redes neuronales (LSTM, Transformer) Secuencias largas, muchas series Aprendido

Para la mayoría de los problemas prácticos, las características de retraso + aumento de gradiente son el punto de partida más sólido. Maneja funciones externas de forma natural, no requiere estacionariedad y es fácil de depurar.

Previsión de horizontes y estrategias

El pronóstico de un solo paso predice un paso adelante. La previsión de varios pasos predice varios pasos. Hay tres estrategias:

Recursivo (iterado): Predice un paso adelante, usa la predicción como entrada para el siguiente paso. Simple, pero los errores se acumulan: cada predicción utiliza la predicción anterior, por lo que los errores se acumulan.

Directo: Entrene un modelo separado para cada horizonte. El Modelo 1 predice t+1, el Modelo 5 predice t+5. No hay acumulación de errores, pero cada modelo tiene menos muestras de entrenamiento y no comparten inentrenamiento.

Salida múltiple: Entrene un modelo que genere todos los horizontes simultáneamente. Comparte inentrenamiento entre horizontes, pero requiere un modelo que admita múltiples resultados (o una función de pérdida personalizada).

Para la mayoría de los problemas prácticos, comience con recursivo para horizontes cortos (1 a 5 pasos) y directo para horizontes más largos.

Errores comunes en series temporales

Error Por qué sucede Cómo solucionarlo
División aleatoria de tren/prueba Hábito del ML estándar Utilice el avance o la división temporal
Uso de funciones futuras Característica en el momento t incluida por error Audite cada característica para la alineación temporal
Sobreadaptación a la estacionalidad Modelo memoriza patrones de calendario Mantenga un ciclo estacional completo en el conjunto de prueba
Ignorar los cambios de escala Los ingresos se duplican pero los patrones se mantienen Cambio porcentual del modelo en lugar de absoluto
Demasiadas funciones de retraso "Más historia es mejor" Utilice ACF para determinar retrasos relevantes
Sin diferenciar "El modelo lo resolverá" Los modelos de árbol manejan las tendencias; los modelos lineales necesitan estacionariedad

Constrúyelo

El código en code/time_series.py implementa los componentes básicos desde cero.

Creador de funciones de retraso

def make_lag_features(series, n_lags):
    n = len(series)
    X = np.full((n, n_lags), np.nan)
    for lag in range(1, n_lags + 1):
        X[lag:, lag - 1] = series[:-lag]
    valid = ~np.isnan(X).any(axis=1)
    return X[valid], series[valid]

Esto convierte una serie 1D en una matriz de características donde cada fila tiene los últimos valores n_lags como características y el valor actual como objetivo.

Validación cruzada avanzando

def walk_forward_split(n_samples, n_splits=5, min_train=50):
    assert min_train < n_samples, "min_train must be less than n_samples"
    step = max(1, (n_samples - min_train) // n_splits)
    for i in range(n_splits):
        train_end = min_train + i * step
        test_end = min(train_end + step, n_samples)
        if train_end >= n_samples:
            break
        yield slice(0, train_end), slice(train_end, test_end)

Cada división garantiza que los datos de entrenamiento lleguen estrictamente antes que los datos de prueba. La ventana de entrenamiento se expande con cada pliegue.

Modelo autorregresivo simple

Un modelo AR puro es simplemente una regresión lineal sobre características de retraso:

class SimpleAR:
    def __init__(self, n_lags=5):
        self.n_lags = n_lags
        self.weights = None
        self.bias = None

    def fit(self, series):
        X, y = make_lag_features(series, self.n_lags)
        # Solve via normal equations
        X_b = np.column_stack([np.ones(len(X)), X])
        theta = np.linalg.lstsq(X_b, y, rcond=None)[0]
        self.bias = theta[0]
        self.weights = theta[1:]
        return self

Esto es conceptualmente idéntico a la regresión lineal de la Lección 02, pero se aplica a versiones retrasadas de la misma variable.

Verificación de estacionariedad

El código calcula estadísticas móviles para evaluar visual y numéricamente la estacionariedad:

def check_stationarity(series, window=50):
    rolling_mean = np.array([
        series[max(0, i - window):i].mean()
        for i in range(1, len(series) + 1)
    ])
    rolling_std = np.array([
        series[max(0, i - window):i].std()
        for i in range(1, len(series) + 1)
    ])
    return rolling_mean, rolling_std

Si la media móvil se desplaza o la estándar móvil cambia, la serie no es estacionaria. Aplique la diferenciación y verifique nuevamente.

El código también verifica la estacionariedad comparando la primera mitad y la segunda mitad de la serie. Si las medias difieren en más de la mitad de una desviación estándar o el índice de varianza excede 2x, la serie se marca como no estacionaria.

Autocorrelación

def autocorrelation(series, max_lag=20):
    n = len(series)
    mean = series.mean()
    var = series.var()
    acf = np.zeros(max_lag + 1)
    for k in range(max_lag + 1):
        cov = np.mean((series[:n-k] - mean) * (series[k:] - mean))
        acf[k] = cov / var if var > 0 else 0
    return acf

Úsalo

Con sklearn, utilizas funciones de retraso directamente con cualquier regresor:

from sklearn.linear_model import Ridge
from sklearn.ensemble import GradientBoostingRegressor

X, y = make_lag_features(series, n_lags=10)

for train_idx, test_idx in walk_forward_split(len(X)):
    model = Ridge(alpha=1.0)
    model.fit(X[train_idx], y[train_idx])
    predictions = model.predict(X[test_idx])

Para ARIMA, utilice modelos de estadísticas:

from statsmodels.tsa.arima.model import ARIMA

model = ARIMA(train_series, order=(5, 1, 2))
fitted = model.fit()
forecast = fitted.forecast(steps=30)

El código en time_series.py demuestra ambos enfoques y los compara mediante validación directa.

aprender TimeSeriesSplit

sklearn proporciona TimeSeriesSplit que implementa la validación directa:

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_index, test_index in tscv.split(X):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]
    model.fit(X_train, y_train)
    score = model.score(X_test, y_test)

Esto es equivalente a nuestro walk_forward_split desde cero pero está integrado en el marco de validación cruzada de sklearn. Puedes usarlo con cross_val_score:

from sklearn.model_selection import cross_val_score

scores = cross_val_score(model, X, y, cv=TimeSeriesSplit(n_splits=5))
print(f"Mean score: {scores.mean():.4f} +/- {scores.std():.4f}")

Métricas de evaluación

El pronóstico de series de tiempo utiliza métricas de regresión, pero con un contexto temporal:

  • MAE (Error absoluto medio): Promedio de |y_true - y_pred|. Fácil de interpretar en unidades originales. "En promedio, las predicciones están equivocadas en 3,2 grados".
  • RMSE (Error cuadrático medio): Raíz cuadrada del error cuadrático medio. Penaliza los grandes errores más que MAE. Úselo cuando los errores grandes sean peores que muchos errores pequeños.
  • MAPE (Error porcentual absoluto medio): Promedio de |error / valor_verdadero| * 100. Independiente de la escala, útil para comparar diferentes series. Pero indefinido cuando los valores verdaderos son cero.
  • Comparación ingenua de líneas de base: Compare siempre con líneas de base simples. La línea de base ingenua estacional predice el valor de hace un período (ayer, la semana pasada). Si su modelo no puede vencer a los ingenuos, algo anda mal.

Funciones rodantes

El código demuestra cómo agregar estadísticas continuas (media, estándar, mínima, máxima en períodos de 7 y 14 días) a las funciones de retraso. Estos brindan al modelo inentrenamiento sobre las tendencias recientes y la volatilidad que las características de rezago por sí solas no capturan.

Por ejemplo, si la media móvil aumenta, sugiere una tendencia ascendente. Si el estándar móvil está aumentando, sugiere una volatilidad creciente. Estos son los tipos de patrones de los que los modelos basados ​​en árboles pueden aprender, pero los modelos lineales no.

Envíalo

Esta lección produce:

  • outputs/prompt-time-series-advisor.md: un mensaje para encuadrar problemas de series temporales
  • code/time_series.py -- funciones de retraso, validación anticipada, modelo AR, comprobaciones de estacionariedad

Líneas de base que debes superar

Antes de construir cualquier modelo, establezca líneas de base:

  1. Último valor (persistencia). Predice que mañana será igual que hoy. Para muchas series, esto es sorprendentemente difícil de superar.
  2. Ingenuo estacional. Predice que hoy será el mismo día de la semana pasada (o del año pasado). Si su modelo no puede superar esto, no ha aprendido ningún patrón útil más allá de la estacionalidad.
  3. Promedio móvil. Predice el promedio de los últimos k valores. Suaviza el ruido pero no puede capturar cambios repentinos.

Si su sofisticado modelo de ML pierde frente a la base ingenua estacional, tiene un error. Lo más común es: fugas futuras de funciones, método de evaluación incorrecto o la serie es verdaderamente aleatoria e impredecible.

Consejos prácticos

  1. Empiece por trazar. Antes de cualquier modelado, trace la serie sin procesar. Busque tendencias, estacionalidad, valores atípicos, rupturas estructurales (cambios repentinos de comportamiento). Una inspección visual de 30 segundos a menudo proporciona más de una hora de análisis automatizado.

  2. Primero la diferencia, después el modelo. Si la serie tiene una tendencia clara, diferénciala antes de crear características de retraso. Los modelos basados ​​en árboles pueden manejar tendencias, pero los modelos lineales no, y diferenciar nunca está de más.

  3. Mantenga al menos un ciclo estacional completo. Si tiene estacionalidad semanal, su equipo de prueba necesita al menos una semana completa. Si es mensual, al menos un mes completo. De lo contrario, no se puede evaluar si el modelo captó el patrón estacional.

  4. Monitor en producción. Los modelos de series temporales se degradan con el tiempo a medida que el mundo cambia. Realice un seguimiento de los errores de predicción de forma continua. Cuando los errores comiencen a aumentar, vuelva a entrenar el modelo con datos recientes.

  5. Cuidado con los cambios de régimen. Un modelo entrenado con datos prepandémicos no predecirá el comportamiento pospandémico. Incluya indicadores de cambios de régimen conocidos como características o utilice una ventana deslizante que olvide datos antiguos.

  6. Series asimétricas de transentrenamiento logarítmica. Los ingresos, los precios y los recuentos suelen estar asimétricos a la derecha. Tomar el registro estabiliza la varianza y hace que los patrones multiplicativos sean aditivos, algo que los modelos lineales pueden manejar. Pronosticar en el espacio logarítmico y luego exponenciar para volver a las unidades originales.

Ejercicios

  1. Experimento de estacionariedad. Genera una serie con una tendencia lineal. Verifique la estacionariedad con estadísticas móviles. Aplicar la primera diferenciación. Compruébalo de nuevo. ¿Cuántas rondas de diferenciación se necesitan para obtener una tendencia cuadrática?

  2. Selección de retardo. Calcule el ACF en una serie estacional (período=7). ¿Qué rezagos tienen la mayor autocorrelación? Cree funciones de retraso utilizando solo esos retrasos (no retrasos consecutivos). ¿Mejora la precisión en comparación con el uso de retrasos del 1 al 7?

  3. Avance versus división aleatoria. Entrene una regresión Ridge en características de retraso. Evalúe con división aleatoria 80/20 y con validación directa. ¿Cuánto sobreestima el rendimiento la división aleatoria?

  4. Ingeniería de características. Agregue funciones de media móvil (ventana = 7), estándar móvil (ventana = 7) y día de la semana a las funciones de retraso. Compare la precisión con y sin estos extras mediante la validación directa.

  5. Pronóstico de varios pasos. Modifique el modelo AR para predecir 5 pasos adelante en lugar de 1. Compare dos estrategias: (a) predecir un paso, usar la predicción como entrada para el siguiente paso (recursivo) y (b) entrenar modelos separados para cada horizonte (directo). ¿Cuál es más preciso?

Términos clave

Término Lo que dice la gente Lo que realmente significa
Estacionariedad "Las estadísticas no cambian con el tiempo" Una serie cuya estructura de media, varianza y autocorrelación son constantes en el tiempo
Diferenciación "Restar valores consecutivos" Calcular y[t] - y[t-1] para eliminar tendencias y lograr estacionariedad
Autocorrelación (ACF) "Cómo se correlaciona una serie consigo misma" La correlación entre una serie temporal y una copia rezagada de sí misma, en función del rezago
Autocorrelación parcial (PACF) "Sólo correlación directa" Autocorrelación en el rezago k después de eliminar el efecto de todos los rezagos más cortos
Funciones de retraso "Valores pasados ​​como entradas" Usando y[t-1], y[t-2], ..., y[t-k] como características para predecir y[t]
Validación directa "Validación cruzada respetuosa del tiempo" Evaluación donde los datos de entrenamiento siempre preceden cronológicamente a los datos de prueba
ARIMA "El modelo clásico de series temporales" Media móvil integrada autorregresiva: combina valores pasados ​​(AR), diferenciación (I) y errores pasados ​​(MA)
Estacionalidad "Patrones de calendario repetidos" Ciclos regulares y predecibles en una serie temporal vinculada a períodos del calendario (diario, semanal, anual)
Tendencia "La dirección a largo plazo" Un aumento o disminución persistente del nivel de la serie a lo largo del tiempo
Ventana desplegable "Usar todo el historial" Validación directa donde el conjunto de entrenamiento crece con cada pliegue
Ventana corredera "Historial de tamaño fijo" Validación directa donde el conjunto de entrenamiento es una ventana de longitud fija que se desliza hacia adelante

Lectura adicional

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).