Guia para La Importación de Series Financieras de Yahoo F

Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Guía para la importación de series

financieras de yahoo finanzas y la


aplicación del modelo VAR en
Python
Modelo VARIMAX
Autor: Sergio Diaz Paredes

Contacto: Linkedin

Paquetes
In [ ]: pip install pmdarima

Collecting pmdarima
Downloading pmdarima-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_6
4.manylinux_2_28_x86_64.whl (2.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 8.9 MB/s eta 0:00:00
Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.10/dist-pack
ages (from pmdarima) (1.3.2)
Requirement already satisfied: Cython!=0.29.18,!=0.29.31,>=0.29 in /usr/local/lib/
python3.10/dist-packages (from pmdarima) (3.0.8)
Requirement already satisfied: numpy>=1.21.2 in /usr/local/lib/python3.10/dist-pac
kages (from pmdarima) (1.25.2)
Requirement already satisfied: pandas>=0.19 in /usr/local/lib/python3.10/dist-pack
ages (from pmdarima) (1.5.3)
Requirement already satisfied: scikit-learn>=0.22 in /usr/local/lib/python3.10/dis
t-packages (from pmdarima) (1.2.2)
Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-pack
ages (from pmdarima) (1.11.4)
Requirement already satisfied: statsmodels>=0.13.2 in /usr/local/lib/python3.10/di
st-packages (from pmdarima) (0.14.1)
Requirement already satisfied: urllib3 in /usr/local/lib/python3.10/dist-packages
(from pmdarima) (2.0.7)
Requirement already satisfied: setuptools!=50.0.0,>=38.6.0 in /usr/local/lib/pytho
n3.10/dist-packages (from pmdarima) (67.7.2)
Requirement already satisfied: packaging>=17.1 in /usr/local/lib/python3.10/dist-p
ackages (from pmdarima) (23.2)
Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.1
0/dist-packages (from pandas>=0.19->pmdarima) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-pack
ages (from pandas>=0.19->pmdarima) (2023.4)
Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/d
ist-packages (from scikit-learn>=0.22->pmdarima) (3.3.0)
Requirement already satisfied: patsy>=0.5.4 in /usr/local/lib/python3.10/dist-pack
ages (from statsmodels>=0.13.2->pmdarima) (0.5.6)
Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (fro
m patsy>=0.5.4->statsmodels>=0.13.2->pmdarima) (1.16.0)
Installing collected packages: pmdarima
Successfully installed pmdarima-2.0.4

In [ ]: import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.tsa.statespace.varmax import VARMAX

/usr/local/lib/python3.10/dist-packages/yfinance/base.py:48: FutureWarning: The de


fault dtype for empty Series will be 'object' instead of 'float64' in a future ver
sion. Specify a dtype explicitly to silence this warning.
_empty_series = pd.Series()
Importando datos de yahoo finanzas
In [ ]: symbols = ["SONY", "DIS", "AAPL","AMZN"]

In [ ]: precio_cierre = pd.DataFrame()

In [ ]: for symbol in symbols:


stock_data = yf.download(symbol, start="2023-01-01")
precio_cierre[symbol] = stock_data['Close']

[*********************100%%**********************] 1 of 1 completed
[*********************100%%**********************] 1 of 1 completed
[*********************100%%**********************] 1 of 1 completed
[*********************100%%**********************] 1 of 1 completed

Extrapolando datos
In [ ]: precio_cierre = precio_cierre.resample('D').interpolate(method='akima')

In [ ]: precio_cierre.head(10)

Out[ ]: SONY DIS AAPL AMZN

Date

2023-01-03 76.650002 88.970001 125.070000 85.820000

2023-01-04 77.800003 91.980003 126.360001 85.139999

2023-01-05 77.500000 91.919998 125.019997 83.120003

2023-01-06 81.389999 93.919998 129.619995 86.080002

2023-01-07 82.203787 94.242645 129.861623 86.615078

2023-01-08 82.588781 94.339376 129.915749 86.652015

2023-01-09 82.620003 94.769997 130.149994 87.360001

2023-01-10 82.080002 95.559998 130.729996 89.870003

2023-01-11 84.290001 96.330002 133.490005 95.089996

2023-01-12 86.070000 99.809998 133.410004 95.269997

Analisis exploratorio
In [ ]: precio_cierre.plot(subplots=True)

array([<Axes: xlabel='Date'>, <Axes: xlabel='Date'>,


Out[ ]:
<Axes: xlabel='Date'>, <Axes: xlabel='Date'>], dtype=object)
In [ ]: precio_cierre.diff().plot(subplots=True)

array([<Axes: xlabel='Date'>, <Axes: xlabel='Date'>,


Out[ ]:
<Axes: xlabel='Date'>, <Axes: xlabel='Date'>], dtype=object)

In [ ]: precio_cierre.diff().corr()
Out[ ]: SONY DIS AAPL AMZN

SONY 1.000000 0.198643 0.410610 0.383595

DIS 0.198643 1.000000 0.291077 0.228025

AAPL 0.410610 0.291077 1.000000 0.396992

AMZN 0.383595 0.228025 0.396992 1.000000

In [ ]: sns.pairplot(precio_cierre.diff())

<seaborn.axisgrid.PairGrid at 0x7d4f40273670>
Out[ ]:

Partición de los datos


In [ ]: n_test = 14
df_train = precio_cierre.iloc[:-n_test]
df_test = precio_cierre.iloc[-n_test:]

Estimando el modelo
In [ ]: model = VARMAX(df_train, order=(7,1,7))
results = model.fit(disp=False)

/usr/local/lib/python3.10/dist-packages/statsmodels/tsa/statespace/varmax.py:161:
EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, due
especially to identification issues.
warn('Estimation of VARMA(p,q) models is not generically robust,'
/usr/local/lib/python3.10/dist-packages/statsmodels/base/model.py:607: Convergence
Warning: Maximum Likelihood optimization failed to converge. Check mle_retvals
warnings.warn("Maximum Likelihood optimization failed to "

Forecast
In [ ]: forecast = results.get_forecast(steps=n_test)
forecast_df = pd.DataFrame(forecast.predicted_mean, columns=df_train.columns)

In [ ]: forecast_df.set_index(df_test.index,inplace=True)

In [ ]: forecast_df.head()

Out[ ]: SONY DIS AAPL AMZN

Date

2024-02-09 95.836284 110.871851 187.366744 169.401321

2024-02-10 96.452802 111.003489 188.420902 169.560694

2024-02-11 96.039634 110.085178 187.445026 168.739673

2024-02-12 96.054413 108.694129 187.087810 168.773534

2024-02-13 95.904601 108.966770 187.075437 169.054313

In [ ]: forecast_df.plot(subplots=True)

array([<Axes: xlabel='Date'>, <Axes: xlabel='Date'>,


Out[ ]:
<Axes: xlabel='Date'>, <Axes: xlabel='Date'>], dtype=object)
In [ ]: fig,ax = plt.subplots(2,2,figsize=(16,9))
#Train
i=0
for x in range(0,2):
for y in range(0,2):
#Train
ax[x,y].plot(df_train[symbols[i]],label='Train')
ax[x,y].legend()

ax[x,y].plot(df_test[symbols[i]],label='Test')
ax[x,y].legend()

ax[x,y].plot(forecast_df[symbols[i]],label='Forecast')
ax[x,y].legend()

ax[x,y].set_title(symbols[i])
i+=1
plt.show()

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy