Thief of Wealth

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하지 않다.

profile on loading

Loading...