21년 3월 11일 

코드스테이츠 부트캠프 8일차

Week 2 Statistics


오늘의 나를 뒤돌아보며,

작년 20년 4회차 기사 시험으로 사회조사분석사 필기를 준비하며 통계를 공부했었다. 고3 수학 이후로 통계를 접해본 적이 없어서 초반에 공부하다가 과부하 걸린 적이 많았지만 차근차근 이해하며 준비하다보니 재미를 붙이기 시작했었다. 필기 시험 결과 통계 파트에서는 고득점을 받았으며 필기 시험은 합격했다. 그래서 통계 공부가 즐거울거라 생각했는데 수업 듣다보니 무슨 말을 하는가 싶었다. 분명 글인데 글을 읽어도 무슨 소린가 싶었음.

 

귀무가설 / 대안가설(대립가설) / 정규분포표 / t-test / ANOVA  등등 오랜만에 들으니까 낯설게 들렸다. 

 

필기 공부하면서 정리했던 노트를 펼쳐보니까 무슨 말인지 바로 이해가 가서 다행이지 ..... 용어와 설명하는 방식의 차이로 잠깐 혼동했었는데 정리했던 노트를 보면서 다시 이전에 공부했던 기억을 떠올렸고 중요하다고 생각드는 개념들을 블로그에 정리하려고 한다. 

 


8일차

Hypothesis Test (가설검정)

 

키워드

  • Hypothesis Test의 의미
  • T-test
  • P-value

우선, 가설이란! 가정된 설계이다. 실험 할 수 있는 아이디어

 

오늘 수업에서 가장 중요한 핵심 개념!!!!! 

 

귀무가설 (H0 )

'기존과 동일하다'를 조건으로 한다. '

'차이가 없다' 

'>=', '<=' (크거나 같다, 작거나 같다)

 

대립가설 (H1,Ha)

'기존과 동일하지 않다'를 조건으로 한다.'

'차이가 있다'

'>', '<' (크다, 작다)

 

예를 들어, 고등학교 1,2학년 남학생들의 키 평균을 비교한다고 하면

귀무가설  :  1,2학년 남학생들의 키 평균은 같다.

대립가설  :  1,2학년 남학생들의 키 평균은 같지않다.

정규분포표를 보면 평균을 기준으로 대칭되어있다.

대체적으로 임계값은 0.05를 사용 (아무말 없으면 암묵적으로 0.05라고 생각하면 됨)

 

 -2σ ~ 2σ 사이의 값은 귀무가설을 채택한다는 것을 의미하는데 이는 옳다!는게 아니라 유의하다는거다. 

그렇다는건 2σ를 벗어나는 영역은 귀무가설 기각! 이라는 의미로 대립가설이 채택된다는 건데 무조건적으로 옳다는게 아니라 유의하다를 의미한다.

 

 

가설검정

가설검정이란, 주어진 가설이 사실인지 아닌지를 수치적으로 확인하는 프로세스이다.

 

 

T-test

간단하게 말하면 두 집단 간의 평균을 비교하는 검정 방법이다. T검정이라고 하기도 한다. 

 

귀무가설과 대안가설을 설정하여 P-value를 확인하여 가설검증을 하는 것!

1.평균값을 구하기 위한 mean() 을 구한다.

2. stats.ttest_1samp(A, B)  ==> 코드 작성하면 가설검정 결과의 P-value값이 나온다.

docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.html

 

scipy.stats.ttest_1samp — SciPy v1.6.1 Reference Guide

Expected value in null hypothesis. If array_like, then it must have the same shape as a excluding the axis dimension.

docs.scipy.org

 

T-test를 하는 이유는 무엇일까? 평균을 비교하는 이유는 무엇일까?

평균은 한 집단을 대표할 수 있는 대푯값 중 하나이다.

예를 들어 우신고등학교 3학년 각 반별로 수학 성적을 비교하고싶으면 평균을 보면 된다.

그 중에서 1반과 2반의 수학 성적을 비교하고싶을 때 2개 반의 평균을 비교하면 된다.

 

각 집단의 대푯값인 평균을 비교하여 비교하는 것이다.

두 모집단의 평균의 차이유무를 판단하는 통계적 검정방법으로 단순히 차이의 존재여부를 떠나 그 정도의 통계적 유의미성까지 검정하는 방법이다. 그리고 두 모집단의 평균의 차이의 정도를 올바르게 판단하기 위해 도와주는 것이 T-test이다.

 

통계적 유의미성이란 무엇일까?

만약 3학년 1반의 수학 평균 성적이 73점이고

2반의 성적이 75점이면

두 집단의 평균 차이는 2점으로 차이가 얼마 얼마없는 정도로 유의미하지 않다고 표현할 수 있다.

 

하지만 1반의 수학 성적이 70점이고

2반의 성적이 90점이라면

두 집단의 평균 차이는 20점으로 꽤 많은 차이를 보인다.

이는 유의미한 차이를 보인다고 표현하면 되는 것이다.

 

두 집단이 아닌 3개 이상의 집단을 비교하기 위해서는 ANOVA(분산분석)을 사용한다. 분산분석은 3개 이상 집단의 평균을 비교하는데 유용하게 쓰인다.

 

P value

가설검증의 결론을 짓기 위해서 검정 통계량을 구한 뒤 일정 기준을 만족하는지 확인해야하는데 그 기준이 되는 것이 유의수준과 p값이다. p값은 유의확률이라고도 하며 정해진 유의수준보다 작을수록 좋다.

 

아래의 블로그를 보면 p값과 유의수준에 대해서 자세히 공부할 수 있다.

m.blog.naver.com/PostView.nhn?blogId=vnf3751&logNo=220830413960&referrerCode=0&searchKeyword=p%20value

 

 

 

검정통계량 > 임계값                  귀무가설 기각

p-value는 귀무가설이 맞다는 전제 하에, p-값(p-value)은 귀무 가설(null hypothesis)이 맞다는 전제 하에, 표본에서 실제로 관측된 통계치와 '같거나 더 극단적인' 통계치가 관측될 확률이다. 여기서 말하는 확률은 '빈도주의' (frequentist) 확률

 

 

유의수준 0.05

P-Value >= 0.05 : 귀무가설 채택

P-Value < 0.05 : 대립가설 채택

 

Two Sample T-test

 

2개의 sample 값들의 평균 서로 동일한지 비교.

1. 평균을 비교하기 위해 sample의 평균값을 구하기 위한 mean() 을 구한다.

2. stats.ttest_ind(A, B) 코드를 사용하여 가설 검증을 한다.

 

 

One-tailed test

 

1. 평균을 비교하기 위해 sample의 평균값을 구하기 위한 mean() 을 구한다.

2. t.test(A, B, alternative="greater")     #크다라는 가설에 대한 가설검정을 시행

 

 

분산이 크다라면 실제 예측한 0.5보다 멀 것이고 이 뜻은 에러가 크다.  (분산의 값과 에러는 비례한다)대신 샘플의 수가 클 수록 분산이 작아진다.결론: 표본의 수(샘플의 수)가 더욱 많아질수록, 추측은 더 정확해지고 (평균) 높은 신뢰도를 바탕으로 모집단에 대해 예측 할 수 있도록 함. =표본이 많아 질 수록 에러가 적어진다.

 

 

분산분석할 때 참고할 링크

partrita.github.io/posts/ANOVA-python/

no17.tistory.com/189

 

파이썬으로 데이터분석하기 t-test 평균검정

안녕하세요. 오늘은 파이썬으로 t-test 즉, 평균검정을 해보도록 하겠습니다. 개요 평균 검정은 단일집단 혹은 독립된 집단 사이의 가설을 검정하기 위한 수단으로 수치형 변수에 대해 집단의 평

no17.tistory.com

www.statology.org/cluster-sampling-in-pandas/

 

Cluster Sampling in Pandas (With Examples)

This tutorial explains how to perform clustering sampling in pandas, including several examples.

www.statology.org


 

 

 

꼭 기억하고 넘어가야 하는 것

 

SciPy는 파이썬을 기반으로 하여 과학, 분석, 그리고 엔지니어링을 위한 과학(계산)적 컴퓨팅 영역의 여러 기본적인 작업을 위한 라이브러리(패키지 모음)

 

★ 가급적 실행하기 전에 다운받자!

1
2
3
!pip install --upgrade scipy
# pip는 파이썬으로 작성된 패키지 라이브러리를 관리해주는 시스템이다.
# 가급적 최신 버전으로 업그레이드 해서 사용하는게 모듈에 문제생기지 않음!
cs

★ 파이썬 분산분석을 사용하기 위해 불러와야 하는 라이브러리

1
2
3
4
5
6
7
8
9
10
파이썬에서 분산분석을 사용하기 위한 라이브러리를 불러오는 코드부터 실행
 
import pandas as pd
import numpy as np
import scipy.stats as stats
import urllib
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import matplotlib.pyplot as plt
%matplotlib inline
cs

★파일을 불러오는 다른 2가지 방법

1
2
3
4
5
6
7
trees = pd.read_csv('https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/seoul_tree/seoul_tree.txt', sep = '\t', skiprows = 1)     # sep은 구분자                                                                                                                                    # skiprows는 원하는 행부터 불러올 때 사용, skiprows=5는 5줄까지 무시하고 6행부터 불러옴
trees = trees.replace({'-':0}) # '-'이 들어있는 셀을 0으로 바꿈
 
#같은 의미!
url = 'https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/seoul_tree/seoul_tree.txt'
df = pd.read_csv(url,  sep = '\t', skiprows = 1
cs

 

★인덱스 슬라이싱
iloc와 ioc가 무엇이며, 어떻게 사용하는 것이고, 어떨 때 사용하는 것인지 알아보고 정리하자!
ii
1
2
3
4
5
trees = trees.iloc[1:26,:]   # 1~25 번째 인덱싱하기 
 
# num 형태로 변환
tree1 = pd.to_numeric(trees['~~나무'].str.replace(',','')) 
tree1
cs

 

2-Sample T-tests 사용하는 코드!

1
2
# 2-Sample T-tests                #2개의 sample 값들의 평균이 서로 동일한지 비교
stats.ttest_ind(tree3, tree4)
cs

 특정 행 추출 방법 및 특정 열 추출 방법

1
2
3
4
5
6
7
#axis = 1 은 각 column에 값을 가져옵니다.
 
#axis = 0 은 각 row값을 가져옵니다.
 
#drop("A", axis=1) == drop(columns="A")와 동일합니다.
 
#axis=1은 column이니 drop("A", axis=1)은 "A" column 값을 제거하겠다는 의미입니다
cs
1
2
3
4
df.sum(axis=0)을 실행하면 '행 방향'으로 성분들의 합
 
 
df.sum(axis=1)을 실행하면 '열 방향'으로 성분들의 합
cs

'개발 관련자료' 카테고리의 다른 글

Confidence Interval (신뢰구간)  (0) 2021.04.01
chi square test (카이제곱 검정)  (0) 2021.04.01
Data Visualize (데이터시각화)  (0) 2021.03.21
Data Manipulation  (0) 2021.03.21
Feature Engineering  (0) 2021.03.18

+ Recent posts