본문 바로가기
자격증/빅데이터 분석 기사

빅분기 실기 작업형 3유형 연습문제 8제: CSV와 주피터 노트북

by char_lie 2026. 9. 15.
반응형

빅데이터분석기사(빅분기) 실기 작업형 3유형 연습문제 8제입니다. 평균 검정, 카이제곱 검정, 분산분석, 다중선형회귀와 로지스틱회귀를 다룹니다. 각 사례에 소문항 3개가 있어 총 24개의 답을 구합니다.

빅분기 실기 1·2·3유형 연습 모음집 보기 →

빅분기 실기 작업형 3유형 8제, CSV와 주피터 노트북

bigbungi-type3-8-practice.zip
0.02MB

이 블로그에서 다루는 자격증 내용은 모두의 문제집에서도 학습할 수 있습니다.
모두의 문제집에서 학습하기 →

첨부 ZIP에는 CSV 8개와 연습용·풀이용 주피터 노트북이 들어 있습니다. 각 문제의 세 소문항은 같은 CSV를 사용합니다. 압축을 모두 풀고 bigbungi-type3-8.ipynb를 여세요. data 폴더는 노트북과 같은 위치에 둡니다.

정답과 실행 코드는 각 문제의 정답·참고 풀이 보기 또는 bigbungi-type3-8-solutions.ipynb에서 확인합니다. 중간 계산값은 반올림하지 않고, 최종 답만 지정한 자릿수로 표시하세요.

문제 01. 음료 충전량의 기준 평균 검정

제공된 데이터는 가상의 음료 생산 공정에서 서로 독립적으로 추출한 용기 50개의 충전량이다. 모평균 충전량이 기준값 500 mL보다 큰지 검정하려고 한다. 데이터를 이용해 각 소문항의 답을 구하시오.

분석 조건

  • 각 관측값은 서로 독립이며 모집단은 정규분포를 따른다고 가정한다. 모분산은 알려져 있지 않다.
  • 귀무가설은 μ = 500, 대립가설은 μ > 500이다. 일표본 t-검정의 우측 단측 p값을 구한다.
  • 표본표준편차는 ddof=1을 사용한다. 결측값은 없고 모든 행을 사용한다. 유의수준은 0.05이다.

사용할 CSV

data/T3_001/bottle_fill.csv · 50행 · 2열

칼럼명칼럼 설명
record_id행 식별자
fill_ml용기의 음료 충전량 (mL)

소문항

  1. 충전량(fill_ml)의 표본평균을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  2. 일표본 t-검정의 검정통계량을 구하시오. 부호는 (표본평균 − 500)을 기준으로 한다.

    제출 형식: 소수점 이하 3자리의 수 1개

  3. 대립가설 μ > 500에 대한 단측 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

문제 01 정답·참고 풀이 보기

① 500.834 · ② 2.586 · ③ 0.006370

  • 기준값과 하나의 표본평균을 비교하므로 일표본 t-검정을 사용한다. t = (평균 − 500) / (표본표준편차 / √n)이다.
  • alternative="greater"는 평균이 기준값보다 크다는 방향이다. 양측 p값을 그대로 제출하지 않는다.
  • 검정 결론은 반올림 전 p값과 0.05를 비교해 내린다. 한쪽 p값을 무조건 양측 p값의 절반으로 처리하는 습관은 피한다.

반올림 전 p값이 0.05보다 작으므로 기준 모평균 500 mL에 대한 귀무가설을 기각한다. 평균 충전량이 500 mL보다 크다는 방향의 근거가 있다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_001/bottle_fill.csv")

x = df["fill_ml"]
result = stats.ttest_1samp(x, popmean=500, alternative="greater")
answer1 = x.mean()
answer2 = result.statistic
answer3 = result.pvalue
print(f"{answer1:.3f}")
print(f"{answer2:.3f}")
print(f"{answer3:.6f}")

문제 02. 단축키 교육 전후 작업시간 비교

제공된 데이터는 가상의 참가자 40명이 단축키 교육 전후에 같은 작업을 수행한 시간이다. 한 행의 before_sec와 after_sec는 동일한 참가자의 기록이다. 교육 후 평균 작업시간이 감소했는지 검정하시오.

분석 조건

  • before_sec 또는 after_sec가 결측인 참가자 행은 통째로 제외한다. 남은 쌍의 대응 관계를 유지한다.
  • 차이는 d = after_sec − before_sec로 정의한다. 참가자별 차이는 독립이며 정규분포를 따른다고 가정한다.
  • 귀무가설은 μd = 0, 대립가설은 μd < 0이다. 대응표본 t-검정의 좌측 단측 p값을 구한다. 유의수준은 0.05이다.

사용할 CSV

data/T3_002/keyboard_training.csv · 40행 · 3열

칼럼명칼럼 설명
record_id행 식별자
before_sec교육 전 작업시간 (초)
after_sec교육 후 작업시간 (초)

소문항

  1. 결측 행을 제외한 뒤 분석에 사용하는 유효한 참가자 쌍의 수를 구하시오.

    제출 형식: 정수 1개

  2. 차이 d = after_sec − before_sec에 대한 대응표본 t-검정의 검정통계량을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  3. 평균 작업시간이 감소했다는 대립가설에 대한 단측 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

문제 02 정답·참고 풀이 보기

① 37 · ② -2.941 · ③ 0.002843

  • 두 열에서 결측값을 각각 따로 지우고 길이만 맞추면 참가자의 짝이 어긋날 수 있다. 두 열을 기준으로 같은 행을 한 번에 제외한다.
  • ttest_rel의 첫 인수에서 둘째 인수를 뺀 값이 검정통계량의 부호를 결정한다. after를 먼저 넣고 alternative="less"를 사용한다.
  • 단순히 두 집단의 평균이 다른지를 보는 독립표본 검정으로 바꾸지 않는다. 이 예시는 교육의 인과효과 전체를 입증하는 실험 설계 과제가 아니다.

반올림 전 단측 p값이 0.05보다 작으므로 차이의 모평균이 0이라는 귀무가설을 기각한다. 이 검정 조건에서는 교육 후 평균 작업시간이 감소했다는 방향의 근거가 있다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_002/keyboard_training.csv")

paired = df.dropna(subset=["before_sec", "after_sec"])
result = stats.ttest_rel(
    paired["after_sec"], paired["before_sec"], alternative="less"
)
answer1 = len(paired)
answer2 = result.statistic
answer3 = result.pvalue
print(int(answer1))
print(f"{answer2:.3f}")
print(f"{answer3:.6f}")

문제 03. 처리 방식별 평균시간과 신뢰구간

제공된 데이터는 가상의 처리 방식 A와 B를 서로 다른 작업에 적용하여 측정한 소요시간이다. 두 방식의 모평균 소요시간 차이를 Welch t-검정으로 분석하고 평균차의 95% 신뢰구간을 구하시오.

분석 조건

  • 두 집단은 독립이며 각 집단의 모집단은 정규분포를 따른다고 가정한다. 등분산은 가정하지 않는다.
  • 평균차는 μA − μB이다. 귀무가설은 μA = μB, 대립가설은 μA ≠ μB인 양측 검정이다.
  • Welch–Satterthwaite 자유도를 사용하며 정수로 반올림하지 않는다. 신뢰구간은 μA − μB의 양측 95% 신뢰구간이다. 결측값은 없으며 유의수준은 0.05이다.

사용할 CSV

data/T3_004/processing_methods.csv · 102행 · 3열

칼럼명칼럼 설명
record_id행 식별자
method처리 방식: A, B
elapsed_sec작업 소요시간 (초)

소문항

  1. A − B 방향의 Welch t-검정 검정통계량을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  2. 두 모평균 차이에 대한 양측 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

  3. μA − μB의 양측 95% 신뢰구간에서 하한만 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

문제 03 정답·참고 풀이 보기

① -2.470 · ② 0.015292 · ③ -7.611

  • equal_var=False로 설정하여 등분산을 가정하지 않는 Welch 검정을 사용한다. 두 집단의 표본 수와 분산이 달라도 계산할 수 있다.
  • a, b 인수 순서가 A−B이다. 순서를 뒤집으면 t의 부호와 신뢰구간 방향이 바뀐다.
  • 신뢰구간은 평균차 ± t 임계값×√(sA²/nA+sB²/nB)이다. 같은 양측 검정 조건에서는 0 포함 여부와 5% 유의수준 판단이 대응한다.
  • confidence_interval 기능은 이 자료의 지정 환경에서 검증했다. 시험 환경 버전이 다르면 사용 가능 여부를 확인하고, 필요한 경우 공식을 사용한다.

양측 p값이 0.05보다 작고 평균차 A−B의 95% 신뢰구간은 0을 포함하지 않는다. 같은 검정 조건에서 두 모평균이 다르다는 근거가 있으며 표본평균은 A가 더 작다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_004/processing_methods.csv")

a = df.loc[df["method"] == "A", "elapsed_sec"]
b = df.loc[df["method"] == "B", "elapsed_sec"]
result = stats.ttest_ind(a, b, equal_var=False, alternative="two-sided")
interval = result.confidence_interval(confidence_level=0.95)
answer1 = result.statistic
answer2 = result.pvalue
answer3 = interval.low
print(f"{answer1:.3f}")
print(f"{answer2:.6f}")
print(f"{answer3:.3f}")

문제 04. 접수 경로 구성비의 적합도 검정

제공된 데이터는 가상의 안내센터에서 독립적으로 접수된 300건의 경로 기록이다. 기준 구성비 app 40%, web 30%, kiosk 20%, counter 10%가 현재 자료와 부합하는지 Pearson 카이제곱 적합도검정으로 확인하시오.

분석 조건

  • 한 행은 접수 1건이다. channel은 app, web, kiosk, counter 중 하나이며 결측값은 없다.
  • 기준 비율은 자료에서 추정한 값이 아니라 문제에서 주어진 고정값이다. 관측빈도·기대빈도 순서는 app, web, kiosk, counter로 맞춘다.
  • 귀무가설은 경로 확률이 주어진 네 비율과 같음, 대립가설은 적어도 하나가 다름이다. 자료에서 별도로 추정하는 모수는 없으며 유의수준은 0.05이다.

사용할 CSV

data/T3_005/request_channels.csv · 300행 · 2열

칼럼명칼럼 설명
record_id행 식별자
channel접수 경로: app, web, kiosk, counter

소문항

  1. 귀무가설 아래에서 kiosk 경로의 기대빈도를 구하시오.

    제출 형식: 정수 1개

  2. Pearson 카이제곱 검정통계량을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  3. 적합도검정의 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

문제 04 정답·참고 풀이 보기

① 60 · ② 1.117 · ③ 0.773052

  • 기대비율을 그대로 f_exp에 넣지 않는다. 각 비율에 전체 접수 건수를 곱해 기대빈도로 바꾼다.
  • value_counts는 기본적으로 빈도순이므로, 기대빈도와 같은 범주 순서로 재배치한다.
  • 카이제곱 통계량은 Σ(관측−기대)²/기대이다. 주어진 비율에서 별도 모수를 추정하지 않으므로 자유도는 3이다.
  • p값이 크다고 기준 비율이 사실임을 증명한 것은 아니다. 귀무가설을 기각할 근거가 충분한지를 판단한다.

p값이 0.05보다 커 주어진 기준 비율을 기각하지 못한다. 현재 표본으로 그 비율이 틀렸다고 볼 근거가 충분하지 않다는 뜻이다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_005/request_channels.csv")

order = ["app", "web", "kiosk", "counter"]
observed = df["channel"].value_counts().reindex(order, fill_value=0)
expected = len(df) * np.array([0.4, 0.3, 0.2, 0.1])
result = stats.chisquare(f_obs=observed.to_numpy(), f_exp=expected)
answer1 = expected[2]
answer2 = result.statistic
answer3 = result.pvalue
print(int(answer1))
print(f"{answer2:.3f}")
print(f"{answer3:.6f}")
반응형

문제 05. 안내문 형식과 신청 완료의 독립성

제공된 데이터는 가상의 신청 안내문 A 또는 B를 본 이용자 310명의 신청 완료 여부이다. 한 이용자는 한 행에만 기록되어 있다. 안내문 형식과 신청 완료 여부가 독립인지 Pearson 카이제곱 독립성검정으로 분석하시오.

분석 조건

  • completed는 0=미완료, 1=완료이다. notice는 A 또는 B이고 결측값은 없다. 이용자 관측은 서로 독립이라고 가정한다.
  • 교차표의 행은 A, B, 열은 0, 1 순서로 구성한다.
  • Yates 연속성 보정은 적용하지 않는다. Pearson 카이제곱 독립성검정을 사용한다.
  • 귀무가설은 두 변수가 독립임, 대립가설은 서로 독립이 아님이다. 유의수준은 0.05이다.

사용할 CSV

data/T3_006/notice_completion.csv · 310행 · 3열

칼럼명칼럼 설명
record_id행 식별자
notice노출된 안내문 형식: A, B
completed신청 완료 여부: 0=미완료, 1=완료

소문항

  1. 연속성 보정을 적용하지 않은 Pearson 카이제곱 검정통계량을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  2. 독립성검정의 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

  3. 검정에 사용하는 자유도를 구하시오.

    제출 형식: 정수 1개

문제 05 정답·참고 풀이 보기

① 6.526 · ② 0.010629 · ③ 1

  • 행×열의 교차표를 만든 후 독립성 가정 아래 기대빈도를 계산한다. 각 셀 기대빈도는 행 합×열 합/전체 합이다.
  • 2×2 표에서 SciPy의 기본 보정 여부에 따라 결과가 달라질 수 있으므로 문제의 correction=False를 반드시 적용한다.
  • 자유도는 (행 범주 수−1)×(열 범주 수−1)이다. 연관성이 검출되더라도 이 검정만으로 인과관계가 증명되는 것은 아니다.

p값이 0.05보다 작으므로 독립성 귀무가설을 기각한다. 이 표본과 검정 조건에서는 안내문 형식과 신청 완료 사이에 연관성이 있다는 근거가 있다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_006/notice_completion.csv")

observed = pd.crosstab(df["notice"], df["completed"]).reindex(
    index=["A", "B"], columns=[0, 1], fill_value=0
)
chi2, p_value, dof, expected = stats.chi2_contingency(
    observed, correction=False
)
answer1 = chi2
answer2 = p_value
answer3 = dof
print(f"{answer1:.3f}")
print(f"{answer2:.6f}")
print(int(answer3))

문제 06. 세 교육 방식의 평균 조립시간 비교

제공된 데이터는 가상의 교육 방식 A, B, C를 서로 다른 참가자 집단에 적용한 뒤 측정한 조립시간이다. 세 집단의 모평균이 모두 같은지 일원분산분석으로 검정하시오.

분석 조건

  • 각 집단은 서로 독립이고 집단 내 관측도 독립이다. 각 집단은 정규분포를 따르며 세 모집단 분산은 같다고 가정한다.
  • 모든 90행을 사용한다. 결측값은 없으며 유의수준은 0.05이다.
  • 귀무가설은 μA = μB = μC, 대립가설은 적어도 하나의 모평균이 다름이다.
  • 사후검정이나 Welch ANOVA는 수행하지 않는다.

사용할 CSV

data/T3_007/assembly_training.csv · 90행 · 3열

칼럼명칼럼 설명
record_id행 식별자
training교육 방식: A, B, C
assembly_sec조립 작업시간 (초)

소문항

  1. 집단 간 제곱합 SSB를 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  2. 일원분산분석의 F 검정통계량을 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

  3. 세 집단의 모평균이 모두 같다는 귀무가설에 대한 p값을 구하시오.

    제출 형식: 소수점 이하 6자리의 수 1개

문제 06 정답·참고 풀이 보기

① 372.945 · ② 9.216 · ③ 0.000234

  • 평균 세 개를 두 집단 t-검정으로 여러 번 비교하지 않고, 하나의 일원분산분석으로 전체 귀무가설을 검정한다.
  • F = (SSB / (k−1)) / (SSW / (N−k))이다. 집단 간 제곱합과 전체 제곱합을 혼동하지 않는다.
  • 유의한 결과는 적어도 한 모평균이 다르다는 뜻이다. 어느 두 집단이 다른지, 모든 집단끼리 다른지까지 결론내리지 않는다.

p값이 0.05보다 작으므로 세 모평균이 모두 같다는 귀무가설을 기각한다. 어느 집단끼리 차이가 나는지는 이 결과 하나만으로 지정할 수 없다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_007/assembly_training.csv")

a = df.loc[df["training"] == "A", "assembly_sec"]
b = df.loc[df["training"] == "B", "assembly_sec"]
c = df.loc[df["training"] == "C", "assembly_sec"]
summary = df.groupby("training")["assembly_sec"].agg(["size", "mean"])
grand_mean = df["assembly_sec"].mean()
answer1 = (summary["size"] * (summary["mean"] - grand_mean) ** 2).sum()
result = stats.f_oneway(a, b, c)
answer2 = result.statistic
answer3 = result.pvalue
print(f"{answer1:.3f}")
print(f"{answer2:.3f}")
print(f"{answer3:.6f}")

문제 07. 설비 전력소비량의 다중회귀 해석

제공된 데이터는 가상의 설비 가동시간, 작업장 온도, 대기시간 및 전력소비량이다. energy_kwh를 종속변수로 하고 나머지 세 측정값을 독립변수로 하는 절편 포함 다중선형회귀모형을 적합하시오.

분석 조건

  • 모형은 energy_kwh ~ operating_hours + temperature_c + idle_minutes이며 모든 96행을 사용한다. record_id는 설명변수가 아니다.
  • 결측값은 없고 변수 변환·표준화·상호작용·변수 제거·학습/검증 분리는 하지 않는다. 회귀 오차는 평균 0, 독립·등분산·정규성을 가정한다.
  • statsmodels OLS 기본 비강건(nonrobust) 공분산을 사용한다. 계수별 양측 t-검정에서 p < 0.05이면 유의하다고 판단한다.
  • ②의 계수 개수에는 절편을 제외한다. 유의하지 않은 변수를 제거하여 재적합하지 않는다. ③은 temperature_c 계수의 양측 95% 신뢰구간이다.

사용할 CSV

data/T3_009/equipment_energy.csv · 96행 · 5열

칼럼명칼럼 설명
record_id행 식별자
operating_hours설비 가동시간 (시간)
temperature_c작업장 온도 (°C)
idle_minutes설비 대기시간 (분)
energy_kwh전력소비량 (kWh)

소문항

  1. 수정 결정계수(adjusted R²)를 구하시오.

    제출 형식: 소수점 이하 4자리의 수 1개

  2. 세 독립변수 중 계수별 양측 p값이 0.05 미만인 변수의 개수를 구하시오. 절편은 제외한다.

    제출 형식: 정수 1개

  3. temperature_c 회귀계수의 양측 95% 신뢰구간에서 하한만 구하시오.

    제출 형식: 소수점 이하 3자리의 수 1개

문제 07 정답·참고 풀이 보기

① 0.8078 · ② 2 · ③ 0.293

  • 수정 R²와 R²는 다른 값이다. 요구된 rsquared_adj를 추출한다.
  • p값 조건은 반올림 전 값에 적용한다. 절편을 제외한 세 변수의 p값만 세며, 유의성에 따라 모형을 다시 만들지 않는다.
  • conf_int(alpha=0.05)는 각 계수의 95% 신뢰구간을 반환한다. temperature_c 행의 첫 번째 열이 하한이다.
  • 이 계수는 다른 독립변수들을 고정했을 때 온도 1°C 차이와 연결되는 전력소비량의 변화를 나타낸다. 모형 해석만으로 인과효과가 증명되는 것은 아니다.

고정된 전체 모형에서 5% 기준으로 유의한 독립변수는 operating_hours와 temperature_c 두 개이다. idle_minutes를 제거한 다른 모형의 결과로 답하지 않는다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_009/equipment_energy.csv")

model = smf.ols(
    "energy_kwh ~ operating_hours + temperature_c + idle_minutes", data=df
).fit()
answer1 = model.rsquared_adj
slope_pvalues = model.pvalues.drop("Intercept")
answer2 = (slope_pvalues < 0.05).sum()
answer3 = model.conf_int(alpha=0.05).loc["temperature_c", 0]
print(f"{answer1:.4f}")
print(int(answer2))
print(f"{answer3:.3f}")

문제 08. 학습 프로그램 신청의 오즈비 분석

제공된 데이터는 가상의 이용자 260명의 알림 제공 여부, 사전 학습정보 및 프로그램 신청 여부이다. enrolled를 종속변수로 하는 절편 포함 이항 로지스틱회귀모형을 최대우도법으로 적합하고, 계수·오즈비·신청확률을 구하시오.

분석 조건

  • 종속변수 enrolled는 0=미신청, 1=신청이며 사건(event)은 enrolled=1이다. 독립변수는 reminder, practice_hours, prior_score이다.
  • 모형은 log(p/(1−p)) = β0 + β1×reminder + β2×practice_hours + β3×prior_score이다. reminder는 0=알림 없음, 1=알림 있음의 숫자형 지시변수이다.
  • 모든 260행을 사용한다. 결측값은 없다. record_id를 제외하고 정규화·규제·변수 선택·상호작용·학습/검증 분리는 적용하지 않는다.
  • 독립 관측과 지정된 로짓 모형을 가정한다. statsmodels Logit의 비규제 최대우도 추정값을 사용한다.
  • ②는 다른 변수를 고정했을 때 reminder가 0에서 1로 바뀌는 오즈비이다. ③은 reminder=1, practice_hours=5, prior_score=60인 관측값의 신청확률이다.

사용할 CSV

data/T3_010/program_enrollment.csv · 260행 · 5열

칼럼명칼럼 설명
record_id행 식별자
reminder알림 제공: 0=없음, 1=있음
practice_hours사전 학습시간 (시간)
prior_score사전 평가점수 (점)
enrolled신청 여부: 0=미신청, 1=신청

소문항

  1. reminder의 회귀계수 β1 추정값을 구하시오.

    제출 형식: 소수점 이하 4자리의 수 1개

  2. reminder=1의 reminder=0 대비 오즈비 exp(β1)를 구하시오. 확률비가 아니다.

    제출 형식: 소수점 이하 4자리의 수 1개

  3. reminder=1, practice_hours=5, prior_score=60일 때 enrolled=1의 추정확률을 구하시오. 0~1 사이의 값으로 작성한다.

    제출 형식: 소수점 이하 4자리의 수 1개

문제 08 정답·참고 풀이 보기

① 0.8385 · ② 2.3130 · ③ 0.4529

  • 로지스틱회귀 계수는 로그 오즈 척도이다. reminder의 계수에 exp를 적용하면 0에서 1로 바뀔 때의 오즈비가 된다.
  • 오즈비와 확률비는 다르다. 오즈비가 2라고 신청확률도 정확히 2배라는 뜻은 아니다.
  • statsmodels의 이항 Logit 결과에서 predict는 사건 1의 확률을 반환한다. 이 문제에는 0/1 분류 임계값이나 Accuracy 계산이 필요하지 않다.
  • 동일한 회귀계수 값을 요구하므로 규제가 기본인 다른 라이브러리의 로지스틱 분류기 설정을 그대로 대체하지 않는다. 명시한 모형과 추정법을 유지한다.

다른 두 변수를 고정했을 때 알림이 있는 집단의 추정 오즈는 없는 집단의 약 2.313배이다. 지정된 입력값의 신청확률은 약 0.4529이며, 두 수치는 서로 다른 개념이다.

아래 코드는 data 폴더가 있는 위치에서 독립적으로 실행할 수 있습니다.

import pandas as pd
import numpy as np
from scipy import stats
import statsmodels.formula.api as smf

df = pd.read_csv("data/T3_010/program_enrollment.csv")

model = smf.logit(
    "enrolled ~ reminder + practice_hours + prior_score", data=df
).fit(disp=False)
answer1 = model.params["reminder"]
answer2 = np.exp(answer1)
new_data = pd.DataFrame({
    "reminder": [1], "practice_hours": [5.0], "prior_score": [60.0]
})
answer3 = model.predict(new_data).iloc[0]
print(f"{answer1:.4f}")
print(f"{answer2:.4f}")
print(f"{answer3:.4f}")
반응형

댓글