강의 개요
- 데이터 분석 및 과학을 위한 핵심 통계지식을 학습
- python을 활용한 통계적 가설검증, 회귀(예측), 분류(지도학습), 클러스터링(비지도학습)에 대해 이해
목표
- 다양한 데이터의 종류를 이해
- 편차, 분산, 표준편차의 개념을 이해
- 표본분포와 히스토그램의 개념을 학습
- 신뢰구간과 정규분포의 개념을 익히고 응용
- 데이터의 오차 범위를 어디까지 허용할 것인가?
데이터의 종류
데이터의 종류를 분류하는 이유
- 데이터의 종류를 왜 분류해야 할까요?
- 데이터를 분석하고 예측할 때 중요한 역할을 하기 때문!
- 데이터의 생김새가 시각화, 해석, 통계모델 결정에 중요한 역할을 함
- 특히나 python과 같은 데이터 과학 소프트웨어는 다양한 데이터 종류가 존재하므로, 이를 적재적소에 활용하는 것이 중요
→ 데이터 형식을 인지해야 알맞은 방식으로 코딩을 할 수 있음
- 데이터분석가는 데이터의 종류를 이해하고, 관련 분석을 어떤식으로 수행할 지 결정해야 함
- "수치형 변수는 oo 분석기법으로 처리해야지"
데이터 종류 | 개념 | 예시 |
---|
수치형 | 숫자를 이용해 표현할 수 있는 데이터 | 체중, 신장, 사고건수, 일 방문자수 |
| 이산형, 연속형을 모두 포함하는 개념 | |
연속형 | 일정 범위 안에서 어떤 값이든 취할 수 있는 데이터 | |
이산형 | 횟수와 값은 정수형 값만 취할 수 있는 데이터 | |
| 즉, 소수점의 의미가 없는 데이터를 의미(수치형 데이터와의 차이점) | |
범주형 | 가능한 범주 안의 값만을 취하는 데이터 | 나라, 도시, 혈액형 |
=명목형 | =값이 달라짐에 따라 좋거나 나쁘다고 할 수 없는 데이터 | 성공여부, 등수, MBTI |
| 이진형, 순서형을 모두 포함하는 개념 | |
이진형 | 두 개의 값만을 가지는 범주형 데이터의 특수한 경우 | 성별 → 남/여 |
| 0과1 예/아니오 참/거짓 | 성공여부 |
순서형 | 값들 사이에 분명한 순위가 있는 데이터 | 등수 |
데이터 종류 더 알아보기
수치형 자료와 범주형 자료
- 데이터 종류는 크게 수치형 및 범주형으로 나눔
- 우리는 이제부터 수치형, 범주형 데이터를 활용하여 알맞은 통계기법(
라이브러리
)을 학습할 예정

여기서 잠깐!
python 라이브러리의 개념을 기억하시나요?
import pandas as pd
라이브러리란 “우리가 자주 쓰는 함수들을 모아놓은 묶음”입니다.
즉, 예쁘게 정리되어 있는 라이브러리를 간단히 호출만 함으로써, 복잡한 연산도 쉽게 한 줄로 해결할 수 있습니다.
우리는 지금까지 기초프로젝트를 진행하며 데이터 EDA를 진행했고, 그 과정에서 아래와 같은 라이브러리들을 학습했습니다.
pandas
numpy
matplotlib
seaborn
altair
이제 통계를 위한 기본개념 및 라이브러리들을 학습해봅시다!
이번 수업에서 배울 것 ★★★
- '데이터 분석에 사용되는 통계'를 집중적으로 살필 예정
- 아래 표 '구분' 3가지는 항상 세트로 먼저 생각한 뒤에 데이터 분석을 시작해야 함!
구분 | 상세 |
---|
분석 기법 | 기초 통계분석 |
| 상관분석 |
| 회귀분석 |
| 분류분석 |
| 군집분석 |
| RFM 분석 |
분석 방법론 | A/B TEST |
통계이론 | 기초통계이론(평균, 분산, 표준편차) |
| 정규분포와 중심극한정리 |
| 신뢰구간과 유의수준 |
| 가설 설정 |
| 통계적 유의성 검정 |
| 통계적 가설 검정 |
- 기초통계의 이론을 학습하고, 데이터 종류에 맞는 python 라이브러리를 활용해 실습하기
- 실습을 바탕으로 심화 프로젝트 진행 시 통계분석을 진행하고 이를 해석하기
편차, 분산, 표준편차, 표본분포
Data EDA에서 맛본 통계 이야기: 평균
- 데이터 EDA를 진행하면서 우리는 Pandas라는 라이브러리를 통해, 데이터프레임이라는 테이블 형태의 데이터 구조를 살펴보았음
→ mean(평균), median(중앙값), mode(최빈값)
- 데이터프레임은 기본적으로 행과 열로 구성된 이차원의 행렬을 뜻함
- 테이블이 어떻게 생겼는지 info, describe 등의 함수를 사용해 알 수 있었음
- 테이블의 각 컬럼들은 보통 모두 다른 값을 가짐
- 테이블이 주어졌을 때 이를 살펴보는 가장 기초적인 단계는 각 컬럼의 ‘대푯값’ 을 구하는 것
-대푯값은 평균, 중앙값, 최빈값 등이 될 수 있음
- 대부분의 값이 어디쯤에 위치하는지 알 수 있게 해 줌

- 위와 같은 데이터가 있다고 가정할 때:
- 평균
- 모든 값의 총 합을 개수로 나눈 값
- 34/5 = 6.8
- 중간값
- 데이터 중 가운데 위치한 값
- 5개 중 중간에 위치한 6
- 최빈값
- 데이터 중 가장 많이 도출된 값
- 6이라는 숫자가 2번 있으므로 6
- 파이썬에서는 아래와 같이 살펴볼 수 있음
df['점수'].mean()
df['점수'].median()
df['점수'].mode()
- 하지만 이와 같은 대표값만으로는 데이터를 분석했다고 말하기 다소 어려움 → 이러한 값에 설명력을 더해주는 통계가 필요!
- 아래 두 그래프의 평균은 같음
- 두 그래프를 비교하기 위해서는 다른 설명이 필요함 → 통계: 편차, 분산, 표준편차

편차, 분산, 표준편차
- 앞서 평균, 중앙값, 최빈값 들을 통해 살펴본 대표값은 데이터의 ‘WHERE=(어디에 존재하는가)’를 표현해주는 개념
- 분산과 편차는 ‘HOW = 어떻게 존재하는가’에 대한 개념
편차(deviation)
- 하나의 값에서 평균을 뺀 값 = 평균으로부터 얼마나 떨어져 있는지를 의미
예시
- A 학생의 영어점수: 30점
- B 학생의 영어점수: 70점
- C 학생의 영어점수: 80점
- A,B,C 학생의 평균 영어점수: 60점
> A 학생의 편차: -30
> B 학생의 편차: +10
> C 학생의 편차: +20
학생 전체의 편차를 나타내기 위해
각 학생들의 편차를 모두 더하게 되면
0이 나오게 됩니다.
따라서 편차로는 반 전체의 점수 분포를
정확히 알 수가 없기에 나온 개념이 분산입니다.
분산(variance)
- 편차의 합이 0으로 나오는 것을 방지하기 위해 생성된 개념
- 편차는 더하면 0이 되어서 나눌 수가 없다… → 제곱해서 모두 양으로 만들면 되지!
- 편차 제곱합의 평균
예시
- A 학생의 편차 제곱: (-30)^2 = 900
- B 학생의 편차 제곱: (+10)^2 = 100
- C 학생의 편차 제곱: (+20)^2 = 400
> 편차 제곱합: 1400
> 편차 제곱합의 평균(분산): 1400/3 = 466
분산은 466이 도출되었습니다.
그러나 점수라는 값에 제곱이 들어가며
(점수에 제곱..!)
그 단위가 달라지게 되었어요.
실제 데이터가 어느 정도로 차이가 있는지
알기 어렵게 되었습니다.
이를 해결하기 위해 도입된 개념이 표준편차입니다.
표준편차(standard deviation(σ))
- 분산에 제곱근을 씌워준 값
= 원래 단위로 되돌리기

- 분산: 466
- 분산의 제곱근 = 표준편차 = 약 21.6 이 되겠습니다.
🡆 이로써, 우리는 반 전체의 영어 점수가 약 21만큼 퍼져있다(분산되어있다)라고 해석할 수 있음!
-
지금까지는 A,B,C라는 친구의 값을 예제로 보았지만 실제로는 무수히 많은 데이터들이 있음 → 이를 통계분석에 전부 활용해야 할까?
-
통계분석을 위한 기준 데이터 선정에 대한 내용 살펴보기
모집단, 표본, 표본분포
- 무수히 많은 데이터를 대상으로, 보다 양질의 데이터를 기반으로 효과적인 통계분석 및 데이터 편향(치우침)을 최소화 하기 위해 표본추출이 이루어짐
→ 너무 이상한 데이터는 빼기(e.g. 결제창 오류가 있었던 날, 서버가 다운된 시간이 있는 날), 의도해서 데이터 가져오면(e.g. 매출이 좋았던 3월, 5월 데이터만 분석에 사용) 절대 안 됨
→ 무작위성을 수반해야 함!
- 특히나 데이터 모델을 통해 추천이나 예측을 진행하는 경우 대표성을 가지는 데이터를 가지고 모델을 개발
모집단과 표본

- 모집단(Population)
- 표본(Sample)
→ 머신 러닝, 통계 분석은 대부분 "추론 통계"를 기반으로 함(모집단이 fix되지 않았기 때문)
→ 전체에서 일부를 때 왔다? 추론 통계!
표본분포와 표준오차
- 표본분포
- 표본의 분포
- 표본이 흩어져 있는 정도
- 표본통계량으로부터 얻은 도수분포
- 표본평균의 분포
- 모집단에서 여러 표본을 추출하고 각 표본의 평균을 계산한다면, 이는 중심극한정리에 따라 정규분포에 가까워짐
- 중심극한정리: 동일한 확률분포를 가진 독립 확률 변수 n개의 평균의 분포는 n이 적당히 크다면 정규분포에 가까워진다
- 이는 표본 크기가 충분히 크다면 표본 평균이 정규분포를 따른다는 것을 의미함
- 표본분산의 분포
- 모집단에서 여러 표본을 추출하고 각 표본의 분산을 계산한다면, 이 표본분산들의 분포는 카이제곱 분포를 따름
- 카이제곱분포: k개의 서로 독립적인 표준정규 확률변수를 각각 제곱한 다음 합해서 얻어지는 분포(k: 자유도) → 분산이 퍼져있는 정도을 분포로 보여주는 것

→ 자유도 4일 때 카이제곱 값이 9.49 🡆 z값 4개를 임의로 뽑아서 제곱한 다음 더한 값이 9.49를 넘을 확률은 5%밖에 안 된다는 뜻
- 이는 모집단이 정규분포를 따를 때 보다 높게 성립
→ 일부를 떼 오면 무조건 오차가 발생하게 되니까 표준오차 개념이 필요함!
- 표준오차
- 표본의 표준편차
- 표본평균의 평균과 모평균의 차이
- 🧑 나는 모평균 이라고 해. 나는 70이야.
- 👩🦰 나는 표본평균 이야. 나는 67이야.
- 👶 나는 표준 오차야! 나는 3이 되겠다!
시각화: 도수분포표와 히스토그램
- 모집단에서 표본을 추출하고, 이를 시각화하여 통계적 의미를 찾는 것도 중요
- 이 과정에서 아래 개념들을 이해해야 하며, 이해한 개념을 바탕으로 심화프로젝트에서 통계적 해석을 진행
- 도수: 특정 구간에 발생한 값의 수
- 상대도수: 특정 도수를 전체 도수로 나눈 비율
- 도수분포표: 각 값에 대한 도수와 상대도수를 나타내는 표
- 히스토그램: 도수분포표를 활용하여 만든 막대그래프
- 임의표본추출: 무작위로 표본을 추출하는 것
- 편향: 한쪽으로 치우쳐져 있음
도수분포표 만들기
순서 | 내용 |
---|
1 | 최댓값, 최솟값 계산 |
2 | 최댓값, 최솟값을 포함하여 데이터를 특정 범위(계급)으로 나눔 |
3 | 각 계급을 대표하는 수치(계급값) 정하기 |
4 | 각 계급에 포함된 데이터 개수(도수)를 카운트 |
5 | 각 계급의 도수가 전체에서 차지하는 비율(상대도수)을 계산 |
6 | 특정 계급까지의 도수를 모두 sum (누적도수) |

→ 계급도수, 상대도수: 파이썬 피벗테이블 cut으로 만든 거랑 같은 내용입니다! 파이썬 2강 복습해주세요~
- 이렇게 모집단에서 표본을 추출하고, 표본의 분포를 그릴 수 있음 → 하지만 해당 표본을 신뢰할 수 있을까?
정규분포, 신뢰구간
정규분포
- 중심극한정리: 표본을 선정할 때 그 값이 충분히 크다면 해당 분포는 종 모양의 정규분포를 따른다
- 모집단이 충분히 크다면 표본을 어떻게 가져와도 그 친구는 정규분포를 따른다는 뜻
예시: 과학 시험 점수
이름 | 과학점수 |
---|
피카츄 | 100 |
라이츄 | 80 |
파이리 | 65 |
꼬부기 | 60 |
… | … |
소현 | 20 |
이를 그래프로 그리게 되면 평균에서 가장 그 확률이 높고, 평균을 중심으로 멀어지면서 그 수가 적어지게 됨 → 이와 같은 종 모양의 분포를 정규 분포라 함
정규분포의 특징
- 분포는 평균을 중심으로 좌우 대칭의 형태
- 곡선은 각 확률값을 나타내며, 모두 더하면 1
- 동전을 뒤집어서 앞면이 나올 확률은 2분의 1 + 뒷면이 나올 확률 2분의 1 = 전체 확률 1
- 정규분포는 평균과 분산(퍼진정도)에 따라 다른 형태를 가짐
- 평균 0, 분산 1을 가지는 경우, 이를 표준정규분포라고 함(그림의 붉은색 그래프)
표준정규분포를 학습해야 하는 이유
- 조금 전 살펴봤던 네 가지의 정규분포에서 그래프 아래쪽의 영역은 모두 확률임
- 전체 경우의 수 중 어떠한 사건이 일어날 경우의 수
- 각각의 그래프는 평균과 분산값에 따라 다르게 그려질 수 있음 → 이러한 경우, 확률을 계산할 때 어려움을 겪게 됨

- 데이터 분석 시 표준화가 필요한 경우 ★★
- 머신러닝 모델을 만들 때, 데이터의 범위가 많이 차이나는 경우
예시
컬럼 | Data Range |
---|
최근 일주일 접속일수 | 0~7 |
결제 금액 | 0~100,000,000,000(1000억) |
- 최근 일주일 접속일수의 1과 결제금액의 1은 같은 의미를 가질까요? NO 아니죠!
- 하지만 머신러닝 시, 해당 값의 의미를 같게 받아들이고 처리할 수 있으며, 범위가 큰 데이터의 경우 숫자가 가지는 절대치를 잘못 받아들일 수 있어 표준화는 반드시 필요합니다.
🡆 여기까지 데이터가 정규분포의 특징과 표준화가 왜 필요한지에 대한 내용
🡆 해당 그래프를 가지고 ‘오차를 얼마나 수용할 것인가’에 대한 이야기까지 확장 가능
신뢰구간, 신뢰수준
👩: 언제쯤 강남역에 도착하시나요?
👨: 10-15분 정도 걸릴 것 같습니다.
- 여기서 사용된 10-15분이 신뢰구간을 의미
- 평균적으로 10분에서 15분이 걸린다는 의미를 내포
- 12.5분이라고 말하지 않는 것은, ‘평균’이 그러할 뿐이지 반드시 그 12.5분이 걸릴지는 알 수 없는 일이기 때문
- 모든 데이터는 표본을 추출하는 순간 불확실성을 가지게 됨
- 모집단 전체를 사용하지 않는 한, 결과가 한끗차이도 나지 않기는 어렵다!라는 의미
- 이러한 데이터의 불확실성을 ‘신뢰도’라는 개념으로 약속
- 신뢰구간
- 특정 범위 내에 값이 존재할것으로 예측되는 영역
"영어점수가 10점에서 90점 사이일 것 같아요"
- 신뢰수준
- 실제 모수를 추정하는데 몇 퍼센트의 확률로 신뢰구간이 실제 모수를 포함하게 되는 확률
- 주로 95%와 99%를 이용
"영어점수가 10점에서 90점 사이에 있을(분포할) 확률이 95% 같아요"
보충설명
- 신뢰구간: 우리가 계산하지 않습니다.
- 신뢰수준: 우리가 지정합니다.
- 신뢰수준 95%: 무작위로 표본을 추출했을 때, 100번 중 95번은 모집단의 값을 포함
- 신뢰수준 99%: 무작위로 표본을 추출했을 때, 100번 중 99번은 모집단의 값을 포함
- 주의점
- 신뢰수준이 높아지게 되면 신뢰구간이 넓어지지만 정확한 예측이 어렵기 때문에 95% 신뢰수준보다 99% 신뢰수준이 좋다고 할 수 없습니다.
🡆 통계 분석 진행할 때 95%, 99% 모두 해 보고 서로 비교해보기!
🡆 어떠한 데이터를 선택할지(어떤 통계적 신뢰구간을 가져갈지)는 EDA를 통해 합리적으로, 보다 논리적으로 설명할 수 있는지를 보면 됨
추가: 복습하며 찾아본 내용
신뢰도 95%의 의미
- 여러 번의 표본 추출과 신뢰구간 계산을 통해 만들어진 신뢰구간들 중 95%가 모집단의 실제 평균 μ를 포함할 것이라는 확률적 해석
- 개별 신뢰구간에 대해 '이 구간이 95% 확률로 모집단 평균을 포함한다'는 의미가 아님!(다만 전체적으로 볼 때 95%의 신뢰도를 갖는다는 것)
- 무작위로 표본을 여러 번 추출하여 각각의 표본으로 신뢰구간을 계산할 때 이 신뢰구간들이 모집단 평균 μ를 포함하는 비율이 95%가 된다는 것
- 어떤 모집단에서 100번의 표본을 추출하고, 각 표본에 대해 95% 신뢰구간을 계산했다고 가정 → 이 100개의 신뢰구간 중 약 95개는 모집단의 실제 평균 μ를 포함하고, 나머지 5개는 포함하지 않을 것으로 기대할 수 있음
신뢰 구간 특성
- 신뢰구간(CI)이 좁을수록, 모집단 평균 추정치가 정확해짐
- 일반적으로 관측 개수(표본크기; Sample size)가 클수록 신뢰구간이 좁아짐
- 따라서 표본이 클수록 더 정확하게 모집단 평균을 추정할 수 있음

90%, 95%, 99% 신뢰구간의 차이
- 신뢰구간을 설정할 때는 확률분포의 1-α를 기준으로 설정
- 99%의 신뢰구간은 신뢰도가 높은 구간 → 신뢰도를 높이기 위해서는 구간의 길이가 길어짐(구간의 길이가 길수록, 모수가 구간 안에 포함될 확률이 올라감)
- 구간의 길이가 짧을수록, 모수가 구간 안에 포함될 확률이 내려가기에 신뢰도는 낮아짐
- %가 높을수록 구간의 길이가 길어지고, 낮을수록 구간의 길이가 짧아짐
- 모수를 "추리"하는 것이므로 구간의 길이가 길어서 신뢰도가 높은 것이 무조건 좋다고 생각할 수도 있겠지만 꼭 그런 것은 아님!
- 구간의 길이가 길어질수록 최종적으로 모수를 추리하기가 애매해지기 때문

- 현실에서는 구간추정을 참고해 어떠한 상황의 의사결정을 하는 경우도 있는데 모수를 추리하기가 애매하면 최종적으로 의사결정하기도 애매해짐
- 신뢰구간은 구간의 길이가 짧을수록 최종적으로 모수를 추리하기가 편해지고, 반대로 구간의 길이가 길어질수록 모수를 추리가 애매해짐
- 따라서 신뢰구간이 무조건 길다고 좋은 것은 아니며, 각각의 신뢰구간은 장단점이 있음
- 90%: 틀릴 확률은 높지만 모수 추리하기 편함
- 95%: 보통 많이 사용
- 99%: 틀릴 확률은 낮지만 모수 추리하기 애매
- 신뢰구간을 설정할 때 90% 밑으로 설정하는 경우는 거의 없음
- 신뢰구간은 확률분포를 기반으로 설정하기 때문에 99%의 신뢰구간도 길이가 매우 길지는 않다고 함
실습: python 라이브러리 중 하나인 ‘scipy’ 를 활용하여, 95%와 99% 신뢰구간 구하기
import scipy.stats as st
import numpy as np
sample1 = [5, 10, 17, 29, 14, 25, 16, 13, 9, 17]
sample2 = [21, 22, 27, 19, 23, 24, 20, 26, 25, 23]
df = len(sample1) - 1
mu = np.mean(sample1)
se = st.sem(sample1)
st.t.interval(0.95, df, mu, se)
st.t.interval(0.99, df, mu, se)
추가: 복습하며 찾아본 내용
import scipy.stats as st
import numpy as np
sample1 = [5, 10, 17, 29, 14, 25, 16, 13, 9, 17]
sample2 = [21, 22, 27, 19, 23, 24, 20, 26, 25, 23]
df = len(sample2) - 1
x_bar = np.mean(sample2)
se = st.sem(sample2)
print(f'자유도: {df}, 표본평균: {x_bar}, 표준오차: {se}')
st.t.interval(0.95, df, x_bar, se)
st.t.interval(0.99, df, x_bar, se)
- 신뢰구간(confidence interval; CI)
- 모수가 어느 범위 안에 있는지를 확률적으로 보여주는 방법
- 모수가 실제로 포함될 것으로 예측되는 범위
- 샘플링된 표본이 연구 중인 모집단을 얼마나 잘 대표하는지 측정하는 방법
- 보통 표본에서 산출된 통계와 함께 제공됨
(예) "신뢰수준 95%에서 투표자의 35%~45%가 A후보를 지지하고 있다."
- 95%는 신뢰수준(Confidence Level)이고 35%~45%는 신뢰구간이며 θ는 A후보의 지지율
- 68-95-99.7 규칙


요약
- 데이터 분석가는 데이터의 종류에 따라 관련된 계산을 어떤 식으로 수행할지 결정함
- 대표적인 데이터 종류: 수치형, 범주형 데이터
- 데이터 대푯값: 평균, 중간값, 최빈값
- 데이터 "분포"를 보다 명확히 파악하기 위해 편차, 분산, 표준편차 사용
- 편차는 그 합이 0 으로 분포를 확인할 수 없음
→ 음수값을 없애기 위해 제곱을 취해주는 분산의 개념 도입
→ 분산은 제곱값으로 그 단위가 달라 제곱근을 씌워 다시 단위를 맞춰줌: 표준편차
- 무수히 많은 데이터를 대상으로 효과적인 통계분석을 위해 표본추출이 이뤄짐
- 모집단은 어떤 데이터 집합을 구성하는 전체이고, 표본은 그 중 일부(부분집합)
- 표본의 분포를 가지고 모집단의 분포를 추정
- 해당 과정에서 무수히 많은 경우의 수의 표본이 생성될 수 있음
- 표본 크기가 충분히 크다면 어떤 분포에서도 표본평균이 정규분포를 따른다: 중심극한정리
- 정규분포는 종 모양을 띄고 있으며, 분포는 좌우 대칭의 형태
- 정규분포에서 평균 0, 분산 1을 가지는 경우, 이를 표준정규분포라고 함
- 데이터 분석 시 표준화가 필요한 경우
- 머신러닝 모델을 만들 때
- 데이터의 범위가 많이 차이나는 경우
- 예시: 최근 일주일 접속일수의 1과 결제금액의 1은 같은 의미가 아니며, 범위가 큰 데이터의 경우 숫자가 가지는 절대치를 잘못 받아들일 수 있어 표준화는 반드시 필요