English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

게스트
1 / ?
수업 목록으로

데이터 과학이란 무엇일까요?

데이터 과학은 머신러닝만이 아닙니다. 통계만도 아닙니다. 프로그래밍만도 아닙니다.

데이터 과학은 데이터에서 쓸모 있는 지식을 뽑아내는 학문입니다. 그 일의 대부분은 화려하지 않습니다. 지저분한 스프레드시트를 정리하고, 알맞은 질문을 던지고, 코드에는 관심 없는 사람들에게 결과를 전달하는 일입니다.

Data Science Pipeline

전형적인 데이터 과학 파이프라인은 다음과 같습니다.

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() 같은 메서드로 이런 문제를 처리합니다. 하지만 어려운 부분은 코드가 아닙니다. 각 문제에 무엇을 할지 결정하는 일이 어렵습니다.

Common Data Problems

정제 결정

무엇을 할지 결정하기

실제 상황을 하나 살펴봅시다. 고객 기록 10,000건으로 이루어진 데이터셋이 있습니다. 'age' 열에 누락된 값이 500개 있습니다.

선택지:

- 행 삭제: 500개 레코드를 모두 제거합니다. 간단하지만 데이터의 5%를 잃습니다. 이 500명의 고객이 공통된 특성을 지녔다면(예: 개인정보에 민감해서 나이 항목을 건너뛴 경우), 삭제는 편향을 일으킵니다.

- 평균으로 채우기: 빈칸을 평균 나이로 대체합니다. 빠르지만 나이 열의 분산을 인위적으로 줄입니다.

- 중앙값으로 채우기: 나이 분포가 한쪽으로 치우친 경우(아주 고령이거나 아주 어린 고객 몇 명이 평균을 끌어당길 때) 평균보다 낫습니다.

- 플래그 사용: 'age_missing'(1 또는 0)이라는 새 열을 만들고 원래 열은 중앙값으로 채웁니다. 이제 모델은 결측 자체가 의미 있는 정보인지 학습할 수 있습니다.

보편적으로 옳은 답은 없습니다. 선택은 데이터가 왜 비어 있는지 & 그 데이터를 어디에 쓸 계획인지에 달려 있습니다.

직원 급여 데이터셋이 있습니다. 5,000개 레코드 중 200개에서 급여 값이 비어 있습니다. 결측값 대부분이 임원에게서 나왔다는 것을 알아챘습니다. 해당 행을 삭제하겠습니까, 평균으로 채우겠습니까, 아니면 다른 방법을 쓰겠습니까? 이유를 설명하세요.

올바른 질문 던지기

탐색적 데이터 분석(EDA)

모델을 만들기 전에 먼저 데이터를 이해해야 합니다. EDA는 데이터셋을 요약하고, 시각화하고, 질문을 던져 패턴, 이상치, 관계를 찾아내는 과정입니다.


핵심 도구

- 히스토그램: 단일 변수의 분포를 보여줍니다. 종 모양인가요? 한쪽으로 치우쳤나요? 봉우리가 두 개(이봉형)인가요? 소득 히스토그램은 항상 오른쪽으로 치우칩니다. 소수의 사람이 대다수보다 훨씬 많이 벌기 때문입니다.

- 산점도: 두 변수 사이의 관계를 보여줍니다. 키가 큰 사람이 몸무게도 더 나갈까요? 공부 시간이 많을수록 성적이 높을까요? 패턴이 있는지 없는지가 관계의 존재 여부를 알려줍니다.

- 상관관계: 선형 연관성을 측정하는 -1에서 +1 사이의 숫자입니다. +1은 완벽한 양의 관계, -1은 완벽한 음의 관계, 0은 선형 관계가 없음을 뜻합니다. 하지만 상관관계가 인과관계를 의미하지는 않습니다. 아이스크림 판매량과 익사 사고는 둘 다 여름에 늘어나기 때문에 상관관계를 보입니다.

- 요약 통계량: 평균, 중앙값, 표준편차, 최솟값, 최댓값. pandas에서는 df.describe() 한 줄로 이 모든 값을 얻을 수 있습니다.


진짜 실력

도구는 배우기 쉽습니다. 어려운 부분은 올바른 질문을 던지는 일입니다. 나쁜 질문: '데이터가 무엇을 말해 주나요?' 좋은 질문: '첫 주 안에 고객지원에 문의한 고객이 더 높은 유지율을 보이나요?'

EDA 도구

상관관계의 함정

상관관계와 인과관계

데이터 리터러시에서 가장 중요한 개념입니다. 두 변수가 강한 상관관계를 보여도 한쪽이 다른 쪽을 일으키지 않을 수 있습니다.

대표적인 예:

- 소방관이 많은 도시일수록 화재도 많이 발생합니다. (큰 도시에는 소방관도 화재도 많습니다.)

- 아침을 먹는 학생이 성적도 더 좋습니다. (어쩌면 형편이 넉넉한 가정이 아침 식사 & 학업 지원을 둘 다 제공할 가능성이 높기 때문일 수 있습니다.)

- 초콜릿을 더 많이 소비하는 나라일수록 노벨상을 더 많이 받습니다. (둘 다 국가의 부와 상관관계가 있습니다.)

숨겨진 요인을 교란 변수(confounding variable)라고 합니다. 여러분이 살펴보는 두 변수를 모두 움직이는 제3의 변수입니다.

상관관계와 인과관계

한 회사가 사내 체육관을 이용하는 직원의 병가 일수가 30% 적다는 사실을 발견했습니다. CEO는 모든 직원에게 체육관 이용을 의무화하려고 합니다. 이 추론에는 무엇이 잘못되었을까요? 이 상관관계를 설명할 수 있는 교란 변수에는 어떤 것이 있을까요?

유용한 변수 만들기

특성 공학이란?

특성(feature)은 모델이 예측하는 데 사용하는 입력 변수입니다. 특성 공학은 원시 데이터에서 새로운 특성을 만들어, 모델이 그렇지 않으면 볼 수 없었던 패턴을 학습하도록 돕는 기술입니다.

원시 데이터는 모델이 필요로 하는 형태로 오는 경우가 드뭅니다. '생년월일' 열이 있는 데이터셋을 생각해 봅시다. 모델은 원시 날짜만으로는 할 수 있는 일이 많지 않습니다. 하지만 이 열에서 '나이' 특성을 만들면, 모델은 갑자기 나이에 기반한 패턴을 학습할 수 있습니다.


일반적인 기법

- 정규화: 숫자를 공통 범위(0에서 1, 또는 평균 0 & 표준편차 1)로 조정하는 기법. 이 과정이 없으면 수천 단위로 측정한 특성(연봉)이 한 자릿수로 측정한 특성(경력 연수)을 압도한다.

- 원-핫 인코딩: 범주형 변수를 이진 열로 바꾸는 기법. 값이 [red, blue, green]인 'color' 열은 'color_red', 'color_blue', 'color_green' 세 열로 바뀌고, 각 열은 0 또는 1을 갖는다.

- 구간화: 연속 변수를 범주로 바꾸는 기법. 0-17세는 '미성년', 18-64세는 '성인', 65세 이상은 '고령'이 된다. 관계가 선형이 아닐 때 도움이 된다.

- 상호작용 특성: 두 특성을 서로 곱한 특성. '평방피트 곱하기 욕실 수'는 둘 중 하나만 쓸 때보다 집값을 더 잘 예측할 수 있다.

- 도메인 지식: 가장 강력한 기법. 의료 모델의 특성을 만드는 의사는 어떤 검사 수치가 중요한지 안다. 마케터는 '마지막 구매 후 경과 일수'가 '구매 날짜'보다 유용하다는 사실을 안다. 어떤 알고리즘도 이를 대신하지 못한다.

Feature Engineering Techniques

특성 연습

특성 공학 적용하기

다음 달에 스트리밍 구독을 해지할 고객을 예측하는 모델을 만든다고 상상해 보세요. 원시 데이터는 다음과 같습니다.

- 계정 생성일

- 마지막 로그인 날짜

- 지난달에 시청한 프로그램 수

- 월 결제 금액

- 접수한 고객 지원 문의 건수

- 국가

위에 나열한 원시 데이터에서 새로 설계할 특성(feature)을 세 가지 이상 제안해 보세요. 각 특성마다 무엇을 포착하는지, 그리고 해지 예측에 왜 도움이 될 수 있는지 설명하세요.

훈련/테스트 분할

데이터를 나누는 이유

모델링에서 가장 중요한 규칙은 이것입니다. 모델을 학습시킨 데이터와 같은 데이터로 모델을 평가하지 마세요.

그렇게 하면 모델이 정답을 그대로 외워 버릴 수 있습니다. 학습 데이터에서는 완벽한 점수를 받지만, 처음 보는 새 데이터에서는 실패합니다. 이를 과적합(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): 회귀(숫자 예측)에 쓰입니다. 예측이 평균적으로 얼마나 빗나갔을까요?

어떤 지표가 가장 중요한지는 문제에 따라 달라집니다. 암 진단에서는 재현율이 더 중요합니다. 환자를 한 명도 놓치면 안 되기 때문입니다. 스팸 필터링에서는 정밀도가 더 중요합니다. 정상 이메일을 삭제하면 안 되기 때문입니다.

Evaluation Metrics and Confusion Matrix

신용카드 사기 거래를 탐지하는 모델을 만들고 있습니다. 전체 거래 중 실제 사기는 0.1%뿐입니다. 모델이 모든 거래를 정상으로 예측한다면 정확도는 얼마일까요? 이 경우 정확도가 왜 나쁜 지표인지, 대신 어떤 지표를 쓸지 설명해 보세요.

데이터 분석가 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: 무료 데이터셋, 대회, 그리고 실무자 커뮤니티

관심 있는 실제 데이터셋 하나로 시작하세요. 내려받고, 정리하고, 탐색하면서 질문 하나에 답해 보세요. 그 프로젝트 하나가 어떤 강의보다 더 많이 가르쳐 줍니다.

이번 수업에서 배운 내용을 바탕으로, 세 가지 역할(데이터 분석가, 데이터 과학자, ML 엔지니어) 중 어느 쪽에 가장 관심이 가나요? 그 역할에 필요한 역량을 쌓기 위해 이번 주에 할 수 있는 구체적인 한 걸음은 무엇인가요?