본문 바로가기
Study/Data전처리 및 통계

추론통계

by 왕방개 2024. 2. 27.

1.카이 제곱 검정

1)개요

=>범주 별로 관측 빈도와 기대 빈도의 차이를 통해서 확률 모형이 데이터를 얼마나 잘 설명하는 지를 검정하는 통계 방법

=>관측된 데이터를 대상으로 유의 확률을 적용해서 적합도 검정이나 변수 간의 독립성 여부를 검정하거나 동질성 검정을 수행할 수 있는데 적합도 검정은 표본이 기댓값에 적합한지 검정하는 것이고 독립성 검정은 두 항목이 서로 독립인지 검정하는 것이며 동질성 검정은 두 집단의 데이터 분포가 같은지 검정하는 것

=>웹 테스트 시 종종 단순한 A/B 검정(두가지 상태)을 넘어서 여러가지 처리를 한번에 테스트할 필요가 있을 때 카이 제곱 검정을 사용할 수 있음

위의 예시에서 전환율은 실제로 극히 낮기 때문에 단순 비교는 어려움

재표본 추출(순열 검정, 부트스트랩)을 이용해서 클릭률이 우연히 발생할 수 있는 것 보다 유의미한 정도 큰 차이인지를 검정

귀무 가설은 모두가 동일한 클릭률을 갖는다

전체 클릭률은 34/3000  

피어슨 잔차를 계산:(실제 관측값 - 기댓값) / 기댓값의 제곱근 

 

카이 제곱 통계량 - 피어슨 잔차들의 제곱합

카이 제곱 통계량이 귀무 가설로부터 얻을 수 있는 값보다 큰 지 확인

 

재표본 알고리즘을 이용해서 검정

- 34개의 1과 2966개의 0이 들어있는 배열을 생성

-상자의 내용물을 랜덤하게 1000개씩 추출한 후 1의 개수를 계산 

-이렇게 얻은 횟수와 기대한 횟수의 차이를 제곱해서 합산 - 카이 제곱 통계량 계산

-이 과정을 1000번을 반복

-처음 계산한 카이 제곱 통계량 보다 몇 번이나 초과되었는지 확인하는데 이 값이 p-value(유의 확률)

# 데이터 가져오기-click_rates.csv

click_rate = pd.read_csv("C:\\Users\\User\\Desktop\\python_statistics-main\\python_statistics-main\\data\\click_rates.csv")

print(click_rate)

clicks = click_rate.pivot(index = 'Click',columns = 'Headline',values ='Rate')
print(clicks)

#전환율을 검정할 떄는 각 컬럼의 이름은 페이지가 되고
#첫 행이 클릭한 수가 되고 두번쨰 행이 클릭하지 않은 수가 됩니다.
#무료 유튜버 유저 같은 경우는 광고를 선택할 권한이 없어서 
#직접 전환율 측정이 안되서 광고 후 설문 조사를 합니다.

result = sp.stats.chi2_contingency(clicks)


if result.pvalue >0.05:
    print("귀무 가설을 기각할 수 없음 - 전환율의 차이가 없다고 할 수 있음")

else:
    print("귀무 가설을 기각함. 전환율의 차이가 유의미하다라고 할 수 있음")

 

봤을 때는 14와 8이 크게 차이 있을 줄 있었지만 계산해보니 전환율의 차이가 없다고 할 수 있음.

 

2)일원 카이 제곱 검정

=>한 개의 변인을 대상으로 검정을 수행하는 것으로 적합도 검정이나 선호도 분석에 이용할 수 있음

=>scipy.stats.chisquare(데이터 행렬, f_exp=None):f_exp은 거짓에 관련된 데이터

=>5가지 음료에 대한 선호도 조사: 응답 ->[41,30,51,71,61]

음료 선택에 선호도가 같은지 다른지를 검정 - 유의 수준은 1%

data = np.array([41,30,51,71,61])

result = sp.stats.chisquare(data)

if result.pvalue > 0.01:
    print("귀무가설을 기각할 수 없음.선호도의 차이는 없다")

else:
    print("귀무가설을 기각할 수 있음.선호도의 차이는 있다.")

=> 지금의 경우는 모든 사람이 5가지 음료 중 하나를 선택한 경우에 대한 검정이고 5개의 그룹을 가지고 음료를 선택하고 그렇지 않은 사람도 있는 경우에는 두번쨰 매개변수로 선택하지 않은 사람의 인원수를 대입해주어야 합니다.

 

3)이원 카이 제곱 검정 

=>카이 제곱 독립 검정

- 2 개의 변인에 대해서 서로 독립적인지 여부를 판정

- 귀무 가설은 2개의 변인은 독립적이다

- 이 검정을 반대로 판정하면 동질성 검정이라고 합니다.

-sp.stats.chi_contigency API 에 2차원 행렬이나 각 배열의 list 를 대입하면 됩니다.

#귀무 가설 - 독립적이다

objs = np.array([np.array([2,3]),np.array([4,6])])
result = sp.stats.chi2_contingency(objs)
print(result)

 

 

4)피셔의 정확 검정

=>카이 제곱 분포는 재표본 검정의 좋은 근사치를 제공

=>대부분의 통계 소프트웨어는 발생할 수 있는 모든 조합을 열거하고 빈도를 집계하고 관찰된 결과가 얼마나 극단적으로 발생할 수 있는지를 나타내는 p 값을 구해서 리턴하는데 이를 피셔의 정확 검정이라고 합니다.

=>웹 전환율 테스트나 출판을 위해서 통계적으로 유의미한 p 값을 찾는 논문 연구에서 널리 사용

 

2.Z 검정

1)개요

=> 모집단의 평균과 표준 편차가 얼마라는 것이 알려졌을 때 새롭게 조사된 표본의 평균이 모집단의 평균과 같은지를 추정하는 검정
=> 표본의 크기는 30보다 커야하고 모집단에서 균일한 확률로 선택되어야 합니다.
표본의 크키가 너무 작으면 1종 오류가 나올 확률이 높은(귀무가설이 채택되어야하는데 대립가설이 채택되는 경우)
=> 표본의 크기가 작다면 t검정을 수행
=> 제약 조건
 - 종속 변수가 양적 변수
 - 모집단의 평균과 표준 편차를 알아야 함
 - 모집단의 분포가 정규 분포여야 함 : 정규성 검정을 수행
 - 두 집단을 비교할 경우 두 집단의 분산이 같아야함 : 등분산 검정을 먼저 수행
=> 귀무 가설: 모집단의 평균과 표본의 평균이 같다.


2) Z 검정 통계량 
(표본평균 - 모평균) / (모표준편차/표본의개수의 제곱근)
=> 표본의 평균이 모 평균과 모 표준편차에 의해 그려지는 정규 분포에서 위치 값

3) 단일 표본 z 검정
=> 분산의 값을 정확히 알고있는 정규 분포의 표본에 대해서 기댓값을 조사하는 방법
=> 이 API는 존재하지 않아서 직접 구현을 해서 사용

#실제로는 거의 수행하지 않아서 API는 없고 직접 구현해야 함

#샘플 데이터 추출
N=100 #1종 오류를 확인하기 위해서 30보다 작은 10을 선택
mu_0 = 0
np.random.seed(0)
#평균이 0이고 표쥰편차가 1인 정규 분포에서 10개의 데이터 추출
x = sp.stats.norm(mu_0).rvs(N)

#z 통계량과 유의 확룰은 리턴해주는 함수
def ztest_1samp(x, sigma2 = 1, mu = 0):
    z = (x.mean() - mu) / np.sqrt(sigma2/len(x))
    return z, 2 * sp.stats.norm().sf(np.abs(z))

ztest_1samp(x)
#p value가 0.019
#N의 크기를 100이상으로 늘려보면 p-value가 0.1 이상이 나옴



4) 비율 검정
-> 두 집단을 대상으로 비율 차이 검정을 수행해서 두 집단의 비율이 같은지 아니면 다른지를 검정하는 것
-> statsmodels.stats.proportion 패키지의 proportions_ztest 함수를 이용
count에 관측된 개수(1의 개수)를 넣고 nobs에 전체 데이터 개수를 넣고 value 다른 집단의 1의 확률을 대입
-> A라는 교육을 받았을 때 150명 중에서 110명이 만족했고(성적이 올랐고)B라는 교육을 받았을 때 150명 중에서 135명이 만족했을 때 B라는 교육을 받은 것이 A 라는 교육을 받은 것 보다 만족도가 더 높은 것인지 판정

from statsmodels.stats.proportion import proportions_ztest

r = proportions_ztest(count = 135, nobs = 150, value = 110/150=

 

3. 정규성 검정

=> 데이터의 분포가 가우시안 정규 분포를 따르는지 확인하는 검정
=> 매우 중요한 작업이라서 다양한 API 가 제공
=> scipy에서 제공
 - 골모고르프-스미르노프 검정 : scipy.stats.ks-2samp
 - 샤피로 윌크 검정: scipy.stats.shapiro
 - 앤더스-달링 검정: scipy.stats.anderson
.. => statsmodel에서도 제공

#정규성 검정
np.random.seed(0)

N1 = 100
x1 = sp.stats.norm(0, 1).rvs(N1)
#정규분포를 따르는지 확인
print(sp.stats.shapiro(x1))
x2 = sp.stats.norm(2, 3).rvs(N1)
#2개의 분포가 같은지 확인
print(sp.stats.ks_2samp(x1,x2))

 

===========================================================================================

 

**백터 연산에서 기억할 부분

1.데이터 유형

1) Scala
-> 하나의 값 - 정수와 실수 그리고 하나의 글자나 단어(자연어 처리)

2) Vector
-> 0개 이상의 값
-> Vector의 분류
Vector:일차원 배열 - Record

Matrix: 백터가 모여서 만들어진 이차원 배열 - Table
머신러닝의 기본 단위
Tensor: Matrix의 배열로 삼차원 배열
딥러닝의 기본 단위

-> 하나의 행을 추출했을 때 하나의 행이 입력 데이터로 사용되면 Feature Vector라고 합니다.
줄여서 Feature라고도 합니다.
이 벡터의 데이터 개수를 차원이라고도 합니다.
Feature가 4개라고도 합니다.

-> 텐서 가져오기

 

 

 

2. Vector의 연산

1) 행 과 열 전치
=> T 속성이나 transpose메서드를 이용
메서드를 사용할 때는 변경될 순서를 직접 설정해야함
삼차원 배열 이상에서 transpose를 사용

=> VT(윗첨자)


2) 대칭 행렬
=> 자신을 전치한 행렬과 동일한 행렬

3) 백터와 백터 산술 연산
=> 동일한 차원의 백터끼리는 동일한 위치의 데이터와 연산을 수행
=> 차원이 다른 스칼라와 벡터 또는 벡터와 벡터 사이의 연산은 작은 차원의 데이터를 큰 차원의 데이터로 크기를 변경해서 연산을 수행합니다.
이를 브로트캐스트 연산이라고하고 컴퓨터 프로그래밍에서만 존재
=> 차원이 같더라도 원소의 개수가 다르면 연산이 수행되지 않음

4) 선형 가중 결합
=> 각 벡터에 스칼라 가중치를 적용해서 혼합하는 방법

=> 활용
 - 선형 회귀 분석에서 회귀 변수 와 계수의 관계를 선형 가중 결합으로 표현
 - 주성분 분석같은 차원 축소 과정에서 각 성분의 분산을 최대화하는 가중치 와 계수의 관계를 표현

=> 선형 독립성
 - 각 열의 독립적인 정도
 - 하나의 벡터를 다른 벡터emf의 선형 가중 결합으로 나타낼 수 있는지 확인
   상관 계수는 2개의 벡터 사이의 독립성을 판단합니다.

V1 = [[1,2], [3,7]]
V2 = [[1,3], [2,6]]

V3 = [[8, -4, 14, 6],
         [4, 6, 0, 3],
         [14, 2, 4, 7],
         [13, 2, 9, 8]]

5) 벡터의 내적
=> 벡터를 기하학적으로 표현했을 때 2개의 벡터를 확장해서 사각형을 만들었을 때 너비
=> 내적을 구하려면 한쪽 벡터를 전치했을 때의 차원과 동일해야 합니다.
= > 계산은 dot 함수나 @ 연산자를 이용합니다.
1차원의 경우는 전치를 하지 않아도 데이터의 개수만 같으면 전치를 해서 수행을 합니다.
2차원 이상의 경우는 전치를 했을 때의 차원이 같아야 합니다.

=> 벡터의 내적은 두 벡터간의 유사도를 계산하는데 도 이용

두 벡터가 닮은 정도를 유사도롸고 하는데 두 벡터가 비슷한 경우에는 유사도가 커지고 비슷하지 않은 경우

'Study > Data전처리 및 통계' 카테고리의 다른 글

추론 통계  (1) 2024.02.26
확률 분포모형  (1) 2024.02.23
기술 통계  (0) 2024.02.22
기초통계  (0) 2024.02.21
Pandas(8)-한글 NLP  (0) 2024.02.20