from statsmodels.tsa.stattools import adfuller
def test_stationarity(x): # x 시간과 값이 주어진 pandas series
# Determining rolling statistics
rolmean = x.rolling(window=22, center=False).mean() # 22개 기준으로 이동평균
rolstd = x.rolling(window=12, center=False).std() # 12개 기준으로 이동표준편차
# Plot rolling statistics
orig = plt.plot(x.values, color='blue', label='Original') # 원래값
mean = plt.plot(rolmean.values, color='red', label='Rolling Mean') # 이동평균값
std = plt.plot(rolstd.values, color='black', label='Rolling Std') # 이동표준편차값
plt.legend(loc='best')
plt.title('Rolling Mean & Standard Deviation')
plt.show(block=False)
# Perform Dickey Fuller test
# augmented dickey fuller test돌려서 결과값 얻음, stationary검증을 할 떄 주로 사용됨.
# 반환값은 https://www.statsmodels.org/stable/generated/statsmodels.tsa.stattools.adfuller.html 참고
result = adfuller(x)
print(F"ADF Statistic: {result[0]:f}")
print(F"p-value: {result[1]:f}")
pvalue=result[1]
for key, value in result[4].items():
if result[0] > value:
print("***The graph is non stationary***")
break
else:
print('***The graph is stationary***')
break
print('Critical Values: ')
for key, value in result[4].items():
print(F"\n{key:s}: {value:.3f}")
위 함수를 쓰면 station한지 알 수 있다. 보통은 station하지 않다.
'개발 > ML+ Data Science' 카테고리의 다른 글
AttributeError: 'float' object has no attribute 'log' 해결법 (0) | 2019.10.11 |
---|---|
39가지 dataset 통계적분석 process (0) | 2019.10.11 |
시계열 분석 ARIMA에 대해서 (0) | 2019.10.08 |
LabelEncoder가 동작하지 않을때 pd.factorize 쓰기 (0) | 2019.10.06 |
ML에서 OOF (out of the folds)란? (0) | 2019.10.06 |