본문 바로가기

Brightics 서포터즈 3기

[삼성 SDS Brightics] 데이터 분석의 🌼: 전처리 #팀 분석 프로젝트 2편(꽃길만 걷게 해줄게~!)

안녕하세요 브월 팀의 막내 수빈입니다~!

오늘은 드디어!!! 지난번 주제 선정에 이어 데이터 전처리를 진행하려고 합니다!

지난번 블로그 포스팅을 못 보신 분들은 아래의 링크를 참고해 주세요!

👇👇👇

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

제가 맡은 부분은 데이터 전처리입니다! 전처리는 데이터 정제(결측값 처리, 이상치 처리), 데이터 변환(범주형 변수 변환 등), 파생 변수 생성, 행과 열의 핸들링과 정렬, 데이터 결합 및 형태 변환 등을 포함합니다.

● 독립변수 설명

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 납 량

먼저 데이터를 load 해줍니다! load 이후 profile table 함수로 결측값, 변수의 특징 등을 살펴봅니다.

Profile Table 기능은 제가 좋아하는 기능 중 하나랍니다 ㅎㅎ

Profile Table

(데이터 특징 파악해보기)

Overview를 살펴보면 Total missing(%)가 0.0%라고 나와있는데 이는 데이터 안에서 결측치가 하나도 없다는 걸 의미합니다.

이 함수로 변수의 특징까지 파악할 수 있습니다. 먼저 X_10과 X_11변수는 99.9%의 데이터가 0으로 이루어져 있는 걸 확인할 수 있습니다. 또한 두 변수는 왜도(skewed) 문제를 가지고 있는 것으로 보입니다.

X_10은 방열 재료 2 무게이고 X_11은 방열 재료 3 무게인데 무게가 0인 데이터로 주로 이루어져 있다면 잘못된 데이터가 아닐지 의심해 볼 필요가 있습니다. (변수 설명은 맨 위의 표를 참고해 주세요!)

X_04,X_23,X_47,X_48 변수는 모두 1인 데이터로 이루어져 있는데 그 이유는 검사 통과 여부이기 때문입니다.

이 데이터는 모두 검사를 통과한 데이터로 보면 되겠습니다.

왜도란?

자료가 어느 쪽으로 얼마만큼 기울어져 있는가, 즉 분포의 비대칭성을 나타내는 척도입니다.

 

profile table에서 X_38, X_10, X_11 변수들이 왜도 문제가 있다고 하여 히스토그램으로 확인했을 때 크게 왼쪽이나 오른쪽으로 치우쳐 있는 모습이 아니기에 왜도 문제를 해결할 수 있는 로그 변환 과정은 생략하겠습니다!

99.9% 0으로 이루어진 X_10/ X_11 변수는 결측값 일까?

데이콘의 데이터 세부 설명 관련 문의에 대한 답변은 다음과 같습니다.

Q. X_10 / X_11 방열재료 2, 3의 무게 값이 0이 많은데 결측값인지 실제로 방열재료 2, 3 이 공정에 사용되지 않았는지?

A. 실제 방열재료 2, 3은 공정에 사용되고 있으며 0으로 표현된 값은 결측값라고 생각하시면 될 것 같습니다.

따라서 X_10, X_11 데이터의 결측값을 처리하는 과정이 필요합니다.

결측값 처리

결측값 처리에 대한 고민 없이 결측값을 무조건 제거한다면 많은 양의 정보가 손실될 뿐만 아니라 분석 결과에 편향이 발생할 수 있습니다. 정보의 손실을 최소화하는 전략이 필요합니다. 저는 데이터에서 결측값을 대체하는 방법을 사용하려고 합니다.

참고: 브라이틱스와 함께하는 데이터 분석

 

왼쪽은 파이썬 스크립트 실행 전 / 오른쪽은 파이썬 스크립트 실행 후입니다.

먼저 위 왼쪽 데이터는 결측값이 0으로 표시된 경우에 해당합니다. Brightics에서 결측치를 대체하기 위해서는 오른쪽 사진과 같이 null 값으로 표시되어 있어야 인식하는데 결측값이 0으로 표시되어 있기에 brightics에서 결측값 대체 기능을 이용할 때 인식을 하지 못합니다.

X_10, X_11 변수의 결측값을 0으로 바꾸는 과정이 필요하며 0으로 바꾸는 과정은 파이썬 스크립트를 이용했습니다.

파이썬 스크립트 실행 후 0값이 null 값으로 바뀐 것을 볼 수 있습니다.

Replace Missing Number 함수를 통해 결측값을 평균으로 대체해 줍니다. 결측값 대체 방법에는 평균 이외에도 중간값, 최솟값 등이 있지만 저는 평균으로 대체해 봤습니다!

독립변수 이상치 처리

이상치 처리 방법에는 크게 3가지가 있습니다. 이상치 제외, 이상값 대체, 변수 변환이 있습니다. 이 중 저는 이상치 제외 방법을 사용해 보겠습니다.

Outlier detection 함수로 그래프를 그려 이상치를 확인해 봤을 때 X_30(36.5%)에서 이상치가 가장 많이 나타나므로 X_30의 변수의 이상치를 제거합니다.

히스토그램을 그려봤을 때 오른쪽으로 동떨어진 값을 확인할 수 있는데 이는 1.46 초과이므로 1.46 초과인 데이터를 이상치로 간주합니다. 

filter 함수를 통해 이상치인 값을 데이터에서 제외하도록 하겠습니다!

위 기준으로 이상치 제거 시 데이터 개수 (39,607 -> 37,810)로 줄어듭니다. 

종속변수 이상치 제거

종속변수 설명

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)
 

종속변수는 총 14개로 이번엔 Box plot으로 이상치를 탐색해 보겠습니다. 14개 중 Y_06과 Y_10에서 매우 작은 값에 몰려 있으므로 이상치로 보입니다. 

Outlier Detection에서 Turkey 방식으로 이상치를 제거해 보겠습니다!

제거했을 때 데이터 셋 (37,801 -> 36,789)이 줄어듭니다. 

파생 변수 추가

X_34~X_37은 스크류 체결 시 분당 회전수를 의미하는 변수입니다. 같은 장비로 측정한 회전 수이기에 파생 변수로 만들어도 되겠다고 생각했습니다. 만든 파생 변수는 분당 회전 수 평균입니다!

데이터 분석 전처리를 하면서 어떤 근거로 데이터 분석을 진행했는지 근거를 찾아가는 과정이 재밌었고 개념을 다시 복습할 수 있었어요 ㅎㅎ

무엇보다 팀원분들과 모르는 부분이나 해결 안 되는 부분을 얘기해서 해결할 수 있어서 좋았습니다!

브월 팀 언니들 너무너무 고생했어요 ∗❛⌄❛∗

이해 안 되는 부분은 언제든지 댓글로 남겨주세요 그럼 안뇽