[zero-base/] DS Part 4. EDA - 30일차 스터디 노트

손윤재·2024년 1월 15일

제로베이스 DS 22기

목록 보기
31/55
post-thumbnail

실습 도구 5️⃣

【시계열 데이터 분석】에 사용된 라이브러리

Prophet

  • Facebook에서 개발한 시계열 예측 라이브러리이다.

  • 비교적 간단한 사용법과 높은 예측 정확도로 비전문가도 쉽게 활용할 수 있다.

  • 연간, 주간, 일간과 같은 시간 간격의 계절성을 자동으로 감지하고 이를 고려한 예측을 제공한다.

  • 특히 일일 주기를 갖는 시계열 데이터에 적합하도록 설계되어 있다.

  • 이상치(outliers)를 자동으로 감지하고 예측에 영향을 미치는 이상치를 제거하여 모델에 적용할 수 있는 기능을 제공한다.


🔰 설치

  1. 윈도우 OS는 Visual Studio Build Tool을 먼저 설치한다.

  2. pandas-datareader 모듈 설치

	conda install pandas-datareader
  1. prophet 모듈 설치
	conda install -c conda-forge prophet
  1. install이 안되면 구글 Colab을 사용한다.
    Google Colab은 pandas-datareader와 prophet 모듈이 설치되어 있는 환경이다.

💻 설치 확인

  • 모듈이 오류 없이 import 된다면 정상 설치된 것이다.

🔰 fbphophet 오류

  • fbprophet으로 import 하면 오류 발생 ❗

  • 공식 GitHub에서 이름이 변경되었음을 확인했다.

  • 근데 import prophet으로 다시 오류 발생 ❗

  • 경고 문구에서 plotly 모듈 import에 실패했다고 하여 해당 모듈 설치 후 오류 해결


🔰 기초 예제

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

  from pandas_datareader import data
  from prophet import Prophet

1. 시계열 데이터 생성

  • 임의의 2년 간의 일일 데이터가 sin 그래프 경향을 나타낸다고 가정한다.

  • sin 그래프에 약간의 편향성(+time)을 준다.

  • sin 그래프에 노이즈(+np.random.randn(365*2)/4)를 살짝 싣는다.

    // ds: 날짜
    ds = pd.date_range("2021-01-01", periods=365*2, freq="D")

    // y: 관측값
    time = np.linspace(0, 1, 365*2)
    fsin = np.sin(2 * np.pi * 12 * time) + time + np.random.randn(365*2)/4

    // DataFrame 생성
    df = pd.DataFrame({"ds": ds, "y": fsin})

    // 데이터 시각화
    df["y"].plot(figsize=(10, 6));

2. 모델 생성

  • 모델로 Prophet 객체를 생성한다.
	model = Prophet(yearly_seasonality=True, daily_seasonality=True)

3. 데이터 피팅

  • 임의로 만든 예제 데이터를 Prophet 객체에 넣어 학습시켜 준다.
	model.fit(df);

4. 미래 데이터 생성

  • 미래의 특정 기간(periods=)을 추가한 DataFrame을 생성한다.
	future_df = model.make_future_dataframe(periods=30)

5. 예측(forcast)

  • 학습한 데이터를 바탕으로 특정 기간 동안의 기대값 데이터를 예측한다.
	forecast = model.predict(future_df)

6. 예측 결과 시각화

  • 점이 찍혀있지 않은 그래프 부분이 학습에 의한 예측값 데이터이다.
	model.plot(forecast);

profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글