Resumen sobre métodos de pronóstico

Este texto es una continuación de una serie de artículos dedicados a una breve descripción de los principales métodos de análisis de datos. La última vez que cubrimos los métodos de clasificación, ahora consideraremos los métodos de pronóstico. Por pronóstico, nos referimos a la búsqueda de un número específico que se espera obtener para una nueva observación o para períodos futuros. El artículo enumera los nombres de los métodos, su breve descripción y un script de Python. Un resumen puede ser útil antes de una entrevista, en una competencia o al comenzar un nuevo proyecto. Se supone que el público conoce estos métodos, pero tiene la necesidad de actualizarlos rápidamente en la memoria.


Regresión de mínimos cuadrados . Se intenta presentar la dependencia de un factor de otro en forma de ecuación. Los coeficientes se estiman minimizando la función de pérdida (error).

i=1n(yi(axi+b))2min


Si resuelve esta ecuación, puede encontrar los parámetros estimados:

a=ni=0nxiyii=0nxii=0nyini=0nxi2(i=0nxi)2


b=i=0nyiai=0nxin


Representación grafica:



Si los datos tienen propiedades de Gauss-Markov:

  • E(εi)=0- la expectativa matemática de un error es 0
  • σ2(εi)=const- homoscedasticidad
  • cov(εi,εj)=0,ij- falta de multicolinealidad
  • xi- valor determinado
  • εN(0,σ2)- el error se distribuye normalmente

Luego, según el teorema de Gauss-Markov, las estimaciones tendrán las siguientes propiedades:

  • Linealidad: con una transformación lineal del vector Y, las estimaciones también cambian linealmente.
  • No imparcial: con el aumento del tamaño de la muestra, la expectativa matemática tiende al verdadero valor.
  • Consistencia: a medida que aumenta el tamaño de la muestra, las estimaciones tienden a su verdadero valor.
  • Eficiencia: las estimaciones tienen la menor varianza.
  • Normalidad: las calificaciones se distribuyen normalmente.

 #imports
import statsmodels.api as sm

#model fit
Y = [1,3,4,5,2,3,4]
X = range(1,8)
X = sm.add_constant(X)
model = sm.OLS(Y,X)
results = model.fit()

#result
print(results.summary())
results.predict(X)


- GLS generalizados . Se utiliza cuando las condiciones de Gauss-Markov sobre la homocedasticidad (dispersión constante) de residuos y la no correlación de residuos entre sí no se cumplen. El objetivo de GLS es tener en cuenta los valores de la matriz de covarianza de los residuos ajustando el cálculo de los parámetros de la ecuación de regresión. Matriz de parámetros estimados:

a=(XTΩ1X)1XTΩ1Y

donde Ω es la matriz de covarianza de los residuos. Tenga en cuenta que para Ω = 1 obtenemos los mínimos cuadrados habituales

 #imports
import statsmodels.api as sm
from scipy.linalg import toeplitz

#model fit
data = sm.datasets.longley.load(as_pandas=False)
data.exog = sm.add_constant(data.exog)
ols_resid = sm.OLS(data.endog, data.exog).fit().resid
res_fit = sm.OLS(ols_resid[1:], ols_resid[:-1]).fit()
rho = res_fit.params
order = toeplitz(np.arange(16))
sigma = rho**order
gls_model = sm.GLS(data.endog, data.exog, sigma=sigma)
gls_results = gls_model.fit()

#result
print(gls_results.summary())
gls_results.predict

- wls. , ( ) , , .


 #imports
import statsmodels.api as sm

#model fit
Y = [1,3,4,5,2,3,4]
X = range(1,8)
X = sm.add_constant(X)
wls_model = sm.WLS(Y,X, weights=list(range(1,8)))
results = wls_model.fit()

#result
print(results.summary())
results.predict

- tsls. wls, , , , wls. .


 #imports
from linearmodels import IV2SLS, IVLIML, IVGMM, IVGMMCUE
from linearmodels.datasets import meps
from statsmodels.api import OLS, add_constant

#model fit
data = meps.load()
data = data.dropna()
controls = ['totchr', 'female', 'age', 'linc','blhisp']
instruments = ['ssiratio', 'lowincome', 'multlc', 'firmsz']
data['const'] = 1
controls = ['const'] + controls
ivolsmod = IV2SLS(data.ldrugexp, data[['hi_empunion'] + controls], None, None)
res_ols = ivolsmod.fit()

#result
print(res_ols)
print(res_ols.predict)

-ARIMA. . Auto-regression ( Y ) integrated ( — , ) moving average ( ).

 #imports
from pandas import read_csv
from pandas import datetime
from pandas import DataFrame
from statsmodels.tsa.arima_model import ARIMA
from matplotlib import pyplot

#model fit
def parser(x):
	return datetime.strptime('190'+x, '%Y-%m')

series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
model = ARIMA(series, order=(5,1,0))
model_fit = model.fit(disp=0)

#result
print(model_fit.summary())
model_fit.forecast()

- GARCH . Autoregresión general condicional heteroscedastic: se usa cuando hay heterocedasticidad en la serie temporal.


 #imports
import pyflux as pf
import pandas as pd
from pandas_datareader import DataReader
from datetime import datetime

#model fit
jpm = DataReader('JPM',  'yahoo', datetime(2006,1,1), datetime(2016,3,10))
returns = pd.DataFrame(np.diff(np.log(jpm['Adj Close'].values)))
returns.index = jpm.index.values[1:jpm.index.values.shape[0]]
returns.columns = ['JPM Returns']

#result
model = pf.GARCH(returns,p=1,q=1)
x = model.fit()
x.summary()

Si perdió algún método importante, escríbalo en los comentarios y el artículo se complementará. Gracias por la atención.


All Articles