데이터 과학이란 무엇일까요?
데이터 과학은 머신러닝만이 아닙니다. 통계만도 아닙니다. 프로그래밍만도 아닙니다.
데이터 과학은 데이터에서 쓸모 있는 지식을 뽑아내는 학문입니다. 그 일의 대부분은 화려하지 않습니다. 지저분한 스프레드시트를 정리하고, 알맞은 질문을 던지고, 코드에는 관심 없는 사람들에게 결과를 전달하는 일입니다.
전형적인 데이터 과학 파이프라인은 다음과 같습니다.
1. 수집: 데이터베이스, API, CSV, 웹 스크래핑에서 원시 데이터를 모읍니다
2. 정제: 결측값을 처리하고, 자료형을 고치고, 중복을 제거합니다
3. 탐색: 분포를 시각화하고, 패턴을 찾고, 질문을 던집니다
4. 특성 공학: 모델이 학습하도록 돕는 새 특성을 만듭니다
5. 모델링: 알고리즘을 훈련하고, 성능을 평가하고, 반복합니다
6. 전달: 의사결정을 내리는 이해관계자에게 결과를 발표합니다
Excel 피벗 테이블, 조건부 서식, VLOOKUP을 써 본 적이 있다면 1~3단계를 이미 해 본 셈입니다. 이 수업은 그 경험을 업계에서 쓰는 파이썬 기반 작업 흐름으로 연결합니다.
워밍업
나의 데이터 경험
누구나 어떤 형태로든 데이터를 다뤄 본 적이 있습니다. 가계부 스프레드시트, 성적 기록표, 운동 앱, 재생 횟수가 찍힌 플레이리스트까지 모두 데이터입니다.
쓰레기를 넣으면 쓰레기가 나온다
데이터 정제가 중요한 이유
데이터 과학자는 시간의 60~80%를 데이터 정제에 씁니다. 과장이 아닙니다. 여러 업계 조사에서 일관되게 나타나는 결과입니다.
이유는 간단합니다. garbage in, garbage out(쓰레기를 넣으면 쓰레기가 나옵니다). 데이터에 오류, 결측값, 일관성 없는 형식이 있으면 그 위에 쌓은 모든 분석이 틀립니다. 지저분한 데이터로 훈련한 완벽한 모델은 자신 있게 틀린 답을 내놓습니다.
흔한 데이터 문제
- 결측값: 셀이 비어 있습니다. 데이터를 수집하지 않았을까요, 아니면 실제 값이 0일까요? 두 상황은 서로 다르고, 처리 방법도 다릅니다.
- 잘못된 데이터 유형: 숫자 열이 텍스트로 저장되어 있거나, 날짜 형식이 제각각입니다(01/02/2024: 1월 2일일까요, 2월 1일일까요?).
- 이상값: 급여 열에 $1,000,000,000이라는 항목이 하나 있습니다. 실제 값일까요, 오타일까요? 어느 쪽이든 평균을 왜곡합니다.
- 중복: 두 시스템이 불완전하게 병합되면서 같은 기록이 두 번 나타납니다.
- 범주형 인코딩: 한 열에 'Yes', 'yes', 'Y', 'TRUE', '1'이 섞여 있습니다. 모두 같은 뜻이지만 컴퓨터는 그 사실을 알지 못합니다.
pandas(표준 Python 데이터 라이브러리)에서는 dropna(), fillna(), astype(), drop_duplicates() 같은 메서드로 이런 문제를 처리합니다. 하지만 어려운 부분은 코드가 아닙니다. 각 문제에 무엇을 할지 결정하는 일이 어렵습니다.
정제 결정
무엇을 할지 결정하기
실제 상황을 하나 살펴봅시다. 고객 기록 10,000건으로 이루어진 데이터셋이 있습니다. 'age' 열에 누락된 값이 500개 있습니다.
선택지:
- 행 삭제: 500개 레코드를 모두 제거합니다. 간단하지만 데이터의 5%를 잃습니다. 이 500명의 고객이 공통된 특성을 지녔다면(예: 개인정보에 민감해서 나이 항목을 건너뛴 경우), 삭제는 편향을 일으킵니다.
- 평균으로 채우기: 빈칸을 평균 나이로 대체합니다. 빠르지만 나이 열의 분산을 인위적으로 줄입니다.
- 중앙값으로 채우기: 나이 분포가 한쪽으로 치우친 경우(아주 고령이거나 아주 어린 고객 몇 명이 평균을 끌어당길 때) 평균보다 낫습니다.
- 플래그 사용: 'age_missing'(1 또는 0)이라는 새 열을 만들고 원래 열은 중앙값으로 채웁니다. 이제 모델은 결측 자체가 의미 있는 정보인지 학습할 수 있습니다.
보편적으로 옳은 답은 없습니다. 선택은 데이터가 왜 비어 있는지 & 그 데이터를 어디에 쓸 계획인지에 달려 있습니다.
올바른 질문 던지기
탐색적 데이터 분석(EDA)
모델을 만들기 전에 먼저 데이터를 이해해야 합니다. EDA는 데이터셋을 요약하고, 시각화하고, 질문을 던져 패턴, 이상치, 관계를 찾아내는 과정입니다.
핵심 도구
- 히스토그램: 단일 변수의 분포를 보여줍니다. 종 모양인가요? 한쪽으로 치우쳤나요? 봉우리가 두 개(이봉형)인가요? 소득 히스토그램은 항상 오른쪽으로 치우칩니다. 소수의 사람이 대다수보다 훨씬 많이 벌기 때문입니다.
- 산점도: 두 변수 사이의 관계를 보여줍니다. 키가 큰 사람이 몸무게도 더 나갈까요? 공부 시간이 많을수록 성적이 높을까요? 패턴이 있는지 없는지가 관계의 존재 여부를 알려줍니다.
- 상관관계: 선형 연관성을 측정하는 -1에서 +1 사이의 숫자입니다. +1은 완벽한 양의 관계, -1은 완벽한 음의 관계, 0은 선형 관계가 없음을 뜻합니다. 하지만 상관관계가 인과관계를 의미하지는 않습니다. 아이스크림 판매량과 익사 사고는 둘 다 여름에 늘어나기 때문에 상관관계를 보입니다.
- 요약 통계량: 평균, 중앙값, 표준편차, 최솟값, 최댓값. pandas에서는 df.describe() 한 줄로 이 모든 값을 얻을 수 있습니다.
진짜 실력
도구는 배우기 쉽습니다. 어려운 부분은 올바른 질문을 던지는 일입니다. 나쁜 질문: '데이터가 무엇을 말해 주나요?' 좋은 질문: '첫 주 안에 고객지원에 문의한 고객이 더 높은 유지율을 보이나요?'
상관관계의 함정
상관관계와 인과관계
데이터 리터러시에서 가장 중요한 개념입니다. 두 변수가 강한 상관관계를 보여도 한쪽이 다른 쪽을 일으키지 않을 수 있습니다.
대표적인 예:
- 소방관이 많은 도시일수록 화재도 많이 발생합니다. (큰 도시에는 소방관도 화재도 많습니다.)
- 아침을 먹는 학생이 성적도 더 좋습니다. (어쩌면 형편이 넉넉한 가정이 아침 식사 & 학업 지원을 둘 다 제공할 가능성이 높기 때문일 수 있습니다.)
- 초콜릿을 더 많이 소비하는 나라일수록 노벨상을 더 많이 받습니다. (둘 다 국가의 부와 상관관계가 있습니다.)
숨겨진 요인을 교란 변수(confounding variable)라고 합니다. 여러분이 살펴보는 두 변수를 모두 움직이는 제3의 변수입니다.
유용한 변수 만들기
특성 공학이란?
특성(feature)은 모델이 예측하는 데 사용하는 입력 변수입니다. 특성 공학은 원시 데이터에서 새로운 특성을 만들어, 모델이 그렇지 않으면 볼 수 없었던 패턴을 학습하도록 돕는 기술입니다.
원시 데이터는 모델이 필요로 하는 형태로 오는 경우가 드뭅니다. '생년월일' 열이 있는 데이터셋을 생각해 봅시다. 모델은 원시 날짜만으로는 할 수 있는 일이 많지 않습니다. 하지만 이 열에서 '나이' 특성을 만들면, 모델은 갑자기 나이에 기반한 패턴을 학습할 수 있습니다.
일반적인 기법
- 정규화: 숫자를 공통 범위(0에서 1, 또는 평균 0 & 표준편차 1)로 조정하는 기법. 이 과정이 없으면 수천 단위로 측정한 특성(연봉)이 한 자릿수로 측정한 특성(경력 연수)을 압도한다.
- 원-핫 인코딩: 범주형 변수를 이진 열로 바꾸는 기법. 값이 [red, blue, green]인 'color' 열은 'color_red', 'color_blue', 'color_green' 세 열로 바뀌고, 각 열은 0 또는 1을 갖는다.
- 구간화: 연속 변수를 범주로 바꾸는 기법. 0-17세는 '미성년', 18-64세는 '성인', 65세 이상은 '고령'이 된다. 관계가 선형이 아닐 때 도움이 된다.
- 상호작용 특성: 두 특성을 서로 곱한 특성. '평방피트 곱하기 욕실 수'는 둘 중 하나만 쓸 때보다 집값을 더 잘 예측할 수 있다.
- 도메인 지식: 가장 강력한 기법. 의료 모델의 특성을 만드는 의사는 어떤 검사 수치가 중요한지 안다. 마케터는 '마지막 구매 후 경과 일수'가 '구매 날짜'보다 유용하다는 사실을 안다. 어떤 알고리즘도 이를 대신하지 못한다.
특성 연습
특성 공학 적용하기
다음 달에 스트리밍 구독을 해지할 고객을 예측하는 모델을 만든다고 상상해 보세요. 원시 데이터는 다음과 같습니다.
- 계정 생성일
- 마지막 로그인 날짜
- 지난달에 시청한 프로그램 수
- 월 결제 금액
- 접수한 고객 지원 문의 건수
- 국가
훈련/테스트 분할
데이터를 나누는 이유
모델링에서 가장 중요한 규칙은 이것입니다. 모델을 학습시킨 데이터와 같은 데이터로 모델을 평가하지 마세요.
그렇게 하면 모델이 정답을 그대로 외워 버릴 수 있습니다. 학습 데이터에서는 완벽한 점수를 받지만, 처음 보는 새 데이터에서는 실패합니다. 이를 과적합(overfitting)이라고 합니다. 모델이 실제 패턴 대신 특정 데이터셋에 섞인 잡음을 학습한 상태입니다.
표준 방법은 데이터를 나누는 것입니다.
- 학습 세트(보통 70-80%): 모델이 여기에서 학습합니다
- 테스트 세트(보통 20-30%): 따로 떼어 두었다가 최종 모델을 평가할 때만 사용합니다
scikit-learn에서는 이렇게 씁니다: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
대표적인 알고리즘
- 선형 회귀: 데이터를 가장 잘 따르는 직선을 그립니다. 단순하고 해석하기 쉬우며, 관계가 대략 선형일 때 잘 작동합니다. 가격, 기온, 점수처럼 숫자를 예측합니다.
- 의사결정 트리: 예/아니오 질문으로 이루어진 순서도입니다. 이해하고 설명하기 쉽습니다. 가지치기를 하거나 깊이를 제한하지 않으면 과적합하기 쉽습니다.
- 랜덤 포레스트: 여러 의사결정 트리가 함께 투표합니다. 나무 하나보다 정확하고 과적합에 덜 취약하지만, 설명하기는 더 어렵습니다.
과적합 vs. 과소적합
- 과적합: 모델이 너무 복잡합니다. 잡음까지 포함해 훈련 데이터를 통째로 외웁니다. 훈련 데이터에서는 정확도가 높지만 테스트 데이터에서는 낮습니다.
- 과소적합: 모델이 너무 단순합니다. 실제 패턴을 포착하지 못합니다. 훈련 데이터와 테스트 데이터 모두에서 정확도가 낮습니다.
목표는 그 중간의 가장 알맞은 지점입니다.
평가 지표
모델이 좋은지 어떻게 알 수 있을까요?
정확도만으로는 오해하기 쉽습니다. 이메일의 95%가 스팸이 아니라면, 항상 '스팸 아님'이라고만 답하는 모델도 정확도가 95%입니다. 하지만 전혀 쓸모가 없습니다.
주요 지표:
- 정확도(Accuracy): 올바르게 예측한 비율입니다. 클래스가 균형을 이룰 때 유용합니다.
- 정밀도(Precision): 모델이 양성이라고 표시한 것 중 실제로 양성이었던 비율입니다. 정밀도가 높으면 오경보가 적습니다.
- 재현율(Recall): 실제 양성 중 모델이 찾아낸 비율입니다. 재현율이 높으면 놓친 사례가 적습니다.
- F1 점수: 정밀도와 재현율의 조화 평균입니다. 둘 사이의 균형이 필요할 때 유용합니다.
- RMSE (평균 제곱근 오차, Root Mean Squared Error): 회귀(숫자 예측)에 쓰입니다. 예측이 평균적으로 얼마나 빗나갔을까요?
어떤 지표가 가장 중요한지는 문제에 따라 달라집니다. 암 진단에서는 재현율이 더 중요합니다. 환자를 한 명도 놓치면 안 되기 때문입니다. 스팸 필터링에서는 정밀도가 더 중요합니다. 정상 이메일을 삭제하면 안 되기 때문입니다.
데이터 분석가 vs. 데이터 과학자 vs. 머신러닝 엔지니어
서로 다른 세 가지 역할
데이터 분야에는 세 가지 주요 진로 트랙이 있고, 각각 요구하는 기술이 달라요.
데이터 분석가
- 초점: 기존 데이터로 비즈니스 질문에 답하기
- 도구: SQL, Excel, Tableau, 기초 Python 또는 R
- 일과: 대시보드, 보고서, A/B 테스트 분석, 이해관계자 발표
- 입문 경로: 대체로 가장 접근하기 쉬운 길. 많은 분석가가 컴퓨터공학 학위 없이 시작한다.
데이터 사이언티스트
- 초점: 예측 모델을 만들고 복잡한 데이터에서 패턴 찾기
- 도구: Python (pandas, scikit-learn, matplotlib), 통계, SQL, Jupyter 노트북
- 일상 업무: 탐색적 데이터 분석(EDA), 피처 엔지니어링, 모델 구축, 실험
- 진입 경로: 보통 통계 또는 정량적 배경이 필요합니다. 부트캠프 & 독학도 가능합니다.
머신러닝 엔지니어
- 초점: 운영 시스템에서 모델을 배포하고 확장하기
- 도구: Python, TensorFlow/PyTorch, Docker, 클라우드 플랫폼(AWS/GCP), API
- 일상 업무: 모델 최적화, 파이프라인 인프라, 운영 중인 모델 모니터링
- 진입 경로: 보통 강력한 소프트웨어 엔지니어링 역량에 더해 머신러닝 지식이 필요합니다.
포트폴리오 만들기
채용 담당자는 무엇을 공부했는지만이 아니라 무엇을 할 수 있는지를 눈여겨봅니다. GitHub에 올린 탄탄한 프로젝트 3~5개가 자격증보다 더 큰 힘을 발휘합니다. 좋은 프로젝트는 장난감 같은 데이터가 아니라 실제 데이터셋을 쓰고, 문서를 명확하게 갖추며, 지저분한 데이터에서 실행 가능한 통찰까지 전체 파이프라인을 보여 줍니다.
다음 단계
앞으로 나아갈 길
이 분야의 도구는 모두 무료이고 누구나 쓸 수 있습니다.
- pandas: 데이터 처리를 위한 표준 Python 라이브러리
- matplotlib / seaborn: 시각화 라이브러리
- scikit-learn: 고전적 머신러닝을 위한 핵심 도구
- Jupyter notebooks: 코드, 출력, 메모를 함께 작성할 수 있는 대화형 코딩 환경
- Kaggle: 무료 데이터셋, 대회, 그리고 실무자 커뮤니티
관심 있는 실제 데이터셋 하나로 시작하세요. 내려받고, 정리하고, 탐색하면서 질문 하나에 답해 보세요. 그 프로젝트 하나가 어떤 강의보다 더 많이 가르쳐 줍니다.