[ProDS] 실기 - 가설검정

swb·2022년 11월 22일
0

ProDS

목록 보기
1/5

가설검정 : t-test

주요함수

1. ttest_1samp

  • 단일 표본 t검정 시 사용
  • 모집단의 평균은 popmean 인자에 지정

2. ttest_rel()

  • 대응 표본 t검정 시 사용
  • 검정에 실시하는 두 변수를 차례대로 지정

3. ttest_ind()

  • 독립 2 표본 t검정 시 사용
  • 검정에 실시하는 두 변수를 차례대로 지정
  • 등분산 가정을 만족하는 경우, eqaul_var 인자에 True를 할당

01. 자료가 수집된 지역의 평균 온도는 20도라 한다. 수집된 데이터를 사용하여 양측 검정을 실시했을 때 p-value는 얼마인가?

bike = pd.read_csv("bike.csv")

stat, p = ttest_1samp(bike["temp"], popmean = 20)
print(round(stat, 3))
print(round(p, 3))

02. 2011년 1월의 데이터를 대상으로 동 시간대의 casual과 registered의 평균 차이 검정 시 검정통계량은?

bike = pd.read_csv("bike.csv")

bike["datetime"] = pd.to_datetime(bike["datetime"])
bike["year"] = bike["datetime"].dt.year
bike["month"] = bike["datetime"].dt.month

bike_sub = bike.loc[(bike["year"] == 2011) & (bike["month"] == 1), ]

stat, p = ttest_rel(bike_sub["casual"], bike_sub["registred"])
print(round(abs(stat, 3))
print(round(p, 3))

03. 주중과 주말의 registered 평균 검정 시 검정통계량은?

bike = pd.read_csv("bike.csv")

bike["datetime"] = pd.to_datetime(bike["datetime"])
bike["wday"] = bike["datetime"].dt.weekday
bike["weekend"] = (bike["wday"] >= 5) + 0 # 5이상이면 1, 아니면 0

stat, p = ttest_ind(bike.loc[bike["weekend"] == 1, "registered",
					bike.loc[bike["weekend"] == 0, "registsred"])
print(round(abs(stat), 3))
print(round(p, 3))

가설검정 : One way ANOVA

주요함수

1. f_oneway()

  • 일원 분산 분석 수행
  • 입력은 각가의 집단을 pandas의 series로 하는 것 권장
  • 출력은 검정통계량, p-value이며 튜플로 저장됨

2. ols(), anova_lm()

  • statsmodels의 일원 분산 분석을 수행
  • ols() 함수는 모델을 생성하고 적합
  • anova_lm() 함수는 적합된 모델정보를 기반으로 일원 분산 분석표를 보여줌
  • ols() 함수에 수식 입력 시 독립변수에 C() 함수 사용 권장

3. pairwise_tukeyhsd()

  • 사후검정 실시
  • 함수 내에 종속변수와 독립변수를 차례대로 선언
  • 출력을 위해 print() 사용
  • reject 변수의 True는 귀무가설을 기각하는 것

01. 분산 분석 시 사용하는 함수 또는 라이브러리와 관련 없는 것은? (1)

(1) ANOVA
(2) f_oneway
(3) ols
(4) statsmodels

02. 계절별 기온 평균을 분산분석 시 검정통계량은?

df = pd.read_csv("bike.csv")

model = ols(formula = "temp ~ C(season)", data = bike).fit()
anova_lm(model)

03. 요일별 registered의 평균을 사후검정 했을 때 평균이 유의미하게 차이 나지 않는 조합은 총 몇 개인가?

df = pd.read_cvs("bike.csv")

df["datetime"] = pd.to_datetime[df["datetime"])
df["wday"] = df["datetime"].df.weekday

print(pairwise_tukeyhsd(df["registered"], df["wday"])) # False의 개수가 정답

가설검정 : 등분산 검정

주요함수

1. f_cdf()

  • f 검정 실시 할 때 사용
  • F 검정통계량을 입력받아 P-value를 산출
  • 입력은 F 검정통계량, 첫 번째 데이터의 자유도, 두 번째 데이터의 자유도
  • F-test : 두 집단의 등분산 검정을 실시하며 각 집단은 정규분포를 따를 때 사용

2. bartlett()

  • 분산을 연산하기 위한 집단을 함수에 입력
  • Bartlett's test : 두 집단 이상의 등분산 검정을 실시하며 각 집단은 정규분포를 따를 때 사용

3. levene()

  • 분산을 연산하기 위한 집단을 함수에 입력
  • Leven's test : 두 집단 이상의 등분산 검정을 실시하며 각 집단은 정규분포를 따를 필요가 없음

01. 남성과 여성의 1회 평균 송금액의 분산을 비교 검정하고 그 결과의 검정 통계량은 얼마인가?

df = pd.read_csv("financial_info_10k_persons.csv")

df["trans_1_mean"] = df["Total_trans_amt"] / df["Total_trans_cnt"]

df_m = df.loc[df["Gender"] == "M", "trans_1_mean"]
df_f = df.loc[df["Gender"] == "F", "trans_1_mean"]

F = df_m.var() / df_f.var()
print(F)

02. 50, 60, 70대의 1회 평균 송금액의 분산을 비교 검정하였을 때 산출되는 p-value는 얼마인가?

df = pd.read_csv("financial_info_10k_persons.csv")

df["trans_1_mean"] = df["Total_trans_amt"] / df["Total_trans_cnt"]
df["Age_g"] = (df["Age"] // 10) * 10

bartlett(df.loc[df["Age_g"] == 50, "trans_1_mean",
		 df.loc[df["Age_g"] == 60, "trans_1_mean",
         df.loc[df["Age_g"] == 70, "trans_1_mean")

03. 부양가족이 없는 남성을 대상으로 교육수준에 따른 1회 평균 송금액의 분산을 비교 검정하였을 때 산출되는 p-value는 얼마인가?

df = pd.read_csv("financial_info_10k_persons.csv")

df["trans_1_mean"] = df["Total_trans_amt"] / df["Total_trans_cnt"]
df_m = df.loc[(df["Gender"] == "M") & (df["Dependent_cnt"] == 0), ]
df_m["Edu_level"].unique() # 몇 개의 값이 있는지 체크 - 7개

levene(df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[0], "trans_1_mean"],
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[1], "trans_1_mean"], 
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[2], "trans_1_mean"], 
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[3], "trans_1_mean"], 
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[4], "trans_1_mean"], 
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[5], "trans_1_mean"], 
       df_m.loc[df_m["Edu_level"] == df_m["Edu_level"].unique()[6], "trans_1_mean"]))

가설검정 : 독립성 검정

주요함수

1. chi2_contingency

  • scipy의 독립성 검정을 실시
  • 입력은 두 개의 명목형 변수의 각 원소의 빈도
  • 출력은 검정통계량, P-value, 자유도, 기대도수 4개의 연산 결과가 튜플로 산출

01. 고객의 학력이 고졸인 경우 성별과 이탈여부를 사용하여 독립성 검정을 실시했을 때 p-value는?

df = pd.read_csv("financial_info_10k_persons.csv")

df_high = df.loc[df["Edu_level"] == "High School", ]

chi2.contingency(pd.crosstab(df_high["Gender"], df_high["is_attrited"]), correction = False)

02. 성별에 따른 카드 등급은 서로 관련이 있는지 독립성 검정을 실시하고 해당 검정 결과의 검정통계량은 얼마인가?

df = pd.read_csv("financial_info_10k_persons.csv")

stat, p, dof, e_val = chi2.contingency(pd.crosstab(df["Gender"], df["Card"]))
print(stat)

03. 최근 12개월의 이용 실적 중 3개월 이상 사용 실적이 없는 것과 고객 이탈의 관계가 있는지 독립성 검정을 실시한 결과로 옳은 것은?

df = pd.read_csv("financial_info_10k_persons.csv")

df["is_inactive_last_12m"] = (df["inactive_last_!2m"] >= 3) + 0

chi2.contingency(pd.crosstab(df["is_inactive_last_12m"], df["is_attrited"]))
profile
개발 시작

0개의 댓글