1번 떨어진 경험이 있어 스터디를 구해 약 4개월 간, 주 1회 2시간씩 코드를 공유하는 시간을 가졌다.
주로 공부한 책에는 '파이썬 머신러닝 완벽 가이드', '파이썬 라이브러리를 활용한 머신러닝', '파이썬 비즈니스 통계분석' 이 있다.
그리고 ADP 범위를 주제로 요약, 코드 정리하여 제본한 결과 무려 700페이지가 나왔다. 그럼에도 시험장에 가보니 부족함을 느꼈다..(..)
문제를 보면 어느 점을 물어보는 건지 파악할 수 있고, 그에 따른 세부 플랜이 머리에 착착 그려지는 정도로 시험장에 향했다.
https://archive.ics.uci.edu/ml/datasets/student+performance
: absence(결석일수)를 예측하는 문제
describe()함수로 살펴보니 몇 개의 결측치가 있었고, 변수에 이상치가 있음을 확인할 수 있었다. 종속변수를 히스토그램으로 그려봤을 때 상당히 왼쪽으로 크게 치우쳐져 있어 정규화가 필요하다고 판단했다. 수치로 입력은 되어있지만, 데이터의 성질로 보아 카테고리형이 적합한 칼럼이 다수 있어 더미화가 필요했다.
-> 당시에는 y값 이상치를 살펴볼 생각을 못했다. 시험 후 스터디 분들과 대화해보니 종속변수에 상당한 이상치가 있었다고 한다. 사실 이 부분에 대해 고민이 많다. 시험을 떠나 분석을 할 때, 물론 실제로 값이 잘못 입력되는 경우도 있겠지만 세상에는 정말 이상치로 보이는 실제값이 있을 수도 있을텐데...이를 어떻게 구분해야되는 지 고민을 해봐야겠다.
데이터 자체가 약 390개로 적다보니 결측치 삭제보단 clip 함수를 이용해 조정하는 방식을 택했다. 전과 후의 박스플롯 시각화를 제시하였다.
y값을 정규화하기 위해 로그화를 진행하였다. np.log1p를 사용하였다.
-> 사실은 처음에 np.log 함수를 사용하여 돌렸는데 -inf 값이 포함되어 에러가 났다. -inf가 뭔지 몰랐는데 데이터를 살펴보니 원래 0인 값들을 말하는 것이었다. 로그함수의 경우 x가 0인 경우 y가 무한대의 값을 가지게 된다. 그래서 x + 1 을 해줘서 문제를 해결해야 하는데, np.log1p 함수가 이 역할을 한다고 한다. 그러면 y값이 -inf -> 0 으로 바뀌게 된다고 한다. (새로운 사실을 배웠다!!)
나는 선형회귀와 앙상블 랜덤포레스트 회귀를 제시하였다. 선형회귀는 해석력이 좋기때문에 추후 모델을 발전시키는 데 도움을 줄 인사이트를 얻을 수 있다 생각해서 모델링을 위한 모델(?)같은 느낌으로 선택하였다. 앙상블 랜덤포레스트 회귀는 강력한 일반화 성능을 보이기때문에 선택하였다.
MAE를 선택하였다.
sklearn.metrics에 있는 함수를 사용해서 점수를 냈다.
시각화는 하지 못했다.
-> mae, mse를 어떻게 시각화할 지 고려한 적이 없어 당황했다. 자료를 찾아봐야할 듯 하다.
일상 생활에서 적용하기 위해선 얼마나 일반화가 되었는지를 증명하는 것이 중요하다고 생각했다. 그렇기 때문에 교차검증을 통해 이를 설명하고 싶었다. 타임아웃으로 방법론만 제시하고 끝냈다.
2-5에서 나온 결과를 토대로 설명하면 좋았겠지만 시간 관계상 포괄적으로 적용될 수 있는 말을 적었다. 그리드서치와 같은 과정을 통해 파라미터 최적화가 필요하다 작성하였다.
get_dummies()를 사용하여 가변수를 처리하고 stats 패키지 사용하여 모델 생성하였다.
-> 변수가 유의하지 않다면 어떻게 대응해야할 지 생각해보면 좋을 것 같다.
qqplot, shapiro를 통해 잔차의 정규성을 검정하였다.
잔차 표준화를 시각화하여 등분산성을 검정하였다.
감염 | 비감염 | |
---|---|---|
양성 | 370 | 10 |
음성 | 15 | 690 |
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
-> 쓰고나니 무언가 잘못 됐다는 걸 깨달았다..
패키지가 있는지를 몰라서 직접 계산했다. scipy.stats.sem()을 이용하여 표준오차를 구하고..이렇게 저렇게 요렇게
-> scipy ttest에 samp1 에서 정규분포 파라미터를 넣어줘서 풀 수 있다고 한다..그리고 인터벌 함수를 쓰면 짠..~
시험을 위한 분석을 했기 때문이라고 생각한다. 간단히 전처리만 해도 성능이 좋은 데이터만 다뤄와서 그런지 모델을 돌렸을 때 r2값이 마이너스가 나와서 멘탈이 와자작 털렸다. 성능이 안 좋으면 안 좋은 대로 문제의 원인을 찾고, 보완 방법을 작성했어야 했다. 그런데 나는 시험에 그런 데이터가 나오지 않았을 거라 생각하며 내가 자꾸 무언가를 잘못했다는 생각을 했다. 시험이지만 정말 분석을 하는 것처럼 편견을 가지지 않고 임해야겠다. 추가로 세상에는 수월한 분석보단 앞이 막막한 분석이 더 많으니 더 많이 다양하게 실패해야겠다!
이번에 떨어지게 된다면, 유효기간 만료라 필기부터 다시 시작해야 한다. 데이터 분석이 자격증이 중요한 직무는 아니지만, 데이터를 다채롭게 보는데도 도움이 되는 것 같아서 꼭 따고 싶다. (사실 오기다. 해내고 말 것이다..!!) 필기부터 시작하면 오히려 좋아. 더 열심히 꼼꼼히 출제가 생각도 못한 부분도 빈틈없이 공부해야지.
나이브 베이즈 확률에서 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) 가 되어야 하는것이 아닌가요??