본문 바로가기

배우기/복습노트[Python과 분석]

[복습] Python | 분석 | 결측치 처리

728x90
반응형

  - 결측치: NA, nan, ., ?, -, 공백 등으로 들어오는 데이터로, 정의되지 않은값, 잘못된 값

  - 결측치 처리

    1) 삭제

      - 결측치를 포함한 행 삭제

      - 결측치 비율이 높은 컬럼 삭제(30~40% 이상)

 

    2) 대치 ***

      - 단순 대치: 한 번 대치

        방법 1) 평균, 최빈값, 최대, 최소, 중앙값 등으로 대치

        방법 2) 머신러닝 모델을 사용한 대치(knn imputer가 대표적. 편하기 때문에 사용하는 것이나 사용할 때 주의해야 할 점들이 있음)

    - 다중 대치: 여러 번 대치

 

 

 ** knn imputer

대중성이 강한 방식이나 결측치의 끝판왕이 될 수늰 없음

knn 이라는 머신러닝 기법을 사용하여 NA를 예측하는 것으로, 적어도 knn 모델로 결측치를 대치하려면 knn의 특성을 알아야 함.

knn의 특성

예를 들어 아래와 같은 데이터 셋이 있다고 가정하자.

 X1(지역)        X2(성별)       X3(직업)     X4(연평균방문횟수)    X5(월소득)   X6(구매여부)

           1                       1                   1                    5.2                    400          

           2                       2                   1                    1.7                    300

           1                       1                   3                    0.9                      NA

  

월소득의 NA를 예측함에 있어서 월소득에 영향을 주는 컬럼으로만 knn imputer를 수행하여야 한다.

즉, 월소득 예측에 있어 영향을 주는 변수로만 데이터 셋을 구성 후 knn impiter를 수행

 

 

728x90

 

 

예제 - 결측치 대치(단순 대치법)

 

 

1. 데이터 로딩

X, y = make_regression(100, 5, random_state = 0, noise = 5, effective_rank = 90)

 noies와 effective_rank 옵션으로 regression data의 복잡도를 설정한다.

 

 

 

 

 

 

2. 결측치 생성(임의)

 

 

결측치를 대치하고자 하는 컬럼이 Y, 나머지 컬럼이 X가 된다.

 

 

 

3. 결측치 대치

1) 평균 대치

직접 대치

 

함수를 이용한 대치

 

 

 

2) 중앙값 대치

함수를 사용한 대치

 

 

 

3) 최빈값 대치(연속형이라 최빈값의 의미가 없기는 하지만 테스트 용으로 수행함)

 

 

 

4) knn imputer

 

위 결과는 모든 변수들이 예측에 도움이 된다는 가정 하에 knn imputer를 수행한 것이다.

그러나 예를 들어 나이, 성별, 직업 등으로 가지고 knn 을 돌리게 된다면 소득에 연관이 되는 컬럼을 선택하여 knn imputer를 돌려야 한다. 즉 설명변수의 조합이 매우 중요하다.

 

 

 

반응형

 

 

연습문제

bigmart_train.csv 파일을 불러온 뒤 전처리 및 결측치 대치를 수행하여라.

 

사전 처리)

1. Item_Identifier 라벨인코딩

2. Item_Fat_Content 데이터 정리 후 라벨 인코딩

  - Low Fat, Regular 외 값들 확인

3. Item_Type 라벨 인코딩

 

결측치 대치)

1. Item_Weight 결측치 대치(단순대치법 - 평균)

2. Item_Visibility 결측치 대치(knn-imputer)

** 값이 0인 경우 결측치 처리 가정

3. randomforest-imputer 함수 생성

4 Outlet_Size 결측치 대치(randomforest-imputer 함수에 적용)

 

 

데이터 및 패키지로딩

 

 

 

EDA
1. 결측치 확인

 

 

2. 수치형 데이터 분포 확인

describe는 수치형 데이터만 요약 정보를 줌.

 

 

hist는 수치형 자료만 가져와서 그려줌.

 

 

3. 범주형 데이터 분포 확인(컬럼 몇 백 개가 있더라도 확인할 수 있는 사용자 정의함수, 이런 것을 만들 줄 알야 함)

 

 

 

전처리

 

1. Item_Identifier 라벨인코딩

c1 = DataFrame(m.fit_transform(mart['Item_Identifier']), columns = ['Item_Identifier'])
c2 = DataFrame(m.fit_transform(mart['Item_Identifier'].str[:2]), columns = ['Item_Identifier1'])
c3 = DataFrame(m.fit_transform(mart['Item_Identifier'].str[2]), columns = ['Item_Identifier2'])
c4 = DataFrame(m.fit_transform(mart['Item_Identifier'].str[3:]), columns = ['Item_Identifier3'])

 

 

2. Item_Fat_Content 데이터 정리 후 라벨 인코딩

mart2['Item_Fat_Content'] = mart2['Item_Fat_Content'].replace({'LF':'low fat', 'reg':'Regular'}).str.lower()

 

 

3. Item_Type 라벨 인코딩

 

 

 

 

결측치 대치

 

1. Item_Weight 결측치 대치(단순대치법 - 평균)

 

 

** Item_Type 별 평균 대치

mart2['Item_Weight2'] = f_group_mean_imputer(mart2, 'Item_Weight', 'Item_Type')

 

 

 

2. Item_Visibility 결측치 대치 (knn - imputer)

** 값이 0인 경우 결측치 처리 가정

knn imputer를 사용하려면 기준 데이터를 잘 선택하여야 한다. 

 

 

outlet과 관련된 변수 라벨인코딩

 

 

 

4. randomforest - inputer 함수 생성

 

 

 

728x90
반응형