预测方法摘要

本文是一系列文章的延续,这些文章专门介绍了数据分析的主要方法。在上一次我们介绍的分类方法,现在我们会考虑预测方法。通过预测,我们的意思是搜索预期会为新观测值或未来期间获得的特定数字。本文列出了方法的名称,其简要说明和Python脚本。摘要在面试之前,竞赛中或开始新项目时可能会很有用。假定读者知道这些方法,但是有必要在内存中快速刷新它们。


最小二乘回归试图以方程的形式表示一个因素对另一因素的依赖性。通过最小化损失函数(误差)来估计系数。

一世=1个ñÿ一世--一个X一世+b2一世ñ


如果求解此方程,则可以找到估计的参数:

一个=ñ一世=0ñX一世ÿ一世--一世=0ñX一世一世=0ñÿ一世ñ一世=0ñX一世2--一世=0ñX一世2


b=一世=0ñÿ一世--一个一世=0ñX一世ñ


图示:



如果数据具有高斯-马尔可夫属性:

  • Ëε一世=0-错误的数学期望为0
  • σ2ε一世=CØñsŤ-同方性
  • CØvε一世εĴ=0一世Ĵ-缺乏多重共线性
  • X一世-确定值
  • εñ0σ2-错误是正态分布的

然后,根据高斯-马尔可夫定理,估计将具有以下属性:

  • 线性-通过向量Y的线性变换,估算值也线性变化。
  • 不偏不倚-随着样本量的增加,数学期望值趋向于真实值。
  • 一致性-随着样本量的增加,估计值趋于真实值。
  • 效率-估计差异最小。
  • 正态性-成绩是正态分布的。

 #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当不满足残渣的同方差(恒定分散)和残渣彼此不相关的高斯-马尔可夫条件时使用。GLS的目标是通过调整回归方程参数的计算来考虑残差协方差矩阵的值。估计参数矩阵:

一个=XŤΩ--1个X--1个XŤΩ--1个ÿ

其中Ω是残差的协方差矩阵。注意,对于Ω= 1,我们获得通常的最小二乘

 #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一般自回归条件异方差-在时间序列中存在异方差时使用。


 #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