[ML Project] 펭귄 데이터를 이용한 무게 회귀예측

주혜린·2023년 7월 26일
0

[ML Project]

목록 보기
5/11
post-thumbnail

💻 프로젝트 설명

  • 펭귄의 데이터를 이용하여 회귀를 통해 펭귄의 무게를 예측해보려고 한다.

[데이터셋 출처]
https://www.kaggle.com/datasets/parulpandey/palmer-archipelago-antarctica-penguin-data

📁 데이터셋

[구성]

  • species: 펭귄 종
  • island: 서식지
  • culmen_length_mm: 부리 길이
  • culmen_depth_mm: 부리 깊이
  • flipper_length_mm: 날개 길이
  • sex: 성별

[EDA]

  • 수치형 데이터인 부리 길이, 부리 깊이, 날개 길이 칼럼의 바 그래프를 그려보면 크게 한쪽으로 치우친 모습은 보이고 있지 않아 추가적인 처리는 생략했다.

  • 범주형 자료들의 그래프를 그려보면 종에서는
    Adelie가 가장 많았고, 서식지는 Biscoe에 가장 많았으며 성별은 거의 비슷했다.

  • 상관계수 히트맵을 그려보면 무게와 가장 상관계수가 큰 요소는 날개길이었다.

[전처리]

  • 273개의 데이터 중 성별에서 7개의 결측치가 있었다.
    따라서 성별이 수컷인 펭귄의 부리길이 혹은 날개길이 평균보다 크다면 Male을 아니라면 Female로 대체해주었다.
  • 범주형 데이터를 갖고있는 species, island, sex 칼럼을 원핫 인코딩을 해주었다.
    이때 범주가 'n'개 모두 원핫 인코딩을 하면 해당 열간에 완벽한 선형 관계가 생겨 다중공선성이 발생할 수 있다.
    다중공선성을 방지하기 위해 하나의 범주를 삭제하여 'n-1' 열을 생성했다.

📈 회귀 모델 학습

[항목 선택하기]

  • 먼저 모든 칼럼을 다 넣어 다중회귀 모델을 학습시켰다.
    R-square 값이 0.867로 높은 정확도를 보여주고 있었다.

  • 다중 공선성 진단 결과 무게와 상관계수가 가장 높았던 날개 길이와 3개의 칼럼의 다중 공선성이 높게 나왔다.
    따라서 부리 길이와, 부리 깊이 칼럼을 제거해주니 날개 길이의 다중 공선성 수치가 10까지 떨어졌다.
[Before][After]
  • 다중 공선성이 있는 칼럼을 제거한 결과 R-square가 약간 낮아졌다.

[L1: Lasso]

  • 라쏘 회귀를 했을 때 R-square가 약 0.1 낮아졌다. 또한 절대계수 합이 다중선형 회귀에 비해 매우 낮게 나왓는데 이는 라쏘 회귀가 덜 중요한 항목은 0으로 설정하는 경향이 있기 때문이다.

[L2: Ridge]

  • 릿지 회귀 모델은 라쏘 회귀 모델에 비해 높은 R-square 값을 나타냈다. 또한 라쏘와 달리 릿지는 모든 특징을 유지하지만 과적합을 피하기 위해 계수를 축소하기 때문에 절대 계수 합이 다중 선형 회귀와 라쏘 회귀 사이 값을 갖고 있다.

[RandomForestRegressor]

  • 다중 공선성을 신경쓰지 않고 RandomForestRegressor로 학습시켜 얻은 결과이다.
    적합도가 0.86 정도로 다중 공성선을 고려하지 않았음에도 높은 수치를 보였다.

  • 요소들의 중요도를 보았을때 의외로 무게와 상관계수가 가장 높았던 날개 길이가 아닌 Gentoo라는 종이 1등이었다.
    궁금해서 찾아보니 세 종류의 펭귄은 크기가 비슷하나 Gentoo-Chinstrap-Adelie 순으로 크기가 큰편인 것 같다.

💡 Insight

  • RandomForest 회귀 모델의 편리함을 다시 한번 느낄 수 있었다.
profile
💻🐜💡

0개의 댓글