본문 바로가기
IT&게임/빅데이터분석기사(빅분기)

[공식문제] 빅분기 제3유형 예제 문제 (독립성검정, 로지스틱 회귀, 오즈비)

by 푸루루 2024. 6. 18.
728x90
반응형

 

이미지 썸네일 삭제
(체험) 제3유형 (풀이용) - 빅데이터분석기사 실기 체험

제공된 데이터(data/Titanic.csv)는 타이타닉호의 침몰 사건에서 생존한 승객 및 사망한 승객의 정보를 포함한 자료이다. 아래 데이터를 이용하여 생존 여부(Survived)를 예측하고자 한다.각 문항의 답을 【제출 형식】에 맞춰 답안 작성 페이지에 입력하시오. (단, 벌점화(penalty)는 부여하지 않는다.) ① Gender와 Survived 변수 간의 독립성 검정을 실시하였을 때, 카이제곱 통계량은?(반올림하여 소수 셋째 자리까지 계산) ② Gender, SibSp, Parch, Fare를 독립변수로 사용하여 로지스틱 ...

dataq.goorm.io

mport pandas as pd

df = pd.read_csv("data/Titanic.csv")

#1.
# 이때 []는 두번 써줘야해 
# print(df[['Gender', 'Survived']].head(5))
crosstab = pd.crosstab(df['Gender'], df['Survived'])
print(crosstab)

from scipy.stats import chi2_contingency
print(chi2_contingency(crosstab))
# 260.717 >> 왼쪽에 제출하는 란이 따로 있음 

#2.
#로지스틱 회귀는 분류모델임 (회귀 모델이 아님)
#독립변수의 샘플을 확인해보니 Gender은 범주형인걸 알고 있음 
print(df[['Gender', 'SibSp', 'Parch', 'Fare']].head(3))

from statsmodels.formula.api import logit

# 범주형은 C()로 감싸 줘야한다
# 종속변수를 먼저 적어 줘야함 (survived)
model = logit("Survived ~ C(Gender) + SibSp + Parch + Fare", data=df).fit()
print(model.summary())
# 가장 첫번째 있는 컬럼이 계수임 
print(round(-0.2007,3))
# -0.201

#3.
import numpy as np
print(model.params['SibSp'])
print(np.exp(model.params['SibSp']))

print(np.exp(-0.3539))
#0.702
 

오즈비 - 퇴근후딴짓 자료 활용

 

로짓(logit)

  • 0 또는 1이 아니라, 어떤 클래스(0또는 1)에 속할 확률값을 결정하는 함수

 

오즈

  • 어떤 사건이 발생할 확률과 발생하지 않을 확률의 비율 (0 또는 1의 비율)

오즈비

  • 두 오즈의 비율
  • 로지스틱 회귀에서는 오즈비를 사용해 독립변수가 한 단위 변할 때 종속 변수의 오즈가 어떻게 변하는지 나타낸다.
  • 오즈비 > 1
    • 독립변수의 증가가 종속변수의 확률을 증가 시킴
  • 오즈비 < 1
    • 독립변수의 증가가 종속변수의 확률을 감소 시킴
  • 문제
    • SibSp 변수의 오즈비가 0.7
      • 한 단위 증가할 때마다 생존의 오즈가 0.7배가 됨
      • 형제 자매, 배우자 수가 많을 수록 생존 확률이 감소
  • 오즈비를 구하는 방법
    • SibSp의 계수가 −0.3436이라면, SibSp가 한 단위 증가할 때 오즈는 자연상수 e의 −0.3436 제곱
    • e는 2.71828…
  • numpy
    • np.exp(x)

 

 

 

[구버전 공식 문제]

1) 표본평균

2) 검정통계량(Scipy -TTest )

3) 가설검정 결

import pandas as pd
df = pd.read_csv("data/blood_pressure.csv")
df['diff'] = df['bp_after'] - df['bp_before']
#1
print(round(df['diff'].mean(),2))

#2
from scipy import stats
# 순서대로 넣으라는거 같네요 # alternative는 H1이 음수이므로 after가 더 작아야해
result = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(result)
print(round(result.statistic,2))

#2 풀이 방법2
# 첫번째는 검정통계 두번째는 p-value
st, pv = stats.ttest_rel(df['bp_after'], df['bp_before'], alternative="less")
print(st)
print(pv)

#3
print(round(result.pvalue,4))
 

 

 

728x90

댓글