Resumo sobre métodos de previsão

Este texto é uma continuação de uma série de artigos dedicados a uma breve descrição dos principais métodos de análise de dados. A última vez que cobrimos os métodos de classificação, agora consideraremos os métodos de previsão. Por previsão, entendemos a busca por um número específico que se espera obter para uma nova observação ou para períodos futuros. O artigo lista os nomes dos métodos, sua breve descrição e um script Python. Um resumo pode ser útil antes de uma entrevista, em uma competição ou ao iniciar um novo projeto. Supõe-se que o público conheça esses métodos, mas tenha a necessidade de atualizá-los rapidamente na memória.


Regressão de mínimos quadrados . É feita uma tentativa de apresentar a dependência de um fator em outro na forma de uma equação. Os coeficientes são estimados minimizando a função de perda (erro).

Eu=1 1n(yEu-(umaxEu+b))2mEun


Se você resolver esta equação, poderá encontrar os parâmetros estimados:

uma=nEu=0 0nxEuyEu-Eu=0 0nxEuEu=0 0nyEunEu=0 0nxEu2-(Eu=0 0nxEu)2


b=Eu=0 0nyEu-umaEu=0 0nxEun


Representação gráfica:



Se os dados tiverem propriedades de Gauss-Markov:

  • E(εEu)=0 0- a expectativa matemática de um erro é 0
  • σ2(εEu)=const- homoskedasticity
  • cov(εEu,εj)=0 0,Euj- falta de multicolinearidade
  • xEu- valor determinado
  • εN(0 0,σ2)- o erro é normalmente distribuído

Então, pelo teorema de Gauss-Markov, as estimativas terão as seguintes propriedades:

  • Linearidade - com uma transformação linear do vetor Y, as estimativas também mudam linearmente.
  • Imparcial - com o aumento do tamanho da amostra, a expectativa matemática tende ao verdadeiro valor.
  • Consistência - à medida que o tamanho da amostra aumenta, as estimativas tendem ao seu verdadeiro valor.
  • Eficiência - as estimativas têm a menor variação.
  • Normalidade - as notas são normalmente distribuídas.

 #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 generalizado . É utilizado quando as condições de Gauss-Markov sobre a homocedasticidade (dispersão constante) de resíduos e a não correlação de resíduos entre si não são satisfeitas. O objetivo do GLS é levar em consideração os valores da matriz de covariância dos resíduos, ajustando o cálculo dos parâmetros da equação de regressão. Matriz de parâmetros estimados:

uma=(XTΩ-1 1X)-1 1XTΩ-1 1Y

onde Ω é a matriz de covariância dos resíduos. Note que para Ω = 1 obtemos os mínimos quadrados usuais

 #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 . Heterocedástico condicional de autoregressão geral - usado quando há heterocedasticidade na série 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()

Se você perdeu algum método importante, escreva sobre ele nos comentários e o artigo será complementado. Obrigado pela atenção.


All Articles