Hồi quy tuyến tính đơn

Phân tích chuỗi thời gian với Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Hồi quy là gì?

  • Hồi quy tuyến tính đơn:

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

Phân tích chuỗi thời gian với Python

Hồi quy là gì?

  • Bình phương tối thiểu thông thường (OLS)
Phân tích chuỗi thời gian với Python

Các package Python để chạy hồi quy

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

Cảnh báo: thứ tự của x và y không nhất quán giữa các package

Phân tích chuỗi thời gian với Python

Ví dụ: Hồi quy lợi nhuận Small Cap theo Large Cap

  • Import mô-đun statsmodels
    import statsmodels.api as sm
    
  • Như trước, tính phần trăm thay đổi cho cả hai chuỗi
    df['SPX_Ret'] = df['SPX_Prices'].pct_change()
    df['R2000_Ret'] = df['R2000_Prices'].pct_change()
    
  • Thêm hằng số vào DataFrame để làm intercept của hồi quy
    df = sm.add_constant(df)
    
Phân tích chuỗi thời gian với Python

Ví dụ hồi quy (tiếp)

  • Lưu ý hàng đầu tiên của lợi nhuận là 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
    
  • Xóa hàng NaN
      df = df.dropna()
    
  • Chạy hồi quy
      results = sm.OLS(df['R2000_Ret'],df[['const','SPX_Ret']]).fit()
      print(results.summary())
    
Phân tích chuỗi thời gian với Python

Ví dụ hồi quy (tiếp)

  • Kết quả hồi quy

  • Intercept trong results.params[0]
  • Hệ số dốc trong results.params[1]
Phân tích chuỗi thời gian với Python

Ví dụ hồi quy (tiếp)

  • Kết quả hồi quy

Phân tích chuỗi thời gian với Python

Quan hệ giữa R-Squared và tương quan

  • $ [\text{corr} (x,y)]^2 = R^2$ (hay R-squared)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • Trong ví dụ trước:
    • R-Squared = 0.753
    • Hệ số dốc dương
    • tương quan = $ + \sqrt{0.753} = 0.868$
Phân tích chuỗi thời gian với Python

Cùng luyện tập nào!

Phân tích chuỗi thời gian với Python

Preparing Video For Download...