안녕하세요.
빅데이터분석기사 취득 이후에, 실제 데이터를 가지고 꼭 한번 분석하는 시간을 가져야겠다는 생각을 했었는데요. 시중에 나와있는 머신러닝 모델을 학습시키기에 최적화된 데이터들이 아닌 실제 발생하는 데이터를 가지고 해보고 싶다는 생각이 있었습니다.
다만, 제가 개인적으로 몇천개의 데이터를 모을 수는 없기에 연구실에서 맡고 있는 과제들에서 해볼만한 데이터가 있나 살펴보던 중 괜찮은 데이터셋이 있어서 그걸 가지고 머신러닝 모델을 만들고 있습니다.
국가과제 데이터여서 데이터에 대한 세부사항을 설명하기보다는, 전체적인 데이터의 특성만 설명하고 실제 어떻게 모델을 만들었으며 모델의 성능과 성능을 향상시키기 위해 어떻게 하고 있는지 기록하면서 아직 이 분야에 초보자이기에 고수분들의 피드백도 받고자 포스팅합니다.
1. 데이터 특성
제가 예측하고자 하는 y 값의 분포를 오름차순 정렬한 뒤 시각화하였습니다. 딱 봐도 평범한 데이터는 아닌 것을 알 수 있습니다. 좌측은 전체 데이터, 우측은 outlier 가 조금 있는 것 같아 20,000 이상은 자른 뒤 다시 확인해본 것입니다.
y 값에 대해 간단하게 설명드리면 어떤 균이 존재하는 정도를 정량한 것입니다. 그래서 처음에는 회귀를 사용해서 균이 얼마나 있는지 예측하는 모델을 만들어보고자 하였습니다.
2. 회귀모형
데이터를 전처리한 부분은 컬럼 등을 언급하기 애매해서 생략하겠습니다.
y 값의 mean, median 은 각각 65.27, 0.0 입니다. 위에서 확인하였듯이 0 을 갖고 있는 데이터가 상당히 많습니다.
전체 데이터를 80%, 20% 로 분리한 뒤 아무 하이퍼파라미터를 설정하지 않고 randomforestregressor 사용하여 학습시킨뒤 MSE, RMSE, MAPE 를 확인하였습니다.
아웃라이어를 전처리하지 않았기 때문에 MSE 값이 많이 튀는 것을 볼 수 있고, RMSE 도 평균이나 중간값 등을 고려하면 좋은 수치는 아닌 것 같습니다.
저는 회귀 모델의 성능을 확인할 때 MAPE 가 직관적으로 성능을 보여주기 때문에 선호하는 편인데요, MAPE 값이 많이 이상합니다. 확인해보니 y 값이 0 인 경우 분모가 작아지면서 극단적인 큰 값이 나타날 수 있다고 합니다.
아주 작은 수인 epsilon 을 분모에 더해줌으로써 이를 피할 수 있다고 합니다.
그래도 안되네요.. ㅜ 조금 작아지긴 했지만 택도 없습니다. 그래서 예측한 결과를 직접 확인하기로 하였습니다.
ㅎㅎ; 엉망진창입니다. 좋은 모델이라면 거의 모든 값이 0이어야 하는데 0이 하나도 없습니다. 선형회귀를 사용하지 않았는데도 14.37 부근으로 선형회귀한것같은 결과가 나오네요. 데이터가 회귀하기에 좋은 데이터가 아닌 것 같았습니다. 물론 여기서 다른 것들을 추가적으로 해볼 수 있었겠지만 저는 다른 방향으로 선회하기로 하였습니다.
회귀가 아닌 분류를 통해서 균주가 존재하는지, 존재하지 않는지를 예측하는 모델을 만들기로 하였고 그 이유는 실제 과제의 목적과도 연결되어있는데 균이 얼마나 있는지 정량하는 것은 크게 의미를 갖지 않기 때문입니다.
특정 균주가 존재하는지 존재하지 않는지에 대한 스크리닝을 목적으로 데이터를 수집한 것이기 때문에 분류모델을 만들어도 목적을 달성하는데에 문제가 없다고 생각하였습니다.
다음 포스팅에서 분류 모형을 가지고 와서 다시 성능을 확인해보겠습니다.
# reference
'[머신러닝]' 카테고리의 다른 글
[머신러닝] 모델에 학습시키기 위한 마이크로바이옴 데이터의 형식 (0) | 2023.11.29 |
---|---|
[머신러닝] CNN 을 사용한 마이크로바이옴 데이터의 분류 (T2D vs healthy) (1) | 2023.11.26 |
실제 데이터로 머신러닝 모델 만들기 : 2 (1) | 2023.09.17 |
microbiome data 에서 explainable AI 의 사용 (SHAP) (0) | 2023.09.04 |
제 6회 빅데이터분석기사 자격증 취득 후기 (0) | 2023.08.24 |