2010-12-18 9 views
22

계절적 또는 일일 패턴을 가진 것으로 알려진 데이터의 경우 푸리에 분석을 사용하여 예측을하고 싶습니다. 시계열 데이터에서 fft를 실행 한 후에 계수를 얻습니다. 어떻게 이러한 계수를 예측에 사용할 수 있습니까?시계열 예측을 위해 푸리에 분석 사용

FFT는 수신 한 모든 데이터가 한주기를 구성한다고 가정합니다. ifft를 사용하여 데이터를 재생성하면 함수의 연속성을 다시 생성하므로 향후 값으로 사용할 수 있습니까?

간단히 말해서 : t = 0,1,2, .. 10에 대해 fft를 실행하고 coef에서 ifft를 사용하면 t = 11,12, ... 20에 대해 재생성 된 시계열을 사용할 수 있습니까?

답변

18

노이즈 제거 노이즈 제거의 조합을 원하는 것처럼 들립니다.

관찰 된 데이터를 여러 기간에 걸쳐 반복하고 싶다고합니다. 그럼, 관찰 된 데이터를 반복하십시오. 푸리에 해석이 필요 없습니다.

하지만 "패턴"을 찾고 싶을 수도 있습니다. 나는 이것이 관찰 된 데이터에서 지배적 인 주파수 성분을 찾는 것을 의미한다고 가정합니다. 그렇다면 푸리에 변환을 사용하여 가장 큰 계수를 보존하고 나머지는 제거하십시오. 주기적으로 반복로서는

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

상기 신호의 x z = [x, x], 즉, 두 기간하자. {0, 1, ..., N-1}에있는 k에 대해서는 Z[2k] = X[k]이고, 그렇지 않으면 0입니다.

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

그래서 Z에서 가장 중요한 계수를 반복합니다 (위의 예제에서 두 번). ifft를 사용하여 시간 계열을 다시 생성하면이 새로운 계열은 원래 것보다 길어지고 정의에 의해 예측됩니다. – user423805

+1

나는 가장 중요한 계수를 고르는 것을 의미합니다. – user423805

+1

'Z = [X [0], 0, X [1], 0, X [2], 0, ..., X [N-1], 0]'. 그것이 당신이 의미하는 바라면 그렇습니다. 그리고 예, 가장 중요한 계수를 유지하면 신호에 "평활"또는 "흐리게"또는 "노이즈 제거"효과가 나타납니다. –

6

시계열 데이터에서 FFT를 실행하면 주파수 도메인으로 변환됩니다. 계수는 계열의 항 (사인과 코사인 또는 복소 지수)을 각각 다른 빈도로 곱합니다.

외삽은 항상 위험한 일이지만, 사용해 볼 수는 있습니다. 미래를 예측하기 위해 과거 정보를 사용합니다 : "오늘을보고 내일의 날씨를 예측하십시오." 위험을 인식하고 있어야합니다.

"Black Swan"을 읽는 것이 좋습니다.

+2

나는 Black Swan을 읽었습니다. 나는 반드시 주가에 대해 말하는 것이 아닙니다. 매우 계절적 인 데이터를 수집하거나 유명한 흑점 데이터를 가정 해 봅시다. 그래서 저는 예측 가능한 것에 대해 이야기하고 있습니다. – user423805

+0

좀 더 자세히 설명하겠습니다. 데이터에서 꽤 우세한 빈도를 찾아 냈다고합시다. 이것을 시간 도메인 데이터의 포인트로 묶는 방법은 앞으로 나아가고 미래에 뛰어 들고 예측을 할 수 있습니다. – user423805

+2

+1. 외삽 법은 위험합니다. 보통 사람들은 모델을 만들고 모델이 말하는 것처럼 미래가 움직일 것이라고 가정합니다. 모델은 현재 또는 과거 관측치로 추정되는 매개 변수에 따라 다릅니다. 그래서 당신은 어떤 것을 "예측"하지 않으며, 당신은 단지 모델에 적합합니다. –

18

나는이 질문은 더 이상 당신을 위해 실제하지 수 있다는 것을 알고 있어요,하지만 당신은을 실행하기 전에 답을 찾고 다른 사람을 위해 파이썬 https://gist.github.com/tartakynov/83f3cd8f44208a1856ce

에 푸리에 추정의 아주 간단한 예를 썼다 스크립트는 모든 종속성이 설치되어 있는지 확인하십시오 (numpy, matplotlib). 자유롭게 실험 해보십시오. enter image description here P. 국지적으로는 정지형 웨이블릿이 푸리에 외삽보다 우수 할 수 있습니다. LSW는 일반적으로 시계열 예측에 사용됩니다. 푸리에 (fourier) 외삽 법의 가장 큰 단점은 시계열의 길이가 N 인 기간 N으로 시리즈를 반복한다는 것입니다.

+0

죄송합니다. x (파란색 선)는 관찰 된 데이터입니까? 외삽 (빨간색 선)은 예측입니까? –

+0

@jeffery_the_wind 예, 빨간색 선은 예측이고 파란색은 관측 된 데이터입니다. 모델의 고조파 수를 조정할 수 없도록이 예에서는 분명히 초과 적용이 있습니다. – tartakynov

+2

이 훌륭한 시각적 예제는 다른 게시물에서 지적한 약점을 보여줍니다. 즉, 주파수 도메인은 특성상 시간 도메인에서 고정 사이클을 생성합니다. 위의 빨간 선 외삽 법은 약간의 노이즈가 있지만 청색 (관측 된) 선의 시작 부분 사본 인 simpy입니다. 따라서 수평선 * h * 시간 단위에 대해 의미있는 단기 예측을 수행하려면 * 역사적인 관측치의 수는 가장 중요한 ** 높은 ** 주파수 계수 만 외삽 법에 사용해야합니다. "높은"주파수 임계 값은 * h *와 관련하여 임의로 정의 될 수 있습니다. –

0

당신이 (overfitting)를 FORCAST에 정확히 같은 시간 시리즈를 반복하지 않도록, 게시 @tartakynov 라이브러리를 사용할 수 있습니다, 당신은 n_param를 호출 한 함수에 새로운 매개 변수를 추가하고 진폭에 대한 h 하한을 해결할 수 있습니다 의 주파수.

def fourierExtrapolation(x, n_predict,n_param): 

은 일반적으로 당신은 신호, 당신이 선택하면이 당신이 신호의주기적인 성질을 분리 할 수있을 것입니다 주파수가 다른 사람보다 훨씬 더 높은 진폭을 가지고 몇 가지 주파수이기 때문에, 그것을 찾을 수

당신이 특정 번호로 determinated하는이 두 줄을 추가 할 수 있습니다 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 고정;) –