관리 메뉴

TEAM EDA

Elo Merchant Category Recommendation - Help understand customer loyalty 본문

EDA Study/캐글

Elo Merchant Category Recommendation - Help understand customer loyalty

김현우 2019. 3. 2. 15:16

개요 

 

이번 자료는 Elo Merchant Category Recommendation - Help understand customer loyalty(https://www.kaggle.com/c/elo-merchant-category-recommendation)의 데이터 탐색부터 모델링 작업까지의 과정을 정리한 자료입니다. 

 

 

마을의 익숙지 않은 지역에서 배고파하며 개인의 취향에 따라 적절한 순간에 레스토랑 추천을 받았다고 상상해보십시오. 이 추천서는 아주 가까이에 있는 지역의 신용 카드 제공 업체로부터 할인 된 가격으로 제공됩니다!

 

현재 브라질의 최대 결제 브랜드 중 하나 인 Elo는 카드 회원에 대한 프로모션 또는 할인을 제공하기 위해 상인과의 파트너십을 구축했습니다. 그러나 이러한 프로모션은 소비자 또는 판매자 모두에게 효과가 있습니까? 고객은 그들의 경험을 즐긴다? 상인들은 반복적 인 사업을 보나요? 개인화가 중요합니다.

 

Elo는 음식부터 쇼핑에 이르기까지 고객의 라이프 사이클에서 가장 중요한 측면과 선호 사항을 이해할 수있는 기계 학습 모델을 구축했습니다. 그러나 지금까지는 개인이나 프로필을 위해 특별히 맞춤 설정된 것은 없습니다. 이것은 당신이 들어오는 곳입니다.

 

이 경쟁에서, Kagglers는 고객 충성도의 신호를 밝힘으로써 개인에게 가장 관련있는 기회를 식별하고 제공하는 알고리즘을 개발할 것입니다. 귀하의 의견은 고객의 삶을 개선하고 Elo가 원치 않는 캠페인을 줄이고 고객을위한 올바른 경험을 창출하도록 도와줍니다.

 

데이터

 

 

변수

 

1. Train/Test.csv

 

 

 

2. historical_transactions/New_merchant_period.csv

 

 

 

 

3. Merchants.csv

 

 

 

특이 사항

 

 

1. 데이터가 시뮬레이션을 통해 나온 자료이다. 

> Note: All data is simulated and fictitious, and is not real customer data

2. 타겟에 이상치가 존재한다. 

3. hist에는 있고 new에는 없는 카드가 존재한다. 

> data의 leakage를 없애기 위해서 일부로 제거했음. 

 

우승자의 아이디어

 

1. 데이터 전처리 

 

 

데이터는 Historical.csv , New merchant historical.csv, Merchants.csv 3가지와 변수의 조합에 따라서 나눈것이 인상적이었음.  authorized_flag라는 거래가 성사 되었는지 여부라는 중요한 피쳐로 데이터를 분리해서 사용하거나 Month_lag로 달마다 데이터를 나누어서 사용. 

 

2. 변수 생성

2-1. 기본적인 연산, 통계값 

 

 

purchase_amount_new : 기존의 시뮬레이션된 데이터가 어떻게 나온 것인지를 해석해서 만든 새로운 변수. 

- https://www.kaggle.com/raddar/target-true-meaning-revealed

https://www.kaggle.com/raddar/towards-de-anonymizing-the-data-some-insights

 

> purchase_amount_new만 사용했을때에는 의미 없었고 둘을 같이 사용하면 의미가 있었음 !!!

> 3에서는 max의 비율을 계산했는데 단순 빼기도 굉장히 중요한 변수 였음. 

 

2-2. 카테고리 변수 

 

historical과 new_merchant_historical에 있는 카테고리 정보의 손실을 막기 위한 방법. 

- Word2Vec : 단어의 유사도를 계산하는 방법(https://eda-ai-lab.tistory.com/118)

Fasttext : Word2Vec를 기본으로 부분단어(subword)의 벡터들로 표현한다는 점. 예를들어, 영화가 들어오면 영화다, 영화였다, 작품, 영화임 이런식으로 나옴.  

위의 두가지는 보통 단어에 사용하는 방법. 이것을 카테고리형의 데이터에 적용하는게  신기했음. 여러개의 카테고리 변수들을 이은 다음에 Word2vec과 FastText 적용. 

- SVC : Support vector classifier인데 이것을 어떻게 활용하였는지는 잘 모르겠음. 

- Counter Vectorizer + SVD, PCA : 원핫인코딩형태로 만든 다음에 SVD, PCA를 사용하여 차원을 축소. 

- frequency : Frequency Encoding으로 각 값이 나온 빈도로 교체 

 

2-3. 그 외

 

 

 

변수 선택

 

 

참고링크 ; http://otzslayer.github.io/machine-learning/feature-selection/

- Null Importance

참고링크 : https://www.kaggle.com/ogrellier/feature-selection-with-null-importances

- RFE(Recursive Feature Elimination) : 코드 http://blog.datadive.net/selecting-good-features-part-iv-stability-selection-rfe-and-everything-side-by-side/ : RF를 이용하여 변수의 조합을 만들어내고 가장 좋았던 케이스를 선택. 

- LGB 

- Boruta

참고링크 : http://otzslayer.github.io/machine-learning/boruta-algorithm/

- Adversarial validation

 

트릭 

 

 

 

참고링크

https://wikidocs.net/22660 

https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/07/06/fasttext/

https://datascienceschool.net/view-notebook/6927b0906f884a67b0da9310d3a581ee/

https://wikidocs.net/22660 

https://www.youtube.com/watch?v=sY4YyacSsLc

https://ngio.co.kr/5324

https://ratsgo.github.io/natural%20language%20processing/2017/03/08/word2vec/

https://ratsgo.github.io/from%20frequency%20to%20semantics/2017/03/30/word2vec/

https://darkpgmr.tistory.com/106

http://otzslayer.github.io/machine-learning/feature-selection/

http://otzslayer.github.io/machine-learning/boruta-algorithm/

 

수상자 디스커션링크

7등 솔루션(senkin13 : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82055)

55등 솔루션(ChrisCC : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82062)

10등 솔루션( YuryBolkonskiy : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82093 )

13등 솔루션(Raddar : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82088#latest-479720)

18등 솔루션(Pocket : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82107)

32등 솔루션 (AmirH : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82126)

11등 솔루션 ( Zakaria EL Mesaoudi : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82127 )

16등 솔루션 (nlgn : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82166)

19등 솔루션 (hmdhmd: https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82178)

21등 솔루션 ( bestpredict : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82235 )

5등 솔루션 ( Evgeny Patekha : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82314 )

14등 솔루션 ( KimposiPungmudong : https://www.kaggle.com/c/elo-merchant-category-recommendation/discussion/82375