별의 공부 블로그 🧑🏻‍💻
728x90
728x170

빅데이터분석기사 실기 기출 복원 문제 - 제3유형

들어가며

  • 빅데이터분석기사 실기 기출 제3유형 복원 문제를 정리해본다.
  • 제3유형에서는 2023년 6회 시험부터 검정(Test) 관련 문제가 출제된다.
  • 문제 해결 방법을 쭉 읽어 보는 용도로 정리해보았다.

 

문제

2023년 6회

문제 1

  • 감기약을 복용할 때 부작용에 대한 분류와 비율 데이터
  • 위약 효과가 있는지 253건의 데이터를 추출하여 검증
  • 감기 부작용에 대한 비율이 위약 효과 부작용 비율과 같은지를 카이제곱 검정하기

 

데이터

부작용 유형 코드 비율
두통 1 0.05
졸림 2 0.1
속쓰림 3 0.05
부작용 없음 4 0.8
합계   -

 

문제

  • (1) 위약 샘플 데이터가 부작용 없음인 데이터를 0~1 사이의 확률로 출력 (반올림하여 소수점 셋째 자리로 출력)
  • (2) 카이제곱 검정으로 검정 통계량 출력 (반올림하여 소수점 셋째 자리로 출력)
  • (3) 유의 확률(p-value) 출력 (반올림하여 소수점 셋째 자리로 출력)

 

import pandas as pd
from scipy.stats import chisquare

dt = pd.read_csv('dataset.csv', encoding='euc-kr')

# 속성 및 결측값 확인
print(dt.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 253 entries, 0 to 252
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   코드      253 non-null    int64
dtypes: int64(1)
memory usage: 2.1 KB
None

# '코드' 열을 기준으로 그룹화된 데이터 빈도 계산
## reset_index는 인덱스를 리셋하고 기존의 인덱스를 열로 변환하거나 제거하는 데 사용된다.
dt_placebo = dt.groupby('코드').size().reset_index(name='건수')
print(dt_placebo)

   코드   건수
0   1   15
1   2   24
2   3   15
3   4  199

# '건수'의 총합 구하기
tot_cnt = len(dt)

# 관측 빈도의 비율 구하기
dt_placebo['비율'] = dt_placebo['건수'] / tot_cnt
print(dt_placebo)

   코드   건수        비율
0   1   15  0.059289
1   2   24  0.094862
2   3   15  0.059289
3   4  199  0.786561

# 정답 (1) : '부작용 없음'의 확률 구하기
result1 = round(dt_placebo['비율'][3], 3)   # 소수점 셋째 자리까지 출력
print(result1)

0.787

# 정답 (2) : 카이제곱 검정으로 검정 통계량 구하기
dt_rate = pd.DataFrame({'코드': [1, 2, 3, 4], '비율': [0.05, 0.1, 0.05, 0.8]})
result_chisq = chisquare(dt_placebo['건수'], f_exp=dt_rate['비율'] * tot_cnt)
print(result_chisq)

Power_divergenceResult(statistic=0.9970355731225298, pvalue=0.801969260894451)

result2 = round(result_chisq.statistic, 3)   # 소수점 셋째 자리까지 출력
print(result2)

0.997

# 정답 (3) : p-value 구하기
result3 = round(result_chisq.**pvalue**, 3)   # 소수점 셋째 자리까지 출력
print(result3)

0.802

 

 

문제 2

  • 날씨 데이터
  • 다중 선형 회귀 모델을 사용하여 오존(O3), 일사량(Solar), 풍속(Wind) 변수에 대한 온도(Temperature)를 예측하는 모델 생성하기

 

데이터

변수 설명
O3 오존농도
Solar 자외선
Wind 바람
Temperature 온도
Month
Day

 

문제

  • (1) 오존농도 변수에 대한 회귀 계수 추정값 출력하기 (반올림하여 소수점 셋째 자리로 출력)
  • (2) 오존농도, 일사량이 고정일 때 풍속이 증가함에 따라 온도가 낮아진다는 것을 검증했다. t-검증값의 유의 확률(p-value) 출력하기 (반올림하여 소수점 셋째 자리로 출력)
  • (3) 어떤 날이 오존농도 10, 일사량 90, 풍속 20일 때 온도의 예측값 출력하기 (반올림하여 소수점 셋째 자리로 출력)

 

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from scipy import stats

t = pd.read_csv('dataset.csv', encoding='euc-kr')

# 속성 및 결측값 확인
print(t.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 111 entries, 0 to 110
Data columns (total 4 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   O3           111 non-null    int64  
 1   Solar        111 non-null    int64  
 2   Wind         111 non-null    float64
 3   Temperature  111 non-null    int64  
dtypes: float64(1), int64(3)
memory usage: 3.6 KB
None

# 독립 변수, 종속 변수 분리하기
x = t[['O3', 'Solar', 'Wind']]   # 오존, 일사량, 풍속
y = t['Temperature']  # 온도

# 모델링
lm = LinearRegression()
lm.fit(x, y)

# 회귀 계수 구하기
coefs = pd.DataFrame({
    'Feature': ['O3', 'Solar', 'Wind'],
    'Coefficient': lm.coef_
})
print(coefs)

  Feature  Coefficient
0      O3     0.171966
1   Solar     0.007276
2    Wind    -0.322945

# 정답 (1) : 오존농도 변수(O3)에 대한 회귀계수 추정값(Coefficient) 구하기
crit1 = float(coefs[coefs['Feature'] == 'O3']['Coefficient'].iloc[0])
result1 = round(crit1, 3)
print(result1)

0.172

# 정답 (2) : 오존농도, 일사량이 고정일 때 풍속이 증가함에 따라 온도가 낮아진다는 것을 검증했다. t-검증값의 유의 확률(p-value) 구하기
[sts, p_value] = stats.ttest_ind(x['Wind'], y)  # 풍속의 변화
result2 = round(p_value, 3)
print(result2)

0.0

# 정답 (3) : 어떤 날이 오존농도 10, 일사량 90, 풍속 20일 때 온도의 예측값 구하기
df_oneday = pd.DataFrame({
    'O3': [10],      # 오존농도
    'Solar': [90],   # 일사량
    'Wind': [20],    # 풍속
})

result3 = lm.predict(df_oneday)
print(np.round(result3[0], 3))

68.334
728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖