기록 블로그
[TIL 31] 본문
<TIL 반드시 들어가야 할 내용>
1. 어떤 문제가 있었는지
2. 내가 시도해 본 것들(자세히 쓰기)
3. 어떻게 해결했는지
4. 뭘 새롭게 알았는지(자세히 쓰기)
어떤 문제가 있었는지
변동계수 뭔지 모르겠었음ㅋㅋ
모집단의 표준편차, 표본 크기, 표본 평균, 신뢰 수준이 주어졌을 때의 신뢰구간을 구하는 문제.
이 문제에서 표본크기가 25여서 t 검정을 사용해야 된다고 생각했음.
계산한 결과값을 어떻게 담아내야하는지 모르겠었음.
카이제곱검정을 이용하여 해드라인별 클릭률이 얼마나 차이가 있는지 확인하는 문제.
이때 데이터를 어떻게 나눠야할지 몰랐음. 기준이 되는 데이터가 있다고 생각함.
이때 갑자기 통계량이라는 개념이 헷갈림
시각화를 어떻게 해야할지 아예 감도 오질 않았음...
데이터를 생성할 때 np을 써야할지, stats을 써야할지 헷갈림
내가 시도해 본 것들
변동 계수
두 비교하는 값들의 단위 등 스케일이 다르면 분산 크기가 달라져 비교하기 어려워지는데 이를 보정하기 위한 방법
CV=표준편차(std)/평균(mean)
t-검정으로 품 / 인덱스를 사용하여 각 값을 변수에 담아줌
import scipy.stats as stats
import numpy as np
# 주어진 값들
sigma = 8 # 모집단의 표준편차
n = 25 # 표본 크기
x_bar = 42.7 # 표본 평균
confidence_level = 0.95 # 신뢰 수준
stats.t.interval(confidence_level, loc=x_bar, scale=sigma/np.sqrt(n))
lower_bound = a[0]
upper_bound = a[1]
print(f"95% 신뢰 구간: ({lower_bound:.2f}, {upper_bound:.2f})")
해드라인 별로 각각 클릭했을 때와 클릭하지 않았을 때를 나누어서 생각했음 ( 적합도 검정 )
a = clicks.iloc[0]
b = clicks.iloc[1]
chi2_stat, pvaleu = stats.chisquare(a,b)
하지만 둘의 값이 너무 크기 비교가 많이 났고 값이 나오지 않아 강의를 다시 봤음.
보는 중간에 각 해드라인 별 독립성 검정이 필요하다는 것을 알고 다시 풀어봄
import pandas as pd
from scipy import stats
# URL 로 데이터 가져오기
url = "https://raw.githubusercontent.com/gedeck/practical-statistics-for-data-scientists/master/data/click_rates.csv"
click_rate = pd.read_csv(url)
clicks = click_rate.pivot(index='Click', columns='Headline', values='Rate')
display(clicks)
a = list(clicks.iloc[[0,1],0])
b = list(clicks.iloc[[0,1],1])
c = list(clicks.iloc[[0,1],2])
d=np.array([a,b,c])
chi2_stat,pvalue,dof,expected=stats.chi2_contingency(d)
pvalue=float(pvalue)
alpha = 0.05 # 유의수준
def chi2(q):
if q < alpha:
return "귀무가설 기각: 헤드라인과 페이지 클릭율에는 관련이 있다.."
else:
return "귀무가설 채택: 헤드라인과 페이지 클릭율에는 관련이 없다."
print('H0 : 귀무가설은 헤드라인과 페이지 클릭율에는 관련이 없다\n'
'H1 : 대립가설은 헤드라인과 페이지 클릭율에는 관련이 있다\n'
f'chisq : {chi2_stat:.3f}\n'
f'pvalue : {pvalue:.3f}\n'
f'{chi2(pvalue)}')
첨에 뭔지 몰라서 예시에 적혀있는 것들만 적어서 확인함
plt.subplots(1,3)
plt.figure(figsize=(15, 5
plt.hist(데이터 이름)
plt.title('이름')
어떻게 해결되었는지
여러 사람들에게 여쭤보고, 검색해서 대부분 해결함. 야후 감사합니다.
알게 된 사실
모분산을 알고 있으면 포본 크기를 알고 있다고 해도 z-검정을 사용함
z-검정의 메서드를 알게 됨. stats.norm.interval(신뢰수준, loc = 표본 평균, scale = 모집단 표준 편차/np.sqrt(표본크기))
모분산 확인 가능 | 표본크기 n>=30 확인 | 모집단이 정규분포 모양 | 사용 분포 |
O | O | 관계없음 | z-분포 |
X | O | 관계없음(심하게 외곡되지 않았다면) | t/z-분포 모두 사용 가능 (t-분포 권장) |
X | X | O | t-분포 |
X | X | X | 비모수 방법 사용 |
이 표를 알려주신 이모씨께 감사인사를 올림..
import scipy.stats as stats
import numpy as np
# 주어진 값들
sigma = 8 # 모집단의 표준편차
n = 25 # 표본 크기
x_bar = 42.7 # 표본 평균
confidence_level = 0.95 # 신뢰 수준
stats.norm.interval(confidence_level, loc=x_bar, scale=sigma/np.sqrt(n))
lower_bound = a[0]
upper_bound = a[1]
print(f"95% 신뢰 구간: ({lower_bound:.2f}, {upper_bound:.2f})")
적합도 검정과 독립성 검정이 다르다는 사실을 알게 됨.
라이브 강의의 판서는 적합도 검정으로 확인 했음.
각 해드라인의 클릭 결과의 독립성을 확인.
통계량은 데이터를 검정할 때 사용한 검정에 사용하는 데이터의 값이 그래프에 맞춰....
....? 엉? 내가 알고 있는게 아닌 거 같은데?
카이제곱 검정 통계량
클수록 관찰된 값과 기대 값의 차이가 크다는 의미이며, 이는 두 변수 간의 관계가 존재할 가능성이 높음을 나타냄
pvalue와 통계량의 차이는 뭐지?... pvalue는 그래프에서 차지하는 면적의 크기인데... 얘도 높으면 유의미하잖음
물어봐야지
import numpy as np
from scipy import stats
import inspect
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(42)
# scipy를 통한 샘플 생성
# np.random.bernoulli(k=,n=,p=0.5)
binomial_data = stats.binom.rvs(n=10, p=0.5, size=1000)
uniform_data = stats.uniform.rvs(loc=0, scale=10, size=1000)
normal_date = stats.norm.rvs(size=1000)
fig,ax=plt.subplots(1,3,figsize=(15,5))
ax[0].hist(binomial_data,bins=20, color='blue')
ax[0].set_title('Binomial Distribution')
ax[0].set_xlabel('value')
ax[0].set_ylabel('Rrequency')
ax[1].hist(uniform_data, bins=20, color='g')
ax[1].set_title('Uniform Distribution')
ax[1].set_xlabel('value')
ax[1].set_ylabel('Rrequency')
ax[2].hist(normal_date, bins=20, color='red')
ax[2].set_title('Nomal Distribution')
ax[2].set_xlabel('value')
ax[2].set_ylabel('Rrequency')
먼저 subplots 값을 설정하며 그에 따른 값을 각 변수에 할당해야함.
figsize는 따로 쓰지 않아도 괜찮다는 사실을 깨달음.
subplots로 그래프의 개수를 정했으면 각 데이터의 그래프에 인덱스를 정해줌.
bin은 그래프 막대 폭
title, xlabel,ylabel은 subplots의 각각 그래프에 붙여주고 싶으면 인덱스와 set을 붙여주면 됨
통계 너무 헷갈린다....
강의도 다 봤겠다... 책 오면 하나하나 정리해야지..
할 건 많은데 시간은 없고 하기 싫고..
1~2주 정도 몸이 안 좋아서 시간을 날렸는데 조금 후회됨.. 이제 부터 후회할 짓을 안 하면되지 뭐..