근처값으로 대체(시계열 변수에 한해서 사용 가능)
시계열 변수인 경우에는 결측이 바로 이전 값 혹은 이후 값과 유사할 가능성이 높기 때문에 근처값으로 대체하는 경우가 있다.

- 관련 문법: DataFrame.fillna
결측치를 특정 값이나 방법으로 채우는 함수
-주요 입력
▷value: 결측치를 대체할 값
▷method: 결측치를 대체할 방법
-ffill: 결측치 이전의 유효한 값 가운데 가장 가까운 값으로 채움
-bfill: 결측치 이후의 유효한 값 가운데 가장 가까운 값으로 채움

보통은 ffill로 이전의 값으로 채워주고 안되는 경우 한해서 bfill로 채워준다.
주의해야 할점은 인덱스가 반드시 시간에 따라서 정렬되야한다.(만약에 시간을 섞어놓고 바로 앞에 값으로 채우는 것은 맞지 않는 방법이다.)
## 코드 실습 ## (시계열 결측치 대체하기)
데이터 분할하기 전에 결측치 대체가 가능한 유일한 케이스이다. 왜냐하면 평가 데이터에 대한 결측을 채우게 되면 평가 데이터 내에서만 알아서 결측값이 채워지고, 마찬가지로 학습 데이터에 대한 결측도 학습 데이터 내에서만 알아서 결측이 채워지기 때문이다. 즉, 학습 데이터에서 결측이 있으면 어떤 값을 채워라고 학습된 내용이 아니기 때문이다.
데이터를 train_test_split을 이용하여 임의로 분할한 경우에는 적용이 불가능하다. 왜냐하면 train_test_split을 사용하면 시간 순서가 꼬이기 때문이다.
import os
os.chdir(r"C:\Users\82102\Desktop\데이터전처리\머신러닝을 위한 필수 전처리\Part 4. 머신러닝을 위한 필수 전처리\데이터")
import pandas as pd
df = pd.read_excel("AirQuality.xlsx")
df.head() # 시계열 데이터

df.isnull().sum(axis=0)

df = df.fillna(method='ffill').fillna(method='bfill')
# 데이터에 target 값도 없고, train_test_split을 사용하면 순서가 꼬이기 때문에 원본 그대로에 대해서 fillna로 채움
# 먼저 ffill로 이전값으로 채우고, 맨앞에 있는 값들은 안채워질테니 bfill로 채운다.
df.isnull().sum()

시계열 결측치 대체를 할 때 한 변수에 결측이 많다면 이전 값을 채운다고 했을 때 그 이전 값이 굉장히 멀리 떨어진 값일 수도 있다. 이런 경우에는 근처값을 사용해서 시계열 결측치 대체를 할 수 없다.
특히 한 컬럼에 결측이 연속해서 많이 쏠린게 있다면 np.cumsum 함수를 응용해 연속으로 얼마나 결측이 발생했는지 사전에 체크한 다음 사용하는 것이 바람직하다.
'데이터 전처리 > 머신러닝을 위한 필수 전처리' 카테고리의 다른 글
| 범주형 변수 처리 방안 (0) | 2022.12.20 |
|---|---|
| 결측치 문제 해결 방법(4) 결측치 예측 모델 활용(KNNImputer) (0) | 2022.12.19 |
| 결측치 문제 해결 방법(2) 대표값으로 대체(SimpleImputer) (0) | 2022.12.15 |
| 결측치 문제 해결 방법(1) 삭제 (0) | 2022.12.14 |
| 결측치 문제 (0) | 2022.12.13 |