스타벅스의 성공을 예측하고 제공의 성공과 가장 관련된 요소를 찾다

7072 단어 machinelearning

프로젝트 개요


내가 이 블로그를 쓴 것은 내가 스타벅스의 Udacity 데이터 과학 나노 학위의 정점 프로젝트에서 발견한 것을 보고하기 위해서이다.
스타벅스는 판촉 활동에 대한 데이터를 제공해 분석하고 있다. 이 데이터 집합에는 스타벅스 보상 모바일 애플리케이션의 고객 행위를 모의하는 모의 데이터가 포함되어 있다.
프로젝트의 GitHub repository 를 찾을 수 있으며, 프로젝트의 Jupyter Notebook 파일에서 코드에 대한 상세한 설명을 찾을 수 있습니다.

상업적 이해


이 분석에서 나는 내가 파악한 데이터로 해결 방안을 찾으려고 시도하고 싶다.
데이터 -> 문제 -> 솔루션

문제 진술


  • 우리는 인구 통계와 견적 정보에 근거하여 견적을 성공적으로 분류할 수 있습니까?
  • 제 방법은 기계 학습 모델을 구축하여 데이터에 제공된 인구 통계 정보와 견적 세부 사항에 따라 견적 성공률을 예측하는 것입니다.
  • 어떤 오퍼가 가장 성공적입니까?
  • 누가 돈을 더 많이 씁니까?남자예요, 여자예요?
  • 두 가지 문제에 대해 나는 통찰력을 얻기 위해 필요한 실체를 포함하는 도표를 그릴 계획이다.

    데이터 이해


    데이터 세트는 다음 세 파일에 포함됩니다.
  • 투자조합.json - 쿼트당 쿼트 ID 및 메타데이터(기간, 유형 등)
  • 개인 정보.json-각 고객의 인구 통계 데이터
  • 기록.json - 거래 기록, 받은 견적, 조회한 견적, 완성된 견적.
  • 데이터 정리


    다음은 개인 정보, 투자 조합과 성적표 데이터가 집중된 데이터 정리 절차다.
  • 얼마나 많은 데이터 항목이 값이 부족한지 검사하고 값이 부족한 관련성을 찾습니다.
  • 흥미로운 것은 개인 자료 데이터에서 볼 수 있듯이 모든 가치가 없는 성별에 대해 수입도 미지수이다.또한 둘 다 알 수 없는 경우 NaN 값이 있는 모든 행의 나이는 118로 설정됩니다.부족치는 약 12.8%이다. 이것은 비교적 적은 비율이기 때문에 나의 전략은 기계 학습 모델의 부족치를 포기하는 것이다.그래서 나는 이곳에서 삽입 전략을 실시하는 것을 고려하지 않는다.
  • 분류 데이터 형식 열에 가짜 사람 만들기
  • 원하는 열에 대해 만든 날짜와 시간 형식입니다.
  • 나는 성적표와 개인 자료 데이터에 Money Spend이라는 새로운 데이터 상자를 추가해서 고객 Id를 통합해서 성별에 기반한 돈을 쓰는 행위를 보았다.

    누가 돈을 더 많이 씁니까?남자예요, 여자예요?


    이 점을 이해하려면 성별과 비용에 따라 도표를 그려 보세요.

    이 도표에서 여성이 전체적으로 돈을 더 많이 쓴다는 것을 명확하게 분석할 수 있다.
    받은, 보기, 완성된 견적, 그리고 bogo, 할인, 정보 등 모든 활동의 분포 상황을 보기 위해 도표를 그려라.

    많은 사람들이 견적을 받았는데, 그 중 많은 사람들이 견적을 보았고, 단지 소수의 사람들만이 실제 거래를 통해 견적을 얻었다.견적을 보내는 것은 회사에 있어서 원가이기 때문에 적당한 사람에게 견적을 보내는 것이 매우 중요하고 더 많은 사람을 끌어들여 거래를 할 수 있다.

    데이터 준비


    단지 데이터 정리만으로는 부족하기 때문에 일부 상황에서 기존 데이터에 따라 새로운 데이터를 준비하여 데이터에 대한 더 많은 견해를 얻어야 할 수도 있다.
    데이터셋에는 특정한 사례가 있기 때문에 이 단계가 필요합니다.
    실제 견적을 검토하지 않고 견적을 완성하고 혜택을 받을 수 있습니다.따라서 이 고객들은 어떤 방식으로든 구매를 할 수 있기 때문에 이 고객들을 식별하는 것이 필요하다.
    나는 데이터에서 어떤 결과가 성공 사례로 분류될 수 있는지를 정의하는 단독 칼럼을 만들 것이다.
    BOGO와 할인 혜택
    일반적으로 BOGO 및 할인 혜택의 가능한 활동 경로는 다음과 같습니다.

  • 성공 견적: 견적 수신→ 쿼트 보기→ 트레이드→ 쿼트 완료

  • 잘못된 쿼트: 쿼트 수신→ 쿼트 보기

  • 쿼트 보기 안함: 쿼트 수신

  • 실패한 성공: 견적 수신→ 트레이드→ 쿼트 완료
  • 성공 견적은 하나의 경로이지만, 이것은 견적이 보기 후에 성공적으로 완성되었음을 반영하고, 이것은 우리가 원하는 (이상적인 결과) 이다
    무효 견적과 조회하지 않은 견적은 모두 견적이 성공하지 못했거나 고객의 거래(또는 거래 부족)를 초래하지 않았음을 나타낸다.이것은 요약 실패로 간주될 수 있다.
    그러나 중요한 것은 확인되지 않은 성공 사례가 존재할 수도 있다는 것이다. 이것은 고객이 견적을 보지 않았지만 어쨌든 견적을 완성했다는 것을 의미한다. 즉, 고객이 거래를 했고 견적에 상관없다는 것이다.
    따라서 보지 못한 성공과 성공한 견적을 구분하는 것이 매우 중요하다. 그래야 적당한 고객을 찾을 수 있다.
    이상적인 상황에서 스타벅스는 전시 활동 경로 1의 고객층을 겨냥하고
    경로 2와 3을 가장 잘 따를 수 있는 사람들을 겨냥한 것이 아니라 거래를 하지 않기 때문이다
    아니면 4, 어떻게든 거래를 하기 때문에 스타벅스가 할인을 해주거나 보고 혜택을 주면 사실상 손해를 본다.
    그래서 이 단계에서 나는 success라는 열을 만들 것이다. 만약 그것이 성공적인 견적이라면 그 값은 1이고 그렇지 않으면 0이다.
    현재, 나는 기계 학습 분류 모델을 제시하기 위해 모든 데이터를 full_data라는 데이터 프레임에 통합할 것이다.

    분류 모델을 이용하여 견적 성공률을 예측하다


    Randomforest 모델을 기본 분류기로 사용하는 Classification_model 함수를 정의하고 있습니다.
    사용 지표는 정확도 평점, roc 평점과 auc 평점이다.
    무작위 삼림 모형에 대해 나는 다음과 같은 결과를 얻었다.
                     precision    recall  f1-score   support
    
        failure       0.70      0.70      0.70     10390
        success       0.67      0.67      0.67      9561
    
    avg / total       0.69      0.69      0.69     19951
    
    Overall model accuracy:  0.686331512204902
    Train ROC AUC score:     0.9863216113589416
    Test ROC AUC score:  0.7465330713208808
    
    AdaBoost 분류기에 대한 결과는 다음과 같습니다.
                 precision    recall  f1-score   support
    
        failure       0.68      0.68      0.68     10390
        success       0.66      0.66      0.66      9561
    
    avg / total       0.67      0.67      0.67     19951
    
    Overall model accuracy:  0.6710941807428199
    Train ROC AUC score:     0.7295966493333714
    Test ROC AUC score:  0.7299133701950669
    
    그래서 저는 AdaBoostClassifier가 일치하는 것을 제공하지 않는 것이 더 좋다고 생각합니다. 그래서
    AdaBoost 분류 모델은 고객 및 쿼트 특성에 따라 쿼트의 성공 여부를 예측하는 데 사용됩니다.
    AdaBoostClassifier에서 다음 매개변수에 대해 GridSearchCV를 실행하고 있습니다.
    param_grid={'n_estimators': [50, 100, 500],
                'learning_rate': [0.1,0.7, 1],
                 'algorithm': ['SAMME.R','SAMME']}
    
    나는 아래의 매개 변수를 가장 좋은 매개 변수로 얻었다.
    {
       'algorithm': 'SAMME.R', 
       'learning_rate': 0.1, 
       'n_estimators': 500
    }
    
    이러한 매개변수를 적용하면 다음과 같은 결과가 발생합니다.
                 precision    recall  f1-score   support
    
        failure       0.68      0.68      0.68     10390
        success       0.65      0.66      0.65      9561
    
    avg / total       0.67      0.67      0.67     19951
    
    Overall model accuracy:  0.6689890231066112
    Train ROC AUC score:     0.7295248849870593
    Test ROC AUC score:  0.7302833968483007
    
    gridsearchcv를 통해 찾은 가장 좋은 모델의 성능은 대부분의 기본 설정을 사용한 초기 모델보다 좋지 않습니다.그래서 저는 Adaboost 분류기의 전체 모델을 사용하고 기본 설정을 가지고 있어서 더 이상 처리할 수 있습니다.
    내가 고려한 마지막 모델의 정확도는 67% 인데, 이것은 틀림없이 개선할 여지가 있을 것이다.
    모델을 바탕으로 모델에 사용되는 데이터의 특징적 중요성을 그렸다.

    이 모델을 바탕으로 한 견적 성공의 가장 큰 관련 요소는 다음과 같습니다.
  • 회원기한
  • 매출
  • 연령
  • 견적 기간
  • 어떤 오퍼가 가장 성공적입니까?


    이를 이해하기 위해 BOGO와 할인 혜택의 표현을 비교한 도표를 그렸다.

    차트를 보면 할인 혜택이 더 성공적이라고 할 수 있습니다. 왜냐하면
    '완성 견적'의 절대 수량이 BOGO 견적보다 약간 높을 뿐만 아니라 전체 완성/수신률도 약 7% 높다.그러나 BOGO 혜택은 고객이 보거나 볼 수 있는 더 큰 기회가 있다.그러나 받은 견적을 완성된 견적으로 전환하는 것은 bogo 견적이 아닌 할인 견적을 통해 실현할 수 있다.
    우리는 또한 성공적인 견적을 초래한 견적을 검사할 수 있는데 이것은 다음과 같은 경로를 따랐다는 것을 의미한다
    견적을 받다→ 쿼트 보기→ 트레이드→ 쿼트가 완료되었습니다.

    이는 보고 혜택보다 할인 혜택이 더 좋다는 뜻이기도 하다.

    검토 및 개선 사항은 다음과 같습니다.

  • 더 좋은 모델링 기술과 알고리즘을 탐색하여 이런 방식으로 모델의 성능을 향상시킬 수 있는지 확인한다.
  • 부족한 값의 관찰값을 삭제하지 말고 어떤 삽입 정책을 사용해서 이런 방식으로 모델을 개선할 수 있는지 확인한다.
  • 좋은 웹페이지 즐겨찾기