< ๋ถ์๊ธฐ๋ฒ ์ ํ๊ทธ๋ฆผ >
< A/B ํ ์คํธ >
# ํ๋ก์ธ์ค
< ์ ์์์ค >
= ์ค๋ฅ ํ์ฉ ๋ฒ์
์ ์์์ค: ๊ท๋ฌด๊ฐ์ค์ด ๋ง์ ๋ ์ค๋ฅํ์ฉ ๊ธฐ์ค(ํ๋ฅ )
ํ๋ณธ์ ์ถ์ถํ๋ ์๊ฐ ๋ชจ์ง๋จ๊ณผ 100% ์ผ์นํ ์ ์๊ธฐ ๋๋ฌธ์, ์ค๋ฅ์๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค๊ณ ํ์ตํ์์ต๋๋ค.
๊ฐ์ค ๊ฒ์ ์์ ๊ฒฐ๋ก ์ ํด์ํ๊ธฐ ์ํด์๋ ๊ธฐ์ค์ ์ธ์ฐ๊ณ , ๊ทธ ๊ธฐ์ค์ ๋ง์กฑํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ค์ด ๋๋ ๊ฒ์ด ์ ์์์ค์ ๋๋ค.
< ๊ฒ์ ํต๊ณ๋๊ณผ p-value >
๊ฒ์ ํต๊ณ๋์ด๋ ๊ท๋ฌด๊ฐ์ค์ ์ฑํ ๋๋ ๊ธฐ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ฅ ๋ณ์๋ฅผ ์๋ฏธํฉ๋๋ค.
p-value: ์ด๋ ์ฌ๊ฑด์ด ์ฐ์ฐํ ๋ฐ์ํ ํ๋ฅ
< ์์ค์ฝ๋ ์ค์ต >
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
# ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํธ์ถ
import pandas as pd
import numpy as np
# ๊ณผํ ๊ณ์ฐ์ฉ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import scipy.stats as stats
from PIL import Image
df = pd.read_csv("users1.csv")
# t-test
#t-test
# ๊ฐ์ค ์ค์
# ๊ท๋ฌด๊ฐ์ค: ๋จ์ฑ๊ณผ ์ฌ์ฑ์ ๊ตฌ๋งค๊ธ์ก์ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค
# ๋๋ฆฝ๊ฐ์ค: ๋จ์ฑ๊ณผ ์ฌ์ฑ์ ๊ตฌ๋งค๊ธ์ก์ ์ฐจ์ด๊ฐ ์์ ๊ฒ์ด๋ค
# ์ค์ ๋ฐ์ดํฐ ๋น๊ต
df.groupby(['Gender'])['Purchase Amount (USD)'].mean().reset_index()
# ๋ฐ์ดํฐ ๋ถ๋ฆฌ
# mask method
mask=(df['Gender']=='Male')
mask1 = (df['Gender']=='Female')
m_df = df[mask]
f_df = df[mask1]
# ๊ฒฐ์ ๊ธ์ก ์ปฌ๋ผ๋ง ๊ฐ์ ธ์ค๊ธฐ
m_df=m_df[['Purchase Amount (USD)']]
f_df=f_df[['Purchase Amount (USD)']]
# ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด์ฌ์ง
# ์ ์์์ค์ ํต์์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ 0.05 ๋ก ์ ํจ
# scipy ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด t-score ์ pvalue ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
# t-test ๋ ํ๋ณธ์ ํ๊ท (์ฐจ์ด ๋ถ์)์ ์๊ณ ์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ชจ์ง๋จ์ ๋ถ์ฐ์ ์ ์ ์๋ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
t, pvalue=stats.ttest_ind(m_df, f_df)
# tscore ๋ ๊ทธ๋ฃน ๊ฐ ์ผ๋ง๋ ์ฐจ์ด๊ฐ ์๋์ง์ ๋ํ ์งํ
# tscore ๊ฐ ํฌ๋ฉด ๊ทธ๋ฃน ๊ฐ ์ฐจ์ด๊ฐ ํผ์ ์๋ฏธํฉ๋๋ค.
# p-value ๋ ์ฐ์ฐ์ ์ํด ๋ํ๋ ํ๋ฅ ์ ๋ํ ์งํ์
๋๋ค.
# p-value๊ฐ 0.05 ๋ณด๋ค ํฌ๋ค = ์ฐ์ฐํ ์ผ์ด๋ฌ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค = ์ธ๊ณผ๊ด๊ณ๊ฐ ์๋ค๊ณ ์ถ์
# ์ฌ๊ธฐ์ p-value ๊ฐ์ 0.05 ๋ณด๋ค ํฌ๋ฏ๋ก, ์ธ๊ณผ๊ด๊ณ๊ฐ ์๋ค๊ณ ์ถ์ ํ ์ ์์ต๋๋ค.
# ๋๋ฆฝ๊ฐ์ค ๊ธฐ๊ฐ
t, pvalue
# ์นด์ด์ ๊ณฑ๊ฒ์
#์นด์ด์ ๊ณฑ๊ฒ์
# ๊ฐ์ค ์ค์
# ๊ท๋ฌด๊ฐ์ค: ์ฑ๋ณ๊ณผ ๊ตฌ๋งคSize ์๋ ๊ด๋ จ์ฑ์ด ์์ ๊ฒ์ด๋ค
# ๋๋ฆฝ๊ฐ์ค: ์ฑ๋ณ๊ณผ ๊ตฌ๋งคSize ์๋ ๊ด๋ จ์ฑ์ด ์์ ๊ฒ์ด๋ค
# ์ค์ ๋ฐ์ดํฐ ๋น๊ต
df.groupby(['Gender','Size'])['Customer ID'].count().reset_index()
# pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ crosstab ํจ์๋ฅผ ํตํด, ๋ ๋ฒ์ฃผํ ์๋ฃ์ ๋น๋ํ๋ฅผ ๋ง๋ค์ด ์ฃผ๊ฒ ์ต๋๋ค.
result = pd.crosstab(df['Gender'], df['Size'])
# ์นด์ด์ ๊ณฑ ๊ฒ์ ์ stat ํจ์๋ฅผ ํตํด ๊ตฌํ
# chi2_contingency๋ฅผ ํตํด, ์นด์ด์ ๊ณฑํต๊ณ๋, p-value๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
stats.chi2_contingency(observed=result)
# ๊ฐ ๊ฐ๋ค์ ๋ณ๋๋ก ๋ณด๊ธฐ
# ์นด์ด์ ๊ณฑ ๊ฒ์ ํต๊ณ๋, pvalue, ์์ ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
stats.chi2_contingency(observed=result)[0]
# p-value ๋ ์ฐ์ฐ์ ์ํด ๋ํ๋ ํ๋ฅ ์ ๋ํ ์งํ์
๋๋ค.
# p-value๊ฐ 0.05 ๋ณด๋ค ํฌ๋ค = ์ฐ์ฐํ ์ผ์ด๋ฌ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค = ์ธ๊ณผ๊ด๊ณ๊ฐ ์๋ค๊ณ ์ถ์
# ์ฌ๊ธฐ์ p-value ๊ฐ์ 0.05 ๋ณด๋ค ํฌ๋ฏ๋ก, ์ธ๊ณผ๊ด๊ณ๊ฐ ์๋ค๊ณ ์ถ์ ํ ์ ์์ต๋๋ค.
# ๋๋ฆฝ๊ฐ์ค ๊ธฐ๊ฐ
stats.chi2_contingency(observed=result)[1]
# ์์ ๋์ ์ ์์์ค์ ํตํด ๊ท๋ฌด๊ฐ์ค ๊ธฐ๊ฐ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ๋ ํฉ๋๋ค.
# ์์ ๋๋, ๊ต์ฅํ ๋ณต์กํ ๊ฐ๋
์ด๋ฏ๋ก,,, (๋ณ์1 ๊ทธ๋ฃน์ ์-1)*(๋ณ์2 ๊ทธ๋ฃน์ ์-1) ๊ฐ ๋๊ฒ ์ต๋๋ค.
# 1*3 = 3 ์ด ๋์ถ๋์์ต๋๋ค.
stats.chi2_contingency(observed=result)[2]