20회 ADP 실기 python 후기


20회 ADP 실기 python 후기 입니다.

일단 19회 부터 가상 서버 방식으로 변경이 되었고,

20회 부터는 원래 공개되었던 과목이 공개가 되지 않는 방식으로 변경 되었습니다.

그리고 가상 서버 환경 때문인지 인터넷이 열리는 것 때문에 패키지 설치도 허용해줬습니다.

자세한 사항은 해당 링크 에서 adp 실기 검색하시면 나옵니다.

홈페이지에 예시로 각 문제별로 csv, pdf 내라고 되어있는데, 예시니까 무시하시고

그냥 워드로 답안지 편집하고 pdf로 변환한다 이것만 생각하시면 됩니다.

그거 말고 내는거 하나도 없었습니다. (그래놓고 3번은 코드 제출하라고해서 벙찜)

그리고 jupyter notebook으로 하면 내보내기 할 때, pdf 파일로 간단하게 나오는데

nbconverter 뭐로 500 에러가 나왔습니다. 이건 설치 안 된듯 합니다.

하시려면 html로 변환하고 인쇄할 때, pdf로 변환하는거 있는데 그거 쓰시면 됩니다.

아니면, 저처럼 워드로 개고생하면서 캡처하고 내용 적으시면 됩니다…

가장 큰 변화는 일단 패키지 설치이지만, 하다가 오류 생기면 본인 책임이라는데

이번 시험을 보고 느낀거는, 이런 패키지 설치해서 생기는 문제를 최소한으로만 수집해보려고 그랬는지

난이도가 좀 낮았다고 생각됬습니다.

다른 분들 블로그 보고 나온 문제의 난이도보다는 낮았습니다.

이렇게 말씀드리는 이유는 이번에는 일단 텍스트마이닝, ARIMA를 활용한 시계열 분석은 안나왔습니다.

단, 시계열 분석은 안나오긴 했지만 문제에 날짜 데이터를 활용하는 것은 모두 녹아 있었습니다.


문제는 데이터마이닝, 통계분석 반반 이었지만

통계분석에서 데이터를 2개 주어주고 각각 분석을 하게 해서 사실상 3문제였습니다.

데이터는 모든 문제에 최소한 str 형식의 yyyy-mm-dd 날짜 데이터는 들어있었기에,

이를 활용한 파생 변수 생성을 왠만하면 요구했습니다.

(문제에 안 적혀있더라도, 자연스럽게 써야 했습니다.)

(ex - pd.get_dummies, or 요일 구하기 등)


1번 문제의 경우, 데이터 마이닝 영역이었는데

주어진 데이터를 모델링 하기 충분한 상태인지 확인하고

데이터 분할 방법(ex train_test_split, 시계열에서의 샘플링)이 여러가지 있는데 이를 제시한 다음

rf, svr로 예측/개선 후 평가 및 변수 중요도 시각화도 하고 모델 끼리 비교하는 방식이었습니다.

무엇으로 평가할지도 선택하였어야 됬고(ex - rmse, mae 등), 그 이후에 최종 모형을 선택한 이유와 개선 방안도 요구했습니다.

일단 여기서 python이 불리했던 점이 하나 있었는데

randomforest는 변수 중요도를 자동으로 계산해주는데

SVM에서는 kernel을 linear로 하지 않는 이상 변수 중요도를 제공을 안합니다.

이거는 나중에 검색해봐서 안 사실이었고, 시험에서는 속도를 빠르게 하려고 rbf를 했는데

그랬더니 .coef에서 빈 값이 나오길래 안되는 줄 알았는데 linear를 써야지만 나오는 옵션이더군요

어쩔수 없다고 생각했습니다.ㅠㅠ


2번 문제는 군집 분석 수행을 하고 군집별로 히트맵을 그리는 방식인데

가장 많이 활용되는건 groupby와 pivot이었습니다.

일단 히트맵을 자주 그리는 예시가 보통 상관 분석인데, corr로 나오는 데이터 형태가 pivot table로 구할 때와 똑같습니다.

flight data로 예시가 나온 것을 확인해보시고 다른 데이터로 피벗 테이블 아무거나 만들어보시면 이해가 되실겁니다.

날짜 데이터 형식은 str로 위와 똑같고, 여기서 가공을 해서 하루치 합계를 구한 다음에

이를 활용해서 5개의 군집으로 그룹화를 진행합니다.

그 이후에, 요일별(세로), 시간+간격(가로)을 합치고 이에 해당 되는 평균 값들을 채우고

5개 군집별로 히트맵을 그리면 완성입니다.

groupby를 한 다음에 바로 히트맵 그리는게 안되서 pivot table로 변환 한 다음에 해야됬습니다.

개인적으로 오래걸렸는데, 일단 groupby하고 pivot으로 변환하는거 알아내는데 오래걸리고

애초에 문제를 이상하게 설명해놔서 오래걸렸습니다.


3번 문제는 사실상 통계분석이랑 데이터마이닝 합쳐놨습니다.

날짜 형식이 포함된 데이터를 하나 주고, 알아서 예측을 한 다음에

rmse, R2, 정확도로 예측하라는 문제였습니다.

진짜 적혀있던게, 파생변수 추가 가능, 학습-시험 비율은 랜덤으로 7:3 이정도가 끝이었습니다.

저도 그래서 1번에 있던 rfregressor 가져와서 쓰고 바로 결론 도출했습니다.

코드를 첨부하라고 하라고도 적혀있는데, 그냥 코드에서 head 같은 부분만 다 빼서 워드 마지막부분에

구분해서 다 적어두고 결과만 넣어놨습니다.

여기서 정확도는 좀 이야기나 나올 수 있는데, 이 문제는 분류가 아니라 예측값입니다.

예측 값에서 정확도? 이럴수 있는데 문제에서 어떻게 정확도 계산하는지는 적어줬습니다.

단, 구하는 방식에서 나눗셈이 들어가는데 0/0을 하면 nan이 나오는데 이런건 어떻게 하라고 안 적어줬더군요

그래서 0/0 case가 나오면 0/(0+0.00001)로 해서 정확도 높여서 제출 했습니다.

이렇게 한 이유가 R2는 0.9가 넘는데 정확도는 문제 그대로 하면 30퍼 근처가 나옵니다…

제대로 예측을 한게 nan 취급이 되서 이건 아니다 싶어서 일단 했습니다. 한 것과 안 한 것 차이가 2배가 났습니다…

이것 때문에 점수 낮게 나왔다고 생각되면, 일단 무조건 재검토 요청할 듯 합니다.


결과는 한 달 후에 나오긴해서 그 동안은 별 생각을 안하고 있을듯 하지만,

시험 일주일 전부터 사실상 손 놓고 있었던 시험이라 일단 다 푼것에 만족은 하고 있습니다.

SVR에서 변수 중요도 못구하는 것과, 3번 문제의 정확도 구하는 방식의 모호함을 제외하고는

그나마 멀쩡한 편에 속하는 문제들로 되어있었던 점도 컸던것 같습니다.

혹시라도 시험과 관련해서 질문을 주실 분이 있으시다면, about쪽에 있는 메일이나 오픈카톡을 통해서 연락 주세요!

20회 ADP 실기를 준비하면서 만든 notebook 파일에 대한 깃허브 링크 입니다.