2016-08-02 10 views
3

私は時間単位の分解能(商品価格)の5年間の時系列を含む.csvファイルを持っています。過去のデータに基づいて、私は6年目の価格の予測を作成したいと思います。統計モデルを使用した予測

私はPython(特にstatsmodels)と統計の両方の知識が最大限に制限されているので、これらのタイプの手続きに関する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ファイルのサンプルがあります。この場合、データは月別の解像度で表示されます。実際のデータではありません。無作為に数字を選んでここに例を示します(2年目の予測を作成するには1年で十分ですが、フルcsvファイル)が提供されています:次のように私の現在の進行状況がある

   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 

入力ファイルを読み取り、日時指標として日付列を設定した後、follwingスクリプトがの見通しを開発するために使用されました利用可能なデータ

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

:ICHには、以下の出力が得られます最初の行は出力を変更する)、実際の予測はかなりよく見えるので、もう1年(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機能を使用するときに、:次のようにそれを行うために

は、追加の行は、データフレームで作成され、私は何を得る

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'メソッドを使用しようとしましたが、 'module'属性 'SARIMAX'はありません。しかし、これは二次的な問題であり、必要に応じてより詳細になるでしょう。

forecast output

どこかに私はグリップを失っていると私はどこ見当がつかない。読んでくれてありがとう。乾杯!

+0

私にも同様の問題があります。あなたはそれを解決することができましたか?ありがとう – kthouz

+0

いいえ、私はそれを解決していません。私は仕事を中断し、決してこれに戻ってこなかったので、ある時点でそれを落としました。 – davidr

答えて

3

SARIMAXをサポートしていない旧バージョンの統計モデルを使用しているようです。最新のリリースバージョン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

ジェフDとfccoelhoに叫ぶ。ドキュメンテーションの言語は混乱していました。これを見て最終的には理にかなった。 – JJFord3

1

ARIMA(1,0,0)は1周期自己回帰モデルです。その手段は、時間tの値は、いくつかの定数(phi_0)プラスARMAモデルを当てはめることによって決定された値(phi_1)を乗算に等しいことは何

enter image description here

:だから、この式を次のモデルです前の期間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ドルです。明日はどうなりますか?それでおしまい。勢いやボラティリティなどについての情報はありません。それほど大したことはありません。

関連する問題