수요예측은 재고관리, 생산계획, 마케팅 전략 수립 등에서 매우 중요한 데이터 기반 의사결정 도구입니다. 과거 데이터를 활용하여 미래의 수요를 추정하면 효율적인 자원 배분이 가능해지죠. 파이썬은 pandas, statsmodels, Prophet 등 다양한 라이브러리를 통해 수요 분석 및 예측을 쉽게 할 수 있게 해줍니다. 이 글에서는 시계열 데이터를 기반으로 실제 수요 예측을 수행하는 방법을 코드 중심으로 소개합니다.
시계열 데이터 구조 이해하기
수요 예측에서 가장 중요한 것은 시간 흐름에 따른 데이터 구조, 즉 시계열 데이터(Time Series)입니다. 일반적인 수요 데이터는 날짜별 판매 수량, 월별 출고량, 주차별 예약 건수 등의 형태로 구성됩니다. 파이썬의 pandas는 이런 시계열 데이터를 다루는 데 최적화되어 있어 DatetimeIndex를 기반으로 다양한 기능을 지원합니다.
import pandas as pd
data = {
'date': pd.date_range(start='2023-01-01', periods=12, freq='M'),
'sales': [120, 135, 150, 160, 170, 180, 200, 220, 210, 230, 250, 270]
}
df = pd.DataFrame(data)
df.set_index('date', inplace=True)
print(df.head())
시계열 데이터를 다룰 땐 반드시 날짜 데이터를 인덱스로 설정해야 하며, resample()로 주기 변경, rolling()으로 이동평균 계산, diff()로 변화량 계산 등 다양한 분석이 가능합니다.
statsmodels로 수요예측 모델 만들기
기본적인 수요 예측을 위해 가장 널리 사용되는 모델은 ARIMA입니다. statsmodels 라이브러리를 활용하면 간단하게 시계열 모델을 구현할 수 있습니다.
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
model = ARIMA(df['sales'], order=(1,1,1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=6)
print(forecast)
df['sales'].plot(label='실제 데이터')
forecast.plot(label='예측', color='red')
plt.legend()
plt.title("수요 예측")
plt.show()
ARIMA는 자기회귀, 차분, 이동평균을 조합한 전통적 시계열 모델로, 소규모 데이터에도 잘 작동하는 장점이 있습니다.
Prophet으로 손쉽게 수요예측하기
페이스북에서 개발한 Prophet 라이브러리는 트렌드 + 시즌성 + 휴일 효과까지 반영한 예측 모델을 간단한 코드로 구현할 수 있게 도와줍니다.
from prophet import Prophet
df_prophet = df.reset_index().rename(columns={'date': 'ds', 'sales': 'y'})
model = Prophet()
model.fit(df_prophet)
future = model.make_future_dataframe(periods=6, freq='M')
forecast = model.predict(future)
model.plot(forecast)
Prophet은 자동으로 트렌드와 계절성을 학습하고 예측 결과를 직관적인 그래프로 제공하므로 수요 흐름을 한눈에 파악할 수 있습니다.
수요예측은 비즈니스의 미래를 준비하는 데 가장 중요한 분석 영역 중 하나입니다. 파이썬의 pandas, statsmodels, Prophet을 활용하면 누구나 쉽게 시계열 수요 분석을 시작할 수 있습니다. 오늘 소개한 코드 예제를 실행하며 실제 데이터를 예측해보고, 데이터를 기반으로 더 스마트한 결정을 내려보세요!