Modelo SARIMA para la predicción de tasas de cambio de divisas.

SARIMA model for predicting currency exchange rates.

Introducción

La predicción de las tasas de cambio de divisas es la práctica de anticipar los cambios futuros en el valor de una moneda en relación con otra. La predicción de divisas puede ayudar a las personas, empresas y organizaciones financieras a tomar decisiones financieras informadas. Una de las técnicas de pronóstico que se puede utilizar es SARIMA. SARIMA es una excelente técnica de pronóstico de series temporales para estimar datos de series de tiempo con patrones estacionales.

Funciona modelando el vínculo entre los valores pasados y actuales de una serie de tiempo y reconociendo patrones en los datos. SARIMA utiliza una variedad de modelos de autorregresión (AR) y media móvil (MA), así como diferenciación, para capturar tendencias y estacionalidad en los datos. “Estacionalidad” se refiere a las variaciones de datos que ocurren regular y predeciblemente durante un período especificado, como ciclos diarios, semanales o anuales. Podemos estar mejor informados sobre los cambios en los valores de las monedas al anticipar las tasas de cambio. Ahora, hagamos la predicción a través de los pasos en el artículo.

Objetivos de aprendizaje

  1. Ayudar a individuos, empresas e instituciones financieras a anticipar las tendencias del mercado identificando patrones y tendencias en los datos históricos.
  2. Reducir el riesgo identificando posibles riesgos asociados con las fluctuaciones de las divisas.
  3. Optimizar las conversiones de divisas identificando el mejor momento para convertir las monedas.
  4. Mejorar la toma de decisiones proporcionando a las empresas e individuos información sobre la dirección futura de las tasas de cambio de divisas.

Basándonos en estos objetivos, utilizaremos SARIMA para desarrollar un modelo para estimar las tasas de cambio de divisas mediante la agregación de patrones de datos estacionales para hacer predicciones más precisas de los valores futuros.

Este artículo se publicó como parte del Blogatón de Ciencia de Datos.

Paso 1: Importar la librería

!pip install pmdarima
from pmdarima.arima import auto_arima
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
import matplotlib.pyplot as plt
import plotly.express as px
import plotly.graph_objs as go
import plotly.io as pio

Para utilizar la función auto_arima es necesario instalar la librería “pmdarima”. Esta función ajusta un modelo ARIMA con datos de series de tiempo y determina automáticamente los parámetros del modelo apropiados según los datos proporcionados.

Paso 2: Leer los datos

Necesitamos datos históricos sobre las tasas de cambio entre dos monedas para predecir las tasas de cambio. Por lo tanto, podemos descargar datos históricos que contengan tasas de cambio semanales entre INR y USD en la web de Yahoo Finance. Y podemos utilizar un período del 1 de diciembre de 2003 al 15 de junio de 2023. Afortunadamente, lo he hecho público en GitHub.

alamat = 'https://raw.githubusercontent.com/ataislucky/Data-Science/main/dataset/USD-INR_Weekly.csv'
data = pd.read_csv(alamat)
print(data.sample(11))

Comprobemos si el conjunto de datos tiene valores faltantes antes de proceder más. Es esencial verificar.

print(data.isna().sum())

Se han identificado varios valores faltantes en el conjunto de datos. Por lo tanto, debemos eliminarlos.

data = data.dropna()

Examinemos las estadísticas descriptivas para obtener una mejor comprensión del conjunto de datos y los factores que lo sustentan. Podemos obtener ideas importantes sobre las características del conjunto de datos, detectar posibles valores atípicos, comprender los elementos de la distribución de datos y establecer el marco para futuros esfuerzos de análisis exploratorio de datos y modelización. Veamos las estadísticas descriptivas de esta colección de datos.

print(data.describe())

El conjunto de datos contiene el valor de INR por 1 USD para un momento dado. A continuación se presentan todas las características en los datos:

  1. La fecha representa el día específico de los datos de la tasa de cambio.
  2. Open se refiere a la tasa de cambio al comienzo de un período de negociación específico, como el precio de apertura del día o la semana.
  3. High representa la tasa de cambio más alta observada durante un período de negociación específico.
  4. Low representa la tasa de cambio más baja observada durante un período de negociación específico.
  5. Close muestra la tasa de cambio al final de un cierto período de negociación.
  6. Adjusted Closing considera cualquier actividad comercial que pueda afectar el precio de cierre, como divisiones de acciones o dividendos.
  7. Volume se refiere al número de pares de divisas USD-INR negociados durante un período específico.

Paso 3: Análisis de la tasa de conversión

Analicemos las tasas de conversión entre las dos monedas a lo largo de los años. Al examinar las tendencias históricas, podemos obtener información valiosa sobre la dinámica de las tasas de cambio y potencialmente descubrir patrones importantes o eventos que afecten estas tasas de cambio. Para visualizar este análisis, usaremos un gráfico de línea para ilustrar la tendencia de la tasa de conversión USD-INR a lo largo del tiempo.

figure = px.line(data, x="Date",
                 y="Close",
                 title='Tasa de conversión a lo largo de los años (USD/INR)')
figure.show()

Agreguemos campos de año y mes a los datos para habilitar un análisis temporal más profundo.

data["Date"] = pd.to_datetime(data["Date"], format = '%Y-%m-%d')
data['Year'] = data['Date'].dt.year
data["Month"] = data["Date"].dt.month
print(data.head())

Examinemos el aumento anual compuesto de la tasa de cambio INR-USD para descubrir momentos de fortaleza o debilidad económica, eventos importantes que afectan las tasas de cambio o patrones a largo plazo en las tasas de conversión INR-USD.

growth = data.groupby('Year').agg({'Close': lambda x: (x.iloc[-1]-x.iloc[0])/x.iloc[0]*100})

fig = go.Figure()
fig.add_trace(go.Bar(x=growth.index,
                     y=growth['Close'],
                     name='Crecimiento anual'))

fig.update_layout(title="Crecimiento anual de la tasa de conversión (USD/INR)",
                  xaxis_title="Año",
                  yaxis_title="Crecimiento (%)",
                  width=900,
                  height=600)

pio.show(fig)

Ahora analicemos nuevamente al ver el crecimiento combinado mensual de la tasa de conversión entre INR y USD.

import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
# Calculemos el crecimiento mensual
data['Growth'] = data.groupby(['Year', 'Month'])['Close'].
transform(lambda x: (x.iloc[-1] - x.iloc[0]) / x.iloc[0] * 100)

# Agrupemos los datos por mes y calculemos el crecimiento promedio
grouped_data = data.groupby('Month').mean().reset_index()

fig = go.Figure()

fig.add_trace(go.Bar(
    x=grouped_data['Month'],
    y=grouped_data['Growth'],
    marker_color=grouped_data['Growth'],
    hovertemplate='Mes: %{x}<br>Crecimiento promedio: %{y:.2f}%<extra></extra>'
))

fig.update_layout(
    title="Crecimiento mensual agregado de la tasa de conversión (USD/INR)",
    xaxis_title="Mes",
    yaxis_title="Crecimiento promedio (%)",
    width=900,
    height=600
)

pio.show(fig)

El gráfico ilustra que el valor del USD ha disminuido constantemente en enero y marzo. Esta observación muestra que el INR tiende a fortalecerse frente al USD durante estos meses, reduciendo la tasa de conversión. Mientras tanto, en el segundo trimestre, el USD se fortaleció frente al INR cada año. El valor del USD frente al INR alcanzó su punto máximo en agosto pero cayó en septiembre, aumentó anualmente en el cuarto trimestre y volvió a caer en diciembre.

Paso 4: Construir un modelo SARIMA y hacer una predicción

Debemos realizar una descomposición estacional de los datos de la tasa de cambio USD – INR. Este método separa los diferentes componentes de los datos: tendencias, estacionalidad y fluctuaciones residuales o aleatorias.

result = seasonal_decompose(data["Close"], model='multiplicative', period=24)
fig = plt.figure()
fig = result.plot()
fig.set_size_inches(8, 6)
fig.show()

Podemos ver que hay un patrón estacional en estos datos. Por lo tanto, usamos SARIMA como el algoritmo más apropiado para estos datos. Antes de usar SARIMA, necesitamos encontrar los valores de p, d y q primero. Podemos usar la biblioteca ‘pmdarima’ para encontrar esos valores automáticamente.

model = auto_arima(data['Close'], seasonal=True, m=52, suppress_warnings=True)
print(model.order)

El parámetro seasonal=True determina que la serie temporal muestra un patrón estacional. Mientras tanto, el parámetro m=52 muestra la periodicidad estacional de los datos semanales. Y 2, 1, 0 son los valores de p, d, q.

Estamos listos para entrenar nuestro modelo usando SARIMA para estimar las tasas de cambio de divisas.

from statsmodels.tools.sm_exceptions import  ValueWarning
warnings.simplefilter('ignore', ValueWarning)

p, d, q = 2, 1, 0
modelo = SARIMAX(data["Close"], order=(p, d, q),
                seasonal_order=(p, d, q, 52))
ajustado = modelo.fit()
print(ajustado.summary())

Ahora predecimos futuros tipos de cambio de divisas a partir del modelo ARIMA ajustado.

predicciones = ajustado.predict(len(data), len(data)+90)
print(predicciones)

Mostramos el valor de la predicción en el gráfico para hacerlo más atractivo.

fig = go.Figure()

# Agregamos la traza de los datos de entrenamiento
fig.add_trace(go.Scatter(
    x=data.index,
    y=data['Close'],
    mode='lines',
    name='Datos de entrenamiento',
    line=dict(color='blue')
))

# Agregamos la traza de las predicciones
fig.add_trace(go.Scatter(
    x=predicciones.index,
    y=predicciones,
    mode='lines',
    name='Predicciones',
    line=dict(color='red')
))

fig.update_layout(
    title="Datos de entrenamiento VS Predicciones",
    xaxis_title="Fecha",
    yaxis_title="Cierre",
    legend_title="Datos",
    width=1000,
    height=600
)

pio.show(fig)

Conclusión

Este artículo comienza verificando si hay valores faltantes en el conjunto de datos y analizando los datos con estadísticas descriptivas. Luego se explora la tasa de conversión entre las dos divisas agregadas anualmente y mensualmente antes de pronosticar la tasa de cambio de divisas utilizando SARIMA. Hemos discutido lo siguiente:

  • El modelo SARIMA es un modelo estadístico que captura tendencias estacionales en los valores pasados de los datos para predecir futuros descuentos.
  • El modelo SARIMA puede pronosticar tipos de cambio de divisas para varias monedas.
  • El modelo SARIMA ayuda a tomar decisiones informadas relacionadas con el comercio de divisas, la planificación financiera o las operaciones comerciales internacionales.
  • La precisión del modelo depende de varios factores, incluida la calidad de los datos y la estabilidad del mercado de divisas.

Este artículo proporciona una guía completa para el pronóstico de tasas de cambio de divisas con SARIMA utilizando Python.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Ciencia de Datos

Samsung adopta la IA y los grandes datos, revoluciona el proceso de fabricación de chips.

Samsung Electronics Co., el principal fabricante mundial de chips de memoria, está a punto de revolucionar su proceso...

Inteligencia Artificial

Una guía para principiantes para comprender el rendimiento de las pruebas A/B a través de simulaciones de Monte Carlo

Este tutorial explora cómo las covariables influyen en la precisión de las pruebas A/B en un experimento aleatorizado...

Inteligencia Artificial

Los satélites más antiguos de observación de la Tierra de NOAA obtienen 'vida prolongada

La Administración Nacional Oceánica y Atmosférica utilizará un sistema basado en la nube para extender la vida de los...

Inteligencia Artificial

Grandes modelos de lenguaje DeBERTa - BERT mejorado con decodificación y atención desentrelazada

En los últimos años, BERT se ha convertido en la herramienta número uno en muchas tareas de procesamiento de lenguaje...

Ciencia de Datos

Funciones de Ventana Un conocimiento imprescindible para ingenieros de datos y científicos de datos.

El crecimiento de datos ha sido bastante extenso en los últimos años y aunque tenemos un conjunto diverso de herramie...