6.4 시계열 분석 스터디노트_fbprophet

소리·2023년 10월 11일
0

fbprophet

  • 시계열 분석 : 시간의 흐름에 따라 정렬된 데이터에서 의미있는 요약과 통계 정보를 추출, 분석, 예측하는 방법론

  • fbprophet 란? 페이스북에서 만든 오픈 소스로 시계열 분석 예측(모델링) 라이브러리 (파이썬, R모듈)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

time = np.linspace(0, 1, 365*2)
result = np.sin(2*np.pi*12*time)
ds = pd.date_range("2018-01-01", periods=365*2, freq = "D")
df = pd.DataFrame({"ds": ds, "y": result})
df.head()

#시계열 학습
import fbprophet from Prophet

m = Prophet(yearly_seasonlity = True, daily_seasonality=True)
m.fit(df)

#예측
future = m.make_future_dataframe(periods=30) #30일을 예측
forecast = m.predict(future)
#예측 시 make_futrue_dataframe을 이용해 미래의 datafram 만들어줌 predict로 채워넣기(?)
m.plot(forecast)

.
.

Prophet 파라미터(매개변수)

: prophet를 사용하기 위해서는 ds(datastamp)와 수치로 작성한 데이터 자료(y)가 필요하다.

m.plot_components(forecast) 예측 구성요소를 볼 때 사용하며 시계열 추세, 연간 계절성, 주간 계절성 (공휴일 포함)을 볼 수 있다.

seasonality_prior_scale yearly_seasonality, weekly_seasonality, daily_seasonality 와 관련 있는 파라미터로 날짜 데이터의 패턴의 유무를 표시

changepoint_prior_scale 추세에 따라 데이터를 유연하게 반영할 것인지 여부를 결정, 추세에 덜 유연하게 반응하려면 0.05보다 작게 설정
+주변 날짜를 포함시키기 위해 lower_window, upper_window를 사용해 업데이트의 영향을 조절 가능
예) 기준일에 전 날을 포함하면 lower_window = -1, upper_window = 0, 기준일에 다음 날까지 포함 lower_window = 0, upper_window = 1

holiday_prior_scale default = 10.0 주기성을 가지지 않지만 큰 영향을 주는 독립적인 이벤트가 존재할 경우
+add_country_holidays(country_name='KR') 으로 한국의 휴일반영 가능

make_futrue_dataframe(periods=30, freq='D') 미래를 예측할 데이터프레임 자리를 만들어 놓는 것

forecast_data.yhat.values[-120:] 예측
forecast_data.yhat_lower.values[-120:] 불확실성 구간 lower
forecast_data.yhat_upper.values[-120:] 불확실성 구간 upper

참고1 참고2 / 활용방법 나중에 보자
.
.

함수의 기초

  • def 함수를 설정할 때 return 은 반환하는 값을 저장하고, print는 출력 기능만 하지 저장하진 않는다.
    🔑 계속 헷갈렸던 부분인데 명확하게 구분되었다.

예)
-return을 사용하면,

def test_def(a, b):
	return a+b
    
c = test_def(2, 3)
print(10 + c)

--result
10

-print를 사용하면,

def test_def(a, b):
	print a+b
    
c = test_def(2, 3)
print(10 + c)

--result
TypeError
  • def 내에서의 변수와 밖에서의 변수는 이름이 같아도 다른 것이다. (지역변수 / 전역변수)

  • $$ 식 $$를 하면 수학 식(가운데 정렬)로 만들 수 있다.

  • %%writefile ./drawSinWave.py 로 파일을 만들 수 있다.

  • jupyter 에서 def 설명보기 shift + tap
    기능을 만들고 설명을 추가하려면 ~~ (점 3개 찍기) 로 적으면 된다.

.
.

함수를 불러올 때 여러 변수를 넣어야하지만 작성하지 않을 때 기본값을 불러오게 하는 방법

def plotSinWave(**kwargs): # **가 중요하고 그 뒤에 영어는 상관없음

	```
    plot sin wave
    y = a sin(2 pi f t + t_0) + b
    ```
    
   endTime = kwargs.get('endTime', 1)
   sampleTime = kwargs.get('sampleTime', 0.01)
   amp = kwargs.get('amp', 1)
   freq = kwargs.get('freq', 1)   
   startTime = kwargs.get('startTime', 1)
   bias = kwargs.get('bias', 1)
   figsize = kwargs.get('figsize', 1)
   
   time = np. arange(startTime, endTime, sampleTime)
   result = amp + np.sin(2 * np.pi * freq * time + startTime) + bias
   
   plt.figure(figsize=(12,6))
   plt.plot(time, result)
   plt.grie(True)
   plt.xlabel('time')
   plt.ylabel('sin')
   plt.title(str(amp) + '*sin(2*pi' + str(freq) + 
   '*t+' + str(startTime) + ')+' + str(bias))
   plt.show()

.
.

모듈로 만들어서 함수를 import로 불러오기

(1) .py로 파일을 만들어야 함.

(2) if __name__ == "__main__": 이 있어야 함수가 실행됨 (함수를 돌리라는 명령)

-> __name__ 에서는 어디서 실행했는지가 저장됨
직접 실행한 것인지, 다른 코드에서 import로 불러와지는 것인지 판단해서 직접 실행한 경우 동작을 함, main 이면 직접 실행했다는 소리
위 코드 이어서

 if __name__ == "__main__":
 	print("Hello Word")
    print("This is test graph")
    plotSinWave(amp=1, endTime=2) #여기서 실행!
profile
데이터로 경로를 탐색합니다.

0개의 댓글