2010-12-18 23 views
22

季節、または日々のパターンを持つことが知られているデータについては、フーリエ解析を使用して予測を行うことができます。時系列データでfftを実行した後、係数を取得します。これらの係数を予測に使用するにはどうすればよいですか?時系列予測のためのフーリエ解析の使用

私はFFTが受信したすべてのデータが1つの期間を構成すると仮定していますが、単にifftを使ってデータを再生成すると、私は関数の継続を再生成しています。

単純に言えば、私はfftをt = 0,1,2、.. 10で実行し、次にcoeftでifftを使うと、t = 11,12、... 20の回生時系列を使うことができますか?

答えて

18

外挿と組み合わせるといいでしょう。ノイズがあります。

複数の期間にわたって観測データを繰り返したいとします。さて、観測されたデータを繰り返してください。フーリエ解析の必要はありません。

しかし、あなたはまた、 "パターン"を探したいと思っています。私はそれが観測されたデータの支配的な周波数成分を見つけることを意味すると仮定します。次に、フーリエ変換を行い、最大の係数を保存し、残りの成分を除去します。周期的な繰り返しとして

X = scipy.fft(x) 
Y = scipy.zeros(len(X)) 
Y[important frequencies] = X[important frequencies] 

:信号xz = [x, x]、即ち、二つの期間をしましょう。 {0,1、...、N-1}のすべてkの場合はZ[2k] = X[k]、それ以外の場合は0です。

Z = scipy.zeros(2*len(X)) 
Z[::2] = X 
+1

Zで最も重要な係数を繰り返しています(上記の例では2回)。ifftを使用して時系列を再生成すると、この新しい系列は元のものよりも長くなり、定義によって予測されます。 – user423805

+1

私は、あなたが最も重要な係数を選ぶことを意味すると思います。 – user423805

+1

'Z = [X [0]、0、X [1]、0、X [2]、0、...、X [N-1]、0]'。それがあなたが意味するものなら、そうです。そして、最も重要な係数を保存すると、信号に「スムージング」または「ブラーリング」または「ノイズ除去」効果が生じます。 –

6

時系列データに対してFFTを実行すると、そのデータは周波数領域に変換されます。係数は、それぞれ異なる周波数を有する系列(サインおよびコサインまたは複素指数)の項を掛けます。

外挿は常に危険なことですが、試してみることは大歓迎です。過去の情報を使用して、これを行うときの将来を予測する:「今日を見て明日の天気を予測する」リスクを認識してください。

"Black Swan"とお読みください。

+2

私はブラックスワンを読んだ。私は必ず株価を話すわけではありません。非常に季節的なデータ、または有名な黒点のデータを収穫するとしましょう。だから私は予測可能なことについて話している。 – user423805

+0

もう少し明確にしましょう:私がデータでかなり支配的な頻度を特定したとしましょう。これをタイムドメインデータのポイントにどのように結びつけるのか、私は先に飛び越えて将来予測して予測を行うことができます。 – user423805

+2

+1。外挿は危険です、はい。通常、人々はモデルを作って、未来はモデルが言うように行動すると仮定します。モデルは、現在または過去の観測値で推定されるパラメータに依存します。だからあなたは何も予測せず、モデルにしか合致しません。 –

18

私はこの質問にはもうあなたのために実際のではないであり得ることを認識してんだけど、あなたが実行する前に答えを探している他人のために私は、Python https://gist.github.com/tartakynov/83f3cd8f44208a1856ce

にフーリエ外挿の非常に簡単な例を書きましたスクリプトにすべての依存関係がインストールされていることを確認してください(numpy、matplotlib)。それを試してみてください。 enter image description here P.S.局所的に静止したウェーブレットは、フーリエ外挿より優れています。 LSWは、時系列の予測によく使用されます。フーリエ外挿の主な欠点は、期間Nの系列を繰り返すことです。ここでNは時系列の長さです。

+0

x(青線)は観測データですか?外挿(赤線)は予測ですか? –

+0

@jeffery_the_windはい、赤い線は予測値で、青色は観測データです。この例では、モデルの高調波の数を調整できないようにするため、オーバーフィットがあることは明らかです。 – tartakynov

+2

この優れた視覚的な例は、他のポストで指摘された弱点を示しています。周波数ドメインは、性質上、時間領域で固定サイクルを生成します。上の赤​​線補外法は、わずかにノイズが除去されているにも関わらず、青色(観測された)線の最初の部分のコピーである。したがって、地平線* h *時間単位で意味のある短期予測を行うには、歴史的観測値の数である、最も重要な**高周波数係数のみを外挿で使用する必要があります。 「高い」周波数閾値は、* h *に関して任意に定義することができる。 –

0

あなたが投稿@tartakynovライブラリを使用することができますと、予報(過剰適合)で正確に同じ時系列を繰り返さないために、あなたはn_param呼ばれる関数に新しいパラメータを追加し、振幅の下限hを修正することができます周波数の

def fourierExtrapolation(x, n_predict,n_param): 

は通常、あなたは信号に、あなたが選択した場合、これはあなたが信号の周期的な性質を分離することができます周波数、そこに他のものよりも大幅に高い振幅を有するいくつかの周波数があるので、それを見つけるだろう

あなたは、特定の数でdeterminatedされ、この2行を追加することができますn_param

h=np.sort(x_freqdom)[-n_param] 
x_freqdom=[ x_freqdom[i] if np.absolute(x_freqdom[i])>=h else 0 for i in range(len(x_freqdom)) ] 

ちょうどあなたが予想することができるようになりますこれを追加素晴らしく、スムーズな

もう一つの便利な記事FFtについて: forecast FFt in R

+0

こんにちは、あなたが提供しているリンクが壊れています。可能であれば再度投稿してもらえますか?ありがとうございました。 – dhinar

+1

@DhivyaNarayanasamy fixed;) –

関連する問題