본문 바로가기
  • "Backtest, backtest, backtest." - Martin Schwartz
[시스템개발] 트레이딩뷰, 웹, 앱

Prophet 모델을 사용하기 위한 데이터 준비 방법 - 특성 선택 (Feature Selection)

by Eirene 2023. 3. 28.
반응형

Prophet 모델을 사용하기 위한 데이터 준비 방법 - 특성 선택 (Feature Selection)

Prophet 모델을 사용하기 위한 데이터 준비 방법 중에서 특성 선택 (Feature Selection)을 배우고 예측의 정확성을 높이세요.

 

Prophet 모델을 포함한 모든 예측 모델을 구축할 때 데이터 준비는 중요한 단계입니다. Prophet 모델은 Facebook에서 개발한 인기 있는 오픈 소스 도구로, 시계열 데이터를 예측하는 데 사용됩니다. 여기에서는 정확하고 신뢰할 수 있는 Prophet 모델을 구축하기 위해 사용할 수 있는 다양한 데이터 준비 기술에 대해 논의로 여기에서는 특성 선택 (Feature Selection)에 알아 보도록 하겠습니다.

 

  1. 데이터 정제 (Data Cleaning)
  2. 시계열 분해 (Time Series Decomposition)
  3. 시계열 정상성 (Time Series Stationarity)
  4. 특성 선택 (Feature Selection)
  5. 학습-테스트 분할 (Train-Test Split)
  6. 하이퍼파라미터 튜닝 (Hyperparameter Tuning)

 

특성 선택 (Feature Selection)

특징 선택은 시계열 분석을 위한 정확하고 신뢰성 있는 Prophet 모델 구축에서 결정적인 역할을 합니다. 특징 선택의 목적은 모델 학습에 사용될 데이터에서 가장 중요한 특징을 선택하는 것입니다. 이 섹션에서는 시계열 데이터에서 특징 선택을 위한 몇 가지 기술과 모델 성능을 향상시키는 특징 공학 및 스케일링 기술에 대해 논의하겠습니다.

Prophet 모델에서 적절하고 중요한 변수를 선택

Prophet 모델에 대한 적절한 특징 선택은 정확하고 신뢰성 있는 예측을 위해 필수적입니다. 특징 선택을 위한 두 가지 기술로는 상관 분석과 특징 중요도가 있습니다.

상관 분석

상관 분석은 대상 변수와 가장 강한 상관 관계를 가지는 특징을 식별하는 기술입니다. 높은 상관 계수를 가진 특징은 대상 변수의 중요한 예측 요인으로 판단됩니다. 이를 위해서 pandas의 corr() 함수를 활용할 수 있습니다.

import pandas as pd

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Calculate correlation coefficients
corr_matrix = df.corr()

 

특징 중요도

일부 머신러닝 모델, Prophet 모델을 포함하여 각 특징에 대한 특징 중요도 점수를 제공합니다. 이러한 점수는 모델의 가장 중요한 특징을 식별하는 데 사용될 수 있습니다. 이를 위해서는 scikit-learn의 feature_importances_ 속성을 활용할 수 있습니다.

from sklearn.ensemble import RandomForestRegressor

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Split data into features and target variable
X = df.drop('target_variable', axis=1)
y = df['target_variable']

# Fit random forest model and calculate feature importance
model = RandomForestRegressor()
model.fit(X, y)
importances = model.feature_importances_

 

특징 (Feature) 엔지니어링 기술

특징 공학은 사용 가능한 데이터로부터 모델에 더 관련성 높거나 정보가 많은 새로운 특징을 만드는 과정입니다. 시계열 데이터에서 특징 공학을 위한 두 가지 일반적인 기술로는 lag 특징과 rolling 통계량이 있습니다.

Lag 특징

Lag 특징은 대상 변수나 다른 관련 변수의 과거 관측치를 기반으로 하는 특징입니다. 이러한 특징은 데이터의 패턴과 추세를 모델에 적용할 수 있습니다. 예를 들어 다음 달의 판매를 예측하려는 경우, 판매 기록의 과거 몇 개월치를 라그 특징으로 생성하여 추세를 포착할 수 있습니다. 이를 위해서는 pandas의 shift() 함수를 활용할 수 있습니다.

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Create lag features
df['lag1'] = df['target_variable'].shift(1)
df['lag2'] = df['target_variable'].shift(2)

Rolling 통계량

Rolling 통계량은 과거 관측치의 rolling window를 기반으로 하는 특징입니다. 이러한 특징은 lag 특징으로는 포착하지 못할 데이터의 추세와 패턴을 모델링할 수 있습니다. 예를 들어 rolling mean 또는 rolling standard deviation 특징을 생성하여 데이터의 추세와 변동성을 시간 경과에 따라 포착할 수 있습니다. 이를 위해서는 pandas의 rolling() 함수를 활용할 수 있습니다.

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Calculate rolling mean and standard deviation
df['rolling_mean'] = df['target_variable'].rolling(window=3).mean()
df['rolling_std'] = df['target_variable'].rolling(window=3).std()

푸리에 변환

푸리에 변환은 데이터의 주기적인 패턴을 포착하기 위해 사용될 수 있습니다. 이 기술은 데이터를 주파수 영역으로 변환하여 주기적인 패턴을 더 쉽게 식별하고 추출할 수 있습니다.

 

특징 (Feature) 스케일링

특징 스케일링은 특징을 공통적인 척도로 변환하여 모델에서 더 효과적으로 비교하고 사용할 수 있도록 하는 과정입니다. 특징 스케일링을 위한 두 가지 일반적인 기술로는 표준화와 정규화가 있습니다.

표준화

표준화는 특징을 평균이 0이고 표준 편차가 1인 척도로 변환하는 것입니다. 이를 위해서는 scikit-learn의 StandardScaler() 함수를 활용할 수 있습니다.

from sklearn.preprocessing import StandardScaler

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Instantiate and fit standard scaler
scaler = StandardScaler()
scaler.fit(df)

# Transform data
scaled_df = scaler.transform(df)

정규화

정규화는 특징을 0에서 1 사이의 범위로 변환하는 것입니다. 이를 위해서는 MinMaxScaler() 함수를 활용할 수 있습니다.

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Instantiate MinMaxScaler
scaler = MinMaxScaler()

# Normalize feature
normalized_feature = scaler.fit_transform(df[['feature']])
먼저 시계열 데이터를 DataFrame으로 로드합니다. 그런 다음 MinMaxScaler 객체를 인스턴스화하고 정규화하려는 특징에 적용합니다. 이렇게 정규화 된 특징이 포함된 normalized_feature 변수가 생성됩니다. 이 변수는 0에서 1의 범위를 가지도록 스케일링된 정규화 특징을 담고 있습니다.

 

Prophet 모델을 위한 적절한 특징 선택 기술 (Feature Selection)

상관 분석과 특징 중요도 분석은 Prophet 모델에 대한 적절한 특징 선택을 위한 일반적인 기술입니다. 먼저, 상관 분석은 대상 변수와 가장 강한 상관 관계를 가지는 특징을 식별하는 기술입니다. 이를 위해서는 pandas의 corr() 함수를 활용할 수 있습니다.

특징 중요도 분석은 Prophet 모델을 포함한 일부 머신러닝 모델에서 각 특징의 중요도를 제공합니다. 이를 활용하여 모델에 가장 중요한 특징을 선택할 수 있습니다. 이를 위해서는 scikit-learn의 feature_importances_ 속성을 활용할 수 있습니다.

 

Prophet 모델에서 적절한 변수를 선택

import pandas as pd
from fbprophet import Prophet

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv')

# Define relevant features
relevant_features = ['feature_1', 'feature_2', 'feature_3']

# Create Prophet model with relevant features
model = Prophet(columns=relevant_features)
model.fit(df)

특징 (Feature) 엔지니어링 - Lag Feature

import pandas as pd
from fbprophet import Prophet

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv')

# Create lag features
df['lag_1'] = df['target_variable'].shift(1)
df['lag_7'] = df['target_variable'].shift(7)
df['lag_30'] = df['target_variable'].shift(30)

# Create Prophet model with lag features
model = Prophet()
model.fit(df)

특징 (Feature) 엔지니어링 - Rolling Statistics

import pandas as pd
from fbprophet import Prophet

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv')

# Create rolling statistics
df['rolling_mean'] = df['target_variable'].rolling(window=7).mean()
df['rolling_std'] = df['target_variable'].rolling(window=30).std()

# Create Prophet model with rolling statistics
model = Prophet()
model.fit(df)

특징 (Feature) 스케일링 - 표준화

import pandas as pd
from fbprophet import Prophet
from sklearn.preprocessing import StandardScaler

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv')

# Standardize features
scaler = StandardScaler()
scaled_features = scaler.fit_transform(df[['feature_1', 'feature_2', 'feature_3']])
df[['feature_1', 'feature_2', 'feature_3']] = scaled_features

# Create Prophet model with standardized features
model = Prophet()
model.fit(df)

특징 (Feature) 스케일링 - 정규화

import pandas as pd
from fbprophet import Prophet
from sklearn.preprocessing import MinMaxScaler

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv')

# Normalize features
scaler = MinMaxScaler()
scaled_features = scaler.fit_transform(df[['feature_1', 'feature_2', 'feature_3']])
df[['feature_1', 'feature_2', 'feature_3']] = scaled_features

# Create Prophet model with normalized

 

위에서 언급된 기술 외에도, 시계열 데이터의 특징 선택 및 공학을 위한 고급 기술이 있습니다. 그 중 하나는 "시계열 특징 추출" 기술로, 이는 모델 학습에 사용할 수 있는 일련의 특징을 시계열 데이터에서 추출하는 것을 의미합니다.

시계열 특징 추출은 데이터의 중요한 특성을 포착하는 일련의 통계 및 수학적 특징을 계산하여 데이터에서 특징 집합을 추출하는 것입니다. 일부 시계열 특징의 예시는 다음과 같습니다:

  • 자기상관: 서로 다른 lag에서의 관측치 간의 상관관계를 측정합니다.
  • 부분 자기상관: 중간 관측치의 효과를 제거한 다른 lag에서의 관측치 간의 상관관계를 측정합니다.
  • 계절성: 데이터에서 계절 패턴의 존재와 강도를 측정합니다.
  • 추세: 데이터에서 선형 또는 비선형 추세의 존재와 강도를 측정합니다.
  • 엔트로피: 데이터의 복잡성 또는 무작위성을 측정합니다.
  • 에너지: 데이터의 크기 또는 강도를 측정합니다.
  • 주파수: 데이터의 주파수 내용 또는 스펙트럼 밀도를 측정합니다.

이러한 특징은 푸리에 변환, 웨이블릿 변환, 자기상관 함수와 같은 다양한 수학적 및 통계적 기술을 사용하여 계산할 수 있습니다. 특징이 계산되면, Prophet 모델 또는 다른 시계열 모델에 사용할 수 있습니다.

시계열 특징 추출을 위한 파이썬 예시 코드

# Import necessary libraries
import pandas as pd
import numpy as np
from tsfresh import extract_features

# Load data into DataFrame
df = pd.read_csv('time_series_data.csv', index_col=0, parse_dates=True)

# Extract time series features
features = extract_features(df, column_id='id', column_sort='time')
이 예시에서는 "tsfresh" 라이브러리를 사용하여 데이터에서 시계열 특징을 추출합니다. "column_id" 매개변수는 시계열 데이터를 식별하는 열을 지정하고, "column_sort" 매개변수는 시계열 데이터를 정렬하는 열을 지정합니다. 결과로 나오는 "features" DataFrame에는 각 시계열에 대해 계산된 특징 집합이 포함됩니다.

 

결론적으로, Prophet 모델을 구축할 때 특징 선택과 공학은 정확하고 신뢰할 수 있는 시계열 데이터 분석을 위한 중요한 단계입니다.

가장 관련성 높은 특징을 선택하고, 새로운 정보를 제공하는 특징을 생성하며, 적절하게 특징을 스케일링함으로써 모델의 성능과 정확도를 크게 개선할 수 있습니다. 위에서 설명한 기술과 예시는 시계열 분석에서 이러한 중요한 단계를 시작할 수 있는 출발점을 제공합니다.

 

다음으로는 학습-테스트 분할 (Train-Test Split)에 대해서 알아 보도록 하겠습니다.

 

Prophet 모델을 사용하기 위한 데이터 준비 방법 - 학습-테스트 분할 (Train-Test Split)

Prophet 모델을 사용하기 위한 데이터 준비 방법 중에서 학습-테스트 분할 (Train-Test Split)을 배우고 예측의 정확성을 높이세요. Prophet 모델을 포함한 모든 예측 모델을 구축할 때 데이터 준비는 중

backtesting.tistory.com

 

728x90
반응형

댓글