Menu iconMenu icon
Fundamentos de Ingeniería de Datos

Proyecto 2: Pronóstico de Series Temporales con Ingeniería de Características

1.1 Introducción al Pronóstico de Series Temporales con Ingeniería de Características

En este proyecto, nos embarcamos en una exploración de una de las aplicaciones más fascinantes y prácticas del machine learning: el pronóstico de series temporales. Los datos de series temporales están presentes en numerosos aspectos de nuestro mundo, desde las fluctuaciones en los mercados financieros y el flujo de las cifras de ventas hasta los patrones cambiantes del clima y más allá. La capacidad de pronosticar datos de series temporales de manera precisa permite a las empresas tomar decisiones bien informadas sobre eventos futuros, lo que les permite optimizar sus recursos, mitigar riesgos potenciales y planificar estratégicamente para lo que viene.

En esencia, el pronóstico de series temporales implica analizar patrones históricos de datos para predecir tendencias y valores futuros. Esta capacidad predictiva es invaluable en diversas industrias y campos, ofreciendo conocimientos que pueden impulsar la toma de decisiones estratégicas y la eficiencia operativa. Ya sea un minorista anticipando la demanda de productos, un analista financiero proyectando tendencias de mercado, o un meteorólogo prediciendo patrones climáticos, el pronóstico de series temporales proporciona una herramienta poderosa para navegar por las complejidades de un mundo en constante cambio.

Este proyecto se adentrará en el ámbito de los pronósticos, con un enfoque particular en aprovechar la ingeniería de características para mejorar el rendimiento del modelo. Aunque abordaremos métodos de pronóstico tradicionales como ARIMA (Media Móvil Integrada Autoregresiva) y Suavización Exponencial, nuestro énfasis principal será explorar cómo las técnicas avanzadas de ingeniería de características pueden mejorar significativamente las predicciones de series temporales. Investigaremos cómo estas características creadas pueden utilizarse para potenciar el rendimiento de modelos sofisticados de machine learning, incluidos pero no limitados a Random ForestXGBoost y Gradient Boosting Machines (GBM).

Al combinar el poder de la ingeniería de características con estos algoritmos avanzados de machine learning, aspiramos a desbloquear nuevos niveles de precisión y comprensión en el pronóstico de series temporales. Este enfoque no solo nos permite capturar patrones y relaciones complejas dentro de los datos, sino que también proporciona un marco flexible que puede adaptarse a diversos tipos de datos de series temporales en diferentes ámbitos.

En el pronóstico de series temporales, el objetivo es predecir valores futuros basados en datos históricos. Los datos de series temporales son únicos porque el orden de los puntos de datos es crucial, ya que cada punto de datos generalmente depende de puntos anteriores. Esta dependencia hace que el pronóstico sea una tarea desafiante, pero también rica en oportunidades para descubrir patrones ocultos.

Para aprovechar al máximo los datos de series temporales, a menudo es necesario crear nuevas características que ayuden a los modelos a capturar mejor estas dependencias temporales. En este proyecto, vamos a:

  1. Explorar características basadas en el tiempo, como día de la semanames, o características de retraso que reflejen valores previos.
  2. Discutir el uso de estadísticas móviles para capturar tendencias y estacionalidad.
  3. Trabajar con diferentes tipos de técnicas de eliminación de tendencia y transformaciones para hacer que la serie temporal sea más estacionaria.

Usaremos un conjunto de datos del mundo real, como datos de ventas diarias, para pronosticar ventas futuras y demostrar cómo la ingeniería de características puede mejorar la precisión predictiva del modelo.

1.1.1 Características de Retraso para el Pronóstico de Series Temporales

Una de las técnicas fundamentales en el pronóstico de series temporales es la creación de características de retraso. Estas características se derivan de la serie temporal original al desplazar los puntos de datos hacia atrás en el tiempo. Este desplazamiento permite que el modelo incorpore información histórica al hacer predicciones para puntos actuales o futuros. La cantidad de pasos en el tiempo que se desplaza puede variar, creando múltiples características de retraso que capturan diferentes perspectivas históricas.

Las características de retraso son particularmente poderosas porque permiten que el modelo capture la autocorrelación, que es la relación entre una variable y sus valores pasados. Esto es crucial en el análisis de series temporales, donde los patrones suelen repetirse o evolucionar con el tiempo. Por ejemplo, en los mercados financieros, los precios de las acciones hoy podrían estar influenciados por sus valores de ayer, de la semana pasada o incluso del mes pasado. Al crear características de retraso, proporcionamos al modelo este valioso contexto histórico.

Por qué son importantes las Características de Retraso

La importancia de las características de retraso proviene de la naturaleza inherente de muchos problemas de series temporales. En estos escenarios, el valor actual de la variable objetivo suele depender de sus valores pasados, un concepto conocido como dependencia temporal. Esta dependencia puede manifestarse de varias formas:

  • Efectos a corto plazo: Los valores recientes del pasado pueden tener una fuerte influencia en el valor actual. Por ejemplo, el número de productos vendidos hoy probablemente esté influenciado por las ventas de los últimos días.
  • Patrones estacionales: En muchas industrias, existen patrones recurrentes ligados a períodos de tiempo específicos. Las ventas minoristas, por ejemplo, suelen aumentar durante las festividades, y este patrón se repite anualmente.
  • Tendencias a largo plazo: Algunas series temporales muestran cambios graduales en períodos prolongados. Los indicadores económicos, por ejemplo, pueden mostrar tendencias de varios años que las características de retraso pueden ayudar a capturar.

Al incorporar características de retraso en nuestros modelos, les proporcionamos un contexto histórico rico. Este contexto permite que los modelos aprendan y aprovechen estas dependencias temporales, lo que potencialmente conduce a predicciones más precisas y robustas. Además, las características de retraso pueden ayudar a capturar patrones complejos que pueden no ser evidentes de inmediato en los datos de series temporales sin procesar.

Vale la pena señalar que el número óptimo y el rango de características de retraso pueden variar según el problema específico y el conjunto de datos. La experimentación y el conocimiento del dominio juegan un papel crucial en la determinación de la configuración de características de retraso más efectiva para una tarea de pronóstico determinada.

Ejemplo: Creación de Características de Retraso

Comencemos creando características de retraso en un conjunto de datos de ventas. Imaginemos que tenemos un conjunto de datos de cifras de ventas diarias y queremos pronosticar ventas futuras utilizando puntos de datos pasados.

import pandas as pd

# Sample data: daily sales figures
data = {'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
        'Sales': [100, 120, 130, 150, 170, 160, 155, 180, 190, 210]}

df = pd.DataFrame(data)

# Set the Date column as the index
df.set_index('Date', inplace=True)

# Create lag features for the previous 1, 2, and 3 days
df['Sales_Lag1'] = df['Sales'].shift(1)
df['Sales_Lag2'] = df['Sales'].shift(2)
df['Sales_Lag3'] = df['Sales'].shift(3)

# View the dataframe with lag features
print(df)

En este ejemplo:

  • Primero, se importa la biblioteca pandas, esencial para la manipulación de datos en Python.
  • Se crea un conjunto de datos de muestra con 10 días de datos de ventas, comenzando el 1 de enero de 2022.
  • Los datos se convierten en un DataFrame de pandas, con la columna 'Date' configurada como índice.
  • El núcleo de este código es la creación de características de retraso. Se generan tres nuevas columnas:
    • 'Sales_Lag1': Contiene el valor de ventas de hace 1 día
    • 'Sales_Lag2': Contiene el valor de ventas de hace 2 días
    • 'Sales_Lag3': Contiene el valor de ventas de hace 3 días

Estas características de retraso se crean utilizando la función shift(), que mueve los datos hacia atrás en el tiempo por el número de períodos especificado.

Finalmente, el código imprime el DataFrame para mostrar los datos de ventas originales junto con las nuevas características de retraso.

Este enfoque es crucial en el pronóstico de series temporales, ya que permite que el modelo aprenda de valores pasados, capturando dependencias temporales en los datos.

1.1.2 Tratamiento de Valores Faltantes en Características de Retraso

Al crear características de retraso, las primeras filas del conjunto de datos inevitablemente contendrán valores faltantes debido a la falta de datos históricos. Este es un desafío común en el análisis de series temporales que requiere una consideración cuidadosa. Existen varias estrategias para abordar este problema, cada una con sus propias ventajas y posibles desventajas:

  1. Eliminar las filas con valores faltantes: Este enfoque directo consiste en eliminar las filas que contienen valores de retraso faltantes. Aunque es sencillo de implementar, puede llevar a una pérdida de datos, reduciendo potencialmente el tamaño del conjunto de datos y posiblemente introduciendo sesgo si los datos faltantes no están distribuidos aleatoriamente. Este método es más adecuado cuando se cuenta con un conjunto de datos grande y se puede permitir perder algunas observaciones iniciales.
  2. Imputar los valores faltantes: Este método implica rellenar los valores faltantes usando varias técnicas. Algunas estrategias comunes de imputación incluyen:
    • Relleno hacia adelante (forward fill): Propaga la última observación válida hacia adelante para llenar los huecos. Esto asume que los valores faltantes serían similares al valor conocido más reciente.
    • Relleno hacia atrás (backward fill): Usa valores futuros conocidos para llenar valores faltantes del pasado. Esto puede ser útil cuando tienes razones para creer que los valores pasados habrían sido similares a los futuros.
    • Imputación por media/mediana: Reemplaza los valores faltantes con el promedio o la mediana de los datos disponibles. Funciona bien cuando los datos están distribuidos normalmente y no tienen fuertes tendencias o estacionalidad.
    • Interpolación: Estima valores faltantes basándose en los valores conocidos circundantes. Puede ser interpolación lineal, polinómica o spline, dependiendo de la naturaleza de los datos.
  3. Usar un modelo que pueda manejar valores faltantes: Algunos modelos avanzados de machine learning, como ciertas implementaciones de máquinas de boosting de gradiente (por ejemplo, LightGBM, CatBoost), pueden manejar valores faltantes sin necesidad de imputación explícita. Estos modelos suelen tratar los valores faltantes como una categoría separada y pueden aprender patrones asociados con la ausencia de datos.
  4. Crear características separadas para la falta de datos: Este enfoque implica crear variables indicadoras binarias que señalen si una característica de retraso particular está faltante. Esto permite que el modelo aprenda patrones asociados con la presencia o ausencia de datos históricos. Puede ser particularmente útil cuando la falta de datos en sí misma contiene información sobre el proceso subyacente.
  5. Usar conocimientos específicos del dominio: En algunos casos, podrías tener información específica del dominio que guíe cómo manejar los valores faltantes. Por ejemplo, en un pronóstico de ventas minoristas, podrías saber que tu negocio estaba cerrado ciertos días, lo que explica los datos faltantes.

La elección del método depende de varios factores, incluyendo el tamaño del conjunto de datos, la naturaleza de la serie temporal, los requisitos específicos de la tarea de pronóstico y las suposiciones que estás dispuesto a hacer sobre los datos faltantes. A menudo es beneficioso experimentar con múltiples enfoques y evaluar su impacto en el rendimiento del modelo utilizando técnicas de validación cruzada específicamente diseñadas para datos de series temporales, como la validación cruzada para series temporales o la validación de ventana móvil.

Recuerda que el manejo de valores faltantes en características de retraso es solo un aspecto de la ingeniería de características para el pronóstico de series temporales. Otras consideraciones importantes incluyen la creación de características que capturen la estacionalidad, tendencias y factores externos que puedan influir en tu serie temporal. Al abordar cuidadosamente estos problemas y crear características informativas, puedes mejorar significativamente el poder predictivo de tus modelos de series temporales.

# Drop rows with missing values
df.dropna(inplace=True)

# View the cleaned dataframe
print(df)

Desglosemos el ejemplo:

  1. df.dropna(inplace=True): Esta línea elimina cualquier fila en el DataFrame que contenga valores faltantes (NaN). El parámetro inplace=True indica que la operación se realiza en el DataFrame original en lugar de crear una copia.
  2. print(df): Esta línea muestra el DataFrame limpio, mostrando el resultado después de eliminar las filas con valores faltantes.

Es importante señalar que este método de manejo de valores faltantes eliminando filas es solo un enfoque. Como se mencionó anteriormente, para conjuntos de datos más grandes, podrías preferir otras técnicas, como la imputación usando el relleno hacia adelante u otros métodos para conservar más datos.

1.1.3 Cómo Mejoran el Rendimiento las Características de Retraso

Al incorporar características de retraso en nuestro modelo, mejoramos su capacidad para aprovechar los datos históricos, lo que puede llevar a mejoras sustanciales en la precisión de las predicciones. Estas características proporcionan al modelo un contexto más rico de eventos recientes, permitiéndole identificar y aprender de patrones temporales que pueden no ser inmediatamente evidentes en los datos originales. Modelos como Random Forest o Gradient Boosting son especialmente competentes en utilizar estas características adicionales, ya que poseen la capacidad de identificar patrones intrincados e interacciones complejas entre la variable objetivo y sus valores históricos.

La inclusión de características de retraso permite que estos modelos capturen varios fenómenos dependientes del tiempo, tales como:

  • Fluctuaciones a corto plazo: Al examinar valores recientes, el modelo puede identificar y tener en cuenta cambios rápidos o desviaciones temporales en la variable objetivo.
  • Patrones cíclicos: Las características de retraso pueden ayudar a descubrir patrones recurrentes que ocurren en intervalos regulares, los cuales podrían ser difíciles de detectar sin el contexto histórico.
  • Persistencia de tendencias: El modelo puede aprender cómo las tendencias en la variable objetivo tienden a persistir en el tiempo, permitiendo predicciones más precisas de movimientos futuros.

Además, la flexibilidad de estos algoritmos de aprendizaje automático avanzados les permite determinar automáticamente la importancia relativa de diferentes características de retraso, aprendiendo efectivamente qué puntos históricos son más relevantes para predecir valores futuros. Este enfoque basado en datos para la selección de características suele superar los métodos tradicionales de series temporales que dependen de estructuras fijas y predefinidas.

1.1 Introducción al Pronóstico de Series Temporales con Ingeniería de Características

En este proyecto, nos embarcamos en una exploración de una de las aplicaciones más fascinantes y prácticas del machine learning: el pronóstico de series temporales. Los datos de series temporales están presentes en numerosos aspectos de nuestro mundo, desde las fluctuaciones en los mercados financieros y el flujo de las cifras de ventas hasta los patrones cambiantes del clima y más allá. La capacidad de pronosticar datos de series temporales de manera precisa permite a las empresas tomar decisiones bien informadas sobre eventos futuros, lo que les permite optimizar sus recursos, mitigar riesgos potenciales y planificar estratégicamente para lo que viene.

En esencia, el pronóstico de series temporales implica analizar patrones históricos de datos para predecir tendencias y valores futuros. Esta capacidad predictiva es invaluable en diversas industrias y campos, ofreciendo conocimientos que pueden impulsar la toma de decisiones estratégicas y la eficiencia operativa. Ya sea un minorista anticipando la demanda de productos, un analista financiero proyectando tendencias de mercado, o un meteorólogo prediciendo patrones climáticos, el pronóstico de series temporales proporciona una herramienta poderosa para navegar por las complejidades de un mundo en constante cambio.

Este proyecto se adentrará en el ámbito de los pronósticos, con un enfoque particular en aprovechar la ingeniería de características para mejorar el rendimiento del modelo. Aunque abordaremos métodos de pronóstico tradicionales como ARIMA (Media Móvil Integrada Autoregresiva) y Suavización Exponencial, nuestro énfasis principal será explorar cómo las técnicas avanzadas de ingeniería de características pueden mejorar significativamente las predicciones de series temporales. Investigaremos cómo estas características creadas pueden utilizarse para potenciar el rendimiento de modelos sofisticados de machine learning, incluidos pero no limitados a Random ForestXGBoost y Gradient Boosting Machines (GBM).

Al combinar el poder de la ingeniería de características con estos algoritmos avanzados de machine learning, aspiramos a desbloquear nuevos niveles de precisión y comprensión en el pronóstico de series temporales. Este enfoque no solo nos permite capturar patrones y relaciones complejas dentro de los datos, sino que también proporciona un marco flexible que puede adaptarse a diversos tipos de datos de series temporales en diferentes ámbitos.

En el pronóstico de series temporales, el objetivo es predecir valores futuros basados en datos históricos. Los datos de series temporales son únicos porque el orden de los puntos de datos es crucial, ya que cada punto de datos generalmente depende de puntos anteriores. Esta dependencia hace que el pronóstico sea una tarea desafiante, pero también rica en oportunidades para descubrir patrones ocultos.

Para aprovechar al máximo los datos de series temporales, a menudo es necesario crear nuevas características que ayuden a los modelos a capturar mejor estas dependencias temporales. En este proyecto, vamos a:

  1. Explorar características basadas en el tiempo, como día de la semanames, o características de retraso que reflejen valores previos.
  2. Discutir el uso de estadísticas móviles para capturar tendencias y estacionalidad.
  3. Trabajar con diferentes tipos de técnicas de eliminación de tendencia y transformaciones para hacer que la serie temporal sea más estacionaria.

Usaremos un conjunto de datos del mundo real, como datos de ventas diarias, para pronosticar ventas futuras y demostrar cómo la ingeniería de características puede mejorar la precisión predictiva del modelo.

1.1.1 Características de Retraso para el Pronóstico de Series Temporales

Una de las técnicas fundamentales en el pronóstico de series temporales es la creación de características de retraso. Estas características se derivan de la serie temporal original al desplazar los puntos de datos hacia atrás en el tiempo. Este desplazamiento permite que el modelo incorpore información histórica al hacer predicciones para puntos actuales o futuros. La cantidad de pasos en el tiempo que se desplaza puede variar, creando múltiples características de retraso que capturan diferentes perspectivas históricas.

Las características de retraso son particularmente poderosas porque permiten que el modelo capture la autocorrelación, que es la relación entre una variable y sus valores pasados. Esto es crucial en el análisis de series temporales, donde los patrones suelen repetirse o evolucionar con el tiempo. Por ejemplo, en los mercados financieros, los precios de las acciones hoy podrían estar influenciados por sus valores de ayer, de la semana pasada o incluso del mes pasado. Al crear características de retraso, proporcionamos al modelo este valioso contexto histórico.

Por qué son importantes las Características de Retraso

La importancia de las características de retraso proviene de la naturaleza inherente de muchos problemas de series temporales. En estos escenarios, el valor actual de la variable objetivo suele depender de sus valores pasados, un concepto conocido como dependencia temporal. Esta dependencia puede manifestarse de varias formas:

  • Efectos a corto plazo: Los valores recientes del pasado pueden tener una fuerte influencia en el valor actual. Por ejemplo, el número de productos vendidos hoy probablemente esté influenciado por las ventas de los últimos días.
  • Patrones estacionales: En muchas industrias, existen patrones recurrentes ligados a períodos de tiempo específicos. Las ventas minoristas, por ejemplo, suelen aumentar durante las festividades, y este patrón se repite anualmente.
  • Tendencias a largo plazo: Algunas series temporales muestran cambios graduales en períodos prolongados. Los indicadores económicos, por ejemplo, pueden mostrar tendencias de varios años que las características de retraso pueden ayudar a capturar.

Al incorporar características de retraso en nuestros modelos, les proporcionamos un contexto histórico rico. Este contexto permite que los modelos aprendan y aprovechen estas dependencias temporales, lo que potencialmente conduce a predicciones más precisas y robustas. Además, las características de retraso pueden ayudar a capturar patrones complejos que pueden no ser evidentes de inmediato en los datos de series temporales sin procesar.

Vale la pena señalar que el número óptimo y el rango de características de retraso pueden variar según el problema específico y el conjunto de datos. La experimentación y el conocimiento del dominio juegan un papel crucial en la determinación de la configuración de características de retraso más efectiva para una tarea de pronóstico determinada.

Ejemplo: Creación de Características de Retraso

Comencemos creando características de retraso en un conjunto de datos de ventas. Imaginemos que tenemos un conjunto de datos de cifras de ventas diarias y queremos pronosticar ventas futuras utilizando puntos de datos pasados.

import pandas as pd

# Sample data: daily sales figures
data = {'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
        'Sales': [100, 120, 130, 150, 170, 160, 155, 180, 190, 210]}

df = pd.DataFrame(data)

# Set the Date column as the index
df.set_index('Date', inplace=True)

# Create lag features for the previous 1, 2, and 3 days
df['Sales_Lag1'] = df['Sales'].shift(1)
df['Sales_Lag2'] = df['Sales'].shift(2)
df['Sales_Lag3'] = df['Sales'].shift(3)

# View the dataframe with lag features
print(df)

En este ejemplo:

  • Primero, se importa la biblioteca pandas, esencial para la manipulación de datos en Python.
  • Se crea un conjunto de datos de muestra con 10 días de datos de ventas, comenzando el 1 de enero de 2022.
  • Los datos se convierten en un DataFrame de pandas, con la columna 'Date' configurada como índice.
  • El núcleo de este código es la creación de características de retraso. Se generan tres nuevas columnas:
    • 'Sales_Lag1': Contiene el valor de ventas de hace 1 día
    • 'Sales_Lag2': Contiene el valor de ventas de hace 2 días
    • 'Sales_Lag3': Contiene el valor de ventas de hace 3 días

Estas características de retraso se crean utilizando la función shift(), que mueve los datos hacia atrás en el tiempo por el número de períodos especificado.

Finalmente, el código imprime el DataFrame para mostrar los datos de ventas originales junto con las nuevas características de retraso.

Este enfoque es crucial en el pronóstico de series temporales, ya que permite que el modelo aprenda de valores pasados, capturando dependencias temporales en los datos.

1.1.2 Tratamiento de Valores Faltantes en Características de Retraso

Al crear características de retraso, las primeras filas del conjunto de datos inevitablemente contendrán valores faltantes debido a la falta de datos históricos. Este es un desafío común en el análisis de series temporales que requiere una consideración cuidadosa. Existen varias estrategias para abordar este problema, cada una con sus propias ventajas y posibles desventajas:

  1. Eliminar las filas con valores faltantes: Este enfoque directo consiste en eliminar las filas que contienen valores de retraso faltantes. Aunque es sencillo de implementar, puede llevar a una pérdida de datos, reduciendo potencialmente el tamaño del conjunto de datos y posiblemente introduciendo sesgo si los datos faltantes no están distribuidos aleatoriamente. Este método es más adecuado cuando se cuenta con un conjunto de datos grande y se puede permitir perder algunas observaciones iniciales.
  2. Imputar los valores faltantes: Este método implica rellenar los valores faltantes usando varias técnicas. Algunas estrategias comunes de imputación incluyen:
    • Relleno hacia adelante (forward fill): Propaga la última observación válida hacia adelante para llenar los huecos. Esto asume que los valores faltantes serían similares al valor conocido más reciente.
    • Relleno hacia atrás (backward fill): Usa valores futuros conocidos para llenar valores faltantes del pasado. Esto puede ser útil cuando tienes razones para creer que los valores pasados habrían sido similares a los futuros.
    • Imputación por media/mediana: Reemplaza los valores faltantes con el promedio o la mediana de los datos disponibles. Funciona bien cuando los datos están distribuidos normalmente y no tienen fuertes tendencias o estacionalidad.
    • Interpolación: Estima valores faltantes basándose en los valores conocidos circundantes. Puede ser interpolación lineal, polinómica o spline, dependiendo de la naturaleza de los datos.
  3. Usar un modelo que pueda manejar valores faltantes: Algunos modelos avanzados de machine learning, como ciertas implementaciones de máquinas de boosting de gradiente (por ejemplo, LightGBM, CatBoost), pueden manejar valores faltantes sin necesidad de imputación explícita. Estos modelos suelen tratar los valores faltantes como una categoría separada y pueden aprender patrones asociados con la ausencia de datos.
  4. Crear características separadas para la falta de datos: Este enfoque implica crear variables indicadoras binarias que señalen si una característica de retraso particular está faltante. Esto permite que el modelo aprenda patrones asociados con la presencia o ausencia de datos históricos. Puede ser particularmente útil cuando la falta de datos en sí misma contiene información sobre el proceso subyacente.
  5. Usar conocimientos específicos del dominio: En algunos casos, podrías tener información específica del dominio que guíe cómo manejar los valores faltantes. Por ejemplo, en un pronóstico de ventas minoristas, podrías saber que tu negocio estaba cerrado ciertos días, lo que explica los datos faltantes.

La elección del método depende de varios factores, incluyendo el tamaño del conjunto de datos, la naturaleza de la serie temporal, los requisitos específicos de la tarea de pronóstico y las suposiciones que estás dispuesto a hacer sobre los datos faltantes. A menudo es beneficioso experimentar con múltiples enfoques y evaluar su impacto en el rendimiento del modelo utilizando técnicas de validación cruzada específicamente diseñadas para datos de series temporales, como la validación cruzada para series temporales o la validación de ventana móvil.

Recuerda que el manejo de valores faltantes en características de retraso es solo un aspecto de la ingeniería de características para el pronóstico de series temporales. Otras consideraciones importantes incluyen la creación de características que capturen la estacionalidad, tendencias y factores externos que puedan influir en tu serie temporal. Al abordar cuidadosamente estos problemas y crear características informativas, puedes mejorar significativamente el poder predictivo de tus modelos de series temporales.

# Drop rows with missing values
df.dropna(inplace=True)

# View the cleaned dataframe
print(df)

Desglosemos el ejemplo:

  1. df.dropna(inplace=True): Esta línea elimina cualquier fila en el DataFrame que contenga valores faltantes (NaN). El parámetro inplace=True indica que la operación se realiza en el DataFrame original en lugar de crear una copia.
  2. print(df): Esta línea muestra el DataFrame limpio, mostrando el resultado después de eliminar las filas con valores faltantes.

Es importante señalar que este método de manejo de valores faltantes eliminando filas es solo un enfoque. Como se mencionó anteriormente, para conjuntos de datos más grandes, podrías preferir otras técnicas, como la imputación usando el relleno hacia adelante u otros métodos para conservar más datos.

1.1.3 Cómo Mejoran el Rendimiento las Características de Retraso

Al incorporar características de retraso en nuestro modelo, mejoramos su capacidad para aprovechar los datos históricos, lo que puede llevar a mejoras sustanciales en la precisión de las predicciones. Estas características proporcionan al modelo un contexto más rico de eventos recientes, permitiéndole identificar y aprender de patrones temporales que pueden no ser inmediatamente evidentes en los datos originales. Modelos como Random Forest o Gradient Boosting son especialmente competentes en utilizar estas características adicionales, ya que poseen la capacidad de identificar patrones intrincados e interacciones complejas entre la variable objetivo y sus valores históricos.

La inclusión de características de retraso permite que estos modelos capturen varios fenómenos dependientes del tiempo, tales como:

  • Fluctuaciones a corto plazo: Al examinar valores recientes, el modelo puede identificar y tener en cuenta cambios rápidos o desviaciones temporales en la variable objetivo.
  • Patrones cíclicos: Las características de retraso pueden ayudar a descubrir patrones recurrentes que ocurren en intervalos regulares, los cuales podrían ser difíciles de detectar sin el contexto histórico.
  • Persistencia de tendencias: El modelo puede aprender cómo las tendencias en la variable objetivo tienden a persistir en el tiempo, permitiendo predicciones más precisas de movimientos futuros.

Además, la flexibilidad de estos algoritmos de aprendizaje automático avanzados les permite determinar automáticamente la importancia relativa de diferentes características de retraso, aprendiendo efectivamente qué puntos históricos son más relevantes para predecir valores futuros. Este enfoque basado en datos para la selección de características suele superar los métodos tradicionales de series temporales que dependen de estructuras fijas y predefinidas.

1.1 Introducción al Pronóstico de Series Temporales con Ingeniería de Características

En este proyecto, nos embarcamos en una exploración de una de las aplicaciones más fascinantes y prácticas del machine learning: el pronóstico de series temporales. Los datos de series temporales están presentes en numerosos aspectos de nuestro mundo, desde las fluctuaciones en los mercados financieros y el flujo de las cifras de ventas hasta los patrones cambiantes del clima y más allá. La capacidad de pronosticar datos de series temporales de manera precisa permite a las empresas tomar decisiones bien informadas sobre eventos futuros, lo que les permite optimizar sus recursos, mitigar riesgos potenciales y planificar estratégicamente para lo que viene.

En esencia, el pronóstico de series temporales implica analizar patrones históricos de datos para predecir tendencias y valores futuros. Esta capacidad predictiva es invaluable en diversas industrias y campos, ofreciendo conocimientos que pueden impulsar la toma de decisiones estratégicas y la eficiencia operativa. Ya sea un minorista anticipando la demanda de productos, un analista financiero proyectando tendencias de mercado, o un meteorólogo prediciendo patrones climáticos, el pronóstico de series temporales proporciona una herramienta poderosa para navegar por las complejidades de un mundo en constante cambio.

Este proyecto se adentrará en el ámbito de los pronósticos, con un enfoque particular en aprovechar la ingeniería de características para mejorar el rendimiento del modelo. Aunque abordaremos métodos de pronóstico tradicionales como ARIMA (Media Móvil Integrada Autoregresiva) y Suavización Exponencial, nuestro énfasis principal será explorar cómo las técnicas avanzadas de ingeniería de características pueden mejorar significativamente las predicciones de series temporales. Investigaremos cómo estas características creadas pueden utilizarse para potenciar el rendimiento de modelos sofisticados de machine learning, incluidos pero no limitados a Random ForestXGBoost y Gradient Boosting Machines (GBM).

Al combinar el poder de la ingeniería de características con estos algoritmos avanzados de machine learning, aspiramos a desbloquear nuevos niveles de precisión y comprensión en el pronóstico de series temporales. Este enfoque no solo nos permite capturar patrones y relaciones complejas dentro de los datos, sino que también proporciona un marco flexible que puede adaptarse a diversos tipos de datos de series temporales en diferentes ámbitos.

En el pronóstico de series temporales, el objetivo es predecir valores futuros basados en datos históricos. Los datos de series temporales son únicos porque el orden de los puntos de datos es crucial, ya que cada punto de datos generalmente depende de puntos anteriores. Esta dependencia hace que el pronóstico sea una tarea desafiante, pero también rica en oportunidades para descubrir patrones ocultos.

Para aprovechar al máximo los datos de series temporales, a menudo es necesario crear nuevas características que ayuden a los modelos a capturar mejor estas dependencias temporales. En este proyecto, vamos a:

  1. Explorar características basadas en el tiempo, como día de la semanames, o características de retraso que reflejen valores previos.
  2. Discutir el uso de estadísticas móviles para capturar tendencias y estacionalidad.
  3. Trabajar con diferentes tipos de técnicas de eliminación de tendencia y transformaciones para hacer que la serie temporal sea más estacionaria.

Usaremos un conjunto de datos del mundo real, como datos de ventas diarias, para pronosticar ventas futuras y demostrar cómo la ingeniería de características puede mejorar la precisión predictiva del modelo.

1.1.1 Características de Retraso para el Pronóstico de Series Temporales

Una de las técnicas fundamentales en el pronóstico de series temporales es la creación de características de retraso. Estas características se derivan de la serie temporal original al desplazar los puntos de datos hacia atrás en el tiempo. Este desplazamiento permite que el modelo incorpore información histórica al hacer predicciones para puntos actuales o futuros. La cantidad de pasos en el tiempo que se desplaza puede variar, creando múltiples características de retraso que capturan diferentes perspectivas históricas.

Las características de retraso son particularmente poderosas porque permiten que el modelo capture la autocorrelación, que es la relación entre una variable y sus valores pasados. Esto es crucial en el análisis de series temporales, donde los patrones suelen repetirse o evolucionar con el tiempo. Por ejemplo, en los mercados financieros, los precios de las acciones hoy podrían estar influenciados por sus valores de ayer, de la semana pasada o incluso del mes pasado. Al crear características de retraso, proporcionamos al modelo este valioso contexto histórico.

Por qué son importantes las Características de Retraso

La importancia de las características de retraso proviene de la naturaleza inherente de muchos problemas de series temporales. En estos escenarios, el valor actual de la variable objetivo suele depender de sus valores pasados, un concepto conocido como dependencia temporal. Esta dependencia puede manifestarse de varias formas:

  • Efectos a corto plazo: Los valores recientes del pasado pueden tener una fuerte influencia en el valor actual. Por ejemplo, el número de productos vendidos hoy probablemente esté influenciado por las ventas de los últimos días.
  • Patrones estacionales: En muchas industrias, existen patrones recurrentes ligados a períodos de tiempo específicos. Las ventas minoristas, por ejemplo, suelen aumentar durante las festividades, y este patrón se repite anualmente.
  • Tendencias a largo plazo: Algunas series temporales muestran cambios graduales en períodos prolongados. Los indicadores económicos, por ejemplo, pueden mostrar tendencias de varios años que las características de retraso pueden ayudar a capturar.

Al incorporar características de retraso en nuestros modelos, les proporcionamos un contexto histórico rico. Este contexto permite que los modelos aprendan y aprovechen estas dependencias temporales, lo que potencialmente conduce a predicciones más precisas y robustas. Además, las características de retraso pueden ayudar a capturar patrones complejos que pueden no ser evidentes de inmediato en los datos de series temporales sin procesar.

Vale la pena señalar que el número óptimo y el rango de características de retraso pueden variar según el problema específico y el conjunto de datos. La experimentación y el conocimiento del dominio juegan un papel crucial en la determinación de la configuración de características de retraso más efectiva para una tarea de pronóstico determinada.

Ejemplo: Creación de Características de Retraso

Comencemos creando características de retraso en un conjunto de datos de ventas. Imaginemos que tenemos un conjunto de datos de cifras de ventas diarias y queremos pronosticar ventas futuras utilizando puntos de datos pasados.

import pandas as pd

# Sample data: daily sales figures
data = {'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
        'Sales': [100, 120, 130, 150, 170, 160, 155, 180, 190, 210]}

df = pd.DataFrame(data)

# Set the Date column as the index
df.set_index('Date', inplace=True)

# Create lag features for the previous 1, 2, and 3 days
df['Sales_Lag1'] = df['Sales'].shift(1)
df['Sales_Lag2'] = df['Sales'].shift(2)
df['Sales_Lag3'] = df['Sales'].shift(3)

# View the dataframe with lag features
print(df)

En este ejemplo:

  • Primero, se importa la biblioteca pandas, esencial para la manipulación de datos en Python.
  • Se crea un conjunto de datos de muestra con 10 días de datos de ventas, comenzando el 1 de enero de 2022.
  • Los datos se convierten en un DataFrame de pandas, con la columna 'Date' configurada como índice.
  • El núcleo de este código es la creación de características de retraso. Se generan tres nuevas columnas:
    • 'Sales_Lag1': Contiene el valor de ventas de hace 1 día
    • 'Sales_Lag2': Contiene el valor de ventas de hace 2 días
    • 'Sales_Lag3': Contiene el valor de ventas de hace 3 días

Estas características de retraso se crean utilizando la función shift(), que mueve los datos hacia atrás en el tiempo por el número de períodos especificado.

Finalmente, el código imprime el DataFrame para mostrar los datos de ventas originales junto con las nuevas características de retraso.

Este enfoque es crucial en el pronóstico de series temporales, ya que permite que el modelo aprenda de valores pasados, capturando dependencias temporales en los datos.

1.1.2 Tratamiento de Valores Faltantes en Características de Retraso

Al crear características de retraso, las primeras filas del conjunto de datos inevitablemente contendrán valores faltantes debido a la falta de datos históricos. Este es un desafío común en el análisis de series temporales que requiere una consideración cuidadosa. Existen varias estrategias para abordar este problema, cada una con sus propias ventajas y posibles desventajas:

  1. Eliminar las filas con valores faltantes: Este enfoque directo consiste en eliminar las filas que contienen valores de retraso faltantes. Aunque es sencillo de implementar, puede llevar a una pérdida de datos, reduciendo potencialmente el tamaño del conjunto de datos y posiblemente introduciendo sesgo si los datos faltantes no están distribuidos aleatoriamente. Este método es más adecuado cuando se cuenta con un conjunto de datos grande y se puede permitir perder algunas observaciones iniciales.
  2. Imputar los valores faltantes: Este método implica rellenar los valores faltantes usando varias técnicas. Algunas estrategias comunes de imputación incluyen:
    • Relleno hacia adelante (forward fill): Propaga la última observación válida hacia adelante para llenar los huecos. Esto asume que los valores faltantes serían similares al valor conocido más reciente.
    • Relleno hacia atrás (backward fill): Usa valores futuros conocidos para llenar valores faltantes del pasado. Esto puede ser útil cuando tienes razones para creer que los valores pasados habrían sido similares a los futuros.
    • Imputación por media/mediana: Reemplaza los valores faltantes con el promedio o la mediana de los datos disponibles. Funciona bien cuando los datos están distribuidos normalmente y no tienen fuertes tendencias o estacionalidad.
    • Interpolación: Estima valores faltantes basándose en los valores conocidos circundantes. Puede ser interpolación lineal, polinómica o spline, dependiendo de la naturaleza de los datos.
  3. Usar un modelo que pueda manejar valores faltantes: Algunos modelos avanzados de machine learning, como ciertas implementaciones de máquinas de boosting de gradiente (por ejemplo, LightGBM, CatBoost), pueden manejar valores faltantes sin necesidad de imputación explícita. Estos modelos suelen tratar los valores faltantes como una categoría separada y pueden aprender patrones asociados con la ausencia de datos.
  4. Crear características separadas para la falta de datos: Este enfoque implica crear variables indicadoras binarias que señalen si una característica de retraso particular está faltante. Esto permite que el modelo aprenda patrones asociados con la presencia o ausencia de datos históricos. Puede ser particularmente útil cuando la falta de datos en sí misma contiene información sobre el proceso subyacente.
  5. Usar conocimientos específicos del dominio: En algunos casos, podrías tener información específica del dominio que guíe cómo manejar los valores faltantes. Por ejemplo, en un pronóstico de ventas minoristas, podrías saber que tu negocio estaba cerrado ciertos días, lo que explica los datos faltantes.

La elección del método depende de varios factores, incluyendo el tamaño del conjunto de datos, la naturaleza de la serie temporal, los requisitos específicos de la tarea de pronóstico y las suposiciones que estás dispuesto a hacer sobre los datos faltantes. A menudo es beneficioso experimentar con múltiples enfoques y evaluar su impacto en el rendimiento del modelo utilizando técnicas de validación cruzada específicamente diseñadas para datos de series temporales, como la validación cruzada para series temporales o la validación de ventana móvil.

Recuerda que el manejo de valores faltantes en características de retraso es solo un aspecto de la ingeniería de características para el pronóstico de series temporales. Otras consideraciones importantes incluyen la creación de características que capturen la estacionalidad, tendencias y factores externos que puedan influir en tu serie temporal. Al abordar cuidadosamente estos problemas y crear características informativas, puedes mejorar significativamente el poder predictivo de tus modelos de series temporales.

# Drop rows with missing values
df.dropna(inplace=True)

# View the cleaned dataframe
print(df)

Desglosemos el ejemplo:

  1. df.dropna(inplace=True): Esta línea elimina cualquier fila en el DataFrame que contenga valores faltantes (NaN). El parámetro inplace=True indica que la operación se realiza en el DataFrame original en lugar de crear una copia.
  2. print(df): Esta línea muestra el DataFrame limpio, mostrando el resultado después de eliminar las filas con valores faltantes.

Es importante señalar que este método de manejo de valores faltantes eliminando filas es solo un enfoque. Como se mencionó anteriormente, para conjuntos de datos más grandes, podrías preferir otras técnicas, como la imputación usando el relleno hacia adelante u otros métodos para conservar más datos.

1.1.3 Cómo Mejoran el Rendimiento las Características de Retraso

Al incorporar características de retraso en nuestro modelo, mejoramos su capacidad para aprovechar los datos históricos, lo que puede llevar a mejoras sustanciales en la precisión de las predicciones. Estas características proporcionan al modelo un contexto más rico de eventos recientes, permitiéndole identificar y aprender de patrones temporales que pueden no ser inmediatamente evidentes en los datos originales. Modelos como Random Forest o Gradient Boosting son especialmente competentes en utilizar estas características adicionales, ya que poseen la capacidad de identificar patrones intrincados e interacciones complejas entre la variable objetivo y sus valores históricos.

La inclusión de características de retraso permite que estos modelos capturen varios fenómenos dependientes del tiempo, tales como:

  • Fluctuaciones a corto plazo: Al examinar valores recientes, el modelo puede identificar y tener en cuenta cambios rápidos o desviaciones temporales en la variable objetivo.
  • Patrones cíclicos: Las características de retraso pueden ayudar a descubrir patrones recurrentes que ocurren en intervalos regulares, los cuales podrían ser difíciles de detectar sin el contexto histórico.
  • Persistencia de tendencias: El modelo puede aprender cómo las tendencias en la variable objetivo tienden a persistir en el tiempo, permitiendo predicciones más precisas de movimientos futuros.

Además, la flexibilidad de estos algoritmos de aprendizaje automático avanzados les permite determinar automáticamente la importancia relativa de diferentes características de retraso, aprendiendo efectivamente qué puntos históricos son más relevantes para predecir valores futuros. Este enfoque basado en datos para la selección de características suele superar los métodos tradicionales de series temporales que dependen de estructuras fijas y predefinidas.

1.1 Introducción al Pronóstico de Series Temporales con Ingeniería de Características

En este proyecto, nos embarcamos en una exploración de una de las aplicaciones más fascinantes y prácticas del machine learning: el pronóstico de series temporales. Los datos de series temporales están presentes en numerosos aspectos de nuestro mundo, desde las fluctuaciones en los mercados financieros y el flujo de las cifras de ventas hasta los patrones cambiantes del clima y más allá. La capacidad de pronosticar datos de series temporales de manera precisa permite a las empresas tomar decisiones bien informadas sobre eventos futuros, lo que les permite optimizar sus recursos, mitigar riesgos potenciales y planificar estratégicamente para lo que viene.

En esencia, el pronóstico de series temporales implica analizar patrones históricos de datos para predecir tendencias y valores futuros. Esta capacidad predictiva es invaluable en diversas industrias y campos, ofreciendo conocimientos que pueden impulsar la toma de decisiones estratégicas y la eficiencia operativa. Ya sea un minorista anticipando la demanda de productos, un analista financiero proyectando tendencias de mercado, o un meteorólogo prediciendo patrones climáticos, el pronóstico de series temporales proporciona una herramienta poderosa para navegar por las complejidades de un mundo en constante cambio.

Este proyecto se adentrará en el ámbito de los pronósticos, con un enfoque particular en aprovechar la ingeniería de características para mejorar el rendimiento del modelo. Aunque abordaremos métodos de pronóstico tradicionales como ARIMA (Media Móvil Integrada Autoregresiva) y Suavización Exponencial, nuestro énfasis principal será explorar cómo las técnicas avanzadas de ingeniería de características pueden mejorar significativamente las predicciones de series temporales. Investigaremos cómo estas características creadas pueden utilizarse para potenciar el rendimiento de modelos sofisticados de machine learning, incluidos pero no limitados a Random ForestXGBoost y Gradient Boosting Machines (GBM).

Al combinar el poder de la ingeniería de características con estos algoritmos avanzados de machine learning, aspiramos a desbloquear nuevos niveles de precisión y comprensión en el pronóstico de series temporales. Este enfoque no solo nos permite capturar patrones y relaciones complejas dentro de los datos, sino que también proporciona un marco flexible que puede adaptarse a diversos tipos de datos de series temporales en diferentes ámbitos.

En el pronóstico de series temporales, el objetivo es predecir valores futuros basados en datos históricos. Los datos de series temporales son únicos porque el orden de los puntos de datos es crucial, ya que cada punto de datos generalmente depende de puntos anteriores. Esta dependencia hace que el pronóstico sea una tarea desafiante, pero también rica en oportunidades para descubrir patrones ocultos.

Para aprovechar al máximo los datos de series temporales, a menudo es necesario crear nuevas características que ayuden a los modelos a capturar mejor estas dependencias temporales. En este proyecto, vamos a:

  1. Explorar características basadas en el tiempo, como día de la semanames, o características de retraso que reflejen valores previos.
  2. Discutir el uso de estadísticas móviles para capturar tendencias y estacionalidad.
  3. Trabajar con diferentes tipos de técnicas de eliminación de tendencia y transformaciones para hacer que la serie temporal sea más estacionaria.

Usaremos un conjunto de datos del mundo real, como datos de ventas diarias, para pronosticar ventas futuras y demostrar cómo la ingeniería de características puede mejorar la precisión predictiva del modelo.

1.1.1 Características de Retraso para el Pronóstico de Series Temporales

Una de las técnicas fundamentales en el pronóstico de series temporales es la creación de características de retraso. Estas características se derivan de la serie temporal original al desplazar los puntos de datos hacia atrás en el tiempo. Este desplazamiento permite que el modelo incorpore información histórica al hacer predicciones para puntos actuales o futuros. La cantidad de pasos en el tiempo que se desplaza puede variar, creando múltiples características de retraso que capturan diferentes perspectivas históricas.

Las características de retraso son particularmente poderosas porque permiten que el modelo capture la autocorrelación, que es la relación entre una variable y sus valores pasados. Esto es crucial en el análisis de series temporales, donde los patrones suelen repetirse o evolucionar con el tiempo. Por ejemplo, en los mercados financieros, los precios de las acciones hoy podrían estar influenciados por sus valores de ayer, de la semana pasada o incluso del mes pasado. Al crear características de retraso, proporcionamos al modelo este valioso contexto histórico.

Por qué son importantes las Características de Retraso

La importancia de las características de retraso proviene de la naturaleza inherente de muchos problemas de series temporales. En estos escenarios, el valor actual de la variable objetivo suele depender de sus valores pasados, un concepto conocido como dependencia temporal. Esta dependencia puede manifestarse de varias formas:

  • Efectos a corto plazo: Los valores recientes del pasado pueden tener una fuerte influencia en el valor actual. Por ejemplo, el número de productos vendidos hoy probablemente esté influenciado por las ventas de los últimos días.
  • Patrones estacionales: En muchas industrias, existen patrones recurrentes ligados a períodos de tiempo específicos. Las ventas minoristas, por ejemplo, suelen aumentar durante las festividades, y este patrón se repite anualmente.
  • Tendencias a largo plazo: Algunas series temporales muestran cambios graduales en períodos prolongados. Los indicadores económicos, por ejemplo, pueden mostrar tendencias de varios años que las características de retraso pueden ayudar a capturar.

Al incorporar características de retraso en nuestros modelos, les proporcionamos un contexto histórico rico. Este contexto permite que los modelos aprendan y aprovechen estas dependencias temporales, lo que potencialmente conduce a predicciones más precisas y robustas. Además, las características de retraso pueden ayudar a capturar patrones complejos que pueden no ser evidentes de inmediato en los datos de series temporales sin procesar.

Vale la pena señalar que el número óptimo y el rango de características de retraso pueden variar según el problema específico y el conjunto de datos. La experimentación y el conocimiento del dominio juegan un papel crucial en la determinación de la configuración de características de retraso más efectiva para una tarea de pronóstico determinada.

Ejemplo: Creación de Características de Retraso

Comencemos creando características de retraso en un conjunto de datos de ventas. Imaginemos que tenemos un conjunto de datos de cifras de ventas diarias y queremos pronosticar ventas futuras utilizando puntos de datos pasados.

import pandas as pd

# Sample data: daily sales figures
data = {'Date': pd.date_range(start='2022-01-01', periods=10, freq='D'),
        'Sales': [100, 120, 130, 150, 170, 160, 155, 180, 190, 210]}

df = pd.DataFrame(data)

# Set the Date column as the index
df.set_index('Date', inplace=True)

# Create lag features for the previous 1, 2, and 3 days
df['Sales_Lag1'] = df['Sales'].shift(1)
df['Sales_Lag2'] = df['Sales'].shift(2)
df['Sales_Lag3'] = df['Sales'].shift(3)

# View the dataframe with lag features
print(df)

En este ejemplo:

  • Primero, se importa la biblioteca pandas, esencial para la manipulación de datos en Python.
  • Se crea un conjunto de datos de muestra con 10 días de datos de ventas, comenzando el 1 de enero de 2022.
  • Los datos se convierten en un DataFrame de pandas, con la columna 'Date' configurada como índice.
  • El núcleo de este código es la creación de características de retraso. Se generan tres nuevas columnas:
    • 'Sales_Lag1': Contiene el valor de ventas de hace 1 día
    • 'Sales_Lag2': Contiene el valor de ventas de hace 2 días
    • 'Sales_Lag3': Contiene el valor de ventas de hace 3 días

Estas características de retraso se crean utilizando la función shift(), que mueve los datos hacia atrás en el tiempo por el número de períodos especificado.

Finalmente, el código imprime el DataFrame para mostrar los datos de ventas originales junto con las nuevas características de retraso.

Este enfoque es crucial en el pronóstico de series temporales, ya que permite que el modelo aprenda de valores pasados, capturando dependencias temporales en los datos.

1.1.2 Tratamiento de Valores Faltantes en Características de Retraso

Al crear características de retraso, las primeras filas del conjunto de datos inevitablemente contendrán valores faltantes debido a la falta de datos históricos. Este es un desafío común en el análisis de series temporales que requiere una consideración cuidadosa. Existen varias estrategias para abordar este problema, cada una con sus propias ventajas y posibles desventajas:

  1. Eliminar las filas con valores faltantes: Este enfoque directo consiste en eliminar las filas que contienen valores de retraso faltantes. Aunque es sencillo de implementar, puede llevar a una pérdida de datos, reduciendo potencialmente el tamaño del conjunto de datos y posiblemente introduciendo sesgo si los datos faltantes no están distribuidos aleatoriamente. Este método es más adecuado cuando se cuenta con un conjunto de datos grande y se puede permitir perder algunas observaciones iniciales.
  2. Imputar los valores faltantes: Este método implica rellenar los valores faltantes usando varias técnicas. Algunas estrategias comunes de imputación incluyen:
    • Relleno hacia adelante (forward fill): Propaga la última observación válida hacia adelante para llenar los huecos. Esto asume que los valores faltantes serían similares al valor conocido más reciente.
    • Relleno hacia atrás (backward fill): Usa valores futuros conocidos para llenar valores faltantes del pasado. Esto puede ser útil cuando tienes razones para creer que los valores pasados habrían sido similares a los futuros.
    • Imputación por media/mediana: Reemplaza los valores faltantes con el promedio o la mediana de los datos disponibles. Funciona bien cuando los datos están distribuidos normalmente y no tienen fuertes tendencias o estacionalidad.
    • Interpolación: Estima valores faltantes basándose en los valores conocidos circundantes. Puede ser interpolación lineal, polinómica o spline, dependiendo de la naturaleza de los datos.
  3. Usar un modelo que pueda manejar valores faltantes: Algunos modelos avanzados de machine learning, como ciertas implementaciones de máquinas de boosting de gradiente (por ejemplo, LightGBM, CatBoost), pueden manejar valores faltantes sin necesidad de imputación explícita. Estos modelos suelen tratar los valores faltantes como una categoría separada y pueden aprender patrones asociados con la ausencia de datos.
  4. Crear características separadas para la falta de datos: Este enfoque implica crear variables indicadoras binarias que señalen si una característica de retraso particular está faltante. Esto permite que el modelo aprenda patrones asociados con la presencia o ausencia de datos históricos. Puede ser particularmente útil cuando la falta de datos en sí misma contiene información sobre el proceso subyacente.
  5. Usar conocimientos específicos del dominio: En algunos casos, podrías tener información específica del dominio que guíe cómo manejar los valores faltantes. Por ejemplo, en un pronóstico de ventas minoristas, podrías saber que tu negocio estaba cerrado ciertos días, lo que explica los datos faltantes.

La elección del método depende de varios factores, incluyendo el tamaño del conjunto de datos, la naturaleza de la serie temporal, los requisitos específicos de la tarea de pronóstico y las suposiciones que estás dispuesto a hacer sobre los datos faltantes. A menudo es beneficioso experimentar con múltiples enfoques y evaluar su impacto en el rendimiento del modelo utilizando técnicas de validación cruzada específicamente diseñadas para datos de series temporales, como la validación cruzada para series temporales o la validación de ventana móvil.

Recuerda que el manejo de valores faltantes en características de retraso es solo un aspecto de la ingeniería de características para el pronóstico de series temporales. Otras consideraciones importantes incluyen la creación de características que capturen la estacionalidad, tendencias y factores externos que puedan influir en tu serie temporal. Al abordar cuidadosamente estos problemas y crear características informativas, puedes mejorar significativamente el poder predictivo de tus modelos de series temporales.

# Drop rows with missing values
df.dropna(inplace=True)

# View the cleaned dataframe
print(df)

Desglosemos el ejemplo:

  1. df.dropna(inplace=True): Esta línea elimina cualquier fila en el DataFrame que contenga valores faltantes (NaN). El parámetro inplace=True indica que la operación se realiza en el DataFrame original en lugar de crear una copia.
  2. print(df): Esta línea muestra el DataFrame limpio, mostrando el resultado después de eliminar las filas con valores faltantes.

Es importante señalar que este método de manejo de valores faltantes eliminando filas es solo un enfoque. Como se mencionó anteriormente, para conjuntos de datos más grandes, podrías preferir otras técnicas, como la imputación usando el relleno hacia adelante u otros métodos para conservar más datos.

1.1.3 Cómo Mejoran el Rendimiento las Características de Retraso

Al incorporar características de retraso en nuestro modelo, mejoramos su capacidad para aprovechar los datos históricos, lo que puede llevar a mejoras sustanciales en la precisión de las predicciones. Estas características proporcionan al modelo un contexto más rico de eventos recientes, permitiéndole identificar y aprender de patrones temporales que pueden no ser inmediatamente evidentes en los datos originales. Modelos como Random Forest o Gradient Boosting son especialmente competentes en utilizar estas características adicionales, ya que poseen la capacidad de identificar patrones intrincados e interacciones complejas entre la variable objetivo y sus valores históricos.

La inclusión de características de retraso permite que estos modelos capturen varios fenómenos dependientes del tiempo, tales como:

  • Fluctuaciones a corto plazo: Al examinar valores recientes, el modelo puede identificar y tener en cuenta cambios rápidos o desviaciones temporales en la variable objetivo.
  • Patrones cíclicos: Las características de retraso pueden ayudar a descubrir patrones recurrentes que ocurren en intervalos regulares, los cuales podrían ser difíciles de detectar sin el contexto histórico.
  • Persistencia de tendencias: El modelo puede aprender cómo las tendencias en la variable objetivo tienden a persistir en el tiempo, permitiendo predicciones más precisas de movimientos futuros.

Además, la flexibilidad de estos algoritmos de aprendizaje automático avanzados les permite determinar automáticamente la importancia relativa de diferentes características de retraso, aprendiendo efectivamente qué puntos históricos son más relevantes para predecir valores futuros. Este enfoque basado en datos para la selección de características suele superar los métodos tradicionales de series temporales que dependen de estructuras fijas y predefinidas.