Résumé sur les méthodes de prévision

Ce texte fait suite à une série d'articles consacrés à une brève description des principales méthodes d'analyse des données. La dernière fois que nous avons couvert les méthodes de classification, nous allons maintenant considérer les méthodes de prévision. Par prévision, nous entendons la recherche d'un nombre spécifique qui devrait être obtenu pour une nouvelle observation ou pour des périodes futures. L'article répertorie les noms des méthodes, leur brève description et un script Python. Un résumé peut être utile avant un entretien, dans un concours ou lors du démarrage d'un nouveau projet. On suppose que le public connaît ces méthodes, mais a besoin de les rafraîchir rapidement en mémoire.


Régression des moindres carrés . On essaie de présenter la dépendance d'un facteur à un autre sous la forme d'une équation. Les coefficients sont estimés en minimisant la fonction de perte (erreur).

je=1n(yje-(uneXje+b))2mjen


Si vous résolvez cette équation, vous pouvez trouver les paramètres estimés:

une=nje=0nXjeyje-je=0nXjeje=0nyjenje=0nXje2-(je=0nXje)2


b=je=0nyje-uneje=0nXjen


Représentation graphique:



Si les données ont des propriétés de Gauss-Markov:

  • E(εje)=0- l'attente mathématique d'une erreur est 0
  • σ2(εje)=const- homoskedasticity
  • cov(εje,εj)=0,jej- manque de multicolinéarité
  • Xje- valeur déterminée
  • εN(0,σ2)- l'erreur est normalement distribuée

Ensuite, selon le théorème de Gauss-Markov, les estimations auront les propriétés suivantes:

  • Linéarité - avec une transformation linéaire du vecteur Y, les estimations changent également de façon linéaire.
  • Sans biais - avec l'augmentation de la taille de l'échantillon, l'attente mathématique tend vers la vraie valeur.
  • Cohérence - à mesure que la taille de l'échantillon augmente, les estimations tendent vers leur vraie valeur.
  • Efficience - les estimations présentent le moins de variance.
  • Normalité - les notes sont normalement distribuées.

 #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 généralisé . Il est utilisé lorsque les conditions de Gauss-Markov sur l'homoscédasticité (dispersion constante) des résidus et la non-corrélation des résidus entre elles ne sont pas satisfaites. L'objectif de GLS est de prendre en compte les valeurs de la matrice de covariance des résidus en ajustant le calcul des paramètres de l'équation de régression. Matrice des paramètres estimés:

une=(XTΩ-1X)-1XTΩ-1Oui

où Ω est la matrice de covariance des résidus. Notez que pour Ω = 1, nous obtenons les moindres carrés habituels

 #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

- Pls pondérés wls . Il est utilisé lorsque l'efficacité des estimations n'est pas remplie (il existe une hétéroscédasticité), c'est-à-dire que la première étape consiste à peser les observations sur leur variance, puis à appliquer l'OLS habituel.


 #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 . General autoregression conditional heteroscedastic — , .


 #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()

- , , . .


All Articles