프로덕트 매니저/PM의 데이터

[시계열분석] Prophet 모델에 독립변수 추가하기

KmkmKim 2023. 3. 10. 00:47

들어가면서

우리가 어떤 변수에 대한 예측치를 정할 때, 그 예측치의 추세에 영향을 주는 것들이 있다. 예를 들면, 첫 구매 프로모션 혜택을 받게 될 고객을 예측한다고 가정해보자. 이런 경우, 첫 구매 수치는 아무래도 회원가입 추세를 따라가게 될 가능성이 크다. 이런 것처럼 어떤 변수를 예측할 때, 다른 원인이 되는 독립변수를 분석에 결합한다면 조금 더 정확한 추세를 분석할 수 있을 것이다. Prophet에서도 모델에도 add_regressor이라는 기능을 제공하고 있다.

 

 

# Prophet에 사용할 데이터프레임 생성
prophet_df = first_df[['first_promote_day', 'first_cnt', 'join_total']].rename(columns={'first_promote_day': 'ds', 'first_cnt': 'y'})

위에서 언급한 것처럼 첫 구매 프로모션이 어느 정도 지급될 것인지 예측하는 코드를 작성한다. first_promote_day는 첫 구매 프로모션이 지급되는 날짜이며, first_cnt는 첫 구매 프로모션이 지급된 횟수로 본다. 마지막으로 join_total이 회원가입으로 첫 구매 프로모션의 독립변수 역할을 하게 된다.

 

# 독립 변수 설정
prophet_df['join_total'] = joined_df['join_total']

# Prophet 모델 객체 생성 및 독립 변수 포함
n.add_regressor('join_total')

먼저, 'prophet_df'라는 데이터 프레임에서 'join_total'이라는 이름의 열을 생성한다. 이 열은 다른 데이터 프레임인 'joined_df'에서 'join_total' 열을 가져와서 넣은 것으로, Prophet 모델이 사용할 독립 변수를 설정하는 과정이다.

 

여기에, Prophet 모델 객체 'n'에 'add_regressor' 메소드를 이용하여 'join_total' 열을 포함시킨다. 이렇게 하면 Prophet 모델은 독립 변수로 'join_total'을 사용하여 시계열 데이터를 예측한다. 이를 통해, Prophet 모델은 시계열 예측에 독립 변수를 포함시켜 예측 정확도를 높이는 방법 중 하나인 '추가 예측 변수(regressor)'를 설정하게 된다.

 

# 모델 학습
n.fit(prophet_df)

# 31일간의 미래 예측
future = prophet_df[['ds', 'y', 'join_total']].copy()
future = future.append(pd.DataFrame({'ds': pd.date_range(start=prophet_df['ds'].max() + pd.Timedelta(days=1), periods=31, freq='d')}))
forecast = n.predict(future)

# 모델의 성능평가
df_cv = cross_validation(n, horizon='30 days', period='60 days', initial='300 days')
df_pm = performance_metrics(df_cv)
fig = plot_cross_validation_metric(df_cv, metric='mape')

이후 코드는 동일하다. 자세한 설명은 이전에 작성한 콘텐츠를 확인하면 될 것 같다.

 

[시계열분석] Prophet 모델에 한국 공휴일 추가하기

들어가면서 내가 처음 입사했을 때, 회사에서는 매월 주요 지표를 예측하는 과정은 기존에 엑셀의 회귀분석 기능을 활용했다. 나도 작년까지는 이런 회귀분석과 Cohort 추이 분석을 토대로 필요

dzkm.tistory.com

 

실제로 성능평가를 해본 결과, 다음과 같이 나온다

종속변수를 결합한 모델 독립변수를 결합한 모델
horizon     30 days 00:00:00
mse               178.607987
rmse                13.36443
mae                11.617794
mape                0.146222
mdape               0.082588
smape               0.133005
coverage                 1.0
Name: 27, dtype: object
horizon     30 days 00:00:00
mse               147.300523
rmse               12.136743
mae                10.536745
mape                0.130796
mdape               0.062118
smape               0.119366
coverage            0.666667
Name: 27, dtype: object

종속변수인 첫 구매 프로모션 횟수에 영향을 주는 회원가입이라는 독립변수를 추가해서 비교할 수 있다. 만약 결과값이 위의 예시처럼 나타난다면, 독립변수를 설정한 것의 오차가 더 적기 때문에 모델의 성능이 더 좋다고 볼 수 있다. 

 

더 나아갈 경우, 시계열 분석에서 독립변수와 종속변수의 영향력을 판단할 때 활용하는 그레인저 인과성 검정이 있다. 이 방법에 대한 부분은 다음 글에서 포스팅해보겠다.