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).
Se você resolver esta equação, poderá encontrar os parâmetros estimados:
Representação gráfica:
Se os dados tiverem propriedades de Gauss-Markov:- - a expectativa matemática de um erro é 0
- - homoskedasticity
- - falta de multicolinearidade
- - valor determinado
- - 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.
import statsmodels.api as sm
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()
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:
onde Ω é a matriz de covariância dos resíduos. Note que para Ω = 1 obtemos os mínimos quadrados usuais
import statsmodels.api as sm
from scipy.linalg import toeplitz
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()
print(gls_results.summary())
gls_results.predict
- wls. , ( ) , , .
import statsmodels.api as sm
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()
print(results.summary())
results.predict
- tsls. wls, , , , wls. .
from linearmodels import IV2SLS, IVLIML, IVGMM, IVGMMCUE
from linearmodels.datasets import meps
from statsmodels.api import OLS, add_constant
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()
print(res_ols)
print(res_ols.predict)
-ARIMA. . Auto-regression ( Y ) integrated ( — , ) moving average ( ).
from pandas import read_csv
from pandas import datetime
from pandas import DataFrame
from statsmodels.tsa.arima_model import ARIMA
from matplotlib import pyplot
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)
print(model_fit.summary())
model_fit.forecast()
- GARCH . Heterocedástico condicional de autoregressão geral - usado quando há heterocedasticidade na série temporal.
import pyflux as pf
import pandas as pd
from pandas_datareader import DataReader
from datetime import datetime
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']
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.