본문 바로가기
컴퓨터 활용/통계와 데이터과학

상점 신용카드 매출 예측, 데이터 전처리

by easyfly 2022. 4. 29.
반응형

데이터 전처리

데이터를 본격적으로 처리하기 이전에 데이터를 정제하는 과정입니다. 원 자료에는 데이터를 효과적으로 처리하기 곤란한 형태의 칼럼이나 결측치가 많아 결과를 왜곡할 수 있는 요소가 있습니다. 이런 것들을 선별하여 본 처리에 앞서 데이터 처리를 하는 것을 말합니다.

데이터 전처리는 탐색적 데이터 분석 과정을 먼저 진행하고 뒤에 처리하는 경우도 있고 그 반대의 경우도 있습니다. 대부분의 경우는 두 과정이 서로 앞서거니 뒤서거니 애자일 방식으로 진행되어야 하지 싶어요. 탐색을 통해 데이터의 특성이나 결측을 알아낼 수 있고 전처리를 하면서도 탐색은 가능하기 때문입니다.

Colab 환경 조성

  • 파이썬 버전 확인
  • 현재 디렉토리 확인
  • 드라이브 마운트
  • 작업 디렉토리로 이동
구글 드라이브 작업디렉토리 접근

노이즈 제거

데이터에서 노이즈는 이상치, 결측치뿐만 아니라 학습 알고리즘에 데이터를 주입할 때 예측의 정확도를 떨어뜨리는 모든 것을 말합니다. 이번 주어진 데이터에서 전처리에 필요한 모듈과 데이터를 불러오는 코드를 살핍니다. 다음은 데이터를 불러오고 5개의 행을 출력하는 코드입니다.

데이터 형태와 특성 파악

확인 결과

  • 9개의 열(컬럼) 존재
  • 지역(region) 변수에 결측치 존재
    • 지역 변수 결측치 상황을 확인 필요

지역 변수 결측치 상황 확인

결측치 상황 확인

확인 결과 지역(region)과 업종(type_of_business) 속성에 결측치가 존재합니다. 데이터에서 상점의 '지역과 업종'은 절반 이상이 결측치였습니다. 범주형 속성이고 대치할 방법도 없어 열 전체를 제거하고 데이터 처리를 진행합니다.

매출액 변수의 이상치 확인

매출액인데 음수가 나온다는 것은 이상치가 되겠죠. 즉, 환불했다는 얘기입니다. 오늘 친구 방문으로 커피를 구입했습니다. 그런데 이미 친구가 먼저 커피를 구입한 것입니다. 카운터에서 구입을 취소하고 환불을 요청했습니다. 이런 경우 내 계좌에서는 나간 돈이 다시 입금되겠지만, 커피숍에서는 매출이 생겼다가 마이너스 매출이 발생하게 됩니다. 이런 경우를 처리해야만 순수한 매출액을 계산할 수 있게 됩니다.

매출액 변수의 이상치 확인

위 그래프에서 음수 영역은 환불된 데이터라 볼 수 있습니다. 이 노이즈를 제거하는 기준은 다음과 같습니다.

  • 환불 발생일과 환불 발생 시간 이전 데이터 중에서 카드 아이디가 같고 음수 매출액의 절대값과 양수 매출액이 같은 거래 중 최근 거래를 찾아 해당 인덱스를 제거합니다.
  • 거래일과 거래시간을 합친 datetime 변수를 만들고 환불 거래를 제거하는 함수를 정의하는 코드를 작성합니다.

위에 맞춰 거래일과 거래시간을 합친 변수를 생성합니다.

먼저 환불 거래 제거 함수는 매출액이 0을 초과하는 행(non_refund)과 0 미만의 행(refund)을 분리해 추출합니다. 매출액이 0 미만인 행(refund)에서 카드 아이디(card_id), 환불 거래 시간(datetime), 매출액(amount)의 절대값을 추출합니다. 그다음, 매출액이 0을 초과하는 행(non_refund)과 매출액이 0 미만인 행(refund)에서 각각 지출 카드 아이디와 환불 카드 아이디가 같은 행을 추출합니다. 이후 음수 매출액의 절대값(환불 금액)과 양수 매출액이 같은 데이터 중에서 환불 거래 시간과 가장 가까운 인덱스를 제거합니다. 최종 결과는 노이즈를 제거한 데이터프레임을 반환합니다.

환불 거래 제거 함수

이렇게 만들어진 함수를 적용합니다.

환불 거래 함수를 적용

환불 거래 제거 함수를 사용해 노이즈를 제거한 후 상자 그림을 통해 결과를 확인합니다.

환불거래 제거 작업 중

확인해 보면 카드 거래 데이터에서 음수 매출액이 제거되는 과정입니다. 작업 시간은 9분 20초 정도 걸렸습니다.

환불 거래 제거 작업 종료

다운 샘플링

다운 샘플링이란 시계열 데이터에서 시간 간격을 넓게 조정해 데이터 샘플 수를 줄이는 것을 말합니다. 샘플 수를 줄이고 예측 구간을 작게 해서 불확실성을 제거하는 과정을 말합니다.

환불 거래 제거 후 데이터 출력

환불 거래 제거 후 데이터에서 처음 5개의 레코드를 출력합니다.

환불거래 제거 후 데이터 중 일부

거래 시간(datetime)을 기준으로 분 단위로 기록된 결제 이력을 확인할 수 있습니다. 데이터가 분 단위로 기록되어 예측할 구간이 너무 많습니다. 시계열 데이터가 예측 구간이 많아지면 불확실성이 커져 정확도가 떨어집니다. 따라서 시간 간격을 조정하겠습니다. 데이터 시간의 간격을 분 단위에서 월 단위로 조정합니다.

월 단위 다운 샘플링 함수

월 단위 다운 샘플링 함수를 작성합니다. 각 상점의 다운 샘플링을 진행할 때 매출이 발생하지 않았던 월은 '2'로 대치합니다. '0'으로 했을 경우, 시계열 데이터의 진동 폭을 안정화하기 위한 로그 정규화에서 문제가 생기기 때문입니다. '1' 이하 값은 로그 정규화를 할 때 음수 또는 무한대가 나오기에 '2'로 대치합니다.

다운 샘플링 함수

환불 제거 데이터를 월 단위로 다운 샘플링

월 단위로 다운 샘플링을 적용하기 위한 코딩입니다.(이하 다음 포스팅에서)

반응형

댓글