본문 바로가기
Hobby/Hobby_4 - Coding

[자격증] 빅분기 실기 - 7. 첫 실기시험 후기

by 와우멍 2021. 6. 21.

안녕하세요 와우멍입니다.

오늘은 빅데이터분석기사 실기 1회같은 2회 시험 후기를 작성하겠습니다.

(빅데이터분석기사 1회는 코로나로 인해 취소)


으허허허 시험이 끝났습니다. 오랜만에 잠시 숨돌리는 틈이라 늦잠도 자고 낮잠도 자고 행벅하네여.

또 다음 시험을 준비하기 전까지, 기분 좋게 후기를 호다닥 정리해보겠습니다.

거두절미하고 가시죠.

 


단답형 - 27점/30점 예상

 빅분기 필기 공부할 때 괴로웠던 부분들(실제 코딩과 크게 상관없는)은 안나오고 전처리/ 모델링/ 평가 부분에서만 문제가 나왔습니다.  사실 코딩 부분도 준비가 미흡하다 생각해서 따로 복습할 시간이 부족했는데, 우연히 발견한 아래 이 어플이 큰 도움이 되었습니다. 자기전 5분 + 이동시간에 간간히 이거 풀다보니 '후진제거' '평균대치' '부스팅 vs 배깅' 포함해서 하도 안봐서 잊고있던 단어들 떠올릴 수 있었습니다. 짜투리시간 활용으로 이 어플 추천드립니당 (혹시나해서 말씀드리는거지만 제꺼는 물론이거니와 관련자도 아닙니당)

https://play.google.com/store/apps/details?id=com.ds.datamanimapp 

 

빅데이터시험대비 - Google Play 앱

현재는 빅데이터분석기사 실기 단답형 대비 퀴즈 어플입니다.

play.google.com

1 이상값 O
2 평균대치법 O
3 비지도학습 O
4 부스팅 O
5 하이퍼파라미터 O
6 Gradient boost O
7 과적합 O
8  -  (propagation 계산문제) X
9 후진제거법 O
10 roc O

작업형 제1유형 - 20~30점 / 30점 예상

 나름 기억을 떠올리면서 코드를 적어봤지만, 기억에 의존해서 적은거니 정확한 것은 아니니 참고로만 봐주세요! 분명 문제풀 때는 pandas 함수보다는 numpy 함수를 많이 썼던 것 같은데, 더듬더듬 다시 만들어보니까 

1.  컬럼1에서 상위 10개 값들을 상위 10번째 값으로 대체한 후, 컬럼2가 80이상인 데이터에 대한 컬럼1의 평균값 계산: 5.75

1
2
3
4
5
import pandas as pd
 
= pd.read_csv('data/데이터.csv')
a['컬럼1'].sort()[-10:] = a['컬럼1'].sort()[-10]
answer = a['컬럼1'][a['컬럼2']>=80].mean()
cs

4 Line: sort( )함수를 적용하면 오름차순으로 정리가 되기 때문에 뒷행으로 갈수록 큰값입니다. 즉, 가장 큰 마지막 10개 행의 값 [-10:]을 10번째로 큰 값 [-10]으로 대체

5 Line: '컬럼2'가 80이상인 부분의 '컬럼1'의 값들을 찾아서 mean값을 answer로 저장


2. 데이터 전체에서 80% 추출 후 결측치들을 median으로 채우고 표준편차의 변화값: 1.975

1
2
3
4
5
6
7
import pandas as pd
 
= pd.read_csv('data/데이터.csv')
= a[:len(a)*0.8
prev_std = a['컬럼'].std()
aft_std = a['컬럼'].fillna(a['컬럼'].median()).std()
answer = abs(aft_std - prev_std)
cs

4 Line: 데이터 중 80%만을 slicing

5 Line: 현 상태에서의 '컬럼'열의 표준편차를 계산 후 저장

6 Line: '컬럼'열의 결측치들을 median값으로 대체한 후, 표준편차를 계산 후 저장

7 Line: 결측치 대체 전과 후의 표준편차 차이를 저장


3. Outlier 추출 후 합계: 31707

1
2
3
4
5
6
7
import pandas as pd
 
= pd.read_csv('data/데이터.csv')
dum = a.descibe()
cut_high = dum['50%'+ 1.5*(dum['75%']-dum['25%'])
cut_low = dum['50%'- 1.5*(dum['75%']-dum['25%'])
answer = a['컬럼'][(a['컬럼'< cut_low)|(a['컬럼'> cut_high)].sum()
cs

4 Line: 저는 quantile( )함수를 쓰는 것보다, 평균/표준편차/사분위수 등을 한번에 뱉어주는 그냥 describe( ) 함수를 선호합니다. 

5~6 Line: 이상치의 하한값/상한값을 계산

***2021.12.21 수정: 차형준님 지적 감사합니다
IQR이용할때는 75th percentile + 1.5*IQR이 상한선,  25th percentile - 1.5*IQR이 하한선입니다!


cut_high = dum['75%'+ 1.5*(dum['75%']-dum['25%'])
cut_low = dum['25%'- 1.5*(dum['75%']-dum['25%'])

7 Line: 하한값보다 작거나 상한값보다 큰 값들의 합을 계산 후 저장


작업형 제2유형 - 최소 10점 이상

 예상(혹은 기도)했던 대로 회귀/분류 문제가 나왔습니다. 예제와 거의 같다고 할 수 있는 분류문제였습니다.

 데이터셋은 아래 캐글의 E-Commerce Shipping Data에다가 정시 배송 여부를 0/1로 추가해놔서 train set을 구성해놨었습니다. 최종적으로는 test set에 대해서 제때 도착했는지를 확률로 뱉어서 제출하는 문제였어요.

https://www.kaggle.com/prachi13/customer-analytics

 

E-Commerce Shipping Data

Product Shipment Delivered on time or not? To Meet E-Commerce Customer Demand

www.kaggle.com

 

train set을 쪼개서 우선 모델을 세우고 검증 결과를 확인해봤습니다.

SVM과 XGBoost를 이용해서 roc-auc score를 확인하며 전처리를 다시했습니다.

 나중에 다시 추가하겠습니다. 

 


 단답형과 제1유형을 다풀고 넘어온 시간이 1시간이 채 안됐을 때라, 마음 편하게 시작했는데.. 데이터 보니 손볼 부분이 많더라구요.. 그리고 이것저것 테스트하는 과정에서 이전에 포스팅한대로 R코드 작성하는 부분에 메모를 옮겨놨었는데ㅠㅠ 이게 다른 페이지 갔다오면 초기화가 되면서 날아가는 바람에... 의욕이 확 꺽였었습니다.. ㅋㅋㅋㅋ 되도록 그냥 메모장을 이용하는 것으로 추천드립니당.

 

그럼 다음에는 빅데이터분석기사 필기와 정처기 후기도 한 번 준비해보겠습니다.

모두 수고하셨습니다.!! 혹시 다음 차수 공부를 위해서 오신 분들이라면 화이팅이구요!!

 

댓글