Skip to content
Park Hyoin PARKHYO.IN
Go back

데이터 분석 공부 #1 — '매출 15% 감소' 는 아직 데이터일 뿐이다

Edit page

SK플래닛 부산 스마트항만 · 해양물류 데이터 실무 과정(K-뉴딜 아카데미) 3주차 첫 날이다. 오늘 주제는 데이터의 이해와 데이터 분석이었다. 이번 주 목요일에는 부산항 월별 물동량 추이를 실제로 분석해본다고 한다. 그 앞에 놓인 기초 강의인 셈이다.

Table of contents

Open Table of contents

데이터는 이미 사방에 쌓이고 있다

일상과 업무에서 우리는 엄청나게 많은 데이터를 접한다. 온라인 쇼핑몰을 쓰면 주문내역이 쌓인다. 같은 주문내역이 구매자에게는 영수증이고 기업에게는 매출전표다. 쿠키에 동의하면 IP 가 수집되고, 거기서 국가와 지역이 나와 마케팅에 쓰인다. 우리가 판 제품에 달린 리뷰까지도 데이터가 된다.

그래서 질문은 세 개다. 데이터가 근본적으로 무엇인지, 그걸 어떻게 이해할지, 어떻게 분석해서 쓸모 있는 내용을 꺼낼지.

‘매출 15% 감소’ 로 시작하는 예시

온라인 쇼핑몰을 운영한다고 하자. 월간 보고에서 이번 달 매출이 15% 감소했다고 보고했다.

숫자만 보면 알 수 있는 건 딱 하나다. 매출이 줄었다. 그런데 “왜” 줄었는지는 모른다.

여기서 데이터 분석의 정의가 나왔다.

문제를 정의하고 관련 데이터를 수집 · 정리 · 탐색하여 질문에 대한 근거를 찾는 과정

숫자를 계산하거나 그래프를 그리는 기술이 아니라 자료가 보여주는 의미를 해석하는 것이다. 분석할 때 pandas 를 쓰지만 pandas 는 수치만 계산해준다는 말이 인상적이었다. 도구는 해석을 대신해주지 않는다.

데이터 · 정보 · 통찰은 다른 것이다

데이터는 아직 해석되지 않은 상태의 사실 · 숫자 · 기호 · 신호다. 학생의 시험 점수, 고객의 주문 금액 같은 것들. 값은 가지고 있지만 의미는 맥락에 따라 변한다. 데이터는 결론이 아니라 질문에 답하기 위해 해석할 원재료다.

시험 점수 85점이라고만 하면 사실 하나가 남을 뿐이다. 여기에 “우리 반 평균보다 10점이 높다” 를 붙이면 시험을 잘 봤다는 의미가 생긴다. 그게 정보 — 데이터를 목적에 맞게 정리하고 맥락을 부여한 결과다.

그리고 정보를 실제 행동으로 연결할 수 있게 해주는 것이 통찰이다. 앞의 매출 예시로 이어보면 이렇게 된다.

데이터에서 정보를 거쳐 통찰로 가는 세 단계. 데이터는 "매출이 15% 감소" 라는 해석되지 않은 사실이고, 정보는 "방문자는 유지됐지만 모바일 결제 이탈률이 상승" 이라는 맥락이 붙은 결과이며, 통찰은 "모바일 결제 화면을 우선 개선하고 효과를 측정" 이라는 행동으로 연결되는 판단이다

통찰까지 가야 의사결정에 도움이 된다. “매출이 15% 줄었다” 에서 멈추면 아무것도 결정할 수 없다.

데이터를 나누는 두 가지 축

데이터는 두 관점으로 나눈다. 형태로 보면 정형 · 반정형 · 비정형이고, 성격으로 보면 수치형 · 범주형이다.

데이터를 나누는 두 가지 축. 형태 관점에서는 정형(행과 열, 스키마가 명확) · 반정형(키와 태그로 의미 표현, 구조가 유연) · 비정형(고정 구조가 없어 특징 추출 필요)으로 나뉘고, 성격 관점에서는 수치형(이산형 · 연속형)과 범주형(명목형 · 순서형)으로 나뉜다

두 축을 같이 봐야 하는 이유는, 저장 형식과 현실 의미를 동시에 확인해야 적절한 분석 방법이 골라지기 때문이다.

형태에 따른 분류

정형 데이터(Structured Data) — 각 값이 들어갈 위치와 의미가 명확하고, 같은 열에는 같은 형식의 값이 반복된다. 각 행은 하나의 기록이라 record 라고 부르고, 열은 하나의 행이 가질 수 있는 정보의 종류를 나타낸다.

스키마(Schema) 는 컴퓨터가 각 값을 어떻게 처리할지 알려주는 정형 데이터의 설계도다.

스키마 예시 — 컬럼 이름, 자료형, NULL 허용 여부가 정의되어 있다

중요한 원칙 하나는 하나의 열에 하나의 일관된 의미를 담아야 한다는 것이다. 노트북/1개/1,200,000원 처럼 한 칸에 전부 몰아넣으면 안 된다.

정형 데이터는 통찰을 얻기 쉽게 정리되어 있어서 가치가 높은 데이터로 취급된다.

반정형 데이터(Semi-structured Data) — 고정된 행과 열 대신 키 · 태그 · 구분자가 각 값의 의미와 관계를 알려준다. 메타데이터를 가지고, 중첩 구조를 쉽게 만들 수 있다. 대신 데이터마다 구조가 다 다를 수 있어서 분석 전에 한 번 처리해야 한다 — 중첩 해제, 자료형 통일, 항목 통일 같은 것들이다.

비정형 데이터(Unstructured Data) — 자연어 · 이미지 · 음성 · 영상. 사람은 이해할 수 있어도 컴퓨터 분석에는 별도의 특징 추출이 필요하다. 정보가 없는 데이터가 아니라 의미가 명시적인 열로 나뉘어 있지 않다는 뜻이다. 픽셀과 음성 신호는 숫자 배열이지만 대상 · 단어 · 행동의 의미는 바로 드러나지 않는다.

사람은 사진을 보고 바로 구별하지만 컴퓨터에게는 구분해서 전달해줘야 한다. 그래서 비정형 데이터는 특징을 추출해서 정형 데이터처럼 만들어줄 수 있다.

성격에 따른 분류

수치형 데이터(Numerical Data) — 수량 · 크기 · 정도 · 측정 결과를 숫자로 표현하고, 합계나 평균 같은 연산이 의미를 갖는다.

  • 이산형(Discrete): 가능한 값이 서로 떨어져 있고 주로 정수 단위의 개수다. 헤아려서 얻는 데이터.
  • 연속형(Continuous): 두 값 사이에도 가능한 값이 존재하고, 측정 정밀도에 따라 기록 자릿수가 달라진다.

여기서 함정이 하나 나왔다. 식별자 데이터다. 고객 번호 · 학번 · 전화번호 · 상품 코드는 숫자처럼 보여도 수량이나 크기를 나타내지 않는다. 학번의 평균을 내는 건 의미가 없다.

수치형은 평균 · 중앙값 · 분산 · 표준편차로 중심을 보고, 히스토그램 · 상자그림 · 산점도로 분포와 관계를 본다.

범주형 데이터(Categorical Data) — 값을 더하는 대신 각 범주에 얼마나 속하는지를 비교한다. 그래서 빈도와 비율이 중요하다. 두 범주형 변수의 조합을 교차표로 만들면 집단별 분포 차이를 볼 수 있다.

  • 명목형(Nominal): 혈액형 · 지역 · 색상 · 결제 수단처럼 서로 다른 종류일 뿐 높고 낮음이 없다.
  • 순서형(Ordinal): Bronze — Silver — Gold — Platinum 처럼 어느 쪽이 더 높은지 비교할 수 있다.

범주를 숫자로 바꿀 때는 존재하지 않는 순서를 만들어내지 않는 것이 핵심이다.

종류인코딩이유
명목형원-핫 인코딩순서가 없으므로 각 범주를 독립된 열로
순서형서열 인코딩순서가 실제로 존재하므로 크기로 표현 가능

DB 이야기도 같이 나왔다. 회원 등급을 저장 코드로 관리하는 경우가 많은데, 그러면 회원 등급 ↔ 저장 코드 표를 같이 봐야(JOIN 해야) 의미가 생긴다.

분석 과정은 한 방향으로 흐르지 않는다

데이터 분석은 파일을 불러와 곧바로 계산하는 일이 아니라 질문과 데이터와 방법을 계속 맞추는 과정이다.

데이터 분석 과정의 여섯 단계와 되돌아가는 흐름. 문제 정의에서 데이터 수집, 전처리, 탐색과 시각화, 모델링, 결과 해석 순으로 진행하되, 탐색이나 모델링에서 새 사실을 발견하면 문제 정의나 전처리 단계로 되돌아간다. 다만 되돌아가더라도 원래 정의한 문제 자체는 바꾸지 않는다

탐색이나 모델링에서 새 사실을 발견하면 질문 · 수집 · 전처리 단계로 돌아가 수정한다. 실제로 되돌아가는 일이 빈번하다고 한다.

다만 조건이 붙었다. 문제를 계속 늘려가서는 안 된다. 원래 찾고자 하는 문제는 절대 바뀌면 안 되고, 필요한 데이터를 추가하거나 연관된 데이터를 발견해서 넣는 건 괜찮다. 이게 오늘 제일 인상 깊었던 말이다.

문제 정의

해결하려는 문제가 무엇인지, 데이터로 어떤 질문에 답할 것인지 정하는 단계다. 실무에서도 방향성을 정하고 나서 문제를 찾는 것부터 시작한다.

목표는 분석 질문으로 바꿔야 한다. 기간 · 지표 · 비교가 들어 있는 문장이 분석 질문이다. 범위를 고정해야 서로 다른 집단과 시기를 섞어 잘못 비교하지 않는다. 기간을 정할 때도 대표성이 확보되도록 정해야 한다.

가설은 데이터로 확인하려는 잠정적인 설명이다. 데이터가 가설을 지지하지 않으면 그대로 받아들여야 한다. 가설에 유리한 데이터만 고르는 확증 편향을 조심하라는 이야기가 함께 나왔다.

데이터 수집

많이 모으는 것보다 정의한 질문에 맞는 범위와 기준으로 확보하는 것이 중요하다. 양이 많다고 좋은 게 아니다. 품질이 낮거나 질문과 관계없는 변수가 많으면 처리 비용과 오판 가능성이 같이 올라간다.

기간 · 시간대 · 시점 · 단위 · 집계 기준을 일관되게 맞춰야 데이터를 안전하게 연결할 수 있다. 그리고 수집한 데이터가 전체를 대표하는지 봐야 한다. 표본이 특정 집단에 치우치면 전체에 같은 결론을 일반화하기 어렵다.

전처리

수집한 데이터에는 결측 · 중복 · 형식 불일치가 섞여 있어서 바로 분석하기 어렵다. 하는 일은 대략 셋이다.

  • 결측치 · 이상치 확인, 중복 제거
  • 형식 · 자료형 · 단위 · 범주 통일
  • 분석 목적에 필요한 파생 변수 생성

빈 값과 극단값을 먼저 확인한다. 오류일 수도 있지만 특정 집단이나 중요한 사건의 신호일 수도 있다. 0 은 실제로 측정된 값일 확률이 높으니 함부로 결측 취급하면 안 된다.

형식 통일은 예시가 바로 와닿았다. 성별에 남성 · M · 남 이 섞여 있으면 셋을 전부 다르게 센다.

파생 변수는 원본 변수에서 새로운 의미를 만들어낸 변수다. 매출과 비용이 있으면 빼서 이익을 만들고, 기준일과 마지막 구매일이 있으면 빼서 미구매 기간을 만든다.

그리고 원본은 가능하면 그대로 둔다. 전처리 기록도 남긴다.

탐색(EDA) · 시각화 · 모델링

탐색적 데이터 분석(EDA) 은 분포 · 결측 · 이상치 · 변수 관계를 폭넓게 살펴 다음 질문과 가설의 단서를 찾는 단계다. 실습에서 pandas 로 하는 게 이 EDA 다. 여기서는 결론을 내려는 게 아니라 데이터를 훑어보는 것이다.

시각화는 숫자 속에서 분포 · 변화 · 관계를 보이게 해준다. 막대그래프 · 히스토그램 · 선그래프 · 상자그림 · 산점도 등.

모델링은 분석을 위한 데이터 모델을 만드는 것이다. (관계형 DB 에서 쓰는 “데이터 모델링” 과는 다른 말이라는 언급이 있었다.)

목적방법
예측회귀
범주 판단분류
비슷한 것끼리 모으기군집화(클러스터링)

분석을 망치는 것들

이상치(Outlier) 는 다른 관측치에 비해 지나치게 크거나 벗어난 값이다. 입력 오류 · 장비 고장 · 단위 불일치 · 시스템 장애 등으로 생긴다. 이상치를 발견하면 일단 원본 데이터를 본다.

이상치는 평균과 분산에 큰 영향을 준다. 그렇다고 지우면 중요한 대상을 잃을 수 있다. 여기서 판단이 갈린다.

결측치(Missing Value) 는 데이터가 아예 수집되지 않은 것이다. 센서가 꺼졌거나 네트워크 통신에서 유실됐거나 원인은 다양하다. 문제는 표시 방법이 통일되어 있지 않다는 점이다 — 빈칸 · Null · NaN · N/A 가 다 섞여 나온다. 컴퓨터가 이해할 수 있는 형태로 변환해줘야 한다. 이때도 -1 과 0 은 실제 값일 수 있으니 일괄 변환하지 않는다.

결측치에도 패턴이 있다. 특정 조건이나 집단에서 반복되는 결측은 무작위 공백이 아니라 편향 신호다. 처리 방법은 삭제 · 대표값 대체 · 재수집 등이 있다.

데이터 정제(Data Cleaning) 는 오류 · 중복 · 결측 · 형식 불일치를 수정하는 일이지만, 데이터를 무조건 매끄럽게 만드는 게 목적은 아니다. 정제가 무조건 모델 성능을 올려주는 것도 아니다.

마지막으로 통계적 유의성 이야기가 나왔다. “유의하다” 는 말은 효과가 크다거나 가설이 확실히 참이라는 뜻이 아니다. (여기서 필기가 끊겼다.)

오늘 걸린 문장 세 개

정리하고 보니 오늘 배운 것 중에 “하지 말라” 는 이야기가 유독 많았다.

  1. 문제는 절대 바뀌면 안 된다. 분석하다 보면 자꾸 새 문제가 보이는데, 데이터를 추가하는 것과 문제를 갈아치우는 건 다르다.
  2. 정제가 성능을 올려주는 건 아니다. 깨끗하게 만드는 것 자체가 목적이 되면 안 된다.
  3. 유의하다 ≠ 효과가 크다. 이건 아직 제대로 이해 못 했다.

셋 다 “이렇게 하면 된다” 가 아니라 “이렇게 착각하기 쉽다” 쪽이다. 아마 그게 실제로 자주 일어나는 실수라서일 것이다.

더 공부해볼 것

  • 가설이 빗나갔을 때 무엇을 하는가 — 강의를 들으며 이런 상황이 떠올랐다. “배송 기간이 길수록 재구매율이 낮아질 것이다” 라는 가설을 세웠는데 데이터를 보니 배송 기간이 다 비슷했다면? 가설을 버리는 게 맞는지, 변수를 바꿔 다시 세우는 게 맞는지, 아니면 애초에 질문 설계가 잘못된 건지 정리가 안 됐다
  • 통계적 유의성 — 필기가 “효과가 크다는 뜻이 아니다” 에서 끊겼다. p-value 가 정확히 무엇을 말하고 무엇을 말하지 않는지, 효과 크기(effect size)와 어떻게 다른지 (American Statistical Association 의 p-value 성명)
  • 결측이 무작위인지 판단하는 기준 — “특정 집단에서 반복되면 편향 신호” 라고 배웠는데, 이걸 눈으로 보는 것 말고 어떻게 확인하는지. MCAR · MAR · MNAR 이라는 구분이 있다고 들었다
  • 이상치를 지울지 남길지 정하는 기준 — 평균과 분산이 흔들리는 건 알겠는데, 실제로 어느 선에서 자르는지. IQR 기준이나 z-score 같은 방법이 있는지
  • 원-핫 인코딩과 서열 인코딩 — 개념은 알겠는데 pandas 에서 실제로 어떻게 쓰는지 (pandas get_dummies)
  • 0 과 결측을 구분하는 실전 방법 — “0은 측정된 값일 확률이 높다” 는 말이 인상적이었다. 실제 데이터에서 “0” 과 “측정 안 됨” 을 어떻게 나눠서 저장하고 다루는지. 데이터 엔지니어링 공부에서 빈 문자열과 NULL 이 다르게 집계되던 것과 같은 맥락으로 보인다

Edit page