Прості лінійні регресії

Аналіз часових рядів у Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Що таке регресія?

  • Проста лінійна регресія:

$\ \ \ \ y_t = \alpha + \beta x_t + \epsilon_t$

Аналіз часових рядів у Python

Що таке регресія?

  • Метод найменших квадратів (OLS)
Аналіз часових рядів у Python

Пакети Python для виконання регресій

  • У statsmodels:
    import statsmodels.api as sm
    sm.OLS(y, x).fit()
    
  • У numpy:
    np.polyfit(x, y, deg=1)
    
  • У pandas:
    pd.ols(y, x)
    
  • У scipy:
    from scipy import stats
    stats.linregress(x, y)
    

Увага: порядок x і y відрізняється між пакетами

Аналіз часових рядів у Python

Приклад: регресія дохідності малих капіталізацій на великі

  • Імпортуйте модуль statsmodels
    import statsmodels.api as sm
    
  • Як раніше, обчисліть відсоткові зміни в обох серіях
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Додайте константу до DataFrame для вільного члена регресії
    df = sm.add_constant(df)
    
Аналіз часових рядів у Python

Приклад регресії (продовження)

  • Зверніть увагу, що перший рядок дохідностей — NaN
                SPX_Price  R2000_Price   SPX_Ret  R2000_Ret
    Date                                                     
    2012-11-01  1427.589966   827.849976       NaN        NaN
    2012-11-02  1414.199951   814.369995 -0.009379  -0.016283
    
  • Видаліть рядок з NaN
      df = df.dropna()
    
  • Запустіть регресію
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Аналіз часових рядів у Python

Приклад регресії (продовження)

  • Результат регресії

  • Перетин у results.params[0]
  • Нахил у results.params[1]
Аналіз часових рядів у Python

Приклад регресії (продовження)

  • Результат регресії

Аналіз часових рядів у Python

Зв'язок між R-квадрат і кореляцією

  • $ [\text{corr} (x,y)]^2 = R^2$ (або R-квадрат)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • У попередньому прикладі:
    • R-квадрат = 0,753
    • Нахил додатний
    • кореляція = $ + \sqrt{0.753} = 0.868$
Аналіз часових рядів у Python

Давайте потренуємось!

Аналіз часових рядів у Python

Preparing Video For Download...