Guia para La Importación de Series Financieras de Yahoo F
Guia para La Importación de Series Financieras de Yahoo F
Guia para La Importación de Series Financieras de Yahoo F
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
In [ ]: precio_cierre = pd.DataFrame()
[*********************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)
Date
Analisis exploratorio
In [ ]: precio_cierre.plot(subplots=True)
In [ ]: precio_cierre.diff().corr()
Out[ ]: SONY DIS AAPL AMZN
In [ ]: sns.pairplot(precio_cierre.diff())
<seaborn.axisgrid.PairGrid at 0x7d4f40273670>
Out[ ]:
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()
Date
In [ ]: forecast_df.plot(subplots=True)
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()