동의어:
moving-period regression, rolling window regression
개요: OLS를 rolling을 하며 적용하는 것. linear regression을 사용하지만 시간에 따른 변화를 허용. 기존의 linear regression은 time invariant해야 한다.
사용처:
시간의 흐름에 따라 변수 간 관계의 변화(특히 linear regression을 통해 알아 낸) 분석.
이를 통해, cor, R^2, beta, S.E. 등을 시각화 하면 분석에 도움 가능.
사용시 주의점:
1) width를 정하게 되면, starting position도 정하는 셈.
2) window의 크기를 고정하고 옮기는 대신, 계속 새로운 데이터를 추가하며 window를 늘리는 것도 방법
적용
from statsmodels.regression.rolling import RollingOLS
roll_reg = RollingOLS.from_formula('target ~ feature0 + feature1 -1', window=25, data=df)
model = roll_reg.fit()
model.params[20:30]
#이를 통해, feature들의 값이 어떻게 변하는 지를 확인 가능.
fig = model.plot_recursive_coefficient(variables=['feature0'])
plt.xlabel('Time step')
plt.ylabel('Coefficient value')
plt.show()
모델에 시각화가 가능한 함수가 들어 있다.
고정 window대신 확장 window
import statsmodels.api as sm
reg_rls = sm.RecursiveLS.from_formula(
'target ~ feature0 + feature1 -1', df)
model_rls = reg_rls.fit()
print(model_rls.summary())
여기에, 계수 값이 어떻게 변하는지를 확인 가능
fig = model_rls.plot_recursive_coefficient(range(reg_rls.k_exog), legend_loc='upper right')
ax_list = fig.axes
for ax in ax_list:
ax.set_xlim(0, None)
ax_list[-1].set_xlabel('Time step')
ax_list[0].set_title('Coefficient value');
공식 없이 사용시:
RollingOLS(endog=x.a,exog=sm.add_constant('a',axis=1), window=~)
endog: 의존변수, exog: 독립변수
이후, .fit(paramas_only=True)를 하면, parameter estimation외의 것이 생략.
참고:
https://lost-stats.github.io/Time_Series/Rolling_Regression.html
https://factorpad.com/fin/glossary/rolling-regression.html#:~:text=Rolling%20Regression%20is%20an%20analysis,generated%20from%20a%20linear%20regression.&text=For%20context%2C%20recall%20that%20measures,in%20Finance%20change%20over%20time.