Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- difftime
- 단순회귀 분석
- Sum
- sqld
- 빅데이터
- 회귀분석 알고리즘
- 그래프 생성 문법
- loop 문
- Intersect
- 팀스파르타
- 불순도제거
- 상관관계
- 데이터분석가
- 데이터분석
- count
- 여러 데이터 검색
- merge
- sql
- 그래프시각화
- 빅데이터분석
- 총과 카드만들기
- 막대그래프
- 정보획득량
- max
- 순위출력
- %in%
- 히스토그램 그리기
- Dense_Rank
- 회귀분석
- if문 작성법
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] Python_56. 판다스 머신러닝 6.(z검정 통계, 정규검정, 단측검정, 가설검정, anova분석, 비모수 검정,카이제곱 검정 ) 본문
빅데이터 분석(with 아이티윌)/python
[빅데이터분석] Python_56. 판다스 머신러닝 6.(z검정 통계, 정규검정, 단측검정, 가설검정, anova분석, 비모수 검정,카이제곱 검정 )
chonny 2024. 9. 10. 16:16
❤️ 현업에 많이 사용되는 가설검정이란?
1. 정규 분포를 따르는 경우
✨ 1. 1 (단일 모집단의 모평균 검정) z검정 통계량 _분산을 아는 경우
문제 1. (z검정 통계량) 한 대학의 수학 시험에서 학생들의 평균 점수를 알고자 합니다.
과거의 데이터를 통해 이 시험의 점수는 정규분포를 따르며, 분산이 100으로 알려져 있습니다.
이번 학기에 50명의 학생들을 무작위로 추출하여 시험을 보았을때, 이들의 평균점수가 75점이 나왔습니다.
이 때, 이 시험의 모평균이 70점이라고 주장할 수 있을까요 ? 유의수준 0.05 에서 검정을 수행하세요 !
- 귀무가설: 모평균은 70점이다.
- 대립가설: 모평균은 70점이 아니다.
#1. 주어진 값들 정리 x_bar = 75 # 표본평균 mu = 70 # 가정된 모평균 sigma2 = 100 # 분산 n = 50 # 표본의 크키 alpha = 0.05 # 유의 수준
#2. 표준편차 import math sigma = math.sqrt(sigma2) #print(sigma) #10.0
#3. Z 값 계산 Z = (x_bar-mu)/(sigma/math.sqrt(n)) Z #3.5355339059327378
#4. p-value 계산 (대립 가설이 참일 때, 현재의 Z통계량 값보다 더 극단적인 값이 나올 확률) from scipy.stats import norm p_value =2 * (1-norm.cdf(abs(Z))) p_value #0.00040695201744500586 # norm.cdf 가 z값의 누적분포 함수로 z값이 3.54 보다 작은 값일 수록 확률을 반환함 # (1-norm.cdf(abs(Z))) 는 Z값이 3.54 보다 클 확률을 구함 # p_value는 양측 검증이므로 위해서 구한 확률을 2배 해줌
#5. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 모평균이 70점이 아닙니다.') else: print('귀무가설을 채택합니다. 모평균이 70점일 수 있습니다.')
관련문제 [z-검정 통계량]
한 회사에서 생산하는 제품의 품질을 확인하고자 합니다. 과거의 데이터를 통해 제품의 품질점수는 정규분포를 따르며, 분산이 25로 알려져 있습니다. 이번에 40개의 제품을 무작위로 추출하여 품질 검사를 진행한 결과, 이들의 평균 품질 점수가 82점으로 나타났습니다. 이때, 이 제품의 모평균 품질 점수가 80점이라고 주장할 수 있을까요 ? 유의수준 0.05 에서 검정을 수행하세요.
귀무가설: 제품의 모 평균 품질 점수는 80점임
대립가설: 제품의 모 평균 품질 점수는 80점이 아님
#1. 주어진 값들 정리 x_bar = 82 # 표본평균 mu = 80 # 가정된 모평균 sigma2 = 25 # 분산 n = 40 # 표본의 크키 alpha = 0.05 # 유의 수준
#2. 표준편차 import math sigma = math.sqrt(sigma2) print(sigma) # 10.0
#3. Z 값 계산 Z = (x_bar-mu)/(sigma/math.sqrt(n)) Z #2.5298221281347035
#4. p-value 계산 from scipy.stats import norm p_value =2 * (1-norm.cdf(abs(Z))) # p_value #0.011412036386001745
#5. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 모평균의 품질점수는 80점이 아닙니다.') else: print('귀무가설을 채택합니다. 모평균의 품질점수는 80점일 수 있습니다.')
✨ 1.1.2 (단일 모집단의 모평균 검정) T검정 _분산을 모르는 경우
문제1. 한 회사에서 생산하는 제품의 평균 수명을 알고자 합니다. 과거의 데이터를 통해 제품의 수명은 정규분포를 따르는 것으로 알려져있지만 분산을 모르는 상태입니다. 50개의 제품을 무작위로 선택해서 수명을 측정한 결과, 평균 수명이 30시간, 표본의 표준편차는 5시간으로 나타났습니다. 이회사에 생산하는 제품의 모 평균 수명이 32시간이라고 주할수 있는지 유의수준 0.05에서 t 검정을 수행하시오.
- 귀무가설: 제품의 모 평균 수명은 32시간이다.
- 대립가설: 제품의 모 평균 수명은 32시간이 아니다.
#1. 문제에 주어진 값들 정리 x_bar = 30 # 표본 평균 mu = 32 # 가정된 모 평균 s = 5 # 표본의 표준편차 n = 50 # 표본의 크기 alpha = 0.05 # 유의수준
#2. 표준편차 import math t = ( x_bar - mu ) / ( s / math.sqrt(n) ) print(t) # -2.8284271247461903
# 3. 자유도 계산(표본의 크기에서 1을 뺀 값) df= n-1 print(df) #49
# 4. p-value 계산 import scipy.stats as stats p_value = 2 * (1 - stats.t.cdf(abs(t), df)) p_value # 0.006758540952765069 # 설명: cdf(cumulative distribution function:누적분포함수) 로 주어진 t값보다 # 작은값이 나올 확률을 계산합니다.
#5. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 모평균의 평균 수명은 32시간이 아닙니다.') else: print('귀무가설을 채택합니다. 모평균의 평균 수명은 32시간 일 수도 있습니다.')
✨ 단측검정
관련문제. [단측검정]
제약 회사의 새로운 약품의 평균 효과 지속시간을 알고자 합니다. 과거의 데이터를 통해 약품의 효과 지속시간은 정규분포를 따르는 것으로 알려져 있지만 분산은 모르는 상태임. 40명의 환자를 무작위로 선택하여 약물을 투여한 결과, 평균 효과 지속시간이 8시간, 표본편차는 1.5시간으로 나타났습니다.
이 약품의 모 평균 효과 지속시간이 9시간이라고 주장할 수 있는지 유의수준 0.05에서 t 검정을 수행하시오.
- 귀무가설: 제품의 모 평균 효과 지속시간이 9시간이다.
- 대립가설: 제품의 모 효과 지속시간이 9시간아니다.
#1. 문제에 주어진 값들 정리 x_bar = 8 # 표본 평균 mu = 9 # 가정된 모 평균 s = 1.5 # 표본의 표준편차 n = 40 # 표본의 크기 alpha = 0.05 # 유의수준
#2. 표준편차 import math t = ( x_bar - mu ) / ( s / math.sqrt(n) ) print(t) #4.216370213557839
# 3. 자유도 계산(표본의 크기에서 1을 뺀 값) df= n-1 print(df) #39
# 4. p-value 계산 import scipy.stats as stats p_value = 2 * (1 - stats.t.cdf(abs(t), df)) p_value # 0.00014263327560937178
#5. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 모평균의 효과 지속 시간이 9시간이 아닙니다.') else: print('귀무가설을 채택합니다. 모평균의 효과 지속 시간이 9시간 일 수도 있습니다.')
✨1.2.1 (두 모집단의 모평균 차이 검정) t검정 (등분산) _독립표본
관련문제. [ t 검정 ]
한 학교에서 남학생과 여학생의 수학 시험 성적이 다르다고 주장하는 선생님이 있습니다. 이를 확인하기 위해서 남학생 12명과 여학생 10명의 수학점수를 무작위로 추출하였고, 각각 점수는 다음과 같습니다.
위 데이터를 이용해서 남학생과 여학생의 수학점수가 유의미하게 다른지 유의수준 0.05에서 검정하시오.(모분산은 동일하다고 가정)
- 남학생 점수: 82, 85, 88, 90, 85, 86, 87, 89, 84, 90, 92, 91
- 여학생 점수: 79, 81, 83, 78, 82, 80, 77, 84, 81, 79
- 귀무가설: 남학생과 여학생의 수학 시험 성적의 모평균이 같다.
- 대립가설: 남학생과 여항생의 수학 시험 성적의 모 평균이 다르다.
#1. 관련된 패키지를 미리 불러옵니다. import scipy.stats as stats
#2. 데이터를 구성합니다. male_scores = [82,85,88,90,85,86,87,89,84,90,92,91] female_scores = [79, 81, 83, 78, 82, 80, 77, 84, 81, 79]
#3. 독립표본 t-검정(등분산 가정) t_stat,p_value = stats.ttest_ind(male_scores, female_scores, equal_var = True) print(t_stat) #5.997510028006447 print(f'{p_value:.10f}') #0.0000072834
설명: 독립 표본이란 서로 독립된 두 집단에서 각각의 데이터를 추출한 경우 입니다.#4. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 남학생과 여항생의 수학 시험 성적이 유의미 하게 다름.') else: print('귀무가설을 채택합니다. 남학생과 여학생의 수학 시험 성적이 같을 수 있음.')
-> 남학생과 여학생은 각각 독립적인 두 그룹임.
-> 남학생의 수학성적이 여학생의 수학성적에 영향을 미치지 않음
-> 여학생도 마찬가지
관련문제. (점심시간 문제) 한 회사에서 팀 A와 팀 B의 업무 성과가 다르다고 주장하는 관리자가 있습니다.
이를 확인 하기 위해서 팀 A의 직원 14명과 팀 B의 직원 12명의 한달간의 업무 성과를 측정한 결과, 각각의 점수는 다음과 같습니다.
team_A = [87,85,82,90,87,84,88,91,85,83,89,90,82,88]
team_B =[80,82,85,87,83,81,88,84,89,85,83,86]
위의 데이터를 이용해 팀 A와 팀B의 업무성과가 유의미하게 다른지 유의수준 0.05에서 검정하시오 (두모집단의 분산이 동일하다고 가정)
- 귀무가설: 귀무가설을 기각합니다. 팀 A와 팀B의 업무성과가 유의미하게 다름
- 대립가설: 귀무가설을 채택합니다. 팀 A와 팀B의 업무성과가 같을 수 있음
#1. 관련된 패키지를 미리 불러옵니다. import scipy.stats as stats alpha = 0.05 # 유의수준 #2. 데이터를 구성합니다. team_A = [78, 85, 82, 90, 87, 84, 88, 91, 85, 83, 89, 90, 82, 88] team_B =[80, 82, 85, 87, 83, 81, 88, 84, 89, 85, 83, 86] #3. 독립표본 t-검정(등분산 가정) t_stat,p_value = stats.ttest_ind(team_A, team_B, equal_var = True) print(t_stat) print(f'{p_value:.10f}') #4. 결과 출력 if p_value < alpha: print('귀무가설을 기각합니다. 팀 A와 팀B의 업무성과가 유의미하게 다름.') else: print('귀무가설을 채택합니다. 팀 A와 팀B의 업무성과가 같을 수 있음')
✨1.2.2 (두 모집단의 모평균 차이 검정) t검정 _대응표본
독립표본?
-> 두 집단이 서로 밀접하게 연관이 없고 독립적인 관계의 표본
대응표본?
-> 두 집단이 서로 밀접하게 관련이 있고 같은 대상에게 두번의 측정이 이루어지는 데이터에서 두 평균의 차이를 분석하는 표본인 경우
문제 [가설검정]
한 피트니스 센터에서 새로운 운동 프로그램의 효과를 평가하고자 합니다. 12명의 회원을 대상으로 8주간의 운동 프로그램을 진행하기 전과 후의 체지방률을 측정한 결과, 다음과 같은 데이터가 나왔습니다.
운동 전 체지방률: 28.5, 27.8, 29.0, 30.1, 28.9, 29.5, 30.0, 27.5, 28.7, 29.9, 30.2, 29.0
운동 후 체지방률: 27.0, 26.5, 27.8, 29.0, 27.5, 28.0, 28.5, 26.7, 27.3, 28.0, 29.0, 27.9
운동 전과 후의 체지방률이 유의미하게 감소했는지 유의수준 0.05에서 대응표본 t-검정을 수행하세요.
- 독립표본: 운동전과 후의 유의미한 차이가 없다.
- 대립가설: 운동전과 후의 체중의 유의미한 차이가 있다.
# 1. 필요한 패키지 로드 import scipy.stats as stats
# 2. 운동 전후 데이터 구성 alpha = 0.05 before= [28.5, 27.8, 29.0, 30.1, 28.9, 29.5, 30.0, 27.5, 28.7, 29.9, 30.2, 29.0 ] after= [ 27.0, 26.5, 27.8, 29.0, 27.5, 28.0, 28.5, 26.7, 27.3, 28.0, 29.0, 27.9 ]
# 3. 대응 표본 t-검정 수행 t_test, p_value = stats. ttest_rel(before, after) print(t_test) print(f'{p_value:.25f}')
관련문제: 한 학교에서 새로운 교육 프로그램의 효과를 평가하고자 합니다. 10명의 학생으로 이 교육 프로그램을 도입하기 전과 후의 수학 시험을 치르게 했고 두 시험의 점수는 다음과 같습니다.
교육 프로그램 전 시험점수 = [65,70,75,68,74,80,72,78,69,73]
교육 프로그램 후 시험점수 = [70,72,78,72,76,85,74,80,71,75]
# 1. 필요한 패키지 로드 import scipy.stats as stats # 2. 운동 전후 데이터 구성 alpha = 0.05 before= [65,70,75,68,74,80,72,78,69,73] after= [70,72,78,72,76,85,74,80,71,75]
# 3. 대응 표본 t-검정 수행 t_test, p_value = stats. ttest_rel(before, after) print(t_test) print('p_value:'f'{p_value:.25f}')
# 4. 결과 출력 if p_value < alpha: print('귀무가설을 기각: 교육프로그램 전과 후의 시험점수는 유의미한 차이가 있음.') else: print('귀무가설을 채택: 교육프로그램 전과 후의 시험점수는 유의미한 차이가 없음')
✨ anova 분석 (3개의 변수)
한 병원에서 세 가지 다른 치료법(A, B, C)이 혈압 감소에 미치는 효과를 비교하고자 합니다.
연구자는 각각의 치료법을 10명의 환자에게 적용하고, 치료 후 혈압 변화를 측정했습니다.
각 치료법의 혈압 변화는 다음과 같습니다.
치료법 A: -10, -12, -9, -11, -10, -13, -12, -11, -10, -14
치료법 B: -8, -7, -9, -6, -8, -7, -9, -8, -7, -6
치료법 C: -15, -16, -14, -15, -16, -17, -16, -15, -16, -17
이 데이터를 이용해 세 치료법 간에 유의미한 차이가 있는지 유의수준 0.05에서 검정하세요.
#1. 패키지 로드 import scipy.stats as stats #2. 데이터 구성 treat_a = [ -10, -12, -9, -11, -10, -13, -12, -11, -10, -14 ] treat_b = [ -8, -7, -9, -6, -8, -7, -9, -8, -7, -6 ] treat_c = [ -15, -16, -14, -15, -16, -17, -16, -15, -16, -17 ] #3. ANOVA (일원분산분석) 분석 f_stat, p_value = stats.f_oneway(treat_a,treat_b, treat_c) print(f_stat) # 113.26119402985127 print(f'{p_value:.25f}') # 0.0000000000000739929829833 #4. 결과 출력 # 4. 결과 출력 if p_value < alpha: print('귀무가설을 기각: 치료법 3가지 간의 유의미한 차이가 있음.') else: print('귀무가설을 채택: 치료법 3가지 간의 유의미한 차이가 없음')
관련 문제:
한 회사에서 세 가지 다른 마케팅 전략(A, B, C)이 매출 증가에 미치는 효과를 비교하고자 합니다. 연구팀은 각 전략을 10개 지역에 적용하여, 한 달간 매출 증가율(%)을 측정했습니다. 각 마케팅 전략의 매출 증가율은 다음과 같습니다.
마케팅 전략 A: 12, 14, 15, 13, 12, 16, 14, 15, 13, 14
마케팅 전략 B: 10, 9, 11, 10, 8, 9, 11, 9, 10, 8
마케팅 전략 C: 17, 18, 19, 16, 17, 18, 19, 16, 17, 18
이 데이터를 이용해 세 마케팅 전략 간에 유의미한 차이가 있는지 유의수준 0.05에서 검정하세요.
#1. 패키지 로드 import scipy.stats as stats #2. 데이터 구성 marketing_a = [12, 14, 15, 13, 12, 16, 14, 15, 13, 14 ] marketing_b = [10, 9, 11, 10, 8, 9, 11, 9, 10, 8 ] marketing_c = [17, 18, 19, 16, 17, 18, 19, 16, 17, 18 ] #3. ANOVA (일원분산분석) 분석 f_stat, p_value = stats.f_oneway(marketing_a,marketing_b, marketing_c) print(f_stat) # 118.25409836065586 print(f'{p_value:.25f}') # 0.0000000000000439228057729 #4. 결과 출력 # 4. 결과 출력 if p_value < alpha: print('귀무가설을 기각: 세 마케팅 전략 간에 유의미한 차이가 있음.') else: print('귀무가설을 채택: 세 마케팅 전략 간에 유의미한 차이가 없음')
2. 정규 분포를 따르지 않는 경우
✨ 2.1 비모수 가설 검정 (윌콕슨 부호 순위)
비 모수 검정은 데이터가 특정한 분포를 따르지 않는 경우에 사용하는 통계적 검정 방법입니다. 비모수 검정은 데이터가 정규분포를 따르지 않는다고 가정할 때 사용됨
비모수 검정을 사용하는 상황 3가지?
1. 데이터가 정규분포를 따르지 않는 경우
2. 이상치가 많아서 정규성 가정을 만족시키기 어려운 경우
3. 데이터가 순서형 또는 서열 척도일 때
비모수 검정 방법 2가지?
1. 데이터가 대응 표본일때?
-> 윌콕슨 부호 순위 검정
2. 데이터가 독립표본일때?
-> 맨-위트니 U검정
문제. 한 연구자가 특정 수면 보조제가 불면증 환자의 수면 시간을 늘리는 효과가 있는지 알아보고자 합니다.
연구자는 15명의 불면증 환자에게 이 보조제를 투여하고, 투여 전후의 수면 시간을 측정했습니다. 측정된 수면 시간은 다음과 같습니다.
투여 전 수면 시간(시간): 4.5, 4.0, 3.8, 4.1, 4.2, 4.3, 3.9, 4.0, 4.5, 4.2, 4.1, 3.8, 4.0, 4.1, 3.9
투여 후 수면 시간(시간): 5.1, 4.8, 4.6, 5.0, 4.9, 5.0, 4.5, 4.6, 5.1, 4.9, 5.0, 4.6, 4.7, 4.8, 4.5
이 데이터를 이용해 보조제가 수면 시간을 유의미하게 늘렸는지 유의수준 0.05에서 검정하세요.
이때, 정규성을 가정하지 않고 비모수적 검정을 사용합니다. (대응 표본이므로 윌 콕슨 비모수 검정을 수행하면 됨.)
- 귀무가설: 수면 보조제를 투여하기 전과 후의 수면 시간의 유의미한 차이가 없다.
- 대립가설: 수면 보조제를 투여하기 전과 후의 수면 시간의 유의미한 차이가 있다.
# 1. 패키지 불러오기 import scipy.stats as stats # 2. 데이터 구성하기 before_sleep = [ 4.5, 4.0, 3.8, 4.1, 4.2, 4.3, 3.9, 4.0, 4.5, 4.2, 4.1, 3.8, 4.0, 4.1, 3.9 ] after_sleep =[5.1, 4.8, 4.6, 5.0, 4.9, 5.0, 4.5, 4.6, 5.1, 4.9, 5.0, 4.6, 4.7, 4.8, 4.5] # 3. 윌콕슨 부호 순위 검정하기 stat, p_value = stats.wilcoxon(before_sleep, after_sleep) print(stat) # 0.0 print(f'{p_value:.10f}') #0.0000610352 # 4. 결과 출력하기 if p_value < alpha: print('귀무가설을 기각합니다. 수면 보조제를 투여하기 전과 후의 수면 시간의 유의미한 차이가 있다.') else: print('귀무가설을 채택합니다. 수면 보조제를 투여하기 전과 후의 수면 시간의 유의미한 차이가 없다.')
✨ 2. 2비모수 가설 검정 (맨-위트니 U 비모수 검정)
독립표본 비모수 검정 문제: 한 연구팀이 두 가지 다른 치료법(A와 B)이 불면증 환자의 수면 시간을 늘리는 효과가 있는지 비교하고자 합니다.각각의 치료법은 서로 다른 독립된 환자들에게 적용되었으며, 연구팀은 무작위로 환자를 두 그룹으로 나누어 치료법 A와 치료법 B를각각 적용했습니다. 두 치료법에 대한 수면 시간 증가 효과를 분석하기 위해, 치료법 A를 받은 환자 10명과 치료법 B를 받은 환자 10명의 수면 시간 변화를측정하였습니다. 두 치료법에 대한 수면 시간 증가는 다음과 같습니다
치료법 A 수면 시간 증가(시간): 0.8, 1.0, 1.2, 0.9, 1.1, 1.3, 0.7, 1.0, 0.9, 1.2
치료법 B 수면 시간 증가(시간): 0.5, 0.6, 0.4, 0.7, 0.5, 0.6, 0.8, 0.7, 0.5, 0.6
이 데이터를 이용해 두 독립된 그룹 간의 수면 시간 증가 효과가 유의미하게 다른지 유의수준 0.05에서 검정하세요. 이 때, 정규성을 가정하지 않고 비모수적 검정을 사용합니다.
- 귀무가설: 두 치료법 A와 B 그룹 간의 수면 시간 증가 효과가 유의미한 차이가 없다.
- 대립가설: 두 치료법 A와 B 그룹 간의 수면 시간 증가 효과가 유의미한 차이가 있다.
# 1. 패키지 불러오기 import scipy.stats as stats # 2. 데이터 구성하기 sleep_A = [0.8, 1.0, 1.2, 0.9, 1.1, 1.3, 0.7, 1.0, 0.9, 1.2] sleep_B =[0.5, 0.6, 0.4, 0.7, 0.5, 0.6, 0.8, 0.7, 0.5, 0.6] # 3. 맨-위트니 U 비모수 검정하기 stat, p_value = stats.mannwhitneyu(sleep_A, sleep_B, alternative='two-sided') print(stat) # 97.5 print(f'{p_value:.10f}') # 0.0003509898 # 4. 결과 출력하기 if p_value < alpha: print('귀무가설을 기각합니다. 두 치료법 A와 B 그룹 간의 수면 시간 증가 효과가 유의미한 차이가 있다.') else: print('귀무가설을 채택합니다. 두 치료법 A와 B 그룹 간의 수면 시간 증가 효과가 유의미한 차이가 없다')
✨ + 카이제곱 검정_범주형 데이터
AB 테스트 문제 (10명으로 수정): 한 온라인 쇼핑몰에서 두 가지 다른 페이지 디자인(A와 B)이 사용자 구매 전환율에 미치는 영향을 분석하고자 합니다. 10명의 사용자를 대상으로 A 디자인을 보여주고, 또 다른 10명의 사용자에게 B 디자인을 보여준 후 구매 여부를 기록하였습니다. 두 디자인에 대한 구매 전환율 데이터는 다음과 같습니다.
A 디자인 구매 여부 (0 = 구매 안 함, 1 = 구매함): 1, 0, 1, 0, 0, 1, 1, 0, 0, 1
B 디자인 구매 여부 (0 = 구매 안 함, 1 = 구매함): 1, 1, 0, 0, 1, 1, 0, 0, 1, 1
이 데이터를 이용해 두 페이지 디자인(A와 B)의 구매 전환율에 유의미한 차이가 있는지 유의수준 0.05에서 검정하세요. 설명: 구매함(1), 구매안함(0) 은 두가지 범주로 나눌 수 있기 때문에 범주형 데이터입니다.
수치형 데이터가 아니라 범주형 데이터일 때는 "카이제곱 검정" 을 사용해야합니다.
- 귀무가설: 두 페이지 디자인(A와 B) 의 구매전환율에 유의미한 차이가 없다.
- 대립가설: 두 페이지 디자인(A와 B) 의 구매전환율에 유의미한 차이가 있다.
# 1. 패키지 불러오기 import scipy.stats as stats # 2. 데이터 구성하기 design_A = [1, 0, 1, 0, 0, 1, 1, 0, 0, 1] design_B = [1, 1, 0, 0, 1, 1, 0, 0, 1, 1] # 두 집단의 구매여부를 2x2 테이블로 요약 table = [ [sum(design_A), len(design_A) - sum(design_A)], # 디자인 A의 1의 수와 0의 수 [sum(design_B), len(design_B) - sum(design_B)] # 디자인 B의 1의 수와 0의 수 ] # 3. 카이제곱 검정 수행하기 chi2_stat, p_value, dof, expected = stats.chi2_contingency(table) # 4. 결과 출력하기 print(f"Chi-squared Statistic: {chi2_stat}") print(f"P-value: {p_value}") print(f"Degrees of Freedom: {dof}") print(f"Expected Frequencies: \n{expected}")
# 4. 결과 출력하기 if p_value < alpha: print('귀무가설을 기각합니다. 두 페이지 디자인(A와 B) 의 구매전환율에 유의미한 차이가 있다.') else: print('귀무가설을 채택합니다. 두 페이지 디자인(A와 B) 의 구매전환율에 유의미한 차이가 없다.')
비타민을 복용한 환자와 소화제를 복용한 환자의 부작용 발생 분포 차이가 있는지 확인하시오.
각각의 부작용은 4가지로 구분되는데 부작용 발생 분포가 두 그룹간의 유의미한 차이가 있는지 카이제곱 검정을 사용해서 확인하시오.
# 부작용 번호와 종류
1. 두통
2. 약간의 메스꺼움
3. 심한 복통
4. 부작용 없음
# 비타민과 소화제 복용 환자의 부작용 데이터 생성
vitamin_data = [4, 3, 4, 1, 1, 4, 4, 4, 2, 4, 1, 4, 3, 2, 4, 4, 3, 2, 4, 4]
digestive_aid_data = [4, 4, 4, 4, 4, 2, 4, 3, 2, 3, 4, 4, 4, 4, 1, 4, 4, 4, 2, 4]
- 귀무가설: 비타민을 복용한 환자와 소화제를 복용한 환자간의 부작용 발생 푼포에 유의미한 차이가 없다
- 대립가설: 비타민을 복용한 환자와 소화제를 복용한 환자간의 부작용 발생 푼포에 유의미한 차이가 있다
# 1. 패키지 불러오기 import scipy.stats as stats import pandas as pd # 2. 데이터 구성하기 vitamin_data = [4, 3, 4, 1, 1, 4, 4, 4, 2, 4, 1, 4, 3, 2, 4, 4, 3, 2, 4, 4] digestive_aid_data = [4, 4, 4, 4, 4, 2, 4, 3, 2, 3, 4, 4, 4, 4, 1, 4, 4, 4, 2, 4] df_vitamin = pd.DataFrame( {'비타민' : vitamin_data } ) df_digestive = pd.DataFrame( {'소화제' : digestive_aid_data } ) # 부작용 빈도 계산 a = df_vitamin['비타민'].value_counts().sort_index() b = df_digestive['소화제'].value_counts().sort_index() # 3. 교차 테이블 작성하기 c = pd.DataFrame( {'비타민' : a, '소화제' : b} ) # 4. 카이제곱 검정 수행하기 stats, p_value, _ , _ = stats.chi2_contingency( c ) print( stats ) print( p_value ) # 5. 결과 출력하기 if p_value < alpha: print('귀무가설을 기각합니다. 비타민을 복용한 환자와 소화제를 복용한 환자간의 부작용 발생 푼포에 유의미한 차이가 있습니다.') else: print('귀무가설을 채택합니다. 비타민을 복용한 환자와 소화제를 복용한 환자간의 부작용 발생 푼포에 유의미한 차이가 없습니다.')
★ 마지막문제. 오늘의 마지막 문제. 한 카페에서 제공하는 두가지 음료(A와 B)가 손님들의 만족도에 미치는 영향이 서로 다른지 분석하고 합니다. 각각의 음료를 20명의 손님에게 제공한후 만족도를 조사했습니다. 손님들은 1~4의 등급으로 만족도를 평가했습니다.
1 : 매우 불만족
2 : 불만족
3 : 만족
4 : 매우 만족
조사된 만족도 데이터는 다음과 같습니다.
음료 A 만족도: 4, 3, 4, 2, 1, 4, 3, 3, 2, 4, 4, 4, 3, 2, 1, 4, 4, 3, 2, 4
음료 B 만족도: 3, 4, 3, 3, 4, 2, 4, 4, 2, 3, 3, 4, 4, 2, 1, 4, 4, 4, 3, 2
이 데이터를 이용해 음료 A와 음료 B의 만족도 분포가 유의미하게 다른지 유의수준 0.05에서 검정하세요.
# 필요한 패키지 불러오기 import scipy.stats as stats import pandas as pd # 1. 데이터 구성하기 beverage_a_data = [4, 3, 4, 2, 1, 4, 3, 3, 2, 4, 4, 4, 3, 2, 1, 4, 4, 3, 2, 4] beverage_b_data = [3, 4, 3, 3, 4, 2, 4, 4, 2, 3, 3, 4, 4, 2, 1, 4, 4, 4, 3, 2] df_beverage_a = pd.DataFrame({'음료_A': beverage_a_data}) df_beverage_b = pd.DataFrame({'음료_B': beverage_b_data}) # 부작용 빈도 계산 a = df_beverage_a['음료_A'].value_counts().sort_index() b = df_beverage_b['음료_B'].value_counts().sort_index() # 2. 교차 테이블 작성하기 all_ratings = sorted(set(a.index).union(set(b.index))) a = a.reindex(all_ratings, fill_value=0) b = b.reindex(all_ratings, fill_value=0) c = pd.DataFrame({'음료_A': a, '음료_B': b}) # 3. 카이제곱 검정 수행하기 chi2_stat, p_value, _, _ = stats.chi2_contingency(c) # 4. 결과 출력하기 alpha = 0.05 # 유의수준 print(f"카이제곱 통계량: {chi2_stat}") print(f"P-값: {p_value}") if p_value < alpha: print('귀무가설을 기각합니다. 음료 A와 음료 B의 만족도 분포에 유의미한 차이가 있습니다.') else: print('귀무가설을 채택합니다. 음료 A와 음료 B의 만족도 분포에 유의미한 차이가 없습니다.')
'빅데이터 분석(with 아이티윌) > python' 카테고리의 다른 글
[빅데이터분석] Python_58. Kaggle 실습 & 업로드 (0) | 2024.09.11 |
---|---|
[빅데이터분석] Python_57. 파이썬과 오라클, mySQL(Maria) (8) | 2024.09.11 |
[빅데이터분석] Python_55. 판다스 머신러닝5.(랜덤 포레스트 , 수치예측) (3) | 2024.09.10 |
[빅데이터분석] Python_54. 판다스 머신러닝4. (단순회귀, 신경망 수치예측) (1) | 2024.09.06 |
[빅데이터분석] Python_53. 판다스 머신러닝3 (로지스트 회귀, SVC,다중회귀분석 모델 ) (0) | 2024.09.05 |