[빅데이터분석기사] 실기 체험 제3유형 풀이

amure·2025년 6월 18일

빅데이터분석기사

목록 보기
3/3
post-thumbnail

문제 수정 전

문제

제공된 데이터(data/Titanic.csv)는 타이타닉호의 침몰 사건에서 생존한 승객 및 사망한 승객의 정보를 포함한 자료이다. 아래 데이터를 이용하여 생존 여부(Survived)를 예측하고자 한다. 각 문항의 답을 【제출 형식】에 맞춰 답안 작성 페이지에 입력하시오. (단, 벌점화(penalty)는 부여하지 않는다.)

① Gender와 Survived 변수 간의 독립성 검정을 실시하였을 때, 카이제곱 통계량은? (반올림하여 소수 셋째 자리까지 계산)

② Gender, SibSp, Parch, Fare를 독립변수로 사용하여 로지스틱 회귀모형을 실시하였을 때, Parch 변수의 계수값은? (반올림하여 소수 셋째 자리까지 계산)

③ 위 ②번 문제에서 추정된 로지스틱 회귀모형에서 SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값은? (반올림하여 소수 셋째 자리까지 계산)

【제출 형식】
㉠ 소수 넷째 자리에서 반올림하여 소수 셋째 자리까지만 계산

데이터

Github 페이지의 Titanic.csv를 사용합니다.

Titanic.csv의 'Sex'를 'Gender'로 변경합니다.

풀이

import pandas as pd
df = pd.read_csv("Titanic.csv")

# 1. Gender와 Survived 변수 간 독립성 검정
# 교차표 생성
ct = pd.crosstab(df['Gender'], df['Survived'])

# 독립성 검정
from scipy import stats
# print(stats.chi2_contingency(ct))
print(f'카이제곱 통계량: {round(stats.chi2_contingency(ct).statistic, 3)}')

# 2. Gender, SibSp, Parch, Fare를 독립변수로 사용해 생성한 로지스틱 회귀 모델의 Parch 변수 계수
from statsmodels.formula.api import logit
model = logit('Survived ~ Gender + SibSp + Parch + Fare', df).fit()
# print(model.summary())
print(f'Parch 변수 계수: {round(model.params["Parch"], 3)}')

# 3. 2번 모델에서 SibSp가 한 단위 증가할 때 생존할 오즈비
import numpy as np
# print(model.params)
print(f'SibSp가 한 단위 증가할 때 생존할 오즈비: {round(np.exp(model.params["SibSp"]), 3)}')

  1. 260.717
  2. -0.201
  3. 0.702

문제 수정 후

문제

🔗 제3유형 문제

풀이

import pandas as pd
df = pd.read_csv("data/bcc.csv")

# 1. 로그 리지스틴의 분산에 대한 F-통계량 (분자의 자유도가 분모의 자유도보다 큼)
print('===== 1번 =====')

df['log_resistin'] = np.log(df['Resistin'])

group1 = df[df['Classification'] == 1]['log_resistin']
group2 = df[df['Classification'] == 2]['log_resistin']

var1 = group1.var()		# np.var(group1, ddof=1)
var2 = group2.var()		# np.var(group2, ddof=1)

dof_1 = len(group1) - 1		# 51 (분모)
dof_2 = len(group2) - 1		# 63 (분자)

f_stat = var2/var1
print(f'F 통계량: {round(f_stat, 3)}')

# 2. 두 집단의 로그 리지스틴 값에 대한 합동 분산 추정량
print('\n===== 2번 =====')

n1 = len(group1)
n2 = len(group2)

pooled_var = ((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2)
print(f'합동 분산 추정량: {round(pooled_var, 3)}')

# 3. 두 집단의 로그 리지스틴에 대한 독립표본 t-검정 p-value
print('\n===== 3번 (ttest_ind 함수 사용) =====')

from scipy import stats
print(f'p-value: {round(stats.ttest_ind(group1, group2, equal_var=True).pvalue, 3)}')

print('\n===== 3번 (p-value 직접 계산) =====')
import numpy as np

mean1 = group1.mean()
mean2 = group2.mean()
t_stat = (mean1 - mean2) / np.sqrt(pooled_var * (1/n1 + 1/n2))

p_value = 2*(1-stats.t.cdf(abs(t_stat), df=n1+n2-2))
print(f'p-value: {round(p_value, 3)}')

  1. 1.348
  2. 0.449
  3. 0.003
profile
꿈을 찾고 이루기 위한 여정을 기록합니다

0개의 댓글