안녕하세요, 이번에 ADP 32회 실기 시험을 치른 후기를 공유해보려 합니다.

처음 치른 시험이라 여러에 어려움이 있었지만, 다행히 운 좋게 합격할 수 있었습니다.  시험에서 느낀 점과 유의할 사항들을 적어보았니다.

이전에 시험을 치른 경험은 없지만, 최근 시험 패턴에 많은 변화가 있었던 것 같습니다. 특히 2024년부터는 시험이 연 4회에서 2회로 줄어들면서, 합격률이 다소 높아진 것으로 보입니다. 소문에 따르면, 이번 32회 시험에서는 약 30명 정도가 합격했다고 합니다.

최근 문제 유형도 변경되었습니다. 머신러닝과 통계의 비중이 50:50에서 머신러닝 60, 통계 40으로 바뀌면서, 머신러닝 전처리 등의 난이도가 상승했고, 통계에서는 생존분석 같은 어려운 문제는 줄어든 듯합니다.

실기 시험장은 서울 서일대, 대전, 부산 등 4군데에서 진행되었습니다.  서울 서일대에서 시험을 보았는데, 1시간 30분 지하철을 타고, 30분 정도 걸어서 겨우 도착했습니다. 4시간의 시험 시간이 순식간에 지나가서, 화장실 갈 시간도 아끼기 위해 커피 등의 음료는 가져가지 않고 약간의 물만 챙겨갔습니다. (시험장에는 뚜껑 있는 음료만 허용됩니다)

시험장의 PC 상태가 열악하여 Shift 키가 잘 눌러지지 않아 오타가 많이 나서 스트레스를 받았습니다. 시험 전에 30분의 시간이 주어지는데, 이 시간에 키보드와 마우스 등의 문제가 없는지 꼭 확인하고 문제가 있으면 교체를 요청해야 합니다. 

(첫 시험이라 이 점을 몰랐습니다. 시험전에 상태는 확인필요합니다.)

시험은 구름 웹사이트의 쥬피터 노트북 통해 진행되며, 문제는 복사 붙여넣기는 되지 않습니다. 구름 환경의 쥬피터 노트북이 리눅스 가상 서버에서 동작하므로, CSV 파일 등의 위치를 `pwd` 등의 명령어로 확인해야 합니다. 

제출은 워드로 하라고 권장 하지만, 코드를 옮겨 적을 시간이 부족합니다. 쥬피터 노트북에서 마크다운을 이용해 작성하고, 쥬피터 노트북에서 HTML로 저장한 후, HTML 파일을 인쇄하여 PDF로 저장하는 방법을 미리 연습하는 것이 좋습니다. (PDF 파일의 글자가 잘리는지, 모양이 보기 어려운지 시험장에 가기 전에 미리 점검해보세요.)

ADP 32회 시험 문제 

ADP 32회 시험은 머신러닝 대문제 2개, 통계 대문제 3개로 구성되었습니다. 아래 내용은 기억에 의한 것이며, 실제 문제와는 다를 수 있습니다.

 

데이터셋 

문제 데이터셋은 아래와 같이 먼저 생성 하세요. 실제 시험장 데이터셋이 없어 데이터셋을 만드는 코드입니다.

 

문제1

 

데이터셋 출처 : https://archive.ics.uci.edu/dataset/851/steel+industry+energy+consumption

 

UCI Machine Learning Repository

This dataset is licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) license. This allows for the sharing and adaptation of the datasets for any purpose, provided that the appropriate credit is given.

archive.ics.uci.edu

링크에서 csv를 다운바고 다운로드 받고 문제는 data1.csv를 사용

import pandas as pd
import numpy as np
df1 = pd.read_csv('Steel_industry_data.csv')
df1 = df1.iloc[:,:-4].copy()
df1.columns = ['date','kWh','LaCR','LeCR','CO2', 'LaCPF','LeCPF']
df1.to_csv('data1.cav', index=0)
df1.head()

문제1 데이터셋

문제2

데이터 출처 : https://www.data.go.kr/data/15126430/fileData.do

# 문제2 데이터셋
# https://www.data.go.kr/data/15126430/fileData.do#tab-layer-file 에서 파일 다운로드 후 가공
import numpy as np
import pandas as pd
df = pd.read_csv("한국동서발전(주)_제주 기상관측 및 태양광 발전 현황_20221231.csv", encoding='euc-kr')
# Extract only the rows where the date is the 31st
df['일시'] = pd.to_datetime(df['일시'])
df = df[df['일시'].dt.month.isin([1,3,5,7,8,10,12])]
df['발전소명'] = df['일시'].dt.month.map({1:'A',3:'B',5:'C',7:'D',8:'E',10:'F',12:'G'})
df['태양광 설비용량(MW)'] = df.groupby('발전소명')['태양광 설비용량(MW)'].transform('first')
def make_na(x):
    np.random.seed(1234)
    na_index = np.random.choice(x.index, 5, replace=False)
    x.loc[na_index] = np.nan
    return x
df.loc[:,['강수량(mm)','일조(hr)']] = df[['강수량(mm)','일조(hr)']].apply(make_na)
df['년월일'] = df['일시'].dt.to_period('D')
df['시간'] = df['일시'].dt.hour

# Pivot table
data2_1 = df.pivot_table( index=['발전소명', '년월일','태양광 설비용량(MW)'],   columns='시간',  values='태양광 발전량(MWh)').reset_index()
data2_1.columns.name = None
data2_1.columns = ['발전소명', '년월일','설비용량'] + [f'{i}시' for i in range(24)]
data2_2 = df.iloc[:,:8].reset_index(drop=True)

data2_1.to_csv('data2_1.csv', index=0)
data2_2.to_csv('data2_2.csv', index=0)

 

data2_1

문제2 첫번째 데이터셋

data2_2

문제2 두번째 데이터셋

 

문제3 : 아래 파일을 data3.csv로 저장하세요.

 "https://raw.githubusercontent.com/selva86/datasets/master/BostonHousing.csv"

 

 

문제4 : 아래 파일을 data4.csv 로 저장하세요.

문제5 : 코드를 실행하세요.

import numpy as np
import pandas as pd

np.random.seed(42)
male_salaries = np.random.normal(loc=70000, scale=5000, size=25)
female_salaries = np.random.lognormal(mean=np.log(60000), sigma=0.4, size=25)
data = pd.DataFrame({
    'Gender': ['Male'] * 25 + ['Female'] * 25,
    'Salary': np.concatenate([male_salaries, female_salaries])
})
data.to_csv('data5.csv', index=0)

 

ADP32 회

문제1 철강산업 에너지 소비 예

1-1 전처리

  • date는 "일/월/년 시:분"로 구성된 데이터이다. date를 "년/월/일 시:분" 형식으로 변환하고, date변수에서 아래 파생변수를 생성하시오.
  • date에서 월만 추출하여 Month 변수를 생성하시오.
  • date에서 일만 추출하여 Day 변수를 생성하시오.
  • 자정에서 지난 분을 계산하여 NSM변수를 생성하시오.
    예를 들어 14시 이면 NSM의 값은 840 이다.
  • 2018-01-01을 월요일로 요일에 해당하는 3자리 문자로 된 DoW 변수를 생성하시오.
  • 주말 여부를 나타내는 Weekend 범주형 변수를 생성하시오. 주말은 1, 평일은 0
  • Month, Day, NsM의 합이 11의 배수이고 22의 배수가 아니면, 1, 그 이외의 값은 0인 파생변수 ind11을 생성하시오.
  • Month, Day, NsM의 합이 22의 배수가 이면 1, 그 이외의 값은 0인 파생변수 ind22을 생성하시오.
  • Kwh컬럼의 값이 8 초과일 경우 1 그 외의 값은 0 인 파생변수 kWh8을 생성하시오.

1-2 위 전처리한 데이터를  시각화를 포함한 EDA를 실시하라.

1-3 데이터셋을 아래와 같이 분할하시오.

Kwh8를 예측하는 분류 모델을 2개 수행 후 성능을 비교 하시오.
  • 가급적 하이퍼 파라미터를 사용하지 않는 모델을 사용하시오.
  • 입력변수 : Kwh8과 Kwh를 제외한 변수
  • 목표변수 : KwH8
2개 분류모델의 혼동행렬 결과를 비교하시오.

1-4 Kwh8를 예측하는 회귀 모델 2개 수행 후 성능을 비교 하시오.

  • 입력변수 : Kwh8과 Kwh를 제외한 변수
  • 목표변수 : KwH
  • 회귀 모델은 결과를 비교하시오.

1-5 아래 두 조건으로 데이터를 추출하여 회귀 모델링을 수행 후 1-4과 성능을 비교하라

  • Kwh8 값이 1인 데이터만 추출 후 Kwh 예측하시오.
  • Kwh8 값이 0인 데이터만 추출 후 Kwh 예측하시오.
    두 결과를 1-4 결과와 비교하여 설명하시오.

 

문제2 : TODO

데이터설명
df2_1.csv : 태양광 발전량 예측을 위해 1시간 주기  전력거래소의 태양광 설비 및 발전량 데이터이다.
df2_2.csv ; 일시변 기상청의 종관기상관측, 전운량, 기온, 강수량, 일사량데이터이다.

2-1 아래 조건들로 전처리를 수행하시오.

발전량 데이터를 발전기명, 일자 시각별, 설비용량과 발전량으로 변환하시오.

기상데이터의 강수량과 일조량의 결측치를 0으로 대치하시오.
기상데이터의 기온의 결측치를 전과 후의 평균갑으로 대치하시오.
발전량 데이터와 기상데이터를, 기상데이터의 일시 시준으로 합쳐 새로운 데이터셋을 생성시오.
2-2 전처리가 완료된 데이터셋을 이용해 EDA를 수행하시오.
2-3 아래 조건으로 데이터를 분할 하시오.
발전소 A의 데이터만 사용하시오.
9시에서 18시 사이의 데이터만 사용하시오.
2020년, 2021년 데이터를 이용하여 train데이터 셋을 만드시오.
2022년도 데이터를 이용하여 test데이터셋을 만드시오.
2-4 발전량을 종속변수로 하여 2개의 회귀모델을 수행하고 결과를 비교하시오.

 

 

문제3 보스턴 하우징 집값 예측

아래 데이터셋을 이용해 문제를 풀이하세요.

3-1 데이터셋이 선형 회귀가정을 만족하는지 검토하시오.

3-2 집값과 독립변수 간의 상관관계를 검토하시오.

3-3 데이터셋이 선형회귀의 가정을 만족하지 않을 경우 문제점과 해결방안을 설명하시오.

3-4 해결방안 중 1개를 적용하여, 선형회귀의 문제점이 해결되는지 확인 하시오.

 

 

문제4 mtcars

아래 데이터셋을 이용하여 문제를 풀이하세요.

4-1 cyl랑 gear 컬럼으로 교차테이블을 만드시오.

4-2 cyl, gear 범주형 변수간 차이가 존재하는지 귀무가설과 대립가설을 작성하시오.

4-3 가설을 검정하고 결과를 설명하시오.

 

문제5 남녀 월급차이 검정

Salay.csv 를 사용하여 풀이하시오.

5-1 남여의 급여 데이터가 정규성을 만족하는지 확인하시오.

5-2 위 결과에 맞는 남녀 급여 차이가 있는지 가설을 설정하시오.

5-3 가설에 따른 검정을 수행하고, 검정통계량과 p-value를 구하고 결과를 설명하시오.

+ Recent posts