=========================================
정규분포
=========================================
중심극한정리
원래 데이터 세트가 정규분포하지 않아도 된다.
from matplotlib import pyplot as plt
import numpy as np
random_sample = np.random.normal( loc = 10, scale = 2, size = 1000 )
히스토그램
plt.hist( random_sample, bins = 100 )
plt.show()
Q-Q plot
import pylab
import scipy.stats as stats
norm_sample = np.random.normal( loc = 20, scale = 5, size = 100)
무작위 샘플 데이터를 정규분포에 근사한 형태가 되도록 만드는 함수
인자들 설명
loc : 평균
scale : 표준편차
size : 데이터의 개수
이렇게 만들어진 100개의 수를 정확히 정규분포하는 이론값과 순서쌍을 만들어서 산점도를 그려서 이론선과 비교해보기 위함.
* 파이썬의 반복문 *
시작점은 포함, 끝점은 비포함.
1은 포함, 11에 도달하면 종료.
avg_values = []
for i in range( 1, 11 ) :
random_sample = random.sample( range( 1, 1000), 100 )
x = np.mean( random_sample )
avg_values.append( x )
plt.hist( avg_values, bins = 100 )
plt.show()
stats.probplot( norm_sample, dist = 'norm', plot = pylab )
pylab.show()
큐큐플롯 이해하기
X축: 분포의 이론적인 값 표시. 이론적인 분포의 값.
Y축: 사용한 데이터 값 표시. 샘플 데이터의 값.
빨간색 선: 이론값과 샘플값이 일치할 경우의 선.
산점도를 그려서 이론과 완벽하게 일치하는 빨간색 실선과 얼마나 유사한 모양이 나타나는지 비교하는 차트
만약 이론적인 분포 값이 샘플 데이터 값보다 크면 파란색 선은 빨간색 선 아래에 나타난다. 이론 분포 값이 크면 빨간색 선 아래로 그래프가 그려진다.
data1 = data[ data.field == '값1' ]
data2 = data[ data.field == '값2' ]
레빈의 등분산 검정
from scipy import stats
stats.levene( data1.field, data2.field )
코드 실행 시 결과값
>> LeveneResult( statistic = 검정통계량결과값, pvalue= 피밸류결과값 )
평균 구하기 코드
np.mean( data1.field1 )
평균의 차이가
우연히 발생한 것인지 아니면 통계적으로 발생한 차이인지 비교해야한다.
두 개 그룹의 데이터에서 평균을 계산하고, 같은 모집단에서 나온 다른 샘플의 평균이 통계적으로 의미 있게 비슷한 값인지 판단해보기.
가설검정과 t분포라는 확률분포를 사용
귀무가설: 평균이 같다.
대립가설: 귀무가설의 반대.
stats.ttest_ind( data1.field, data2.field , equal_var = True )
여기서 equal_var = True 의 의미는 등분산이라는 뜻이다.
앞서 Levene의 등분산 검정에서 등분산으로 판정이 되면 여기를 True 로 해줄 수 있다.
결과는 p-value로 나온다.
p-value가 0.05보다 작으면 귀무가설 기각. 즉, 평균은 같지 않다.
유의수준과 p-value의 비교
유의수준은 보통 0.05 또는 5%. 통계적으로 의미 있는 차이의 기준값을 뜻한다.
p-value는 귀무가설이 참이라는 가정 하에 현재 두 평균값 사이의 차이가 나타날 확률.
p-value가 유의수준보다 작으면 귀무가설 기각.
유의수준은 확률적으로 더 엄격하게 설정하고 싶으면 0.01, 0.001도 가능하다. (예를 들어 생명관련 데이터문제분석 시,)
p-value는 감당할 수 있는 리스크에 대한 확률.
p-value는 귀무가설이 옳을 경우에 검정통계량에 대한 확률이다. 다른말로, 귀무가설이 참이라는 전제하에 검정통계량보다 큰 값이 나타날 확률이다.
2가지를 비교하는 검정
1) 가설검정
2) two sample t-test
3) one sample t-test 알려진 평균값과 , 데이터로 제시되어 계산한 표본 평균을 비교한다.
4) paired t-test 이전/이후 평균값의 변화 비교.
3개 이상 비교 검정
ㅡ> 분산 분석을 한다.
* t-test도, 분산 분석도 결국 목적은 평균 비교다.
3개 이상 비교 검정 방법
1) 등분산 분석
2) 분산 분석
3) 사후 분석
1단계) 등분산 분석: 여러 그룹의 분산이 같은지 확인.
- 귀무가설:모든 그룹의 분산은 같다
>> p-value 확인해서 귀무가설 기각 확인하기.
등분산이라고 가정할수있으면 분산분석 수행가능.
그러므로 등분산 분석의 결과가 귀무가설 기각할수 없다고 나와야 분산분석 수행가능하다.
2) 분산분석
- 모든 그룹의 평균은 같다
- 어떤 그룹의 평균은 같지 않다
p-value와 유의수준을 비교하여, 유의수준보다 작으면, 귀무가설 기각.
그런데, 어떤 그룹의 평균이 다른지 알수 없음.
3) 사후 분석
그룹 별 평균을 일일이 비교해서 평균이 같은 그룹과 다른 그룹을 알려준다.
1단계) 등분산 분석 파이썬 코드
levene 등분산 검정
bartlett's test 등분산 검정
1-1) 데이터 세트 나누기
data_1 = data[ data.column == 'value1' ]
data_2 = data[ data.column == 'value2' ]
data_3 = data[ data.column == 'value3' ]
1-2)
from scipy import stats
stats.bartlett( data1.column, data2.column, data3.column )
>> 결과값: p-value 값이 나온다. 유의수준과 비교해본다. 귀무가설이 기각이라면, 모든 그룹이 등분산이 아니다. 이런 경우는 비모수적 분산 방법을 사용한다. 또는, 이런 경우 데이터가 충분하지 않은지 확인 필요.
2) 분산 분석 파이썬 코드
One Way ANOVA
stats.f_oneway( data1.column, data2.column, data3.column )
p-value가 아주 작은 값이 나왔다면, 귀무가설을 기각할 수 있다. 즉 평균은 모두 같다고 볼 수 있게 된다.
추가 확인하기!!
>>> Box plot 파이선 코드
plot_data = [ data1.column, data2.column, data3.column ]
plt.boxplot( plot_data )
plt.show()
outlier가 많으면 박스 플롯이 잘 표시되지 않는다.
아웃라이어 안나타나게 하는 파이썬 코드는 다음과 같다.
plt.boxplot( plot_data , showfliers = False )
다만, 박스 플롯 만으로는 어떤 데이터가 같은 평균, 다른 평균인지 명확하지 않다.
3) 사후 분석
>> Tukey's HSD Test
HSD(Honestly Significant Difference)
평균이 같은 그룹과 다른 그룹 확인 하는 방법 중 하나다.
from statsmodels.stats.multicomp import pairwise_tukeyhsd
hsd = pairwise_tukeyhsd( data2.column1, data2.column2 )
hsd.summary()
결과값에서 p-adj (adjust) 와 reject를 보면 된다.
그룹 2개씩 비교한 결과가 나온다.
grp1 - grp2
grp1 - grp3
grp1 - grp4
grp2 - grp3
grp2 - grp4
이런 식으로 비교한 결과다.
p-adj의 값이 0.05보다 작은 값은 reject = true이고, 0.05 보다 크면 reject = false 값이 된다. 후자의 의미는 유의수준 0.05 기준하에 평균이 같다는 귀무가설을 리젝트 하지 못한다는 뜻. 즉 false 라고 나온 두개 그룹의 평균은 같다. true 라고 나온 그룹은 평균이 같지 않다고 확인.
'IT,SW,Data,Cloud,코딩' 카테고리의 다른 글
빅데이터분석기사_캐글_T1-2.Outlier 이상치 소수점 (0) | 2022.10.12 |
---|---|
빅데이터분석기사_캐글T1-1_IQR (0) | 2022.10.11 |
파이썬 공부4 (0) | 2022.09.19 |
파이썬 공부3 (0) | 2022.09.13 |
파이썬 공부 1 (0) | 2022.08.22 |
[자격증 공부] Salesforce Certified Marketing Cloud Administrator 정보 및 시험 준비, 그리고 합격 후기 (14) | 2022.04.29 |
[AWS 공부] AWS 솔루션 살펴보기 + AWS 웹서버 아키텍쳐 및 로드밸런싱 기초 내용 (0) | 2022.04.26 |
주성분분석(PCA)와 밀도기반 군집분석(DBSCAN) (0) | 2022.02.22 |
댓글