제 24회 ADP 실기 복기

·2022년 3월 29일
0
post-custom-banner

나는 얼마나 준비되어 있는 사람이었는가?

1번 떨어진 경험이 있어 스터디를 구해 약 4개월 간, 주 1회 2시간씩 코드를 공유하는 시간을 가졌다.
주로 공부한 책에는 '파이썬 머신러닝 완벽 가이드', '파이썬 라이브러리를 활용한 머신러닝', '파이썬 비즈니스 통계분석' 이 있다.
그리고 ADP 범위를 주제로 요약, 코드 정리하여 제본한 결과 무려 700페이지가 나왔다. 그럼에도 시험장에 가보니 부족함을 느꼈다..(..)
문제를 보면 어느 점을 물어보는 건지 파악할 수 있고, 그에 따른 세부 플랜이 머리에 착착 그려지는 정도로 시험장에 향했다.

문제를 어떻게 접근하고 풀어냈는지?

1번,2번 기계학습 문제 데이터(추정)

https://archive.ics.uci.edu/ml/datasets/student+performance
: absence(결석일수)를 예측하는 문제

1-1. EDA ,전처리

describe()함수로 살펴보니 몇 개의 결측치가 있었고, 변수에 이상치가 있음을 확인할 수 있었다. 종속변수를 히스토그램으로 그려봤을 때 상당히 왼쪽으로 크게 치우쳐져 있어 정규화가 필요하다고 판단했다. 수치로 입력은 되어있지만, 데이터의 성질로 보아 카테고리형이 적합한 칼럼이 다수 있어 더미화가 필요했다.
-> 당시에는 y값 이상치를 살펴볼 생각을 못했다. 시험 후 스터디 분들과 대화해보니 종속변수에 상당한 이상치가 있었다고 한다. 사실 이 부분에 대해 고민이 많다. 시험을 떠나 분석을 할 때, 물론 실제로 값이 잘못 입력되는 경우도 있겠지만 세상에는 정말 이상치로 보이는 실제값이 있을 수도 있을텐데...이를 어떻게 구분해야되는 지 고민을 해봐야겠다.

1-2. 실제로 전처리하고 그 변화를 시각화

데이터 자체가 약 390개로 적다보니 결측치 삭제보단 clip 함수를 이용해 조정하는 방식을 택했다. 전과 후의 박스플롯 시각화를 제시하였다.
y값을 정규화하기 위해 로그화를 진행하였다. np.log1p를 사용하였다.
-> 사실은 처음에 np.log 함수를 사용하여 돌렸는데 -inf 값이 포함되어 에러가 났다. -inf가 뭔지 몰랐는데 데이터를 살펴보니 원래 0인 값들을 말하는 것이었다. 로그함수의 경우 x가 0인 경우 y가 무한대의 값을 가지게 된다. 그래서 x + 1 을 해줘서 문제를 해결해야 하는데, np.log1p 함수가 이 역할을 한다고 한다. 그러면 y값이 -inf -> 0 으로 바뀌게 된다고 한다. (새로운 사실을 배웠다!!)

2-1. 예측 모델을 2개 제시하고 선택한 근거 설명

나는 선형회귀와 앙상블 랜덤포레스트 회귀를 제시하였다. 선형회귀는 해석력이 좋기때문에 추후 모델을 발전시키는 데 도움을 줄 인사이트를 얻을 수 있다 생각해서 모델링을 위한 모델(?)같은 느낌으로 선택하였다. 앙상블 랜덤포레스트 회귀는 강력한 일반화 성능을 보이기때문에 선택하였다.

2-2. 지표 고르고 설명해라

MAE를 선택하였다.

2-3. 지표를 구하고 시각화

sklearn.metrics에 있는 함수를 사용해서 점수를 냈다.
시각화는 하지 못했다.
-> mae, mse를 어떻게 시각화할 지 고려한 적이 없어 당황했다. 자료를 찾아봐야할 듯 하다.

2-4. 일상 생활에서도 적용시킬 수 있는지 논리적으로 설명

일상 생활에서 적용하기 위해선 얼마나 일반화가 되었는지를 증명하는 것이 중요하다고 생각했다. 그렇기 때문에 교차검증을 통해 이를 설명하고 싶었다. 타임아웃으로 방법론만 제시하고 끝냈다.

2-5. 어떻게 더 최적화 시킬 수 있을지 구체적인 방안

2-5에서 나온 결과를 토대로 설명하면 좋았겠지만 시간 관계상 포괄적으로 적용될 수 있는 말을 적었다. 그리드서치와 같은 과정을 통해 파라미터 최적화가 필요하다 작성하였다.

3번,4번,5번 통계

3-1. 주어진 데이터를 직접 만들고, 가변수 처리하여 회귀변수가 유의한지 설명하라

get_dummies()를 사용하여 가변수를 처리하고 stats 패키지 사용하여 모델 생성하였다.
-> 변수가 유의하지 않다면 어떻게 대응해야할 지 생각해보면 좋을 것 같다.

3-2. 회귀모델이 유의한지 설명하라

qqplot, shapiro를 통해 잔차의 정규성을 검정하였다.
잔차 표준화를 시각화하여 등분산성을 검정하였다.

4-1. 진단키트 결과 양성이 나왔을 때, 진짜 그 병에 걸렸을 확률은? 베이즈 정리를 사용하여 계산하라. (유병율 = 0.01)

감염비감염
양성37010
음성15690

P(D) = 실제 코로나일 확률 = 0.35 (385/1085)
P(T) = 키트 결과 양성일 확률 = 0.35 (380/1085)

0.35 X 0.01 / 0.035 X 0.01 + 0.35 X 0.99

-> 쓰고나니 무언가 잘못 됐다는 걸 깨달았다..

5-1. 9개의 표본 95% 신뢰구간 구하기

패키지가 있는지를 몰라서 직접 계산했다. scipy.stats.sem()을 이용하여 표준오차를 구하고..이렇게 저렇게 요렇게
-> scipy ttest에 samp1 에서 정규분포 파라미터를 넣어줘서 풀 수 있다고 한다..그리고 인터벌 함수를 쓰면 짠..~

5-2. 표준편차가 0.4였을 때 95% 신뢰구간

느낀 점(패착요인)

시험을 위한 분석을 했기 때문이라고 생각한다. 간단히 전처리만 해도 성능이 좋은 데이터만 다뤄와서 그런지 모델을 돌렸을 때 r2값이 마이너스가 나와서 멘탈이 와자작 털렸다. 성능이 안 좋으면 안 좋은 대로 문제의 원인을 찾고, 보완 방법을 작성했어야 했다. 그런데 나는 시험에 그런 데이터가 나오지 않았을 거라 생각하며 내가 자꾸 무언가를 잘못했다는 생각을 했다. 시험이지만 정말 분석을 하는 것처럼 편견을 가지지 않고 임해야겠다. 추가로 세상에는 수월한 분석보단 앞이 막막한 분석이 더 많으니 더 많이 다양하게 실패해야겠다!

앞으로의 계획

이번에 떨어지게 된다면, 유효기간 만료라 필기부터 다시 시작해야 한다. 데이터 분석이 자격증이 중요한 직무는 아니지만, 데이터를 다채롭게 보는데도 도움이 되는 것 같아서 꼭 따고 싶다. (사실 오기다. 해내고 말 것이다..!!) 필기부터 시작하면 오히려 좋아. 더 열심히 꼼꼼히 출제가 생각도 못한 부분도 빈틈없이 공부해야지.

  • 해당 내용은 시험 이후 복기한 내용으로 실제 시험과 일부 다를 수 있습니다.
profile
배고픈 사람
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 5월 5일

나이브 베이즈 확률에서 0.35 X 0.01 / 0.035 X 0.01 + 0.35 X 0.99 이 부분은

0.35 X 0.01 / (0.35 X 0.01) + (0.014 X 0.99) 가 되어야 하는것이 아닌가요??

답글 달기