IT/빅데이터분석기사(빅분기)

8회 빅분기 실기 시험 준비, 작업 제3유형, 구글 Gemini 및 MS Copliot (Chat GPT) 분석 (빅데이터분석 기사)

자바라머신러닝 2024. 4. 13. 12:36

빅분기 제3유형은 체험환경에서 통계분석을 예시로 하고 있습니다. 즉 추론통계 또는 기술통계검정을 문의합니다. 30점  (30%) 배점되며 문제가 2~3문제 이므로 2~3가지 경우의 코드 구현능력이 필요합니다. 필자는 통계검정이 취약한 분야 이므로 집중적으로 학습해야 할 분야입니다.

 

  • 결론
    • 구글 Gemini 가 답안 과정 더 신뢰되지만 2번의 보완질문 필요했음
      • MS Copilot 답변
        • 코드 간단하나 답 소수점 형식 불일치 및 정확성 낮음
          • 카이제곱 통계량 :  260.71702016732104
          • Parch 변수 계수 값 : -0.1858966930832436
          • 오즈비 : -0.1858966930832436
      • 구글 Gemini 답변
        • 답 소수점 형식 일치 및 보완질문 필요
          • 카이제곱 통계량: 260.717
          • Parch 변수의 계수값: -0.031
          • SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값: 0.785
    • 코드는 정답신뢰가 높은 구글 Gemini 를 기준으로 하되 Copilot 을 일부 보완
import pandas as pd
from statsmodels.discrete.discrete_model import Logit
import numpy as np
from scipy import stats
from sklearn.linear_model import LogisticRegression

# 데이터 불러오기
data = pd.read_csv("data/Titanic.csv")

# 1. Gender와 Survived 변수 간의 독립성 검정
# Gender 필드 명목형 정규화
# data["Gender"] = data["Gender"].map({"male": 1, "female": 0})

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data['Gender'] = le.fit_transform( data['Gender'] )

# 카이제곱 검정
contingency_table = pd.crosstab(data["Gender"], data["Survived"])
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table.values)[0:4]

# 카이제곱 통계량 출력 (소수 셋째 자리까지 반올림)
print("카이제곱 통계량:", round(chi2, 3))

# 2. Gender, SibSp, Parch, Fare를 독립변수로 사용한 로지스틱 회귀모형
# 독립변수 준비
X = data[["Gender", "SibSp", "Parch", "Fare"]]
y = data["Survived"]

# Parch 변수의 계수값 출력 (소수 셋째 자리까지 반올림)
model = LogisticRegression().fit(X, y)
parch_coefficient = model.coef_[0][2]
print("Parch 변수의 계수값:", parch_coefficient)

# 3. SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값
odds_ratio = np.exp(parch_coefficient)
print("SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값:", round(odds_ratio, 3))

 

  • 결과

필자 습득 코드 실행 결과
필자 습득 코드 실행 결과

 

제 3유형 체험 문제 질문
더보기

제공된 데이터(data/Titanic.csv)는 타이타닉호의 침몰 사건에서 생존한 승객 및 사망한 승객의 정보를 포함한 자료이다.

아래 데이터를 이용하여 생존 여부(Survived)를 예측하고자 한다.

각 문항의 답을 [제출 형식]에 맞춰 답안 작성 페이지에 입력하시오.

(단, 벌점화(penalty)는 부여하지 않는다.)
[제공 데이터]
Passengerld : 승객 번호
Survived : 생존 여부 (0:사망, 1:생존)
Pclass : 좌석 클래스 (1: 1등석, 2: 2등석, 3: 3등석)
Name : 승객 이름
Gender : 성별 (male: 남성, female: 여성)
Age:연령
Sibsp : 동반한 형제/자매 및 배우자 수
Parch :동반한 부모 및 자녀 수
Ticket : 티켓번호
Fare : 티켓의 요금(달러)
Cabin : 객실 번호
Embarked : 답승지 위치

(C: Cherbourg, Q: Queenstown, S: Southam pton)

 

1) Gender와 Survived 변수 간의 독립성 검정을 실시하였을 때, 카이제곱 통계량은?

(반올림하여 소수 셋째 자리까지 계산)

 

2) Gender, SibSp, Parch, Fare를 독립변수로 사용하여 로지스틱 회귀모형을 실시하였을 때,

Parch 변수의 계수값은? (반올림하여 소수 셋째 자리까지 계산)


3) 위 2) 문제에서 추정된 로지스틱 회귀모형에서 SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값은?

(반올림하여 소수 셋째 자리까지 계산)


[제출 형식]
- 소수 넷째 자리에서 반올림하여 소수 셋째 자리까지만 계산

 

위 과정을 Gender 필드 명목형 정규활를 한후 1개의 Python 코드로 작성

 

 

MS Copilot

 

  • Copilot 문의 과정

Copilot 문의 과정
Copilot 문의 과정

 

  • Copilot  최종결과 코드
import pandas as pd

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

# 사용자 코딩

# 해당 화면에서는 제출하지 않으며, 문제 풀이 후 답안제출에서 결괏값 제출

import pandas as pd
import scipy.stats as stats

# Perform chi-squared test for independence between Gender and Survived
contingency_table = pd.crosstab(titanic_df["Gender"], titanic_df["Survived"])
chi2, p_value, _, _ = stats.chi2_contingency(contingency_table)

# Catergory fit_transform (MS Copilot 미제공 부분 보완)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
titanic_df['Gender'] = le.fit_transform( titanic_df['Gender'] )


# Calculate coefficient for Parch in logistic regression
from sklearn.linear_model import LogisticRegression
X = titanic_df[["Gender", "SibSp", "Parch", "Fare"]]
y = titanic_df["Survived"]
model = LogisticRegression().fit(X, y)
parch_coefficient = model.coef_[0][2]

# Calculate odds ratio for SibSp
sibsp_coefficient = model.coef_[0][1]
odds_ratio_sibsp = round((1 / sibsp_coefficient), 3)

print( chi2 ) 
print ( parch_coefficient)
print (odds_ratio_sibsp )

 

  • Copilot 답변 빅데이터분석기사 실기 체험 에서 실행 결과
    • 카이제곱 통계량 :  260.71702016732104
    • Parch 변수 계수 값 : -0.1858966930832436
    • 오즈비 : -0.1858966930832436

Copilot 코드 실행결과
Copilot 코드 실행결과

 

Copilot 코드 결과 제출
Copilot 코드 결과 제출

구글 Gemini

 

  • 구글 Gemini 문의 과정 (코드 2번 보완 질문)

구글 Gemini 문의 과정 (코드 2번 보완 질문)
구글 Gemini 문의 과정 (코드 2번 보완 질문)

  • 구글 Gemini  최종결과 코드
import pandas as pd
from statsmodels.discrete.discrete_model import Logit
import numpy as np
from scipy import stats

# 데이터 불러오기
data = pd.read_csv("data/Titanic.csv")

# 1. Gender와 Survived 변수 간의 독립성 검정
# Gender 필드 명목형 정규화
data["Gender"] = data["Gender"].map({"male": 1, "female": 0})

# 카이제곱 검정
contingency_table = pd.crosstab(data["Gender"], data["Survived"])
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table.values)[0:4]

# 카이제곱 통계량 출력 (소수 셋째 자리까지 반올림)
print("카이제곱 통계량:", round(chi2, 3))

# 2. Gender, SibSp, Parch, Fare를 독립변수로 사용한 로지스틱 회귀모형
# 독립변수 준비
X = data[["Gender", "SibSp", "Parch", "Fare"]]
y = data["Survived"]

# 로지스틱 회귀모형 학습
model = Logit(y, X).fit()

# Parch 변수의 계수값 출력 (소수 셋째 자리까지 반올림)
print("Parch 변수의 계수값:", round(model.params["Parch"], 3))

# 3. SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값
odds_ratio = np.exp(model.params["SibSp"])
print("SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값:", round(odds_ratio, 3))

 

  • 구글 Gemini 답변 빅데이터분석기사 실기 체험 에서 실행 결과
    • 카이제곱 통계량: 260.717
    • Parch 변수의 계수값: -0.031
    • SibSp 변수가 한 단위 증가할 때 생존할 오즈비(Odds ratio) 값: 0.785

구글 Gemini 최종결과 코드
구글 Gemini  최종결과 코드

 

Gemini 코드 결과 제출
Gemini 코드 결과 제출