안녕하세요. 저희는 이번 KHUDA 4기 Let's experience Jeju together 프로젝트를 하게 된 KHUDA 4기 김민석, 최호윤, 한주상이라고 합니다. 저희는 Dacon에서 제주도 특산물에 대한 가격 예측 경진 대회에 참여했습니다. 구성원 모두 데이터 관련 경진 대회 경험을 얻고 싶어 이 프로젝트를 11.8 ~ 12.3일 까지 진행 하게 되었습니다.
- 날짜 정보 EDA
연도별 가격 평균을 통해 해가 갈수록 가격상승을 파악
월별 가격 평균을 통해 계절 별로 가격의 변화를 파악
- 시계열 정보 EDA
- 이상치 EDA
- 자동 회귀 예측 통합 이동 평균 분석 모델(ARIMA)로 예측 시도
파이썬 모듈 statsmodels.tsa에서 ARIMA 모델 사용
p = 자기회귀 부분의 차수 d = 1차 차분이 포함된 정도 q = 이동 평균 부분의 차수
# 모델 학습하고 예측하기
ar_400 = TSA.arima.model.ARIMA(train_element.loc[:, 'total_price(원)'], order=(3, 1, 3))
ar_400_mod = ar_400.fit()
predict_total_price = ar_400_mod.predict("2023-03-04", "2023-03-31", dynamic=True)
ar_400_supply = TSA.arima.model.ARIMA(train_tg_A_J.loc[:, 'supply(kg)'], order=(3, 1, 3))
ar_400_supply_mod = ar_400_supply.fit()
predict_supply = ar_400_supply_mod.predict("2023-03-04", "2023-03-31", dynamic=True)
ar_400 = ar_400.initialize()
ar_400_supply = ar_400_supply.initialize()
test_price_list+= (predict_total_price / predict_supply).to_list()
이를 통한 ACF 그래프로 시각화을 하였습니다.
- 자동 머신러닝 학습 모듈(AutoGulon) 시도
# 모델을 위한 데이터준비
from autogluon.timeseries import TimeSeriesDataFrame, TimeSeriesPredictor
tr_time_df = TimeSeriesDataFrame(train_df.drop(columns=['ID','corporation','location','item']))
test_time_df = TimeSeriesDataFrame(test_df.drop(columns=['ID','corporation','location', 'item']))
model = TimeSeriesPredictor(prediction_length = 28,target = 'price(원/kg)', known_covariates_names=["year", "month", "day", "weekday"], eval_metric='RMSE')
model.fit(tr_time_df,presets="best_quality", time_limit=20000, random_seed=42) # fitting
result = model.predict(tr_time_df, known_covariates=test_time_df, random_seed=42) # 예측(테스트 데이터를 이용)
이에 대한 데이터 시각화 (일정적으로 규칙적으로 변화가 있다는 것을 확인했다.)
-
공휴일의 데이터 값을 0으로 변경
-
일요일의 데이터 값을 0으로 변경
-
음수로 예측한 값을 0으로 변경
-
Dacon 대회에서 제일 중요한 건 점수다.
-
데이터를 이해하는 것이 제일 중요.
-
어떤 모델을 쓰냐?(X) 파라미터 튜닝?(X) 전처리 및 후처리를 어떻게 하냐?(O)
-
DACON 대회본선 순위권에 들고 나서 기법에 대해 이해해도 된다.
코드는 github에 파일 올려놨으니 참고해주시기 바랍니다!
ARIMA 모듈 URL
https://www.statsmodels.org/stable/generated/statsmodels.tsa.arima.model.ARIMA.html
AutoGluon URL
TimeSeriesDataFrame
https://auto.gluon.ai/stable/api/autogluon.timeseries.TimeSeriesDataFrame.html
TimeSeriesPredictor
https://auto.gluon.ai/stable/api/autogluon.timeseries.TimeSeriesPredictor.html
PPT 템플릿
https://www.slidemembers.com/en_US/search/ALL/jejudo/1/
EDA 코드 공유(DACON 참고)
https://dacon.io/competitions/official/236176/codeshare/9167?page=3&dtype=recent