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).
Si vous résolvez cette équation, vous pouvez trouver les paramètres estimés:
Représentation graphique:
Si les données ont des propriétés de Gauss-Markov:- - l'attente mathématique d'une erreur est 0
- - homoskedasticity
- - manque de multicolinéarité
- - valeur déterminée
- - 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.
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 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:
où Ω est la matrice de covariance des résidus. Notez que pour Ω = 1, nous obtenons les moindres carrés habituels
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
- 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.
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 . General autoregression conditional heteroscedastic — , .
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()
- , , . .