NH투자증권 빅데이터 경진대회 본선 후기

KYYLE·2022년 11월 30일
0

일상

목록 보기
3/6
post-thumbnail

2022년 개최된 NH투자증권 빅데이터 경진대회 예선 후 감사하게도 본선에 진출하였습니다. 본선 대회 후 느꼈던 점을 간단하게 정리하고자 합니다.

대회 간단 개요

이번 본선은 지난 예선과 같이 주최 측에서 제공한 고객 및 거래 데이터를 분석하는 대회였습니다. 예선과 마찬가지로 대회 규정에 의거 데이터 및 데이터 정보에 대한 자세한 사항은 설명할 수 없습니다.

분석 과정

지난 예선과 이번 본선의 목표는 클러스터링 알고리즘을 활용한 고객 분류였습니다.

처음 본선을 시작할 때는 다음을 고민했습니다.

KMeans 외의 다양한 알고리즘 시도 vs. 기존 모델(예선 모델)의 분류 성능 발전

물론 다양한 알고리즘을 시도하며 모델의 분류 성능을 높이는 것이 최선이겠지만, 학업과 함께 대회를 준비해야 했으므로 후자를 택하여 다양한 알고리즘보다는 KMeans를 사용한 모델을 고도화하기로 결정했습니다.

따라서 데이터 분석의 흐름은 예선과 거의 동일합니다.

  1. 데이터 전처리 및 스케일링
  2. 군집 알고리즘 적용
  3. 군집 결과를 바탕으로 트리 기반 모델 훈련
  4. 트리 기반 모델의 특성 중요도(feature importances) 확인

분석에 사용한 사이킷런 클래스는 다음과 같습니다.

  • 스케일링 : StandardScaler
  • 데이터 압축: PCA, KPCA
  • 군집 알고리즘 : KMeans
  • 트리 기반 모델 : RandomForest

예선과의 차이점

분석 모델의 고도화가 목표였기 때문에, 예선에서 느꼈던 개선점을 이번 본선에 적용하려고 노력하였습니다.

지난 예선에 비해 이번 대회에서의 개선점은 다음과 같습니다.

  1. 결측치에 대한 단순 삭제가 아닌 적절한 전처리
    - 주어진 고객 데이터에 대해 결측치가 많은 고객 데이터의 경우에도 일반적인 기준값을 선정하여 그 값으로 결측치를 대체하였습니다.

  2. 데이터 압축 시 PCA가 아닌 KPCA 적용
    - 지난 예선에서 KPCA를 사용하면 PCA를 사용했을 때 계산되던 inertia 값이 십만 단위에서 천 단위로 줄어들었던 것을 확인했습니다. 이를 바탕으로 KPCA를 적용하여 군집 품질이 어떻게 바뀌는지 확인하였고, 훨씬 좋은 군집 결과를 얻을 수 있었습니다.

  3. 클러스터 개수를 선정할 때 inertia 기반의 엘보우 방법이 아닌 실루엣 계수 및 실루엣 그래프 활용
    - 지난 예선에서는 적절한 클러스터 개수를 결정하기 위해 inertia 기반 엘보우 방법을 사용했습니다. 이러한 방법이 애매했던바, 실루엣 계수와 실루엣 그래프를 사용하여 적절한 클러스터 개수를 선정하였습니다.

  4. 실루엣 그래프를 활용한 실제 군집 결과의 시각화
    - 모델의 군집 결과를 실루엣 그래프를 사용하여 확인할 수 있었습니다. 단순 평균 점수(inertia 등)로 군집 결과를 확인하는 것 보다는 훨씬 더 정확한 평가가 가능했습니다. 학습 데이터가 달라짐에 따라 클러스터가 어떻게 변하는지를 확인하여 더 나은 방향을 탐색할 수 있었습니다.

  5. 추가적인 특성값 사용
    - 시간에 따라 달라지는 고객 데이터의 시간 정보를 학습 데이터에 추가하는 방법을 고민했습니다. 이번 대회에서는 간단히 지난달 고객 분류 결과를 새로운 특성으로 추가하였고, 결과적으로 군집 품질이 좋아졌습니다.

이번 대회에서는 기준이 되는 베이스라인 모델을 만들고, 이후 데이터의 전처리 및 특성을 바꾸며 새로운 모델을 훈련하고 그 모델의 지표를 베이스라인 모델의 지표와 비교하였습니다. 이러한 방법을 통해 모델을 개선하기 위해 시도한 여러 방법 중 실제로 좋은 영향을 미치는 방법을 골라낼 수 있었습니다.

개선 방향

최선을 다한 본선이었지만, 여전히 아쉬운 점과 개선할 만한 부분이 많이 남아 있습니다.

  1. 적절한 클러스터 개수
    - inertia, 실루엣 그래프 등 가능한 군집 결과 품질을 확인하더라도 적절한 클러스터의 개수는 사람이 직접 선정해야 합니다. 이번 대회에서는 11개의 클러스터로 고객을 분류하였지만 11개라는 클러스터 개수는 가장 적절한 답이 아닐 수 있습니다. 최적의 클러스터 개수를 위한 실험이 필요합니다.

  2. 다양한 군집 알고리즘
    - KMeans 외에도 DBSCAN, AgglomerativeClustering과 같이 실험할 만한 군집 알고리즘이 있습니다. 특히 DBSCAN은 사전 클러스터 개수를 정하지 않고 밀집도를 기반으로 클러스터를 배정하므로 시도해 볼 만한 가치가 있다고 생각됩니다.
    - DBSCAN을 사용하기 위해서는 적절한 하이퍼파라미터를 찾아야 합니다. 주어진 데이터로 간단히 생각해 본다면, KMeans로 분류된 클러스터 안에서 각 데이터 레코드 간 유클리디안 거리를 구하고 이 값을 평균하여 각 클러스터 내 고객당 평균 거리를 계산합니다. 이 계산된 거리 값을 기준으로 하여 eps 값과 min_samples 값을 조정해 나가는 것입니다. 조정할 때는 실루엣 그래프 등을 확인하여 클러스터 분류가 어떻게 되는지 확인하며 파라미터 값을 조정합니다. eps 파라미터는 평균 거리 등 기준으로 삼을 만한 값이 있지만 min_samples 파라미터는 참고할 만한 값이 없습니다. 따라서 많은 시도를 통해 최적의 결과를 찾아야 합니다.
    - 하나의 알고리즘만을 사용하는 것이 아니라 다양한 알고리즘을 한 번에 사용하는 앙상블 방법 또한 생각해 볼 수 있습니다.

  3. 데이터의 시간 정보
    - 고정된 시간의 데이터가 아닌 기간 동안 주어진 데이터이므로 데이터 속의 시간 정보를 표현하기 위해 지난달 고객 분류 결과를 새로운 특성으로 만들어 보았습니다. 이 특성을 추가함으로 군집 결과가 매우 향상되었습니다.
    - 하지만 이런 지난달 분류 결과와 같은 특성은 모델에게 정답을 강요하는 것처럼 될 수 있습니다. 랜덤 포레스트의 특성 중요도가 이를 증거합니다. 한 특성이 너무 큰 영향을 미친다면 다른 특성이 무시될 수 있으므로 특성 중요도를 줄일 수 있는 방법을 생각해보면 좋겠습니다. 기준 달로부터 두 달 전, 세 달 전 등 더 과거의 분류 정보를 특성으로 추가하면 직전 달의 특성 중요도를 낮출 수도 있습니다. 하지만 그러한 특성이 추가될수록 다른 특성보다는 이전의 분류 결과만이 중요한 특성으로 취급되어 다른 정보는 무시될 수도 있습니다. 이러한 부분을 고려하여 시간 정보와 관련된 새로운 특성을 추가하면 더 좋은 군집 결과를 얻을 수 있을 것입니다.
    - DWT 등 Time Series Clustering에 대해 더 알아보면 좋을 것 같습니다.

  4. 클러스터링 결과 분석
    - 어떻게 보면 가장 중요한 부분입니다. 머신러닝 모델을 통해 고객을 분류하였지만, 배정된 분류 결과를 해석하고 활용하는 것은 다른 차원의 문제입니다. 각 클러스터의 특징을 정확히 파악하고 도출된 결과를 어떻게 활용할 것인지, 더 좋은 활용 방안은 무엇인지 계속해서 생각해야 합니다.

이 외에도 여러 가지 개선할 방향이 있었습니다만 데이터에 대한 자세한 정보를 포함해야 하므로 작성하진 않겠습니다.

팀원 없이 혼자 대회를 준비하느라 부족했던 점이 참 많았던 것 같지만 좋은 경험을 할 수 있었습니다. 좋은 기회를 제공해 주신 NH투자증권 및 AIFactory분들께 감사 인사를 전합니다.

profile
머신러닝 공부하는 대학생입니다

0개의 댓글