การถดถอยเชิงเส้นอย่างง่าย

การวิเคราะห์อนุกรมเวลาด้วย Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

การถดถอยคืออะไร?

  • การถดถอยเชิงเส้นอย่างง่าย (Simple linear regression):

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

การวิเคราะห์อนุกรมเวลาด้วย Python

การถดถอยคืออะไร?

  • Ordinary Least Squares (OLS)
การวิเคราะห์อนุกรมเวลาด้วย Python

Python Packages สำหรับการถดถอย

  • ใน 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 สำหรับค่า intercept ของการถดถอย
    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

ตัวอย่างการถดถอย (ต่อ)

  • ผลลัพธ์การถดถอย

  • ค่า intercept อยู่ใน results.params[0]
  • ค่า slope อยู่ใน results.params[1]
การวิเคราะห์อนุกรมเวลาด้วย Python

ตัวอย่างการถดถอย (ต่อ)

  • ผลลัพธ์การถดถอย

การวิเคราะห์อนุกรมเวลาด้วย Python

ความสัมพันธ์ระหว่าง R-Squared และค่าสหสัมพันธ์

  • $ [\text{corr} (x,y)]^2 = R^2$ (หรือ R-squared)
  • $ \text{sign(corr)} = \text{sign(regression slope)}$
  • จากตัวอย่างก่อนหน้า:
    • R-Squared = 0.753
    • Slope เป็นบวก
    • correlation = $ + \sqrt{0.753} = 0.868$
การวิเคราะห์อนุกรมเวลาด้วย Python

มาฝึกกันเถอะ!

การวิเคราะห์อนุกรมเวลาด้วย Python

Preparing Video For Download...