2016-08-02 4 views
3

나는 시간별 해상도 (commoditiy price)를 갖는 5 년 시계열을 포함하는 .csv 파일을 가지고 있습니다. 과거 데이터를 바탕으로 6 학년 가격 예측을 만들고 싶습니다.통계 모델을 사용하여 예측

저는 이러한 유형의 절차에 관한 www에 관한 몇 가지 기사를 읽었습니다. 파이썬 (특히 통계 모델)과 통계에 대한 지식이 제한되어 있으므로 기본적으로 코드에 코드를 기반으로합니다.

는 관심이있는 사람들을위한 링크입니다 : 모든

http://www.seanabu.com/2016/03/22/time-series-seasonal-ARIMA-model-in-python/

http://www.johnwittenauer.net/a-simple-time-series-analysis-of-the-sp-500-index/

먼저, 여기에 .csv 파일의 샘플입니다. 이 경우 월별 해상도로 데이터가 표시됩니다. 실제 데이터가 아닙니다. 여기에 예제를 제공하기 위해 무작위로 숫자를 선택합니다 (이 경우 1 년이면 2 년차 예측을 개발할 수 있고, 전체 CSV 파일)로 볼 수 있습니다 :

입력 파일을 읽고 날짜 인덱스로 날짜 열을 설정 한 후 follwing을 스크립트에 대한 예측을 개발하는 데 사용 된 다음과 같이

   Price 
2011-01-31 32.21 
2011-02-28 28.32 
2011-03-31 27.12 
2011-04-30 29.56 
2011-05-31 31.98 
2011-06-30 26.25 
2011-07-31 24.75 
2011-08-31 25.56 
2011-09-30 26.68 
2011-10-31 29.12 
2011-11-30 33.87 
2011-12-31 35.45 

내 현재 진행 상황은 사용 가능한 데이터

model = sm.tsa.ARIMA(df['Price'].iloc[1:], order=(1, 0, 0)) 
results = model.fit(disp=-1) 
df['Forecast'] = results.fittedvalues 
df[['Price', 'Forecast']].plot(figsize=(16, 12)) 

, wh 내가 말했듯이, 나는 어떤 통계 능력이 없어하지 않고 내가 순서는 내부 속성 변경, 기본적으로이 출력 (에 도착 방법을 모르고 거의가 지금

5-year timeseries, hourly resolution data

: 무형 문화 유산은 다음과 같은 출력을 제공합니다 첫 번째 줄은 출력을 변경), '실제'예측은 상당히 좋아 보이며 또 다른 해 (2016)로 연장하고 싶습니다. 마지막으로

start = datetime.datetime.strptime("2016-01-01", "%Y-%m-%d") 
date_list = pd.date_range('2016-01-01', freq='1D', periods=366) 
future = pd.DataFrame(index=date_list, columns= df.columns) 
data = pd.concat([df, future]) 

내가 statsmodels의 .predict 기능을 사용하는 경우 : 다음과 같이 그렇게하기 위해

은 추가 행은 dataframe에서 만든 내가 무엇을 얻을

data['Forecast'] = results.predict(start = 1825, end = 2192, dynamic= True) 
data[['Price', 'Forecast']].plot(figsize=(12, 8)) 

예측은 예측과 같이 전혀 보이지 않는 직선입니다 (아래 참조). 또한, 현재 1825 번째에서 2192 번째 날 (2016 년)부터 6 년 전체 기간까지 범위를 확장하면 예측 기간은 전체 기간 (2011-2016)에 대한 직선입니다.

계절 변화 (이 경우에는 의미가 있음)를 설명하는 'statsmodels.tsa.statespace.sarimax.SARIMAX.predict'메소드를 사용하려고했지만 '모듈'에 대한 오류가 발생합니다. 'SARIMAX'속성이 없습니다. 그러나 이것은 2 차적인 문제이며, 필요하다면 더 자세히 설명 할 것입니다.

forecast output

어딘가에 나는 그립을 잃고, 그리고 난 곳 아무 생각이 없습니다. 읽어 주셔서 감사합니다. 건배!

+0

나는 비슷한 문제가 있습니다. 당신이 그것을 해결할 수 있었습니까? 고마워요 – kthouz

+0

아니, 나는 그것을 해결하지 않았습니다. 내 작업에서 약간의 인터럽트가 있었기 때문에 어느 시점에서 그 값을 떨어 뜨 렸습니다. 다시는이 값으로 되돌아 가지 않습니다. – davidr

답변

3

SARIMAX를 지원하지 않는 이전 버전의 statsmodels을 사용하고있는 것처럼 들립니다. 최신 릴리스 버전 0.8.0을 설치하고자 할 것입니다. http://statsmodels.sourceforge.net/devel/install.html을 참조하십시오.

저는 아나콘다를 사용하고 있으며 pip를 통해 설치했습니다.

pip install -U statsmodels 

SARIMAX 모델의 결과 클래스에는 예측을 포함한 유용한 메소드가 많이 있습니다.

data['Forecast'] = results.forecast(100) 

미래를 100 단계 예측하기 위해 모델을 사용합니다.

+1

샘플을 예측하기 위해 외생 변수가 있다면 먼저 예측을 제공해야합니다. 가지고 있지 않다). – fccoelho

+0

Geoff D와 fccoelho에게 외쳐보세요. 설명서의 언어가 혼란 스러웠습니다. 이것을 보면 마침내 의미가 있습니다. – JJFord3

1

ARIMA (1,0,0)는 1 회 자동 회귀 모델입니다. 그래서,이 식을 따르는 모델이다 :

enter image description here

어떤 것을 의미하는 시간 (t)의 값이 어떤 일정 (phi_0)을 더한 곱한 ARMA 모델 (phi_1)를 피팅에 의해 결정되는 값이다 이전 기간 r_ (t-1)의 값과 백색 잡음 오차 항 (a_t)을 더한 값.

모델에는 1주기의 메모리 만 있으므로 현재 예측은 이전 기간의 1 값으로 완전히 결정됩니다. 그것은 매우 복잡한 모델이 아닙니다. 그것은 이전의 모든 가치들에 대해 어떤 것도하지 않고 있습니다. 그것은 단지 어제의 가격을 가져다가 값을 곱하고 상수를 더하는 것입니다. 당신은 그것이 평형에 빨리 도달하고 거기에 영원히 머물 것으로 기대해야합니다.

위쪽 그림의 예측이 매우 좋아 보이는 이유는 매번 새로운 기간마다 새로 시작되는 수백 개의 1 기간 예측을 보여주는 것입니다. 아마 그것이 그렇게 생각하는 것처럼 장기간의 예측을 보여주지는 않습니다. 링크를 보면

당신이 보내

http://www.johnwittenauer.net/a-simple-time-series-analysis-of-the-sp-500-index/

이 모델은 당신이 원하는 당신을 포기하지 않는 이유를 그는 설명 섹션을 참조하십시오.

"언뜻보기에는이 모델이 꽤 잘 작동하는 것처럼 보입니다. 그러나 예측이 정말 비슷해 보이지만 (선은 거의 구별 할 수 없지만) 우리는 차분하지 않은 계열을 사용했음을 기억하십시오! 인덱스는 전체 절대 값에 상대적으로 작은 비율로 매일 변동합니다. 우리가 정말로 원하는 것은 첫 번째 차이 또는 일별 이동을 예측하는 것입니다. 우리는 차분 된 계열을 사용하여 모델을 다시 실행할 수 있습니다 또는 동일한 것을 수행해야하는 ARIMA 모델에 ("(1, 1, 0)"모델을 생성하는) "I"용어를 추가하십시오. 차이점 시리즈를 사용해 보겠습니다. "

수행하려는 작업을 수행하려면 이러한 모델에 대한 더 많은 연구를 수행하고 데이터 서식 지정 방법과 적절한 모델을 찾아야합니다. 가장 중요한 것은 모델에 공급하는 데이터에 포함되어 있다고 믿는 정보를 아는 것입니다. 현재 귀하의 모델이하려고하는 것은 "오늘 가격은 $ 45입니다. 내일은 가격이 어떻게 되나요?" 그게 전부 야. 그것은 운동량, 변동성 등에 대한 정보를 가지고 있지 않습니다.