본문 바로가기
삼성 SDS Brightics

[삼성 SDS Brightics] 15. DACON 물류 유통량 예측_개인미션 4탄(모델링)

by 도은 2022. 11. 3.
 

안녕하세요! Brightics 서포터즈 3기

입니다.

오늘은 DACON 물류 유통량 프로젝트의

모델링 과정에 대해 소개해보도록 하겠습니다!

 

아직 개인미션 1탄과 2탄, 3탄을 안 보셨다면

이번 포스팅의 모델링 과정을 이해하시기 조금 어려우실테니

아래의 링크를 참고해주세요^0^

 

 

전체 Flow

오늘 소개해드릴 과정의 전체 Flow는 다음과 같습니다!

지난 포스팅의 전체 Flow에 비해 뭔가 많아진 것 같아보이시다면...

정답입니다...!!

모델을 선택하는 과정도, predict 오류도 계속 발생해서

제가 Brightics 서포터즈를 하며 진행했던 미션 중에 가장 어렵지 않았나...싶습니다.

시간이 조금 걸렸지만 그래도...! 해결했어요^__^ 하핫

문제파악

모델링에 들어가기 앞서 살짝 복습을 진행해보겠습니다.!!

제가 사용하는 data는 총 3개로

노락색 박스는

train_df.csv

 

index : 인덱스

송하인_격자공간고유번호

수하인 격자공간고유번호

택배_카테고리

운송장_건수

초록색 박스는

test_df.csv

index : 인덱스

송하인_격자공간고유번호

수하인 격자공간고유번호

택배_카테고리

파란색 박스는

sample_submission.csv

index : 인덱스

운송장_건수

이렇게였습니다!

그런데 여러분....

train과 test 데이터셋의 차이가 보이시나요??

...

바로 운송장_건수가 없다는 것...!!!

test에 이번 분석의 목적인 운송장_건수가 없다면

train을 통해 만든 모델로 predict를 evaluate할 수가 없다는게 당연하죠ㅠ.ㅠ

저는 그것도 모르고

냅다 regression predict에 넣고

evaluate를 하려니 운송장_건수가 없고 prediction만 덜렁 남아있더라고요...ㅋㅋㅋ

살짝 멘붕~

이 문제를 어떻게 해결했냐!

는 밑에서 확인하실 수 있습니다ㅎㅎ

문제해결

이 문제를 해결하기 위해서는

제공된 sample submission의 index와 test의 index를 bind한 후에

regression predict에 out_table로 넣어주어야 했어요

자 그럼 이제부터 차근차근 설명해드리겠습니다!!

1) Bind Row Column

Brightics studio의 해당 함수를 사용해서

index가 공통되는 열이기 때문에

index를 기준으로 bind를 진행해주었습니다!

first_table에 test의 select column

second_table에 sample_submission의 load가

table로 들어간 모습을 확인하실 수 있으신가요??

오른쪽의 결과 table을 보시면

index_first, index_second 등의 열이름을 확인하실 수 있습니다!

해당함수는 어느 하나의 열을 삭제하지 않고 모든 열을 나타내주네요~

이후 저는 column을 선택해 bind해주었습니다.

2) Select column

자 그렇다면 모델링에 필요한 열만 선택하는 단계가 필요해요!

저는 모델에 필요한

송하인_격자공간고유번호

수하인_격자공간고유번호

물품_카테고리_index

운송장_건수

이렇게 4개의 열을 선택해주었어요

또한 train의 column name과 맞추기 위해서

추가된 _first, second 등의 단어도 삭제해주었습니다~!!

모델링

이번 분석에서 사용한 회귀모델은

XGB Regression

Random forest Regression

총 2개의 회귀모델을 사용해주었습니다.

하나씩 설명드리겠습니다

1) XGB Regression

XGBoost Regession은

eXtreme Gradient Boosting의 약자로

여러 Decision Tree를 조합 후 가중치를 고려해

Boosting을 통한 앙상블 알고리즘을 사용하는 회귀모델입니다.

오버피팅에 강하고, 유연성이 좋아

다른 알고리즘과 연계해 앙상블 학습이 가능하다는 장점이 있습니다.

저는 train의 select column을 out_table로 활용해

Feature column을

송하인_격자공간고유번호 수하인_격자공간고유번호 물품_카테고리_index

Label column을

운송장_건수

으로 선택해주었습니다!

저희가 예측하고자 하는 건 운송장 건수이니까요ㅎㅎ

학습 결과를 보시면

그래프의 한글이 깨져있기는 하지만

1. 송하인_격자공간고유번호 0.51506025

2. 물품_카테고리_index 0.3554217

3. 수하인_격자공간고유번호 0.12951808

위와 같은 순위로 Feature importance를 가진 것을 확인하실 수 있습니다!

2) Random forest Regression

Random forest Regression은

Dection tree에 쓰이는 특성을 random하게 선택 후

여러 Dection tree를 이용한 모델입니다.

결측치를 다루기 좋고, 오버피팅 방지에 효과적이라는 장점이 있습니다!

역시 train의 select column을 out_table로 활용해

Feature column을

송하인_격자공간고유번호 수하인_격자공간고유번호 물품_카테고리_index

Label column을

운송장_건수

으로 선택해주었습니다!

마찬가지로 Feature importance를 확인해보면

1. 송하인_격자공간고유번호 0.41

2. 수하인_격자공간고유번호 0.38

3. 물품_카테고리_index 0.21

위와 같은 순위로 Feature importance를 가진 것을 확인하실 수 있습니다!

(한글... 왜 깨져있을까요..

표에서는 잘 나타나는데 왜 그래프 column에서 갑자기...!!)

3) Predict

예 이제 대망의 predict네요!!!

predict에서 가장 중요한 것은 input을 제대로 설정했는가 입니다

Input에는 table와 model을 넣어주어야 하는데

여러분 어떤 걸 넣어야 올바를지 감이 좀 오시나요~~??

바로

table에는 위에서 언급한 test와 sample_submission이 합쳐진 select coumn을

model은 train을 통해 만든 regression_train을 선택해주시면 됩니다!^^

정리

이것으로 오늘 포스팅의 모델링 과정은 완료했습니다!

다음 포스팅에서는 모델 평가 시간을 가져보도록 하겠습니다^~^

(약간의 tmi)

사실 지난 팀미션에서도 비슷하게 Dacon의 데이터로 분석을 진행했었는데요

그 당시에는 python script를 사용해 model의 train과 predict, sample submission의 index합치는 과정을 한 번에 진행했기 때문인지

이번에는 Brightics studio을 활용해 나누어서 분석하려다보니

순서가 헷갈려서 고생했던 것 같아요^^::

여러분은 비슷한 실수하지 마시길...!

그럼 다음 포스팅으로 찾아뵙도록 하겠습니다!!!

감사합니다ㅎㅎ

* 본 포스팅은 삼성SDS Brightics 서포터즈 3기 활동의 일환으로 작성하였습니다.

​#삼성SDSBrightics#삼성SDS#Brightics#Brightics서포터즈#Brightics서포터즈3기#BrighticsStudio#브라이틱스#모델링#데이터분석#코딩없이데이터분석#브라이틱스와함께하는데이터분석#노코드AI오픈소스#노코드AI