├── README.md ├── case ├── README.md └── iFood Data Analyst Case.pdf ├── data ├── README.md ├── customers_clustered.csv ├── customers_new_features_and_drop.csv ├── customers_new_features_and_drop_dummies.csv └── ml_project1_data.csv ├── images ├── comparing_models.png ├── pairplot_clusters.png └── pca_clusters.png ├── notebooks ├── 00_package_versions.ipynb ├── 01_eda.ipynb ├── 02_clustering.ipynb ├── 03_clustering_pca.ipynb ├── 04_classification.ipynb ├── 05_classification_logreg.ipynb └── auxiliary_functions.py └── reports └── eda.html /README.md: -------------------------------------------------------------------------------- 1 | [](https://www.linkedin.com/in/flsbustamante/) 2 | [](https://www.python.org/) 3 | 4 | # Case iFood - Analista de dados 5 | 6 | Considere uma empresa bem estabelecida que atua no setor de varejo de alimentos. Atualmente, eles têm cerca de vários milhares de clientes registrados e atendem quase um milhão de consumidores por ano. Eles vendem produtos de 5 grandes categorias: vinhos, carnes, frutas exóticas, peixes especialmente preparados e produtos doces. Estes podem ser divididos ainda mais em produtos de *gold* e regulares. Os clientes podem encomendar e adquirir produtos por meio de 3 canais de vendas: lojas físicas, catálogos e site da empresa. Globalmente, a empresa teve receitas sólidas e uma linha de fundo saudável nos últimos 3 anos, mas as perspectivas de crescimento dos lucros para os próximos 3 anos não são promissoras... Por esse motivo, várias iniciativas estratégicas estão sendo consideradas para inverter essa situação. Um deles é melhorar o desempenho das atividades de marketing, com foco especial em campanhas de marketing. 7 | 8 |  9 | 10 | Projeto de ensino utilizado em curso de Ciência de Dados ministrado por mim para a [Hashtag Treinamentos](https://www.hashtagtreinamentos.com/). Baseado no processo seletivo para Analista de Dados do iFood disponível [neste repositório](https://github.com/ifood/ifood-data-business-analyst-test). 11 | 12 | Descrição completa do case [aqui](case/README.md). 13 | 14 |
17 | 18 | ## Objetivos 19 | 20 | O objetivo deste projeto é mostrar aos alunos como estruturar um projeto para um processo seletivo que foi aplicado na vida real. 21 | 22 | Durante o curso, mostrei a importância de realizar o pré-processamento dos dados, bem como a importância de se realizar a análise exploratória dos dados. Muito foi discutido sobre o que deve ser apresentado para em um documento técnico e o que deve ser apresentado em uma apresentação para um público não técnico. 23 | 24 | Objetivos detalhados: 25 | 26 | - Construir uma análise exploratória robusta. 27 | - Segmentar os clientes da base de dados fornecida. 28 | - Construir um modelo de classificação para prever se um cliente irá comprar o produto oferecido na campanha. 29 | - Apresentar uma estrutura de projeto de Ciência de Dados, com a utilização de notebooks, scripts, relatórios e repositório no GitHub. 30 | - Apresentar boas práticas de programação em Python, como a utilização de funções e arquivos de script para facilitar o reaproveitamento de código. 31 | - Mostrar boas práticas de uso do SciKit-Learn, como a utilização de pipelines e otimização de hiperparâmetros. 32 | 33 | ## Estrutura do repositório 34 | 35 | ``` 36 | ├── case 37 | ├── data 38 | ├── images 39 | ├── notebooks 40 | ├── reports 41 | ``` 42 | 43 | - Na pasta `data` estão os dados utilizados no projeto. O arquivo `ml_project1_data.csv` é o dataset utilizado originalmente. Os demais arquivos são os datasets gerados durante o projeto. 44 | - Na pasta `images` estão as imagens utilizadas neste README. 45 | - Na pasta `notebooks` estão os notebooks com o desenvolvimento do projeto. 46 | - Na pasta `reports` estão os relatórios gerados durante o projeto utilizando a biblioteca [ydata-profiling](https://github.com/ydataai/ydata-profiling). 47 | 48 | ## Detalhes do dataset utilizado e resumo dos resultados 49 | 50 | Uma descrição detalhada do dataset utilizado está disponível [aqui](data/README.md). 51 | 52 | Com um pipeline com pré-processamento, PCA e K-Means, a base foi segmentada em 3 clusters: 53 | 54 |  55 | 56 | Análise por cluster: 57 | 58 | - Cluster 0: 59 | - Renda alta 60 | - gasto alto 61 | - muito provalmente não tem filhos 62 | - mais propenso a aceitar campanhas 63 | - cluster sem pessoas com escolaridade básica 64 | - sem um perfil de idade que se destaque 65 | 66 | - Cluster 1: 67 | - Renda baixa 68 | - gasto baixo 69 | - provalmente tem filhos 70 | - baixa propensão a aceitar campanhas 71 | - único cluster com porcentagem significativa de pessoas com escolaridade básica 72 | - pessoas mais jovens 73 | 74 | - Cluster 2: 75 | - Renda intermediária 76 | - gasto intermediário 77 | - provalmente tem filhos 78 | - pode aceitar campanhas 79 | - pessoas com idade mais elevada 80 | 81 | Posteriormente, três modelos de classificação foram treinados para prever se um cliente irá comprar o produto oferecido na campanha. Os modelos utilizados foram: 82 | 83 | - Regressão Logística 84 | - Decision Tree 85 | - KNN 86 | 87 | Um DummyClassifier foi utilizado como baseline. Os modelos foram comparados com base em 6 métricas: 88 | 89 |  90 | 91 | Com base nessa comparação, o modelo de Regressão Logística foi escolhido para passar por uma otimização de hiperparâmetros. 92 | 93 | ## Como reproduzir o projeto 94 | 95 | O projeto foi desenvolvido utilizando o Python 3.11.5. Para reproduzir o projeto, crie um ambiente virtual com o Conda, ou ferramenta similar, com o Python 3.11.5 e instale as bibliotecas abaixo: 96 | 97 | | Biblioteca | Versão | 98 | | ---------------- | ------ | 99 | | Imbalanced-Learn | 0.11.0 | 100 | | Matplotlib | 3.7.2 | 101 | | NumPy | 1.24.3 | 102 | | Pandas | 1.5.3 | 103 | | Scikit-Learn | 1.3.0 | 104 | | Seaborn | 0.12.2 | 105 | 106 | Essas são as bibliotecas principais utilizadas no projeto. O relatório foi gerado com a biblioteca [ydata-profiling](https://github.com/ydataai/ydata-profiling), instale-a se quiser reproduzir o relatório. 107 | -------------------------------------------------------------------------------- /case/README.md: -------------------------------------------------------------------------------- 1 | # Caso para Analista de Dados CRM - iFood 2 | 3 | Tradução do case original em inglês para português. O texto original está [neste arquivo PDF](./iFood%20Data%20Analyst%20Case.pdf) baixado do [repositório do GitHub da iFood](https://github.com/ifood/ifood-data-business-analyst-test) para este case. 4 | 5 | ## Texto de apresentação 6 | 7 | O iFood é o aplicativo líder de entrega de alimentos no Brasil, presente em mais de mil cidades. 8 | 9 | Manter um alto engajamento do cliente é fundamental para o crescimento e consolidação da empresa na posição como líder de mercado. 10 | 11 | Os analistas de dados que trabalham na equipe de dados são constantemente desafiados a fornecer insights e valor para a empresa por meio de projetos de escopo aberto. Este caso pretende simular isso. 12 | 13 | Neste case, você recebe um conjunto de dados de amostra, que simula metainformações sobre o cliente e as interações da campanha iFood com esse cliente. 14 | 15 | É seu desafio entender os dados, encontrar oportunidades e insights de negócios e propor qualquer ação orientada por dados para otimizar os resultados das campanhas e gerar valor para a empresa. 16 | 17 | Este case visa avaliar suas habilidades e conhecimentos em dados para duas funções possíveis: 18 | 19 | - Analista de dados de negócios: 20 | 21 | > Realizar uma análise exploratória robusta, rica em insights de negócios e propostas orientadas por dados para agregar valor à empresa. Ter fortes habilidades de comunicação para influenciar o tomada de decisão. 22 | 23 | - Analista de dados avançado: 24 | 25 | > Realizar uma análise exploratória robusta, usando ferramentas de análise avançada e métodos estatísticos, para gerar produtos de dados para otimizar os resultados dos negócios (modelos preditivos e de agrupamento, por exemplo). 26 | 27 | Tenha foco claro em qual função você deseja executar na iFood e concentre sua energia para se destacar em tópicos mais relevantes para isso. 28 | 29 | Abaixo você encontrará a descrição do caso e mais detalhes do que esperamos como sua solução. 30 | 31 | **Por favor, leia atentamente até a última página.** 32 | 33 | ## A empresa do case 34 | 35 | Considere uma empresa bem estabelecida que atua no setor de varejo de alimentos. Atualmente, eles têm milhares de clientes registrados e atendem quase um milhão de consumidores por ano. Eles vendem produtos de 5 grandes categorias: vinhos, carnes, frutas exóticas, peixes especialmente preparados e produtos doces. Estes podem ser divididos ainda mais em produtos *gold* e regulares. Os clientes podem encomendar e adquirir produtos por meio de 3 canais de vendas: lojas físicas, catálogos e site da empresa. Globalmente, a empresa teve receitas sólidas e uma linha de fundo saudável nos últimos 3 anos, mas as perspectivas de crescimento dos lucros para os próximos 3 anos não são promissoras... Por esse motivo, várias iniciativas estratégicas estão sendo consideradas para inverter essa situação. Um deles é melhorar o desempenho das atividades de marketing, com foco especial em campanhas de marketing. 36 | 37 | ## O departamento de marketing 38 | 39 | O departamento de marketing foi pressionado a gastar seu orçamento anual com mais sabedoria. O CMO percebe a importância de ter uma abordagem mais quantitativa ao tomar decisões, razão pela qual uma pequena equipe de cientistas de dados foi contratada com um objetivo claro em mente: construir um modelo preditivo que apoiará iniciativas de marketing direto. Desejavelmente, o sucesso dessas atividades provará o valor da abordagem e convencer os mais céticos dentro da empresa. 40 | 41 | ## O objetivo 42 | 43 | O objetivo da equipe é construir um modelo preditivo que produza o maior lucro para o próxima campanha de marketing direto, programada para o próximo mês. 44 | 45 | A nova campanha, sexta, visa vender um novo gadget para o Banco de Dados de Clientes. Para construir o modelo, uma campanha piloto envolvendo 2.240 clientes foi realizada. Os clientes foram selecionados aleatoriamente e contatados por telefone com relação à aquisição do gadget. Durante os meses seguintes, os clientes que compraram a oferta foram devidamente rotulados. 46 | 47 | O custo total da campanha de amostra foi de 6.720MU e a receita gerado pelos clientes que aceitaram a oferta foi de 3.674MU. Globalmente a campanha teve um lucro de -3.046MU. A taxa de sucesso da campanha foi de 15%. O objetivo da equipe é desenvolver um modelo que preveja o comportamento do cliente e aplicá-lo ao restante da base de clientes. Esperançosamente, o modelo permitirá que a empresa escolha os clientes que são mais propensos a comprar a oferta, deixando de fora os não respondentes, tornando a próxima campanha altamente lucrativa. 48 | 49 | Além disso, além de maximizar o lucro da campanha, o CMO está interessado em entender as características dos clientes que estão dispostos a comprar o gadget. 50 | 51 | ## Os dados 52 | 53 | O conjunto de dados contém recursos sociodemográficos e firmográficos sobre 2.240 clientes que foram contatados. Além disso, contém um rótulo para aqueles clientes que responderam à campanha, comprando o produto. 54 | 55 | Dicionário de dados disponível [na pasta `data`](../data/README.md). 56 | 57 | ## Entregáveis 58 | 59 | Os seguintes são os entregáveis mínimos necessários: 60 | 61 | 1. Explore os dados - seja criativo e preste atenção aos detalhes. Você precisa fornecer para a equipe de marketing uma melhor compreensão das características dos respondentes; 62 | 2. Crie e descreva uma segmentação de clientes com base no comportamento dos clientes; 63 | 3. Crie e descreva um modelo preditivo (classificação) que permita à empresa maximizar o lucro da próxima campanha de marketing. 64 | 65 | Como esperamos que sua solução seja enviada: 66 | 67 | 1. Um notebook detalhado e bem organizado (ou arquivo de código equivalente) a ser apresentado a partes técnicas interessadas. 68 | 2. Uma apresentação do PowerPoint (ou ferramenta similar) a ser apresentada às partes interessadas (stakeholders) do negócio. 69 | 70 | Você pode usar qualquer linguagem de programação para esta tarefa (usamos Python). 71 | 72 | Simplicidade e consciência do que está acontecendo é preferível a implementações de algoritmos complexos que você não domina. 73 | 74 | Se sua solução atender aos nossos critérios mínimos, você deve ser convidado para uma apresentação técnica / negócios. Soluções que não atendem aos nossos critérios, mas que mostram potencial, serão convidadas para uma reunião de feedback curta (30 min). 75 | 76 | Você deve receber uma resposta dentro de 1-2 semanas após o envio do caso. 77 | 78 | Se houver alguma dúvida, não hesite em nos contatar. 79 | -------------------------------------------------------------------------------- /case/iFood Data Analyst Case.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chicolucio/ifood-case-data-analyst/b3dfc7f0e5f3d3a6343c605d304ac4be4d1510af/case/iFood Data Analyst Case.pdf -------------------------------------------------------------------------------- /data/README.md: -------------------------------------------------------------------------------- 1 | ## Dicionário de dados 2 | 3 | Dados pessoais 4 | 5 | - `ID`: Identificador único do cliente 6 | - `Year_Birth`: Ano de nascimento do cliente 7 | - `Education`: Nível de educação do cliente 8 | - `Marital_Status`: Estado civil do cliente 9 | - `Income`: Renda anual da família do cliente 10 | - `Kidhome`: Número de crianças na casa do cliente 11 | - `Teenhome`: Número de adolescentes na casa do cliente 12 | - `Dt_Customer`: Data de inscrição do cliente na empresa 13 | - `Recency`: Número de dias desde a última compra do cliente 14 | - `Complain`: 1 se o cliente reclamou nos últimos 2 anos, 0 caso contrário 15 | 16 | Dados de produtos 17 | 18 | - `MntWines`: Valor gasto em vinho nos últimos 2 anos 19 | - `MntFruits`: Valor gasto em frutas nos últimos 2 anos 20 | - `MntMeatProducts`: Valor gasto em carne nos últimos 2 anos 21 | - `MntFishProducts`: Valor gasto em peixe nos últimos 2 anos 22 | - `MntSweetProducts`: Valor gasto em doces nos últimos 2 anos 23 | - `MntGoldProds`: Valor gasto em produtos *gold* nos últimos 2 anos 24 | 25 | Dados de campanha 26 | 27 | - `NumDealsPurchases`: Número de compras feitas com desconto 28 | - `AcceptedCmp1`: 1 se o cliente aceitou a oferta na 1ª campanha, 0 caso contrário 29 | - `AcceptedCmp2`: 1 se o cliente aceitou a oferta na 2ª campanha, 0 caso contrário 30 | - `AcceptedCmp3`: 1 se o cliente aceitou a oferta na 3ª campanha, 0 caso contrário 31 | - `AcceptedCmp4`: 1 se o cliente aceitou a oferta na 4ª campanha, 0 caso contrário 32 | - `AcceptedCmp5`: 1 se o cliente aceitou a oferta na 5ª campanha, 0 caso contrário 33 | - `Response`: 1 se o cliente aceitou a oferta na última campanha (piloto), 0 caso contrário (*target*) 34 | 35 | Dados de local de compra 36 | 37 | - `NumWebPurchases`: Número de compras feitas através do site da empresa 38 | - `NumCatalogPurchases`: Número de compras feitas usando um catálogo 39 | - `NumStorePurchases`: Número de compras feitas diretamente nas lojas 40 | - `NumWebVisitsMonth`: Número de visitas ao site da empresa no último mês 41 | -------------------------------------------------------------------------------- /images/comparing_models.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chicolucio/ifood-case-data-analyst/b3dfc7f0e5f3d3a6343c605d304ac4be4d1510af/images/comparing_models.png -------------------------------------------------------------------------------- /images/pairplot_clusters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chicolucio/ifood-case-data-analyst/b3dfc7f0e5f3d3a6343c605d304ac4be4d1510af/images/pairplot_clusters.png -------------------------------------------------------------------------------- /images/pca_clusters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chicolucio/ifood-case-data-analyst/b3dfc7f0e5f3d3a6343c605d304ac4be4d1510af/images/pca_clusters.png -------------------------------------------------------------------------------- /notebooks/00_package_versions.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Versions of the main packages used in this project" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": {}, 14 | "outputs": [ 15 | { 16 | "name": "stdout", 17 | "output_type": "stream", 18 | "text": [ 19 | "Versions of the packages:\n", 20 | "\n", 21 | "-------------------- | ----------\n", 22 | " Package | Version \n", 23 | "-------------------- | ----------\n", 24 | "Imbalanced-Learn | 0.11.0\n", 25 | "Matplotlib | 3.7.2\n", 26 | "NumPy | 1.24.3\n", 27 | "Pandas | 1.5.3\n", 28 | "Scikit-Learn | 1.3.0\n", 29 | "Seaborn | 0.12.2\n", 30 | "\n", 31 | "Python version: 3.11.5\n" 32 | ] 33 | } 34 | ], 35 | "source": [ 36 | "import pandas as pd\n", 37 | "import matplotlib\n", 38 | "import seaborn as sns\n", 39 | "import numpy as np\n", 40 | "import sklearn\n", 41 | "import imblearn\n", 42 | "from platform import python_version\n", 43 | "\n", 44 | "packages = {\n", 45 | " \"Pandas\": pd,\n", 46 | " \"Matplotlib\": matplotlib,\n", 47 | " \"Seaborn\": sns,\n", 48 | " \"NumPy\": np,\n", 49 | " \"Scikit-Learn\": sklearn,\n", 50 | " \"Imbalanced-Learn\": imblearn,\n", 51 | "}\n", 52 | "\n", 53 | "print(\"Versions of the packages:\\n\")\n", 54 | "print(f\"{'':-^20} | {'':-^10}\")\n", 55 | "print(f\"{'Package':^20} | {'Version':^10}\")\n", 56 | "print(f\"{'':-^20} | {'':-^10}\")\n", 57 | "\n", 58 | "for name, package in sorted(packages.items()):\n", 59 | " print(f\"{name:<20} | {package.__version__:>10}\")\n", 60 | "\n", 61 | "print()\n", 62 | "print(f\"Python version: {python_version()}\")" 63 | ] 64 | } 65 | ], 66 | "metadata": { 67 | "kernelspec": { 68 | "display_name": "Python 3 (ipykernel)", 69 | "language": "python", 70 | "name": "python3" 71 | }, 72 | "language_info": { 73 | "codemirror_mode": { 74 | "name": "ipython", 75 | "version": 3 76 | }, 77 | "file_extension": ".py", 78 | "mimetype": "text/x-python", 79 | "name": "python", 80 | "nbconvert_exporter": "python", 81 | "pygments_lexer": "ipython3", 82 | "version": "3.11.5" 83 | } 84 | }, 85 | "nbformat": 4, 86 | "nbformat_minor": 4 87 | } 88 | -------------------------------------------------------------------------------- /notebooks/04_classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "id": "44364423", 6 | "metadata": {}, 7 | "source": [ 8 | "# Predictive model for classification" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "id": "db792e4c-e769-499d-b4f2-f4935d90f6c9", 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "data": { 19 | "text/html": [ 20 | "| \n", 38 | " | Education | \n", 39 | "Marital_Status | \n", 40 | "Income | \n", 41 | "Kidhome | \n", 42 | "Teenhome | \n", 43 | "Recency | \n", 44 | "MntWines | \n", 45 | "MntFruits | \n", 46 | "MntMeatProducts | \n", 47 | "MntFishProducts | \n", 48 | "... | \n", 49 | "Age | \n", 50 | "AgeGroup | \n", 51 | "MntTotal | \n", 52 | "MntRegularProds | \n", 53 | "Children | \n", 54 | "HasChildren | \n", 55 | "AcceptedCmpTotal | \n", 56 | "HasAcceptedCmp | \n", 57 | "NumTotalPurchases | \n", 58 | "cluster | \n", 59 | "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", 64 | "Graduation | \n", 65 | "Single | \n", 66 | "58138.0 | \n", 67 | "0 | \n", 68 | "0 | \n", 69 | "58 | \n", 70 | "635 | \n", 71 | "88 | \n", 72 | "546 | \n", 73 | "172 | \n", 74 | "... | \n", 75 | "57 | \n", 76 | "46-60 | \n", 77 | "1617 | \n", 78 | "1529 | \n", 79 | "0 | \n", 80 | "0 | \n", 81 | "0 | \n", 82 | "0 | \n", 83 | "22 | \n", 84 | "0 | \n", 85 | "
| 1 | \n", 88 | "Graduation | \n", 89 | "Single | \n", 90 | "46344.0 | \n", 91 | "1 | \n", 92 | "1 | \n", 93 | "38 | \n", 94 | "11 | \n", 95 | "1 | \n", 96 | "6 | \n", 97 | "2 | \n", 98 | "... | \n", 99 | "60 | \n", 100 | "46-60 | \n", 101 | "27 | \n", 102 | "21 | \n", 103 | "2 | \n", 104 | "1 | \n", 105 | "0 | \n", 106 | "0 | \n", 107 | "4 | \n", 108 | "1 | \n", 109 | "
| 2 | \n", 112 | "Graduation | \n", 113 | "Partner | \n", 114 | "71613.0 | \n", 115 | "0 | \n", 116 | "0 | \n", 117 | "26 | \n", 118 | "426 | \n", 119 | "49 | \n", 120 | "127 | \n", 121 | "111 | \n", 122 | "... | \n", 123 | "49 | \n", 124 | "46-60 | \n", 125 | "776 | \n", 126 | "734 | \n", 127 | "0 | \n", 128 | "0 | \n", 129 | "0 | \n", 130 | "0 | \n", 131 | "20 | \n", 132 | "0 | \n", 133 | "
| 3 | \n", 136 | "Graduation | \n", 137 | "Partner | \n", 138 | "26646.0 | \n", 139 | "1 | \n", 140 | "0 | \n", 141 | "26 | \n", 142 | "11 | \n", 143 | "4 | \n", 144 | "20 | \n", 145 | "10 | \n", 146 | "... | \n", 147 | "30 | \n", 148 | "18-30 | \n", 149 | "53 | \n", 150 | "48 | \n", 151 | "1 | \n", 152 | "1 | \n", 153 | "0 | \n", 154 | "0 | \n", 155 | "6 | \n", 156 | "1 | \n", 157 | "
| 4 | \n", 160 | "PhD | \n", 161 | "Partner | \n", 162 | "58293.0 | \n", 163 | "1 | \n", 164 | "0 | \n", 165 | "94 | \n", 166 | "173 | \n", 167 | "43 | \n", 168 | "118 | \n", 169 | "46 | \n", 170 | "... | \n", 171 | "33 | \n", 172 | "31-45 | \n", 173 | "422 | \n", 174 | "407 | \n", 175 | "1 | \n", 176 | "1 | \n", 177 | "0 | \n", 178 | "0 | \n", 179 | "14 | \n", 180 | "2 | \n", 181 | "
5 rows × 36 columns
\n", 185 | "| \n", 331 | " | Education | \n", 332 | "Marital_Status | \n", 333 | "Income | \n", 334 | "Kidhome | \n", 335 | "Teenhome | \n", 336 | "Recency | \n", 337 | "MntWines | \n", 338 | "MntFruits | \n", 339 | "MntMeatProducts | \n", 340 | "MntFishProducts | \n", 341 | "... | \n", 342 | "Age | \n", 343 | "AgeGroup | \n", 344 | "MntTotal | \n", 345 | "MntRegularProds | \n", 346 | "Children | \n", 347 | "HasChildren | \n", 348 | "AcceptedCmpTotal | \n", 349 | "HasAcceptedCmp | \n", 350 | "NumTotalPurchases | \n", 351 | "cluster | \n", 352 | "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", 357 | "Graduation | \n", 358 | "Single | \n", 359 | "58138.0 | \n", 360 | "0 | \n", 361 | "0 | \n", 362 | "58 | \n", 363 | "635 | \n", 364 | "88 | \n", 365 | "546 | \n", 366 | "172 | \n", 367 | "... | \n", 368 | "57 | \n", 369 | "46-60 | \n", 370 | "1617 | \n", 371 | "1529 | \n", 372 | "0 | \n", 373 | "0 | \n", 374 | "0 | \n", 375 | "0 | \n", 376 | "22 | \n", 377 | "0 | \n", 378 | "
| 1 | \n", 381 | "Graduation | \n", 382 | "Single | \n", 383 | "46344.0 | \n", 384 | "1 | \n", 385 | "1 | \n", 386 | "38 | \n", 387 | "11 | \n", 388 | "1 | \n", 389 | "6 | \n", 390 | "2 | \n", 391 | "... | \n", 392 | "60 | \n", 393 | "46-60 | \n", 394 | "27 | \n", 395 | "21 | \n", 396 | "2 | \n", 397 | "1 | \n", 398 | "0 | \n", 399 | "0 | \n", 400 | "4 | \n", 401 | "1 | \n", 402 | "
| 2 | \n", 405 | "Graduation | \n", 406 | "Partner | \n", 407 | "71613.0 | \n", 408 | "0 | \n", 409 | "0 | \n", 410 | "26 | \n", 411 | "426 | \n", 412 | "49 | \n", 413 | "127 | \n", 414 | "111 | \n", 415 | "... | \n", 416 | "49 | \n", 417 | "46-60 | \n", 418 | "776 | \n", 419 | "734 | \n", 420 | "0 | \n", 421 | "0 | \n", 422 | "0 | \n", 423 | "0 | \n", 424 | "20 | \n", 425 | "0 | \n", 426 | "
| 3 | \n", 429 | "Graduation | \n", 430 | "Partner | \n", 431 | "26646.0 | \n", 432 | "1 | \n", 433 | "0 | \n", 434 | "26 | \n", 435 | "11 | \n", 436 | "4 | \n", 437 | "20 | \n", 438 | "10 | \n", 439 | "... | \n", 440 | "30 | \n", 441 | "18-30 | \n", 442 | "53 | \n", 443 | "48 | \n", 444 | "1 | \n", 445 | "1 | \n", 446 | "0 | \n", 447 | "0 | \n", 448 | "6 | \n", 449 | "1 | \n", 450 | "
| 4 | \n", 453 | "PhD | \n", 454 | "Partner | \n", 455 | "58293.0 | \n", 456 | "1 | \n", 457 | "0 | \n", 458 | "94 | \n", 459 | "173 | \n", 460 | "43 | \n", 461 | "118 | \n", 462 | "46 | \n", 463 | "... | \n", 464 | "33 | \n", 465 | "31-45 | \n", 466 | "422 | \n", 467 | "407 | \n", 468 | "1 | \n", 469 | "1 | \n", 470 | "0 | \n", 471 | "0 | \n", 472 | "14 | \n", 473 | "2 | \n", 474 | "
5 rows × 35 columns
\n", 478 | "| \n", 830 | " | model | \n", 831 | "fit_time | \n", 832 | "score_time | \n", 833 | "test_accuracy | \n", 834 | "test_precision | \n", 835 | "test_recall | \n", 836 | "test_roc_auc | \n", 837 | "test_average_precision | \n", 838 | "time | \n", 839 | "
|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", 844 | "DummyClassifier | \n", 845 | "[0.06235241889953613, 0.06004643440246582, 0.0... | \n", 846 | "[0.02356433868408203, 0.023059844970703125, 0.... | \n", 847 | "[0.5124716553287982, 0.5034013605442177, 0.503... | \n", 848 | "[0.1542056074766355, 0.14485981308411214, 0.14... | \n", 849 | "[0.4925373134328358, 0.4626865671641791, 0.462... | \n", 850 | "[0.5042900470907494, 0.4866908771649773, 0.486... | \n", 851 | "[0.15304952129175473, 0.14865734269715697, 0.1... | \n", 852 | "[0.08591675758361816, 0.08310627937316895, 0.0... | \n", 853 | "
| 1 | \n", 856 | "DecisionTreeClassifier | \n", 857 | "[0.053517818450927734, 0.05652117729187012, 0.... | \n", 858 | "[0.025005817413330078, 0.025005578994750977, 0... | \n", 859 | "[0.8253968253968254, 0.8299319727891157, 0.829... | \n", 860 | "[0.43243243243243246, 0.4444444444444444, 0.44... | \n", 861 | "[0.47761194029850745, 0.47761194029850745, 0.5... | \n", 862 | "[0.6853499880277755, 0.7077380477292681, 0.738... | \n", 863 | "[0.3683830979533475, 0.38016844076749257, 0.36... | \n", 864 | "[0.07852363586425781, 0.0815267562866211, 0.08... | \n", 865 | "
| 2 | \n", 868 | "LogisticRegression | \n", 869 | "[0.06331110000610352, 0.06290769577026367, 0.0... | \n", 870 | "[0.02791905403137207, 0.023897886276245117, 0.... | \n", 871 | "[0.7845804988662132, 0.8299319727891157, 0.829... | \n", 872 | "[0.35106382978723405, 0.4444444444444444, 0.45... | \n", 873 | "[0.4925373134328358, 0.47761194029850745, 0.53... | \n", 874 | "[0.6857091547609545, 0.7083167052438343, 0.738... | \n", 875 | "[0.3819814120613085, 0.41502673077110863, 0.36... | \n", 876 | "[0.09123015403747559, 0.08680558204650879, 0.0... | \n", 877 | "
| 3 | \n", 880 | "KNNClassifier | \n", 881 | "[0.04813838005065918, 0.05732417106628418, 0.0... | \n", 882 | "[0.040640830993652344, 0.046417951583862305, 0... | \n", 883 | "[0.8503401360544217, 0.8526077097505669, 0.854... | \n", 884 | "[0.5172413793103449, 0.5333333333333333, 0.565... | \n", 885 | "[0.22388059701492538, 0.23880597014925373, 0.1... | \n", 886 | "[0.6013049724638838, 0.6030010375927847, 0.606... | \n", 887 | "[0.2835258077353654, 0.3012183978068839, 0.252... | \n", 888 | "[0.08877921104431152, 0.10374212265014648, 0.1... | \n", 889 | "
| \n", 1035 | " | model | \n", 1036 | "fit_time | \n", 1037 | "score_time | \n", 1038 | "test_accuracy | \n", 1039 | "test_precision | \n", 1040 | "test_recall | \n", 1041 | "test_roc_auc | \n", 1042 | "test_average_precision | \n", 1043 | "time | \n", 1044 | "
|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", 1049 | "DummyClassifier | \n", 1050 | "0.062352 | \n", 1051 | "0.023564 | \n", 1052 | "0.512472 | \n", 1053 | "0.154206 | \n", 1054 | "0.492537 | \n", 1055 | "0.50429 | \n", 1056 | "0.15305 | \n", 1057 | "0.085917 | \n", 1058 | "
| 1 | \n", 1061 | "DummyClassifier | \n", 1062 | "0.060046 | \n", 1063 | "0.02306 | \n", 1064 | "0.503401 | \n", 1065 | "0.14486 | \n", 1066 | "0.462687 | \n", 1067 | "0.486691 | \n", 1068 | "0.148657 | \n", 1069 | "0.083106 | \n", 1070 | "
| 2 | \n", 1073 | "DummyClassifier | \n", 1074 | "0.057342 | \n", 1075 | "0.022069 | \n", 1076 | "0.503401 | \n", 1077 | "0.14486 | \n", 1078 | "0.462687 | \n", 1079 | "0.486691 | \n", 1080 | "0.148657 | \n", 1081 | "0.079411 | \n", 1082 | "
| 3 | \n", 1085 | "DummyClassifier | \n", 1086 | "0.056036 | \n", 1087 | "0.02507 | \n", 1088 | "0.487528 | \n", 1089 | "0.126168 | \n", 1090 | "0.409091 | \n", 1091 | "0.455212 | \n", 1092 | "0.14005 | \n", 1093 | "0.081107 | \n", 1094 | "
| 4 | \n", 1097 | "DummyClassifier | \n", 1098 | "0.066048 | \n", 1099 | "0.025484 | \n", 1100 | "0.510204 | \n", 1101 | "0.149533 | \n", 1102 | "0.484848 | \n", 1103 | "0.499758 | \n", 1104 | "0.149598 | \n", 1105 | "0.091532 | \n", 1106 | "
| 5 | \n", 1109 | "DecisionTreeClassifier | \n", 1110 | "0.053518 | \n", 1111 | "0.025006 | \n", 1112 | "0.825397 | \n", 1113 | "0.432432 | \n", 1114 | "0.477612 | \n", 1115 | "0.68535 | \n", 1116 | "0.368383 | \n", 1117 | "0.078524 | \n", 1118 | "
| 6 | \n", 1121 | "DecisionTreeClassifier | \n", 1122 | "0.056521 | \n", 1123 | "0.025006 | \n", 1124 | "0.829932 | \n", 1125 | "0.444444 | \n", 1126 | "0.477612 | \n", 1127 | "0.707738 | \n", 1128 | "0.380168 | \n", 1129 | "0.081527 | \n", 1130 | "
| 7 | \n", 1133 | "DecisionTreeClassifier | \n", 1134 | "0.058637 | \n", 1135 | "0.023006 | \n", 1136 | "0.829932 | \n", 1137 | "0.448718 | \n", 1138 | "0.522388 | \n", 1139 | "0.738267 | \n", 1140 | "0.360261 | \n", 1141 | "0.081643 | \n", 1142 | "
| 8 | \n", 1145 | "DecisionTreeClassifier | \n", 1146 | "0.057173 | \n", 1147 | "0.023006 | \n", 1148 | "0.811791 | \n", 1149 | "0.402299 | \n", 1150 | "0.530303 | \n", 1151 | "0.718303 | \n", 1152 | "0.431172 | \n", 1153 | "0.080179 | \n", 1154 | "
| 9 | \n", 1157 | "DecisionTreeClassifier | \n", 1158 | "0.055517 | \n", 1159 | "0.023005 | \n", 1160 | "0.689342 | \n", 1161 | "0.267974 | \n", 1162 | "0.621212 | \n", 1163 | "0.663313 | \n", 1164 | "0.226199 | \n", 1165 | "0.078522 | \n", 1166 | "
| 10 | \n", 1169 | "LogisticRegression | \n", 1170 | "0.063311 | \n", 1171 | "0.027919 | \n", 1172 | "0.78458 | \n", 1173 | "0.351064 | \n", 1174 | "0.492537 | \n", 1175 | "0.685709 | \n", 1176 | "0.381981 | \n", 1177 | "0.09123 | \n", 1178 | "
| 11 | \n", 1181 | "LogisticRegression | \n", 1182 | "0.062908 | \n", 1183 | "0.023898 | \n", 1184 | "0.829932 | \n", 1185 | "0.444444 | \n", 1186 | "0.477612 | \n", 1187 | "0.708317 | \n", 1188 | "0.415027 | \n", 1189 | "0.086806 | \n", 1190 | "
| 12 | \n", 1193 | "LogisticRegression | \n", 1194 | "0.058697 | \n", 1195 | "0.025914 | \n", 1196 | "0.829932 | \n", 1197 | "0.45 | \n", 1198 | "0.537313 | \n", 1199 | "0.738586 | \n", 1200 | "0.363251 | \n", 1201 | "0.084612 | \n", 1202 | "
| 13 | \n", 1205 | "LogisticRegression | \n", 1206 | "0.058424 | \n", 1207 | "0.024817 | \n", 1208 | "0.814059 | \n", 1209 | "0.409091 | \n", 1210 | "0.545455 | \n", 1211 | "0.718889 | \n", 1212 | "0.409818 | \n", 1213 | "0.083241 | \n", 1214 | "
| 14 | \n", 1217 | "LogisticRegression | \n", 1218 | "0.058886 | \n", 1219 | "0.023884 | \n", 1220 | "0.836735 | \n", 1221 | "0.466667 | \n", 1222 | "0.636364 | \n", 1223 | "0.794768 | \n", 1224 | "0.506528 | \n", 1225 | "0.08277 | \n", 1226 | "
| 15 | \n", 1229 | "KNNClassifier | \n", 1230 | "0.048138 | \n", 1231 | "0.040641 | \n", 1232 | "0.85034 | \n", 1233 | "0.517241 | \n", 1234 | "0.223881 | \n", 1235 | "0.601305 | \n", 1236 | "0.283526 | \n", 1237 | "0.088779 | \n", 1238 | "
| 16 | \n", 1241 | "KNNClassifier | \n", 1242 | "0.057324 | \n", 1243 | "0.046418 | \n", 1244 | "0.852608 | \n", 1245 | "0.533333 | \n", 1246 | "0.238806 | \n", 1247 | "0.603001 | \n", 1248 | "0.301218 | \n", 1249 | "0.103742 | \n", 1250 | "
| 17 | \n", 1253 | "KNNClassifier | \n", 1254 | "0.068816 | \n", 1255 | "0.042564 | \n", 1256 | "0.854875 | \n", 1257 | "0.565217 | \n", 1258 | "0.19403 | \n", 1259 | "0.606174 | \n", 1260 | "0.252589 | \n", 1261 | "0.11138 | \n", 1262 | "
| 18 | \n", 1265 | "KNNClassifier | \n", 1266 | "0.066806 | \n", 1267 | "0.043564 | \n", 1268 | "0.875283 | \n", 1269 | "0.823529 | \n", 1270 | "0.212121 | \n", 1271 | "0.643717 | \n", 1272 | "0.363419 | \n", 1273 | "0.11037 | \n", 1274 | "
| 19 | \n", 1277 | "KNNClassifier | \n", 1278 | "0.067982 | \n", 1279 | "0.041924 | \n", 1280 | "0.736961 | \n", 1281 | "0.331081 | \n", 1282 | "0.742424 | \n", 1283 | "0.771778 | \n", 1284 | "0.379045 | \n", 1285 | "0.109906 | \n", 1286 | "