[수업 목표]
'데이터 분석에 사용되는 통계' 를 집중적으로 살펴보자.

기초통계의 이론을 학습 데이터 종류에 맞는 python 라이브러리를 활용한 실습
실습을 바탕으로 심화 프로젝트 진행시 통계분석을 진행하고 해석
데이터의 생김새가 시각화, 해석, 통계모델 결정에 중요한 역할을 하기 때문에 데이터를 분석하고 예측할 때 데이터의 분류는 중요한 역할을 한다.
데이터분석가는 데이터의 종류를 이해하고, 데이터의 종류에 따라 어떤식으로 분석을 수행할지 결정하게 된다.
(ex. 수치형 변수는 oo 분석기법으로 처리해야지)

데이터 종류는 크게 수치형 및 범주형으로 나뉜다

데이터 EDA 를 진행하면서 우리는 Pandas 라는 라이브러리를 통해, 데이터프레임 이라는 테이블 형태의 데이터 구조를 살펴보았다.
테이블 형태의 데이터 구조란 기본적으로 행과 열로 구성된 이차원의 행렬을 뜻하는데
우리는 테이블이 어떻게 생겼는지 info, describe 등의 함수를 사용하며 알아볼 수 있다
(테이블의 각 컬럼들은 보통 모두 다른 값을 가짐)
테이블을 살펴보는 가장 기초적인 단계는 각 컬럼의 대표값 확인하는 것인데. 대표값은 평균, 중앙값, 최빈값 등이 될 수 있다. 이는 대부분이 값이 어디쯤에 위치하는지 알 수 있게 해줌.
# 평균
df['점수'].mean()
# 중앙값
df['점수'].median()
# 최빈값
df['점수'].mode()
하지만 평균과 중앙값, 최빈값 만으로는 데이터를 완전히 설명하기에 무리가 있다.
평균이 같은 아래 두 그래프를 보면 평균만으로 데이터를 설명하는데 한계가 있음을 알 수 있음.

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

보다 양질의 데이터를 기반으로 효과적인 통계분석 및 데이터의 편향(치우침)을 최소화 하기 위해 표본추출을 하게 된다. 특히나 데이터 모델을 통해 추천이나 예측을 진행하는 경우 대표성을 가지는 데이터를 가지고 모델을 개발하고 있다.
모집단에서 표본을 추출하고, 이를 시각화하여 통계적 의미를 찾는 것도 중요하다.
어떤 데이터 집합을 구성하는 전체 대상
모집단 중 일부. 모집단의 부분집합
표본의 분포. 표본이 흩어져 있는 정도. 표본통계량으로부터 얻은 도수분포
표본평균의 분포: 모집단에서 여러 표본을 추출하고 각 표본의 평균을 계산한다면, 이는 중심극한정리에 따라 정규분포에 가까워진다. 이는 표본 크기가 충분히 크다면 표본 평균이 정규분포를 따른다는 것을 의미함.
표본분산의 분포: 모집단에서 여러 표본을 추출하고 각 표본의 분산을 계산한다면, 이 표본분산들의 분포는 카이제곱 분포를 따른다. 모집단이 정규분포를 따를수록 카이제곱 분포가 표본분산의 분포를 잘 설명한다.
표본의 표준편차. = 표본평균의 평균과 모평균의 차이
모평균이 70, 표본평균 이 67이면 표준 오차는 3이다!
도수: 특정 구간에 발생한 값의 수
상대도수: 특정 도수를 전체 도수로 나눈 비율
도수분포표: 각 값에 대한 도수와 상대도수를 나타내는 표
히스토그램: 도수분포표를 활용하여 만든 막대그래프
임의표본추출: 무작위로 표본을 추출하는 것
편향: 한쪽으로 치우쳐져 있음
도수분포표 만들기(선택)
| 순서 | 내용 |
|---|---|
| 1 | 최댓값, 최솟값 계산 |
| 2 | 최댓값, 최솟값을 포함하여 데이터를 특정 범위(계급)으로 나눔 |
| 3 | 각 계급을 대표하는 수치(계급값) 정하기 |
| 4 | 각 계급에 포함된 데이터 개수(도수)를 카운트 |
| 5 | 각 계급의 도수가 전체에서 차지하는 비율(상대도수)을 계산 |
| 6 | 특정 계급까지의 도수를 모두 sum (누적도수) |

모집단에서 표본을 추출하고, 표본의 분포를 그릴 수 있게 되었지만 해당 표본을 신뢰할 수 있는가? 를 체크해 보아야 함.
중심극한정리를 다시 한 번 떠올려 보면 표본을 선정할 때 그 값이 충분히 크다면 해당 분포는 종 모양의 정규분포를 따른다.
전국 학생 n명에 대한 데이터가 아래과 같이 있다고 가정하고 이를 '점수가 나올 확률'에 대한 그래프로 그려보자.
| 이름 | 과학점수 |
|---|---|
| 피카츄 | 100 |
| 라이츄 | 80 |
| 파이리 | 65 |
| 꼬부기 | 60 |
| ... | ... |
| 소현 | 20 |
이를 그래프로 그리게 되면 평균에서 가장 그 확률이 높고, 평균을 중심으로 멀어지면서 그 수가 적어지게 되는데. 이와같은 종 모양의 분포를 정규 분포라고 한다.

정규분포의 특징은 아래와 같다.
왜 표준정규분포를 학습해야 할까
조금 전 살펴봤던 네 가지의 정규분포에서 그래프 아래쪽의 영역은 모두 확률이다.(전체 경우의 수 중 어떠한 사건이 일어날 경우의 수)
각각의 그래프는 평균과 분산값에 따라 다르게 그려질 수 있다.
이러한 경우, 확률을 계산할 때 어려움을 겪게 된다.

이를 통일하기 위해 정규분포의 평균과 분산 값을 통일하는 작업을 하게 되는데, 이를 표준화라고 한다.
표준화(standard scaler) 공식: 확률변수 X (값) 에서 평균 m을 빼고 표준편차로 나눈 값

데이터분석시 표준화가 필요한 경우: 머신러닝 모델을 만들 때, 데이터의 범위가 많이 차이나는 경우. 아래 표를 한번 보자.
| 컬럼 | Data Range |
|---|---|
| 최근 일주일 접속일수 | 0~7 |
| 결제 금액 | 0~100,000,000,000(1000억) |
- 최근 일주일 접속일수의 1과 결제금액의 1 은 같은 의미를 가질까? - NO.
- 하지만 머신러닝시, 해당 값의 의미를 같게 받아들이고 처리할 수 있으며, 범위가 큰 데이터의 경우 숫자가 가지는 절대치를 잘못 받아들일 수 있어 표준화는 반드시 필요한다.
**여기까지 데이터가 정규분포의 특징과 표준화가 왜 필요한지 알아보았다.**
해당 그래프를 가지고 '오차를 얼마나 수용할 것인가'에 대해 알아보자.
👩: 언제쯤 강남역에 도착하시나요
👨: 10-15 분 정도 걸릴 것 같습니다.
여기서 사용된 10-15분이 신뢰구간을 의미한다. 평균적으로 10분에서 15분이 걸린다는 의미를 내포하고 있다. 12.5 분이라고 말하지 않는 것은, '평균' 이 그러할 뿐이지 반드시 그 12.5 분이 걸릴지는 알 수 없는 일이기 때문.
모든 데이터는 표본을 추출하는 순간 불확실성을 가지게 된다. 모집단 전체를 사용하지 않는 한, 결과가 한끗차이도 나지 않기는 어렵다는 의미이다.
이러한 데이터의 불확실성을 우리는 신뢰도라는 개념으로 약속했다.
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 # 자유도 : 샘플 개수 - 1
mu = np.mean(sample1) # 표본 평균
se = st.sem(sample1) # 표준 오차
# 95% 신뢰구간
st.t.interval(0.95, df, mu, se) # (10.338733110887336, 20.661266889112664)
# 99% 신뢰구간
st.t.interval(0.99, df, mu, se) # (8.085277068873378, 22.914722931126622)
금일수업 요약
데이터분석가는 데이터의 종류에 따라 관련된 계산을 어떤식으로 수행할 지 결정하게 된다.
데이터 종류는 대표적으로 수치형, 범주형 데이터가 있다.
데이터 대표값에는 평균, 중간값, 최빈값이 있다. 데이터 분포를 보다 명확히 파악하기 위해 편차, 분산, 표준편차를 알아보았다.
편차는 그 합이 0 으로 분포를 확인할 수 없다. → 음수값을 없애기 위해 제곱을 취해주는 분산의 개념이 도입되었다. → 분산은 제곲값으로 그 단위가 달라 제곱근의 씌워 다시 단위를 맞춰주었다. 이것이 표준편차.
무수히 많은 데이터를 대상으로 효과적인 통계분석을 위해 표본추출이 이뤄지고 있다.
모집단은 어떤 데이터 집합을 구성하는 전체이고, 표본은 그 중 일부(부분집합)이다.
표본의 분포를 가지고 모집단의 분포를 추정하고, 해당 과정에서 무수히 많은 경우의 수의 표본이 생성될 수 있다. 표본 크기가 충분히 크다면 어떤 분포에서도 표본평균이 정규분포를 따른다는 것이 중심극한정리다.
정규분포는 종 모양을 띄고 있으며, 분포는 좌우 대칭의 형태입니다. 평균치에서 그 확률이 가장 높다.
정규분포에서 평균 0, 분산 1을 가지는 경우, 이를 표준정규분포라고 한다. 데이터분석시 이를 표준화라고 부른다.
데이터분석시 표준화가 필요한 경우: 머신러닝 모델을 만들 때, 데이터의 범위가 많이 차이나는 경우. 예시로 최근 일주일 접속일수의 1과 결제금액의 1 은 같은 의미가 아니고, 범위가 큰 데이터의 경우 숫자가 가지는 절대치를 잘못 받아들일 수 있어 표준화는 반드시 필요하다.