[파이썬] lightgbm 아웃라이어 탐지 및 처리

이번 블로그에서는 LightGBM(Gradient Boosting Framework)을 사용하여 아웃라이어를 탐지하고 처리하는 방법에 대해 알아보겠습니다. 아웃라이어는 데이터의 일부로서 다른 데이터와는 매우 다른 패턴을 가지고 있거나, 정상 데이터에서 벗어난 값입니다. 이를 효과적으로 탐지하고 처리함으로써 데이터 분석 및 머신러닝 작업의 정확도를 향상시킬 수 있습니다.

1. 데이터 로딩 및 전처리

첫 번째로, 필요한 패키지를 import하고 데이터를 로딩하고 전처리하는 과정을 진행합니다.

import lightgbm as lgb
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 데이터 로딩
data = pd.read_csv('data.csv')

# 전처리
X = data.drop('target', axis=1)
y = data['target']

# Train-Test 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2. LightGBM 모델 학습

두 번째로, LightGBM 모델을 학습시키고 예측 결과를 얻습니다.

# LightGBM 학습용 데이터셋 생성
lgb_train = lgb.Dataset(X_train, y_train)

# LightGBM 모델 설정
params = {'objective': 'regression'}
model = lgb.train(params, lgb_train, num_boost_round=100)

# 모델 예측
y_pred = model.predict(X_test)

3. 아웃라이어 탐지

세 번째로, 예측 결과를 기반으로 아웃라이어를 탐지하는 과정입니다. 예측 오차가 매우 큰 데이터를 아웃라이어로 간주합니다.

# 예측 오차 계산
errors = np.abs(y_pred - y_test)

# 기준치를 설정하여 아웃라이어 탐지
threshold = np.percentile(errors, 95)
outliers = np.where(errors > threshold)[0]

# 탐지된 아웃라이어 출력
print("탐지된 아웃라이어 개수:", len(outliers))
print("탐지된 아웃라이어 인덱스:", outliers)

4. 아웃라이어 처리

마지막으로, 탐지된 아웃라이어를 처리하는 방법입니다. 대표적인 방법으로는 예측된 값을 다시 만들어주는 방법이 있습니다.

# 아웃라이어 처리를 위한 대체값 계산
replacement = np.mean(y_train)

# 아웃라이어 대체
y_test_processed = y_test.copy()
y_test_processed[outliers] = replacement

# 아웃라이어 처리 후 모델 평가
mse = mean_squared_error(y_test_processed, y_pred)
print("아웃라이어 처리 후 평균 제곱 오차:", mse)

이제 LightGBM을 사용하여 아웃라이어를 탐지하고 처리하는 방법에 대해 소개했습니다. 이를 통해 데이터 분석 및 머신러닝 작업의 결과를 개선할 수 있습니다. 더 많은 세부적인 처리 방법에 대해서는 LightGBM 공식 문서를 참고해주세요.