ملخص عن طرق التنبؤ

هذا النص هو استمرار لسلسلة من المقالات المخصصة لوصف موجز للطرق الرئيسية لتحليل البيانات. في آخر مرة تناولنا طرق التصنيف ، سننظر الآن في طرق التنبؤ. من خلال التنبؤ ، نعني البحث عن رقم محدد يُتوقع الحصول عليه لملاحظة جديدة أو لفترات مقبلة. تسرد المقالة أسماء الطرق ووصفها المختصر ونص بايثون. قد يكون الملخص مفيدًا قبل المقابلة أو في المسابقة أو عند بدء مشروع جديد. من المفترض أن الجمهور يعرف هذه الأساليب ، ولكن لديه حاجة لتحديثها بسرعة في الذاكرة.


انحدار المربعات الصغرى . جرت محاولة لتقديم اعتماد عامل على آخر في شكل معادلة. يتم تقدير المعاملات بتقليل دالة الخسارة (الخطأ).

i=1n(yi(axi+b))2min


إذا قمت بحل هذه المعادلة ، يمكنك العثور على المعلمات المقدرة:

a=ni=0nxiyii=0nxii=0nyini=0nxi2(i=0nxi)2


b=i=0nyiai=0nxin


تمثيل رسومي:



إذا كانت البيانات تحتوي على خصائص Gauss-Markov:

  • E(εi)=0- التوقع الرياضي لخطأ هو 0
  • σ2(εi)=const- الشذوذ الجنسي
  • cov(εi,εj)=0,ij- قلة التعددية الخطية
  • xi- القيمة المحددة
  • εN(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 المعمم . يتم استخدامه عندما لا يتم استيفاء شروط Gauss-Markov على المثلية الجنسية (التشتت المستمر) للمخلفات وعدم ارتباط المخلفات مع بعضها البعض. الهدف من GLS هو مراعاة قيم مصفوفة التباين المتبقي عن طريق تعديل حساب معلمات معادلة الانحدار. مصفوفة المعلمات المقدرة:

a=(XTΩ1X)1XTΩ1Y

حيث Ω هي مصفوفة التباين المتبقي. لاحظ أنه بالنسبة إلى Ω = 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()

- جارش . الانحدار الغير متغاير للشرط الذاتي - يستخدم عندما يكون هناك مرونة غيرية في السلسلة الزمنية.


 #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