1 minute read

OLS

  • Ordinary Linear Least Square

  • 수학적으로 회귀 모형을 구할때 사용되는 방법중 하나.

  • 주어진 데이터를 하나의 직선으로 만들때, 해당 직선의 방정식인 $y = ax+b$를 구하고자 할때 사용됨.

  • x,y축으로 전개되어있는 데이터에 대해 ax+b를 구하기 위해 대입한다면 다음과 같은 벡터와 행렬을 구할수 있다.

    • $Y = AX$
    • $Y = \begin{bmatrix} y_1 \\ y_2 \\ … \\ y_n \end{bmatrix}, A = \begin{bmatrix} x_1 & 1\\ x_2 & 1\\ … & … \\ x_n & 1\end{bmatrix},X = \begin{bmatrix} a \\ b\end{bmatrix}$
  • 해당 행렬을 정리하면 다음과 같은 결과를 얻는다.

    • $X = (A^TA)^{-1}A^TY$

      • A는 정방행렬(M*M)꼴의 행렬이 아니다.
      • 따라서 A의 전치행렬을 양 변에 곱해주어 정방행렬로 만든다.(역행렬을 구하기 위함)
        • 전치행렬 : M*N꼴의 A를 N*M꼴이 되도록 대각선 기준으로 위치를 바꾼 행렬
      • 양 변에 $A^TA$의 역행렬을 곱해서 X에 대한 식으로 정리한다.
  • 각 값에 대한 데이터는 모두 있으므로, 적용하면 $ax+b$에서 a와 b값을 구하여 최종 모델을 구한다.

  • 성능 평가

    • $\Sigma(실제값 - 예측값)^2$로 평가 지표를 표현할수 있다.

실습

  • !pip install statsmodels

  • 가설 세우기

    import statsmodels.fomula.api as smf
    
    # 선형회귀모델(linear regression model)
    # smf에서 제공하는 ols법을 사용.
    # 이때, 공식은 y=ax+b꼴이다.
    # 데이터는 df이다.
    # 훈련 개시.
    lm_model = smf.ols(fomula="y ~ x",data = df).fit()
    
    # 위에서 손으로 계산한 결과가 출력됨.
    lm_model.params
    
    
  • 시각화

    sns.lmplot(x='x',y='y',data=df)
    
  • 잔차평가(residue)

    • 잔차는 평균이 0인 정규분포를 따르는것이어야 함
    • 잔차 평가는 잔차의 평균이 0이고 정규분포를 따르는지 확인
    
    # 잔차는 lm_model을 통해 산출 가능
    resid = lm_model.resid
    
  • 결정 계수(R-Squared)

    • R-Squared = $\frac{SSR}{SST}$

    • $R^2 = \frac{\Sigma_{i=1}^{n}(\hat{y}-\mu)^2}{\Sigma_{i=1}^{n}(y-\mu)^2}$

    • SST : 참값이 가지는 평균으로부터의 오차합.

    • SSR : 예측값의 평균으로부터의 오차합.

    • 예측값 = 참값일때 1의 값을 가짐.

    • 따라서, 1에 가까울수록 정확한 모델.

    
    import numpy as np
    
    # 참값의 평균 = mu
    mu = np.mean(df['y'])
    
    # 참값
    y = df['y']
    
    # 예측값
    y_hat = lm_model.predict()
    
    # 수식 구현
    np.sum((y_hat - mu)**2) / np.sum((y-mu)**2)
    
    # 물론, 라이브러리에 이미 내장되어있다.
    lm_model.rsquared