2023. 6. 4. 20:21ㆍDATA PROGRAMMING/PYTHON
오늘은 학교 실습 시간에 주어진 데이터를 분류하는 모형을 만들어 보려고 한다. 데이터에 대한 정보를 보고 분류 모델을 설정할 전략을 짜고 실제로 코드를 작성하여 실습하고 수정해 나가는 과정에 대해서 다뤄 보겠다.
불균형한 클래스의 데이터 머신러닝 분류 모델
데이터 확인
Feature(입력 변수)가 1,000개, Train set의 두 클래스 원소의 개수가 10배 정도 차이 나는 데이터다. 우선 데이터를 보고 파악한 내용은 입력변수가 매우 많다는 것과, 클래스가 불균형하다는 것이다. 많은 입력변수를 모두 과하게 사용하려다 보면 오버피팅이나 시간이 너무 오래 걸린다는 문제점이 생길 수 있고, 클래스가 불균형하다면 정확도는 높게 나와도 Recall이나 Precision 값이 낮게 나올 수도 있다. 게다가 위 문제의 평가 척도가 정확도(Accuracy)가 아닌 F1-score(Recall과 Precision의 조화 평균값)이기에 클래스의 불균형이 평가 척도에 큰 영향을 끼칠 수도 있다는 점을 유의해야 할 것이다.
관련된 글 링크 : https://dd.honeyreviewer.com/7
머신러닝 분류 모델 평가 지표에 대한 모든 것
분류 모델 평가 분류 모델이란? 로지스틱 회귀는 '회귀'라는 이름을 가지고 있지만 일반적인 회귀 모형이 '예측'이라는 역할을 하는 대신 '분류'를 하는 모델이다. 분류(Classification)란 학습 데이
dd.honeyreviewer.com
파이썬을 이용한 머신러닝 모델링 과정
머신러닝 모델은 파이썬의 라이브러리 등을 사용해 간단하게 사용할 수 있다. 모델링을 위해 우리가 해야 할 일은 데이터의 상태를 보고 데이터를 적절하게 세팅하고 적당한 머신러닝 모델을 선택해 적용하는 일일 것이다. 대부분의 경우 데이터에 따라 어떤 세팅 혹은 어떤 모델이 높은 성능을 보일지 확실하게 알기는 어려우니 여러 모델을 적용해 가며 성능을 높이는 방향으로 조금씩 모델과 코드를 수정해 나가는 방법을 선택하는 것이 좋다.
csv파일을 불러와 변수에 저장해 준다.
분석의 편의를 위해 각 데이터 셋의 Index 열을 제외한다.
train 데이터를 통해 학습하고, 이를 test 데이터에 적용할 것이기 때문에 train 데이터를 target 열과 나머지 열(입력 변수)로 나누어 준다.
학습을 위해 데이터를 train 용 데이터와 test 용 데이터로 나누어 주고, 각 원소의 개수를 확인해 본다.
5000개의 데이터가 train용 4000개, test용 1000개로 나누어진 것을 확인할 수 있다.
우선 로지스틱 회귀 분석을 통해 데이터의 성능을 확인해 보자. 굉장히 낮은 정확도가 나왔다. 그 이유는 positive 클래스의 원소 개수가 상대적으로 매우 적기 때문이다.
실제로 negative를 기준으로 성능을 확인하면 높은 성능을 보여주는 것을 알 수 있다.
그렇다면 불균형한 class 문제를 해결할 방법이 필요하다. 그중 나는 Oversampling을 사용하려고 한다. Oversampling이랑 불균형한 샘플의 크기를 맞추는 기법이다. 적은 원소를 가진 class(Positive)의 크기를 많은 원소를 가진 class(Negative)의 크기에 맞춰주는 기법이다. 반대 방법으로 Undersampling이 있다.
Undersampling은 전체적인 원소의 개수가 줄어 클래스의 불균형 문제를 어느 정도 해결해 주며 소요 시간 또한 줄여준다는 장점이 있지만 Oversampling보다 성능이 떨어진다.
X와 y를 오버 샘플링한다.
다시 클래스 원소의 개수를 확인해 보면 적은 원소의 클래스의 크기가 많은 원소의 클래스의 크기에 맞춰짐으로써 전체적인 원소의 수가 증가한 것을 확인할 수 있다.
이번엔 모델의 성능을 좀 더 올리기 위해 로지스틱 회귀, Knn, 랜덤포레스트, ADA 모델을 하드 보팅 형식으로 앙상블한 모델을 만든 이후 negative와 positive일 때의 f1-score를 출력했다.
negative와 positive일 때의 f1-score 모두 크게 증가한 것을 확인할 수 있었다.
'DATA PROGRAMMING > PYTHON' 카테고리의 다른 글
[Python] Class의 정확한 이해와 사용법 (0) | 2023.09.13 |
---|---|
파이썬 NUMPY 이미지 파일 색깔 수정하 (0) | 2023.08.03 |
파이썬을 통해 간단하게 학교 성적 평균, 표준편차, 백분위 구하기 (0) | 2023.05.29 |
파이썬 Pandas 기초부터 심화까지 - 1 (인덱싱, loc, 결측치) (0) | 2023.05.11 |
PYTHON - 생산 및 운영 관리 OR-Tool 활용 Goldratt Problem 풀기 (0) | 2023.03.26 |