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
그리드형(광고전용)
'Certificate > BDAE' 카테고리의 다른 글
[빅데이터분석기사 실기] 기출 복원 문제 - 제2유형 (0) | 2024.06.05 |
---|---|
[빅데이터분석기사 실기] 기출 복원 문제 - 제1유형 (0) | 2024.06.05 |
빅데이터분석기사 시험 개요 (0) | 2022.07.11 |