문제1. 변동계수 구하기
변동계수(coefficient of variation) = 표준편차 / 평균
표준 편차를 산술 평균으로 나눈 값
변동 계수는 같은 단위를 가지는 평균값으로 나누어주기 때문에, 측정단위가 서로 다른 자료를 비교하고자 할 때 쓰인다. 변동 계수의 값이 클수록 상대적인 차이가 크다는 것을 의미하며,
상대 표준 편차라고도 부른다.
풀이1. Numpy
(1) a와 b의 평균 구하기
mean_a = np.mean(com_a)
mean_b = np.mean(com_b)
print(mean_a, mean_b)
(2) 표준 편차 구하기
std_a = np.std(com_a, ddof=1) #자유도가 1이다. 표본이기 때문에 자유도 : 자료의 개수 -1
std_b = np.std(com_b, ddof=1)
(3) 변동 계수 구하기
cv_a = std_a/mean_a
cv_b = std_b/mean_b
print(f'A회사의 변동계수:{cv_a:.3f}, B회사의 변동계수:{cv_b:.3f}')
✅자유도
평균을 구할 때 나누어 주는 숫자. 합쳐진 값들 중에서 실질적으로 '자유로운' 값들의 개수
표준편차를 구할 때 자유도는 '자료의 개수 - 1'
풀이2. Pandas
data = pd.DataFrame({'Company A': com_a, 'Company_B': com_b})
data
mean_a_pd = data['Company A'].mean()
std_a_pd = data['Company A'].std()
cv_a_pd = std_a_pd / mean_a_pd
mean_b_pd = data['Company_B'].mean()
std_b_pd = data['Company_B'].std()
cv_b_pd = std_b_pd / mean_b_pd
print(f'A회사의 변동계수 {cv_a_pd:.3f}')
print(f'B회사의 변동계수 {cv_b_pd:.3f}')
문제2. 신뢰구간 구하기
z분포를 이용한 모평균을 95%의 신뢰구간으로 구하는 공식
(1) 스켈레톤 코드
#스켈레톤 코드
import scipy.stats as stats
import numpy as np
# 주어진 값들
sigma = 8 # 모집단의 표준편차
n = 25 # 표본 크기
x_bar = 42.7 # 표본 평균
confidence_level = 0.95 # 신뢰 수준
(2) 신뢰구간 구하기
se = sigma / np.sqrt(n)
lower_bound = x_bar - 1.96 * se
upper_bound = x_bar + 1.96 * se
print(f'95% 신뢰구간: ({lower_bound:.3f}, {upper_bound:.3f})')
📝내가 푼 풀이
T분포를 이용한 풀이. 하지만 현실은 아름답지 않다. 모든 값들이 주어지는 경우는 잘 없음
scale = round(8/np.sqrt(24),2)
scale
conf_interval = stats.t.interval(0.95, 24, 42.7, 1.63)
lower_bound = conf_interval[0]
upper_bound = conf_interval[1]
print(f"95% 신뢰 구간: ({lower_bound:.3f}, {upper_bound:.3f})")
문제3. 이표본 t검정
stats.ttest_ind(nature, artificial, alternative ='greater', equal_var = True) #앞에 있는 전달인자가 큰 경우에 greater를 넣어야 함.
문제4. 카이제곱 검정
# 적합도 검정
chi2_stat, p_value, dof, expected = stats.chi2_contingency(clicks)
print(f"chisq: {chi2_stat:.3f}, pvalue: {p_value:.3f}")
# 결론
alpha = 0.05 # 유의수준
if p_value < alpha:
print("귀무가설 기각: 헤드라인과 페이지 클릭율에는 관련이 있다..")
else:
print("귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다.")
- Correction = True, 자유도가 1일 때 수치 보정해주는 옵션 일반적으로 2*2 일때 적용한다.
scipy.stats.chi2_contingency 함수는 카이제곱 검정을 수행하여 두 개 이상의 범주형 변수 간의 독립성을 검정합니다. 이 함수는 관측 빈도를 담고 있는 교차표(contingency table)를 입력으로 받아 카이제곱 통계량, p-값, 자유도, 그리고 기대 빈도(expected frequencies)를 반환합니다.
문제5. 중심극한정리
import matplotlib.pyplot as plt
import scipy.stats
from scipy.stats import *
np.random.seed(42)
sample_size = 1000
uniform_data = uniform.rvs(loc = 0, scale = 10, size = sample_size)
binomial_data = binom.rvs(n = 10, p = 0.5, size = sample_size)
binomial_data[:10]
normal_data = norm.rvs(loc = 0, scale = 1, size = sample_size)
문제6. 중심극한정리 - 각 분포의 표본의 평균 시각화
num_samples = 500
sample_means = {
"Binomial": [],
"Uniform": [],
"Normal": []
}
for _ in range(num_samples):
sample_means["Binomial"].append(np.mean(np.random.choice(binomial_data, size = 30, replace = True)))
sample_means["Uniform"].append(np.mean(np.random.choice(uniform_data, size=30, replace = True)))
sample_means["Normal"].append(np.mean(np.random.choice(normal_data, size=30, replace=True)))
'기초통계' 카테고리의 다른 글
기초통계학(1) : 중심경향치, 산포도 (0) | 2025.01.22 |
---|---|
통계학 기초 정리 (6) : 가설검정(재현가능성, p-해킹, 선택적보고) (0) | 2025.01.09 |
통계학 기초 정리 (5) : 상관계수(피어슨 상관계수, 스피어만 상관계수, 켄달타우 상관계수, 상호정보 상관계수) (0) | 2025.01.09 |
통계학 기초 정리 (4) : 회귀분석(선형회귀, 다항회귀, 스플라인회귀) (4) | 2025.01.08 |
통계학 기초 정리 (3) : 각종 검정 방법 (t검정, 다중 검정, 카이제곱 오류), 제 1종 오류와 제 2종 오류 (0) | 2025.01.08 |