Quant500 Academy

5. Media móvil y componentes de una serie temporal

Nivel 8: Series Temporales - Estacionariedad

El suavizado por media móvil es una técnica ingenua y eficaz en predicción de series temporales. Puede usarse para preparar datos, para ingeniería de características e incluso directamente para hacer predicciones. Suavizar consiste en aplicar una técnica que elimine la variación de grano fino entre instantes consecutivos, con la esperanza de quitar ruido y exponer mejor la señal de los procesos causales subyacentes.

# media móvil de cola (usa solo el pasado)
rolling = df.rolling(window=3)
rolling_mean = rolling.mean()
rolling_mean.head(10)

# comparar original y transformada
df[-100:].plot()
rolling_mean[-100:].plot(color='red')

Es una media móvil de cola: la media de la fila t se calcula con t-2, t-1 y t. Ese detalle importa porque existe también la media móvil centrada, que usa valores futuros y por tanto solo sirve para análisis descriptivo, nunca como característica de un modelo predictivo. Las dos primeras filas salen nulas: hasta la tercera observación no hay tres valores que promediar.

La media móvil como predicción. El valor de la media móvil puede usarse directamente para hacer predicciones. Es un modelo ingenuo y asume que los componentes de tendencia y estacionalidad ya se han eliminado o ajustado. Se presta muy bien a un esquema walk-forward: según llegan observaciones nuevas (por ejemplo, cada día), el modelo se actualiza y se hace una predicción para el día siguiente.

X = df.values
window = 3
history = [X[i] for i in range(window)]
test = [X[i] for i in range(window, len(X))]
predictions = []

# avanzar hacia delante sobre los instantes del conjunto de prueba
for t in range(len(test)):
    length = len(history)
    yhat = np.mean([history[i] for i in range(length - window, length)])
    obs = test[t]
    predictions.append(yhat)
    history.append(obs)

rmse = np.sqrt(mean_squared_error(test, predictions))
print('RMSE: %.3f' % rmse)

plt.plot(test)
plt.plot(predictions, color='red')
plt.show()

plt.plot(test[:100])          # zoom
plt.plot(predictions[:100], color='red')
plt.show()

El bucle es la esencia del walk-forward: se predice con lo que se sabe, se observa el valor real, se añade al historial y solo entonces se pasa al instante siguiente. En ningún momento se usa información futura. Al hacer zoom verás que la línea roja va sistemáticamente por detrás de la azul: cualquier suavizado introduce retraso, y ese retraso es exactamente el precio que se paga por reducir el ruido.

Componentes de una serie temporal. Una abstracción útil para elegir métodos de predicción es descomponer la serie en componentes sistemáticos y no sistemáticos.

Se considera que una serie consta de tres componentes sistemáticos y uno no sistemático:

Nuestra serie puede contener tendencia, es decir, un aumento o descenso continuado a lo largo del tiempo, y puede haber ventaja en identificarla, modelarla e incluso eliminarla. También puede contener un componente estacional, un ciclo que se repite mensual o anualmente. Ese ciclo repetitivo puede oscurecer la señal que queremos modelar o, al contrario, aportar una señal fuerte a nuestros modelos predictivos. Hay muchos tipos de estacionalidad: hora del día, diaria, semanal, mensual, anual. Determinar si existe estacionalidad es en parte subjetivo, y el enfoque más simple es representar los datos y revisarlos a distintas escalas, quizá añadiendo líneas de tendencia.

Una serie a la que se le ha eliminado el componente estacional se llama estacionaria en estacionalidad. Si el conjunto de datos no tiene tendencia, o hemos conseguido eliminarla, se dice que es estacionaria en tendencia.

El resto de Quant500

Lo que estás aprendiendo, aplicado al índice todos los días:

La cartera del modelo, cada semana en tu correo

Cada sábado, su semana en un minuto: cómo fue, lo mejor y lo peor, y qué directivos compraron con su dinero. Y el día que el modelo se rehace, qué entra y qué sale. Es una simulación, no un consejo. Como mucho un correo a la semana, sin publicidad y sin cuenta; te das de baja con un clic. Lo hace una persona: Pol Gracia.

Cartera modelo con resultados simulados, no una recomendación personalizada. Tu correo se usa solo para esto: privacidad.

Detrás de la Academia y del resto de Quant500 hay una sola persona: Pol Gracia Serrahima.