일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AI
- fastai
- 머신러닝
- 항해학부
- HSK
- 청년빅데이터캠퍼스
- 빅데이터
- 한국해양대학교
- 해양수산부
- 해양수산빅데이터
- 인생
- 현대중공업빅데이터경진대회
- 유니스트
- 선박직원법
- 해양수산빅데이터경진대회
- 해상교통법
- 여수광양항
- 해양빅데이터
- 해사법
- 조선빅데이터
- 빅데이터경진대회
- 데이콘
- 충청남도 청년네트워크 위원회
- YGPA 공공데이터 활용 비즈니스 공모전
- 항해사
- 여수광양빅데이터경진대회
- 해양수산빅데이터활용공모전
- 선원법
- 펭귄몸무게예측대회
- 딥러닝
- Today
- Total
경 탁
[데이콘] 펭귄 몸무게 예측 경진대회 #2 본문
안녕하세요 ~
지난번에 이어 요번에는 본격적으로 모델링하고 EDA를 진행할까 합니다.
말은 거창하지만 PYCARET 모델 여러개 만들어서 섞고
툴 이용해서 EDA 한다는 거 ~
이번에 쓰인 툴은 지난번과 똑같이 'PYCARET' 에 자동EDA툴인 'PANDAS-PROFILLING' 입니다.
(저희 도구를 사용하자고요 ㅎㅎ)
본 포스팅은 저번 포스팅에 이어 하는 것이니, 저번 포스팅의 코드를 생략하도록 하겠습니다.
1. 자동 EDA & 레포트 받아보기
import pandas_profiling
report =train.profile_report()
report
report.to_file('./pr_report.html')
지난번의 TRAIN 데이터를 툴을 이용하여 EDA 자료를 만들어냅니다.
사실 다른 툴을 이용해서 직접 시각화 및 EDA 까지 하면 좋긴 하나,
제 기준에서는 PROFILLING 만으로도 DATA에 대해 많이 알 수 있더라고요.
그래서 툴만 이용해서 진행하겠습니다.
참고로 가장 하단의 코드는 EDA 결과를 REPORT 파일로 변환하는 것으로 조그만한 창에서 보는 것보다
크게 보는 데 도움이 됩니다.
2. 레포트 읽어보기
파일을 열게 되면 이런 페이지가 뜨는데, 정말 일목요연하게 잘 설명되있음을 알 수 있습니다.
일단 간편하게 독립변수들의 특징이 어떠한지 ~ (범주형이냐, 등등)
결측치도 있는 지 없는 지 알 수 있고, 데이터의 양도 알 수 있습니다.
그외에도 이렇게 시각화 자료까지 제공합니다. 정말 한눈에 보기 편하쥬 ~ ?
그것보다 더 좋은 기능은 바로 ... !
이렇게 두 변수간의 관계도 쉽게 알 수 있다는 것 !
한눈에 봐도 FLIPPER LENGTH(펭귄의 팔(날개) 길이) 와 몸무게가 양의 상관관계를 지닌다는 것이죠 ?
사실 상식적으로 생각해봐도 헤비급 리치하고 플라이급 리치가 다르니 당연한 사실 같습니다.
상관계수도 쉽게 파악할 수 있는 데,
- Delta 15 N (o/oo) : 토양에 따라 변화하는 안정 동위원소 15N:14N의 비율
- Delta 13 C (o/oo) : 먹이에 따라 변화하는 안정 동위원소 13C:12C의 비율
위 두 변수가 읽어도 뭔 소린지 모르겠고 마치 함정 같아서 없애버리려고 하다가 높은 상관계수를 보고는
그대로 진행하리라 다짐했습니다. (여기 관련 전공이신분들께서 보시면 설명 부탁드립니다 ㅎㅎ)
3. 결측치 제거
train1 = train.dropna(axis=0)
결측치를 제거하겠습니다. 사실 PYCARET을 이용하면 결측치를 알아서 해결해준다고 하는데,
위의 설명을 읽어보면 그냥 제거하는 것은 아까우니, 수치형의 경우 평균 ! 범주형의 경우 'CONSTANT'(?) 을 대입해준다고 하는데, 저는 그냥 결측치를 제거했습니다.
데이터가 총 5개가 줄어드네요.
4. 모델 생성 및 튜닝
from pycaret.regression import *
exp2 = setup(train1, target = 'Body Mass (g)', ignore_features=['id'])
compare_models()
et = create_model('et', cross_validation = False)
rg = create_model('ridge', cross_validation = False)
knn = create_model('knn', cross_validation = False)
tune_et = tune_model(et, optimize = 'RMSE', n_iter = 100)
tune_rg = tune_model(rg, optimize = 'RMSE', n_iter = 100)
tune_kn = tune_model(knn, optimize = 'RMSE', n_iter = 100)
모델을 생성하고 튜닝까지 맞춰줍니다 ~ (지난 포스팅에서 다뤘던 내용이므로 간략히 지나가겠습니다.)
기준은 RMSE 값이 가장 작은 'EXTRA TREE REGRESSOR' 및 릿지 회귀 그리고 KNN 회귀로 하겠습니다.
ㅋㅋ RMSE값이 125만 나와도 소원이 없겠네요 ...
5. 모델 blending
blended_model = blend_models(estimator_list = [tune_et, tune_rg, tune_kn], fold = 10, optimize = 'RMSE')
앙상블이나 부스팅은 많이 들어봤는 데 블랜드는 처음 들어봐서 찾아왔습니다.
제가 보기에는 앙상블의 한 종류 같은데, 조금 더 찾아보니 모델들을 TRAINING SET에 피팅하고 VALIDATION / TEST SET 에 대해 예측, 그리고 VALIDATION SET에 대한 예측이 새로운 모델을 만드는 데 사용한다고 하네요.
(역시 어렵네요 이 곳은 ... @_@)
6. 최종 테스트 결과 제출
final_model = finalize_model(blended_model)
df = predict_model(final_model,test)
result_3 = df[['id','Label']]
result_3.rename(columns = {'Label' : 'Body Mass (g)'}, inplace = True)
result_3
result_3.to_csv('3.csv', index = None)
제출해보니 RMSE 값이 286이 나오는 군요 ~ +_+
저번 포스팅에 비하면 매우매우매우 장족의 발전입니다.
오늘은 벌써 3번이나 제출해버려서 못 제출하는 데, 대회가 끝날때까지 계속 점수를 내리는 데 집중해야 될 거 같습니다.
다음 포스팅에서는 다른 분들께서 올리신 코드를 참조하고 데이터에 여러가지 시도를 해보겠습니다.
감사합니다 :-)
'- 공부 > 2. AI' 카테고리의 다른 글
[Fast ai와 파이토치가 만나 꽃피운 딥러닝] #1 (0) | 2022.01.02 |
---|---|
[데이콘] 펭귄 몸무게 예측 경진대회 #3 (0) | 2021.12.31 |
[데이콘] 펭귄 몸무게 예측 경진대회 (0) | 2021.12.29 |
[가짜연구소] 파이토치 # 2 (0) | 2021.01.28 |
[가짜연구소] 파이토치 # 1 (0) | 2021.01.20 |