MAT281 - Laboratorio N°18: Analisis y Pronostico de Series Temporales¶
Objetivos del laboratorio¶
- Explorar una serie temporal e identificar tendencia y estacionalidad.
- Descomponer una serie en sus componentes.
- Evaluar la estacionariedad con la prueba ADF.
- Construir caracteristicas de calendario y lags para un enfoque ML.
- Generar y evaluar pronosticos a futuro.
Instrucciones¶
Lea con atencion cada problema antes de resolverlo. Reemplace cada celda que contiene # FIXME con su propia solucion y, cuando se solicite, responda las preguntas en celdas de texto.
Nota: Puede apoyarse en asistentes virtuales (ChatGPT, Gemini, Claude) o en el autocompletado de Colab, pero asegurese de entender cada linea de codigo que entregue.
Requisito:
# !pip install statsmodels
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="whitegrid")
Dataset: ventas mensuales¶
Usaremos company_sales_data.csv, que contiene las ventas y ganancias mensuales
de una empresa. Trataremos total_profit como una serie temporal indexada por
mes.
df = pd.read_csv("https://raw.githubusercontent.com/fralfaro/MAT281/main/docs/labs/data/company_sales_data.csv")
df.head()
Problema 01 — Exploracion de la serie¶
Tu tarea:
- Crea un indice temporal mensual (por ejemplo, fechas a partir de
month_number) y grafica la serietotal_profit. - Describe la serie: ¿tiene tendencia? ¿se aprecia estacionalidad?
- Calcula y grafica una media movil de 3 meses.
# FIXME
Respuesta (Problema 01): (escribe aqui)
Problema 02 — Descomposicion¶
Tu tarea:
- Aplica
seasonal_decompose(destatsmodels) a la serie. - Grafica las componentes: tendencia, estacionalidad y residuo.
- Pregunta: ¿que componente domina en estos datos?
Nota: con pocos meses, usa un
periodrazonable (p. ej. 3 o 4) solo con fines ilustrativos.
from statsmodels.tsa.seasonal import seasonal_decompose
# FIXME
Problema 03 — Estacionariedad (ADF)¶
Una serie es estacionaria si sus propiedades (media, varianza) no cambian en el tiempo. Muchos modelos lo requieren.
Tu tarea:
- Aplica la prueba de Dickey-Fuller aumentada (
adfuller) a la serie. - Interpreta el valor-p: ¿la serie es estacionaria?
- Si no lo es, aplica una diferenciacion (
.diff()) y vuelve a probar.
from statsmodels.tsa.stattools import adfuller
# FIXME
Respuesta (Problema 03): (escribe aqui)
Problema 04 — Enfoque ML: features de calendario y lags¶
Tu tarea:
- Construye un DataFrame de caracteristicas con: el numero de mes y al menos un
lag (
total_profitdel mes anterior,.shift(1)). - Entrena un modelo simple (p. ej.
LinearRegressionoRandomForestRegressor) para predecirtotal_profit. - Evalua el error sobre los ultimos meses (split temporal, sin mezclar el orden).
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# FIXME
Problema 05 — Pronostico a futuro¶
Tu tarea:
- Usa tu modelo (o un
seasonal_decompose/media movil) para pronosticar los proximos 3 meses. - Grafica la serie historica junto al pronostico.
- Pregunta: ¿que limitaciones tiene pronosticar con tan pocos datos historicos?
# FIXME
Respuesta (Problema 05): (escribe aqui)