하마가 분석하마

[개인 분석-8주차] Modeling 3 본문

Brightics 서포터즈

[개인 분석-8주차] Modeling 3

Rrohchan 2021. 10. 19. 23:54

안녕하세요.

Brightics 서포터즈 노승찬입니다.

이번 주차는 마지막 모델링으로 스태킹을 시도해보겠습니다.

 

 

Modeling 3

 

프로젝트 목표

 

고객의 기본 세부 정보를 바탕으로 잠재 고객을 타겟팅 할 수 있는 알고리즘을 개발하여 보다 나은 리드 전환을 이끌어 내는 것을 목적으로 합니다.

 

불균형 해결

 

2. STACKING

 

스태킹은 현실 모델에는 자주 적용되지 않지만 각종 대회에서 모델의 성능을 높이는 데 자주 사용됩니다.

다양한 대회에서 저 또한 많이 써보았는데요. 먼저 스태킹의 기본적인 이론에 대해서 알아보겠습니다.

 

Stacking Ensembl (출처: https://bit.ly/32qNwHV)

 

  1. 각 모델별로 원본 학습/테스트 데이터를 예측한 결과 값을 기반으로 메타 모델을 위한 학습용/테스트용 데이터 생성
  2. 1)에서 생성된 학습용 데이터를 모두 스태킹 형태로 합쳐서 메타 모델이 학습할 최종 학습용 데이터 세트 생성
  3. 각 모델들이 생성한 테스트용 데이터 또한 스태킹 형태로 합쳐서 최종 테스트 데이터 세트 생성
  4. 최종적으로 생성된 학습 데이터 세트와 원본 학습 데이터의 레이블 데이터로 학습
  5. 최종 테스트 데이터로 예측 후 원본 테스트 데이터로 평가

 

스태킹에 사용한 알고리즘은 총 4개입니다.

  • XGBOOST
  • RANDOM FOREST
  • ADABOOST
  • MLP CLASSIFIER

 

 

최종 메타 모델은 랜덤 포레스트로 설정했습니다.

 

 

알고리즘 튜닝을 한 후에 스태킹을 해보았습니다. 단순한 튜닝과 개별 알고리즘들의 결과는 포함하지 않았습니다. 개별 알고리즘의 정확도가 높아지더라도 스태킹 후에는 결과가 더 떨어질 수 있기 때문입니다. 스태킹 결과를 확인해 보면 여전히 '잠재고객'을 제대로 맞추지 못하는 모습을 보였습니다. 여러 상황을 고려해볼 때, smote 이후의 랜덤 포레스트가 가장 유의미한 결과라고 생각됩니다.

 

Conclusion

 

불균형을 해소하기 위해 여러 방법을 시도해보았습니다. 스태킹을 하는 경우 몇몇 알고리즘이 파라미터를 조금만 조정해도 오류가 떠서 최대한 오류가 안 나는 방향으로 조정하였습니다.

 

기본적으로 제공되는 정보가 크게 결정적이지 않고, 어떤 마케팅을 하기위한 '잠재고객'인지에 관한 정보가 없어 대부분의 과정을 추측하면서 진행하였습니다. 

 

우선 이 프로젝트를 한 배경에 대해서 다시 생각해보고 어떤 방법을 채택할지 결정해보겠습니다. 본 프로젝트는 고객의 기본 정보를 바탕으로 적격 리드 및 잠재 고객을 빠르게 식별하여 해당 고객의 구매 잠재력을 파악하고, 해당 고객을 전환율이 더 높은 리드 세그먼트로 승인하는 것이라고 보았습니다. 

 

위와 같은 관점에서 볼 때, '잠재고객'이 아닌 고객을 '잠재고객'이라고 두었을 때 손해가 더 큰지. 반대인 경우에 손해가 더 큰지 생각해보겠습니다. 그리고 이를 바탕으로 지금까지 나온 결과 중에 어떤 것을 선택할지 결정해보겠습니다.

 

  1. '잠재고객'에게 사용되는 마케팅 비용이 크지 않을 때
  2. '잠재고객'에게 사용되는 마케팅 비용이 클 때

1번의 경우에는 '잠재고객'의 가능성이 조금만 보여도 포함시켜야 합니다. 기업에서 들어가는 돈이 많지 않기에 최대한 많은 '잠재고객'을 선별하여 마케팅을 하는 게 맞다고 생각합니다.

 

2번의 경우에는 선별되는 한명 한 명의 고객에게 큰 비용이 들어가기에 신중하게 선택해야 합니다. 따라서 '잠재고객'으로 선택되는 고객이 적더라도 확실한 고객만이 선택되게 해야 합니다.

 

본 프로젝트에 나와있는 고객들의 정보는 은행이 가질 수 있는 기본적인 정보들 중에 하나입니다. 이러한 기본 정보들로는 1차 필터링 정도의 역할을 할 수 있으리라 생각합니다. 따라서 위의 관점 중 1번으로 접근하여, 약간의 가능성이라도 보이는 고객들을 1차 '잠재고객'이라고 판단하고 추가적인 선별 방법을 고려해야 할 것 같습니다.

 


 

약 8주 동안의 개인 프로젝트가 마무리되었습니다. 브라이틱스를 사용하면서 다양한 전처리를 시도하다 보니 아이디어 구현하는 데에 시간이 가장 오래 걸린 것 같습니다. 포스팅에 포함하지 않았지만 중간중간 기본 파라미터를 사용하여 알고리즘을 돌려 성능을 확인했고, 다른 방법의 전처리도 적용해 보았습니다. '1'클래스를 분류하는 게 생각보다 많이 어렵네요.. 정확한 성능은 TEST 데이터에 적용해보고, 나중에 정답이 공개되면 비교를 해봄으로써 알 수 있을 것 같습니다.  지금까지 개인 프로젝트의 포스팅이었습니다. 감사합니다!

 

"Brightics 서포터즈 활동의 일환으로 작성된 포스팅입니다"

<a href="https://kr.freepik.com/vectors/people">People 벡터는 pikisuperstar - kr.freepik.com가 제작함</a>