본문 바로가기
삼성 SDS Brightics

[삼성 SDS Brightics] 06 DACON 자율주행 센서의 안테나 성능 예측 AI 경진대회 후기_팀미션2탄

by 도은 2022. 8. 25.

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

입니다.💙

지난 팀미션 1탄에서는 팀 분석 주제를 소개드리고,

일정 계획과 역할 분담에 대해 포스팅했었는데요!

오늘은 이어서 팀미션 2탄 EDA와 데이터 전처리 그리고 분석 모델링을 진행할 예정입니다(*^o^*)

 

 
 

시작하기에 앞서 팀미션 1탄을 아직 안 읽으셨다면, 지난 주 포스팅으로!

https://blog.naver.com/belita18/222850070177

저는 분석 모델링과 모델 비교 역할을 수행했는데요,

설명에 앞서, 저희 브월 조가 역할 분담을 통해

수행한 과정이 자세하게 설명된 포스팅을 각각 걸어두도록 하겠습니다!

참고 부탁드려요*^0^*

 

 

데이터 소개

저희팀은 "DACON 자율주행 센서의 안테나 성능 예측 AI 경진대회"에 참여하기로 했는데요! DACON에서 제공하는 데이터는 다음과 같습니다.

1. 학습(Train) 데이터셋 (39607개)

파일명: train.csv

설명: ID, X Feature(56개), Y Feature(14개)

2. 테스트(Test) 데이터셋 (39608개)

파일명: test.csv

설명: ID, X Feature(56개)

3. sample_submission.csv (제출양식)

설명 : ID, 예측한 Y Feature(14개)

4. ./meta/x_feature_info.csv

설명: 비식별화된 X Feature에 대한 세부 설명 자료

5. ./meta/y_feature_info.csv

설명 : 비식별화된 Y Feature에 대한 세부 설명 자료

6. ./meta/y_feature_spec_info.csv

설명 : 각 샘플의 정상, 불량을 판정할 수 있는 Y Feature 별 스펙 기준 자료

위와 같은 데이터가 제공되었습니다. 간략하게 설명드리자면 1/2는 모델을 만들기 위한 test,train 데이터셋, 3은 제출양식을 통일하기 위한 기본 데이터셋, 4/5/6은 1/2의 각 column별 설명이 담긴 info 데이터셋입니다.

 

 

독립변수 "X_"

Feature

설명

X_01

PCB 체결 시 단계별 누름량(Step 1)

X_02

PCB 체결 시 단계별 누름량(Step 2)

X_03

방열 재료 1 무게

X_04

1차 검사 통과 여부

X_05

PCB 체결 시 단계별 누름량(Step 3)

X_06

PCB 체결 시 단계별 누름량(Step 4)

X_07

방열 재료 1 면적

X_08

방열 재료 2 면적

X_09

방열 재료 3 면적

X_10

방열 재료 2 무게

X_11

방열 재료 3 무게

X_12

커넥터 위치 기준 좌표

X_13

각 안테나 패드 위치(높이) 차이

X_14

1번 안테나 패드 위치

X_15

2번 안테나 패드 위치

X_16

3번 안테나 패드 위치

X_17

4번 안테나 패드 위치

X_18

5번 안테나 패드 위치

X_19

1번 스크류 삽입 깊이

X_20

2번 스크류 삽입 깊이

X_21

3번 스크류 삽입 깊이

X_22

4번 스크류 삽입 깊이

X_23

2차 검사 통과 여부

X_24

커넥터 1번 핀 치수

X_25

커넥터 2번 핀 치수

X_26

커넥터 3번 핀 치수

X_27

커넥터 4번 핀 치수

X_28

커넥터 5번 핀 치수

X_29

커넥터 6번 핀 치수

X_30

스크류 삽입 깊이1

X_31

스크류 삽입 깊이2

X_32

스크류 삽입 깊이3

X_33

스크류 삽입 깊이4

X_34

스크류 체결 시 분당 회전수 1

X_35

스크류 체결 시 분당 회전수 2

X_36

스크류 체결 시 분당 회전수 3

X_37

스크류 체결 시 분당 회전수 4

X_38

하우징 PCB 안착부 1 치수

X_39

하우징 PCB 안착부 2 치수

X_40

하우징 PCB 안착부 3 치수

X_41

레이돔 치수 (안테나 1번 부위)

X_42

레이돔 치수 (안테나 2번 부위)

X_43

레이돔 치수 (안테나 3번 부위)

X_44

레이돔 치수 (안테나 4번 부위)

X_45

안테나 부분 레이돔 기울기

X_46

실란트 본드 소요량

X_47

3차 검사 통과 여부

X_48

4차 검사 통과 여부

X_49

Cal 투입 전 대기 시간

X_50

RF1 부분 SMT 납 량

X_51

RF2 부분 SMT 납 량

X_52

RF3 부분 SMT 납 량

X_53

RF4 부분 SMT 납 량

X_54

RF5 부분 SMT 납 량

X_55

RF6 부분 SMT 납 량

X_56

RF7 부분 SMT 납 량

 

 

종속변수 "Y_"

Feature

설명

Y_01

안테나 Gain 평균 (각도1)

Y_02

안테나 1 Gain 편차

Y_03

안테나 2 Gain 편차

Y_04

평균 신호대 잡음비

Y_05

안테나 Gain 평균 (각도2)

Y_06

신호대 잡음비 (각도1)

Y_07

안테나 Gain 평균 (각도3)

Y_08

신호대 잡음비 (각도2)

Y_09

신호대 잡음비 (각도3)

Y_10

신호대 잡음비 (각도4)

Y_11

안테나 Gain 평균 (각도4)

Y_12

신호대 잡음비 (각도5)

Y_13

신호대 잡음비 (각도6)

Y_14

신호대 잡음비 (각도7)

독립변수는 56개, 종속변수는 14개로 데이터셋이 다변량변수임을 확인하실 수 있습니다!

정말 많죠...? 스크롤이 끝없이 내려가요ㅎ...

 

 

EDA

독립변수: Radar 센서 제작 공정의 순서에 따라 측정된 인자

종속변수: 각도 별 Radar 센서의 안테나와 신호대에서 측정된 인자

다음으로, 각각의 변수에 대해 EDA를 수행한 포스팅입니다 !

https://blog.naver.com/dvbh6592/222857414121

 

 

데이터 전처리1

다음으로, 결측치와 이상치를 탐색하고 처리하는 과정을 설명해둔 포스팅입니다!

X_34~X_37은 스크류 체결 시 분당 회전수를 의미하는 변수인데,

주최 측에서 같은 장비로 측정한 회전 수라고 답변해주셨습니다!

이에 저희 팀은 [분당 회전 수 평균]이라는 파생 변수를 만들어도 되겠다고 판단했습니다.

https://blog.naver.com/munsb2002/222856454987

 

 

 

데이터 전처리2

다음으로, 결측치는 동일하게 처리했지만

처리 방법을 달리한 과정을 설명한 포스팅입니다!

또한 독립변수가 많기 때문에 모델 성능 저하 위험을 대비하고자 데이터 표준화와, 모델의 복잡함을 줄이기 위한 주성분분석을 진행해주셨어요. ^_^

https://blog.naver.com/smilingmj_/222850229482

 [삼성SDS Brightics Studio] 팀 분석 과제 ① - prologue : 자율주행 센서 성능, 딱 기다려!

 

 

모델링

드디어 제가 담당한 업무네요ㅎㅎ

저는 5가지 모델링을 진행했는데요, 하나씩 설명드리도록 하겠습니다1

우선 저희의 데이터셋은 일반적인 데이터셋과 달리 종속변수가 여러개인 데이터입니다.

그래서 아쉽게도 Brightics Studio 내에 있는 regression model 함수들은

feature columns은 여러 개 선택 가능하지만,

label colum은 단 1개밖에 선택이 안되더라고요ㅠ.ㅠ

 

BUT!!! Brightics Studio는 플랫폼이기 떄문에 Python이나 R 등의 언어도 script 함수를 이용해 가져다 쓸 수 있다는 점~~

그래서 저는 sklearn의 MultiOutputRegressor을 import해

python script를 작성했습니다!

짜잔~~~~!!

select function에서 python을 입력하시면 python script를 발견하실 수 있습니당ㅎ.ㅎ

 

1. LinearRegression

전체 python script는 다음과 같습니다. 하나씩 자세히 한 번 봐볼까요???

 

우선, sklearn에서 필요한 함수를 import하고!

seed를 고정하기 위한 코드를 작성했습니다.

 

다음으로, 제공된 train.csv파일을 input[0]을 train_df으로 입력해주었어요.

오른쪽 화면에서 In Table Variable을 찾으셨나요?? input이 여러개인 경우 input[#]으로 순서대로 #(number)을 부여해줍니다. 순서 확인하는게 중요하겠죠?ㅎㅎ

이후 train_df를 X Featrue와 Y Featrue로 나누어주었어요. 각각 독립변수와 종속변수를 의미합니다.

 

다음으로 모델의 핵심 코드 차례에요. 중요하니까 아래에 적어둘게요!

#LR = MultiOutputRegressor(LinearRegression()).fit(train_x, train_y)

input[1]은 test.csv를 의미합니다.

만들어둔 함수 LR에 test_x를 활용해 preds를 도출해줍니다.

 

마지막으로 submit은 데이콘 대회의 제출 양식을 따르기 위해 제공된 sample_submission.csv 파일이에요! input[2]를 submit으로 입력해줍니다.

submit의 ID에 맞추어 예측된 preds를 넣어주었어요.

 

여기서 진짜 주의할 점!!

도출할 output을 정해주어야 합니다! 데이터셋이 큰 경우 모델을 돌리는데 시간이 상당히 소요되는데, output을 정해주지 않으면 다시 돌려야 한다는 점...(제 경험담입니다ㅠ)

저는 output으로 제출할 submit을 입력하고 TABLE 형식을 선택해주었어요!

 

2. XGBRegressor

이후부터는 모델의 핵심 코드를 제외하고는,

모두 같은 과정이기 때문에 핵심 코드만 적어두도록 하겠습니다ㅎㅎ

xgb = MultiOutputRegressor(xgb.XGBRegressor(n_estimators=100, learning_rate=0.08, gamma = 0, subsample=0.75, colsample_bytree = 1, max_depth=7) ).fit(train_x, train_y)

3. GradientBoostingRegressor

GBR=MultiOutputRegressor(GradientBoostingRegressor(random_state=0)).fit(train_x, train_y)

4. Random Forest Regressor

RFR = MultiOutputRegressor(RandomForestRegressor(n_estimators=100, max_depth=30, random_state=0)

5. Light Gradient Boosting Machine

base_model=LGBMRegressor(objective='l1', subsample_freq=1, silent=False, random_state=18, importance_type='gain', **base_params)

오늘은 데이터 소개와, EDA, 데이터 전처리 그리고 모델링 과정에 대해 설명드렸어요.

Brightics Studio를 활용하면 분석하지 못할게 없다는 점~

다음 포스팅은 팀 분석 3탄으로 오늘 설명한 모델을 비교해보고 성능 평가와 결과 보고서 작성 (PPT)에 대해 자세히 소개해 드리도록 하겠습니다!

다음주에 만나용@__@

 

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

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