파이썬 Pandas DataFrame 결측치 회귀모형 추정값으로 채우기
데이터 분석에서 결측값은 분석에 방해가 되는 요소입니다. 결측값을 제외하고 분석을 진행하게 되면 데이터 분석의 정확도를 높일 수 있습니다. 하지만 결측값을 제외하면 데이터의 수가 줄어들게 되어 분석의 정확도가 낮아질 수 있습니다. 이러한 문제를 해결하기 위해서 결측값을 선형회귀모형으로 대체할 수 있습니다.
(1) 결측값을 제외한 데이터로부터 선형회귀모형 훈련하기
선형회귀모형은 독립변수와 종속변수 사이의 선형적인 관계를 나타내는 모델입니다. 이 모델을 통해 결측값을 대체할 수 있습니다. 선형회귀모형을 훈련하기 위해서는 다음과 같은 과정이 필요합니다.
- 데이터 불러오기
- 결측값 제거하기
- 종속변수와 독립변수 선택하기
- 선형회귀모형 만들기
- 모델 훈련하기
(2) 선형회귀모형으로 부터 추정값 계산하기
선형회귀모형을 통해 추정값을 계산할 수 있습니다. 추정값은 모델을 통해 독립변수를 입력하면, 모델에서 예측된 종속변수 값입니다. 따라서 결측값을 선형회귀모형으로 대체하기 위해서는 결측값을 포함한 데이터를 모델에 입력하고, 모델에서 예측된 종속변수 값을 결측값으로 대체하면 됩니다.
(3) pandas 의 fillna() 메소드 또는 numpy의 np.where() 메소드를 사용해서 결측값인 경우 선형회귀모형 추정값으로 대체하기
선형회귀모형으로 결측값을 대체하기 위해서는 pandas의 fillna() 메소드나 numpy의 np.where() 메소드를 사용할 수 있습니다.
- pandas의 fillna() 메소드를 사용하는 방법
import pandas as pd
from sklearn.linear_model import LinearRegression
# 데이터 불러오기
df = pd.read_csv('data.csv')
# 결측값 제거하기
df.dropna(inplace=True)
# 종속변수와 독립변수 선택하기
X = df[['feature1', 'feature2']]
y = df['target']
# 선형회귀모형 만들기
model = LinearRegression()
# 모델 훈련하기
model.fit(X, y)
# pandas의 fillna() 메소드를 사용하는 방법에 이어서 결측값 대체하기
# 결측값이 있는 데이터 선택하기
X_missing = df[df.isna().any(axis=1)][['feature1', 'feature2']]
# 결측값 대체하기
y_pred = model.predict(X_missing)
X_missing['target'] = y_pred
df_filled = pd.concat([df, X_missing], axis=0)
# 결측값 대체 후 모델 재학습
X_filled = df_filled[['feature1', 'feature2']]
y_filled = df_filled['target']
model.fit(X_filled, y_filled)
위 코드에서는 결측값이 있는 데이터를 선택한 후, 모델을 사용하여 결측값을 대체합니다. 먼저, 결측값이 있는 데이터를 선택하기 위해 `isna()` 메소드를 사용합니다. `any(axis=1)` 옵션을 사용하면 행 기준으로 결측값이 하나 이상 있는 데이터를 선택할 수 있습니다.
선택된 데이터를 이용하여 `model.predict()` 메소드를 사용하여 결측값을 예측합니다. 그 다음, `fillna()` 메소드를 사용하여 결측값을 예측값으로 대체합니다. 최종적으로 결측값이 대체된 데이터를 이용하여 모델을 다시 학습합니다.
2. numpy의 np.where() 메소드를 사용하는 방법
import numpy as np
from sklearn.linear_model import LinearRegression
# 데이터 불러오기
data = np.genfromtxt('data.csv', delimiter=',')
# 결측값 제거하기
data = data[~np.isnan(data).any(axis=1)]
# 종속변수와 독립변수 선택하기
X = data[:, :2]
y = data[:, 2]
# 선형회귀모형 만들기
model = LinearRegression()
# 모델 훈련하기
model.fit(X, y)
# 결측값 대체하기
X_missing = data.copy()
X_missing[:, 2] = np.where(np.isnan(X_missing[:, 2]), model.predict(X_missing[:, :2]), X_missing[:, 2])
위 코드에서는 numpy의 np.where() 메소드를 사용하여 결측값을 대체합니다. 결측값이 있는 데이터를 선택한 후, np.where() 메소드를 사용하여 결측값을 대체합니다. np.isnan() 메소드를 사용하여 결측값을 찾고, 대체할 값으로 모델을 사용합니다. X_missing[:, 2]는 target 컬럼을 의미하며, X_missing[:, :2]는 feature1과 feature2를 의미합니다.
이러한 방법으로 선형회귀모형을 사용하여 결측값을 대체할 수 있습니다. 결측값을 대체함으로써 데이터 분석의 정확도를 높일 수 있으며, 분석 결과를 신뢰할 수 있습니다.