시계열 분석 : 시간의 흐름에 따른 지표의 변화를 이해하고자 할 때

시계열 분석 : 시간의 흐름에 따른 지표의 변화를 이해하고자 할 때

목차

시계열 분석이란?

시계열 분석(time-series analysis)은 일정 간격의 시간순으로 저장된 데이터에서 유의미한 정보를 뽑아 내는 작업으로, 과거의 행동을 이해하고 미래의 행동을 예측하는데 사용됩니다.

시계열은 데이터 분석의 중요한 갈래임에도 불구하고 그 분석 방법의 이론과 적용에 대한 기술적 장벽과 미래를 예측하는 일에 수반되는 여러 한계들 때문에 실무 관점의 데이터 활용에서 그 사용이 매우 제한적이었습니다.

하지만, 현업들이 의사결정에 활용할 수 있는 시계열 데이터가 증가하고 있고, 시계열 분석만이 제공할 수 있는 인사이트가 존재한다는 사실을 고려할 때, 더 많은 현업들이 더 자주 시계열 데이터를 활용해야 한다고 생각합니다.

이번 콘텐츠에서는 시계열 분석과 관련된 아래 두 가지 유형을 제공합니다.

  • 동영상 강의: 전통적 시계열 데이터 분석의 주요 개념과 AR(AutoRegressive; 자기회귀) 모델에 대해 설명하고, 최신 기계학습 기술을 활용한 시계열 분석도 가볍게 살펴보고
  • 블로그 글: 실제 시계열 데이터를 가지고 매출에 영향을 주는 계절적, 주기적 패턴을 찾는 실습을 함께 진행하겠습니다.

시계열 데이터 분석 강의는 아래 영상에서 확인해 보세요.

강의 자료(pdf)는 바로 아래 링크를 통해 다운 받으실 수 있습니다.

시계열 데이터란?

시계열(時系列, time-series) 데이터는 일정한 시간 간격으로 관측, 수집된 데이터를 말합니다. 따라서, 시계열 데이터에는 해당 레코드가 수집, 관측된 날짜 내지는 시간을 표시하는 “시간 변수”가 존재하게 됩니다. 2022-10-01, 2019-02-07 08:55:16와 같은 시간 변수는 특정한 구조(예, 년-월-일)와 순서(Order)를 갖는 숫자 변수라고 생각할 수 있습니다.

하지만, 요일이나 주중/주말, 또는 시간대에 존재하는 주기적 패턴을 찾기 위해 시간 변수에서 월, 요일 같은 파생 변수를 가공, 추출해서 사용할 수 있고, 이때 시간 변수는 범주형 변수의 특성을 갖게 됩니다.

시계열 분석의 목표

탐험적 분석(EDA) 관점에서 시계열 데이터를 분석하는 주요 목표는 아래 두가지입니다.

  • 추세(Trend): 시간의 흐름에 따라 주요 지표가 상승, 하강하는 경향성
  • 주기적/순환적 특성(Cyclic Pattern): 시간대, 요일, 월, 분기/계절 등에 따른 주기적 패턴

하트카운트 실습 - 시계열 데이터

아래에서 매장 매출 데이터로 시간의 흐름에 따른 매출액의 추세와 매출액에 영향을 주는 주기적 패턴이 존재하는지 함께 살펴 보겠습니다.

📍
아래 내용을 직접 따라해 보시려면, HEARTCOUNT 로그인 → 캠페인 생성 → 샘플데이터 → 매출 데이터 선택하시면 됩니다.

먼저, 데이터셋 검토 과정에서 “주문일”이라는 시간 변수(2014-11-09)가 존재하는 걸 확인할 수 있네요.

시간의 흐름에 따른 매출 추이 살펴 보기

그럼, 스마트 플롯 메뉴에서 시간의 흐름에 따른 매출액의 변화를 살펴 보겠습니다.

  • X축에 시간 변수인 주문일을 선택하고 매출의 집계 방식을 평균에서 (총)합으로 변경합니다.
  • 주문일 옆의 시계 아이콘을 눌러 매출을 집계할 시간의 간격(time grain)을 년, 분기, 월, 주 등으로 변경해 봅시다. 시간 간격(time-grain)을 월로 선택했을 때 우리가 시각적으로 인지할 수 있는 적정 수준의 정보가 표현되는 것 같습니다.
  • 하위 그룹에 “제품대분류”를 선택한 후 차트 유형을 stacked area(스택 영역)로 변경합니다.

월별로 제품대분류별 매출총합이 계산되어 켜켜이 쌓인 시각화가 완성되었네요.

0:00
/

그런데 위 차트를 보고 당최 무슨 메시지를 전달할 수 있나요?

월별로 제품별로 매출총액 들쑥 날쑥 했다는 이야기는 맞는 이야기지만 뻔한 이야기라 정보량이 없는 메시지입니다.

매출의 계절적, 주기적 특성 찾아 보기

  • X축에 표현할 변수를 “주문일” 아래 있는 파생 시간 변수들 중 하나인 “주문일 - 월별 주기”를 선택해 봅시다. (파생 시간 변수는 주기적 패턴을 쉽게 찾을 수 있도록 HEARTCOUNT에서 시간 변수를 자동으로 가공해서 만든 추가 변수들입니다.)
  • 그리고 연도별로 비교할 수 있도록 화면분할 조건으로 “주문일 -년”을 선택합니다.
  • 차트 유형도 stacked-area에서 stacked-bar로 변경해 볼까요. 연속된 흐름이 아니라 개별 월에 발생한 구체적 매출 총액을 비교하기에는 바차트가 더 적절할 거 같습니다.
  • 그리고 우측창의 하위그룹 범례에서 가구, 사무용품, 전자제품을 하나씩 클릭하여 제품대분류별 매출에 어떤 패턴이 있는지 확인해 봅시다.
  • 내친김에, X축에 월별 주기 대신 “요일별 주기”를 선택하면 월화수목금토일 별로 매출이 어떻게 달랐는지 확인할 수 있습니다.
0:00
/

시간이라는 것은 우리가 직접적 통제력을 행사할 순 없지만 세상을, 내 데이터를 더 잘 이해하기 위한 주요한 차원입니다. 주요 지표가 지난 달과, 작년 같은 달과 비교해서 나빠진 경우 그 원인을 찾기 위해 데이터를 깊이 들여다 보는 일이 EDA라고 해도 과언이 아닐 것입니다.

시간 변수를 한 방향으로 흐르는 순서를 갖는 숫자 변수로 활용하여 추이를 확인할 수도 있고, 시간 변수에서 월, 요일, 시간대 등 범주적 특성을 뽑아 내어 순서를 갖는 범주형 변수로 활용할 수도 있다는 걸 기억해 주세요.