반응형

회귀 모델은 이상치(outlier)라 불리는 주류 또는 정상 분포에서 벗어난 값에 의해 영향을 많이 받습니다. 데이터 과학자들은 이런 이상치들을 그들의 경험과 산업 분야에 대한 지식에 근거해 걸러냅니다.

 

RANSAC(RANdom SAample Consensus)이라 불리는 알고리즘은 정상 분포에 속해 있는 데이터 집합(이를 inlier로 부릅니다)으로 회귀 분석을 수행할 수 있게 해주는 기법입니다.

 

RANSAC 알고리즘은 다음과 같은 절차로 수행됩니다.

 

  1. 데이터에서 임의의 개수를 선택하여 이를 inlier로 가정하고 회귀 모델을 구합니다.
  2. 나머지 데이터들을 회귀 모델과 비교하고 사용자가 지정한 허용 오차내에 있는 데이터들을 inlier로 포함시킵니다.
  3. 재구성된 inlier를 이용해 다시 회귀 모델을 구합니다.
  4. 회귀 모델과 inlier의 오차를 측정합니다.
  5. 이 오차가 사용자가 지정한 값 내에 있거나 지정한 알고리즘 구동 반복회수에 도달했으면 종료합니다. 만약 이 조건을 만족하지 못하면 1단계부터 다시 시작합니다.

 

scikit-learn은 RANSAC 알고리즘을 위한 RANSACRegressor 객체를 제공합니다. 아래의 코드를 봅니다.

 

skl_ransac.py

 

 

[24편]의 skl_lrgd.py와 달라진 부분은 LinearRegression()을 RANSACRegressor() 객체의 첫 번째 인자로 대입한 부분입니다.

 

>>> ransac = RANSACRegressor(LinearRegression(), max_trials=100, min_samples=50,

                            residual_metric=lambda x: np.sum(np.abs(x), axis=1),

                            residual_threshold=5.0, random_state=0)

 

RANSACRegressor의 인자는 다음과 같은 의미를 가집니다.

  • max_trials: 알고리즘의 최대 반복 회수
  • min_samples: inlier 값으로 무작위로 선택할 샘플의 최소 개수
  • residual_metric: 회귀 모델과 데이터의 오차 측정 함수 지정
  • residual_threshold: inlier로 포함시키기 위한 허용 오차

 

residual_metric에 지정된 람다 함수는 샘플 데이터와 회귀 모델과의 수직 거리의 합을 계산하는 것입니다.

residual_threshold의 값으로 5.0을 지정하여 허용 오차가 5.0 이내이면 inlier로 포함시킵니다. 이 값을 지정하지 않으면 scikit-learn은 허용 오차 값으로 대상 변수 y의 중앙값 절대 편차(Median Absolute Deviation)를 디폴트로 지정합니다. RANSAC에서 이 허용 오차의 값을 적절하게 지정하는 것은 중요한데, 적절한 허용 오차를 찾는 것이 또 다른 문제가 되기도 합니다. 이는 데이터를 분석하는 사람의 경험치나 능력으로 해결되는 문제입니다. 아무튼 여기서는 허용 오차의 값을 5.0으로 지정했습니다.

 

나머지 코드는 inlier와 특이값을 산점도로 그리고, 회귀 모델을 matplotlib으로 그려주는 로직입니다. skl_ransac.py를 실행하면 아래와 같은 결과가 나옵니다.

 

 

 

위 그림에서 파란색 원으로 표시된 데이터가 inlier이며 연두색 사각형으로 표시된 데이터가 이상치입니다. skl_ransac.py를 실행하여 도출된 회귀선 기울기와 절편의 값을 이전 포스팅의 skl_lrgd.py를 실행하여 도출된 값과 비교해보면 기울기는 9.102에서 9.621로 변했고, y절편의 값도 -34.671에서 -37.137로 변했다는 것을 알 수 있습니다.

 

이상치를 포함한 모든 데이터에 대해서 계산한 회귀 모델과 이상치를 제거한 후 계산한 회귀 모델 중 어느 것이 더 더 나은 것인지는 테스트를 하기 전까지는 알기 어렵습니다. 다음 포스팅에서는 우리가 계산한 회귀 모델의 적합도에 대해 정량적으로 측정하고 분석하는 방법에 대해 살펴보겠습니다.


반응형

+ Recent posts