원자력발전소 상태 판단 경진대회

너무 적은 데이터 정보량의 문제 - row (이상치들을 대표값으로 바꿔야 하나?)

2020.07.06 15:16 5,955 조회

앞서 너무 큰 데이터의 용량의 문제로 이번 스터디에서 column을 줄인 방법을 공유했습니다.

column에 대해서 다루었으니 row를 조정하려는 방법으로 접근했습니다.

데이터의 각 컬럼에 대한 정보가 너무도 없으니, 시각화를 통해서 얻어낸 인사이트를 공유하겠습니다.


상위권팀의 공유 코드를 보면 대부분이 row 이상치의 핸들링과 스케일링에 실패 했습니다.

그래서 스터디하면서 Robust 스케일링을 한 뒤, 이상치를 median값으로 대체하여 모델링을 해봤습니다. 역시나 모델의 정확도가 떨어지는 결과가 나왔습니다.

이에 대해서 이상치에 대한 특성을 알기 위해 시각화를 시도해봤습니다.


이상치는 모든 컬럼에 대해 로버스트 스케일링을 적용한 뒤,평균에서 3σ 거리에서 벗어난 데이터로 정의 했습니다.


데이터는 15초~300초로 추출해서 파일당 285개의 row를 가지고 있습니다.

A에 각 컬럼마다 어떤 레이블이 그 컬럼의 이상치를 가지고 있는지를 시각화한 것 입니다.


A=[]
for i in range(0,train_rob.shape[1]):
   for x in np.where((train_rob.iloc[:,i])>((train_rob.iloc[:,i].mean())+3*train_rob.iloc[:,i].std())):
       A.append(x/285)   # 285로 나누면 그게 바로 해당 파일이 속하는 레이블임

A=pd.DataFrame(A)
A=A.T
A=A.fillna(-1).astype(int)


A = A.loc[:, A.nunique() != 1]


import random


for i in random.sample(list(A.columns),50):
    ax = plt.subplots(1,1,figsize=(10,3))
    A[i].value_counts().drop(-1).plot.bar()



위 코드대로 진행하면, 랜덤으로 5000개가 넘는 컬럼에 대해서 50개만 그래프가 뽑아져 나옵니다.



보통 이런식으로 각 컬럼에 대해서 이상치가 여러개의 레이블에서 골고루 분포할 것으로 예상했으나, 여러번 코드를 진행했더니 이런 그래프 보다는 아래의 특징의 그래프가 많이 나왔습니다.

이 그래프가 의미하는건 어떤 컬럼의 이상치는 어떤 레이블에 해당하는 파일이 대부분을 점유하고 있다는 의미입니다.

그래서 이상치가 오히려 어떤 파일이 어떤 레이블에 속하는지를 알 수 있는 특징이 될 수 있다는 것 입니다.

따라서 이상치는 제거하거나 어떤 대표값으로 대치하지 않고, 가져가는 것이 옳다는 근거가 됩니다.

로그인이 필요합니다
0 / 1000
당쇠
2020.07.06 15:59

응원합니다.~~

인호베이션97
2020.07.06 17:26

감사합니다. :D