바쁜일이 끝나서 잠시 회사의 성장성을 확인하는 중이었다. 회사가 "계속 성장중인데 Seasonality 분석을 할 수있을까?" 라는 질문들을 한다. 당연하다, 모든 리테일러들의 매출은 성장중이거나 하락중이다.
계절성 분석은 시간에 따른 시간 흐름에 따르는 데이터의 반복 패턴 또는 변동을 감지하는 데 사용되는 시계열 분석 기법이다. 계절성은 종종 시간별, 일별, 주별, 월별 또는 연도별 변동과 같은 규칙적이고 주기적인 패턴을 나타내는 데이터에 나타난다.
쉽게 이해하기 위해 주된 아이디어부터 설명하자만 매출데이터의 트렌트를 파악한뒤 전체 데이터에서 트랜드만큼으르 빼서 계절성이 보이는 패턴을 추출하는 것이다.
Python에서는 Pandas 및 Plotly Express 라이브러리를 사용하여 시계열 데이터에 대한 계절성 분석을 수행할 수 있다. 나는 주로 plotly를 사용해서 분석한다 왜 그런지는 따로 시간이 나면 여러 예제들을 통해 설명하고자 한다. 다음은 Pandas와 Plotly Express를 사용하여 계절성 분석을 수행하는 방법을 보여주는 간단한 예제 코드이다.
이 예에서는 샘플 판매 데이터를 Pandas DataFrame으로 로드하고 날짜 열을 DateTimeIndex로 변환하고 데이터를 리샘플링하여 월별 총 판매액을 얻는다. 그런 다음 statsmodels 라이브러리의seasonal_decompose() 함수를 사용하여 시계열을 계절, 추세 및 잔차 구성 요소로 분해, 마지막으로 Plotly Express를 사용하여 계절 구성 요소를 플로팅하여 판매 데이터의 계절 패턴을 시각화한다.
이후 위와같이 보다 명확한 패턴을 보기위해 plotly scatter plot에서 지원하는 ewm을 이용해 span값을 조절해 가면서 확인할 수 있다.
Facebook의 Prophet 라이브러리, PyFlux 라이브러리 및 Seasonal 라이브러리와 같이 Python에서 계절성 분석을 수행하는 데 사용할 수 있는 다른 많은 기술과 라이브러리가 있지만. 데이터의 양이 많지 않다면 statsmodel 정도로도 간단히 효과를 볼 수있다.
참고로 아래는 우리 서비스의 계절성 분석 결과다.
Summer's comming It will be crasily busy because the trend I didn't share is extremely stiff.