{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Vendedor IA | Ajudando vendedores de Brasal Veículos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[<-- notebook \"Data Clean\"](https://github.com/piegu/fastai-projects/blob/master/vendas_veiculos_brasal_data_clean.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Autor: [Pierre Guillou](https://www.linkedin.com/in/pierreguillou)\n", "- Data: Maio 2019\n", "- Hackathon Brasal/PCTec-UnB 2019: http://www.brasal.com.br/inovacao/hackathon/\n", "- Datasets do Brasal: http://www.brasal.com.br/inovacao/hackathon/wp-content/uploads/2019/05/oficial.zip\n", "- Biblioteca de Deep Learning usada: [Fastai v1](https://docs.fast.ai/) (Deep Learning com PyTorch)\n", "- Inspiração do Fastai notebook \"Rossmann\": https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson6-rossmann.ipynb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O **Hackathon Brasal/PCTec-UnB 2019** foi uma maratona de dados (dias 9 e 10 de maio de 2019), que reuniu estudantes, profissionais e comunidade, com o desafio de em dois dias, realizaram um projeto de Bussiness Intelligence para um cliente real: [Brasal Veículos](http://vw.brasal.com.br/). Aconteceu no [CDT](http://www.cdt.unb.br/) da Universidade de Brasília (UnB) no Brasil.\n", "\n", "Nesse contexto, minha equipe desenvolveu o projeto **\"Vendedor IA\" (VIA), um conjunto de modelos de Inteligência Artificial (IA) usando o Deep Learning** cujo princípio é descrito nos parágrafos seguintes.\n", "\n", "**Vendedor IA (VIA)**\n", "\n", "O VIA é uma ferramenta de IA (um conjunto de modelos usando o Deep Learning) que **ajuda os vendedores de Brasal Veículos a atingir a suas metas de vendas**. \n", "\n", "Ele não é um avatar que vende diretamente os veículos. Graças ao treinamento com os dados de vendas do passado, **faz previsões personalisadas em função do perfil de cada cliente**. Por exemplo: estimativa do orçamento que o cliente está disposto a gastar na compra de um veículo, previsão da categoria de veículo que o cliente mais gosta, previsão da data de compra mais provável, etc.).\n", "\n", "**VIA modeliza o mundo cliente-vendedor**\n", "\n", "Graças ao treinamento com os dados de vendas do passado, **as redes neurais do VIA modelizam o mundo cliente-vendedor no contexto das vendas de veículos Brasal**. \n", "\n", "**Treinamento dos modelos de IA**\n", "\n", "Os modelos de IA são treinados a partir dos dados de vendas de veículos Brasal dos últimos anos e são atualizados todas as noites com os dados de vendas do dia. \n", "\n", "**Modelos desenvolvidos no contexto do hackathon**\n", "\n", "Muitos modelos AI podem ser desenvolvidos para o VIA (veja exemplos dados). Apenas para mostrar como, um **modelo de regressão fornecendo o orçamento que o cliente está disposto a gastar na compra de um veículo** está disponível online no github ([vendedor_IA_vendas_veiculos_brasal_REGRESSAO.ipynb](https://github.com/piegu/fastai-projects/edit/master/vendedor_IA_vendas_veiculos_brasal_REGRESSAO.ipynb)).\n", "\n", "**AI4BI (Artificial Intelligence for Business Intelligence)**\n", "\n", "O VIA é também um **projeto AI4BI**: as previsões do VIA vão para um aplicativo de BI que permite aos vendedores de Brasal Veículos de visualizá-las em gráficos interativos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notebooks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2 jupyter notebooks foram criados:\n", "1. **Data clean** ([vendas_veiculos_brasal_data_clean.ipynb](https://github.com/piegu/fastai-projects/blob/master/vendas_veiculos_brasal_data_clean.ipynb)): é o notebook de preparação da tabela de dados de vendas para treinar os modelos do VIA.\n", "2. **Regressão** ([vendedor_IA_vendas_veiculos_brasal_REGRESSAO.ipynb](https://github.com/piegu/fastai-projects/blob/master/vendedor_IA_vendas_veiculos_brasal_REGRESSAO.ipynb)): é o notebook de treinamento do modelo que fornece o orçamento que o cliente está disposto a gastar na compra de um veículo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialisation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from fastai.tabular import *" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from fastai.callbacks import * " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fastai: 1.0.52\n", "cuda: True\n" ] } ], "source": [ "import fastai\n", "print(f'fastai: {fastai.__version__}')\n", "print(f'cuda: {torch.cuda.is_available()}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Os dados de vendas de veículos Brasal ao longo de 4 anos foram processados (feature-engineered) no notebook [vendas_veiculos_brasal_data_clean.ipynb](https://github.com/piegu/fastai-projects/blob/master/vendas_veiculos_brasal_data_clean.ipynb). O resultado é um dataframe único se chamando `df_vendas`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "PATH = Config().data_path()/'brasal'\n", "\n", "# load file\n", "df_vendas = pd.read_pickle(PATH/'df_vendas_clean_DaysElapsed')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01234
EMPRESA_VENDAS11151
REVENDA_VENDAS11111
DTA_ENTRADA_SAIDA2015-03-25 00:00:002015-03-31 00:00:002015-04-30 00:00:002018-09-18 00:00:002015-05-14 00:00:00
CLIENTE5230211518041
VAL_TOTAL_REAL_ITEM4880037008.137043.241869.3127944
VAL_TOTAL_NOTA_ITEM4880037008.137043.241869.3127944
VAL_CUSTO_CONTABIL47713.837008.137043.241869.3127944
VENDEDOR1100041100111100114000020110011
VAL_BONUS00000
MODELO5U4FE46A53K45U3PN45U7TA42HBB3A
DATA_NASCIMENTO1977-09-09 00:00:001900-01-01 00:00:001900-01-01 00:00:001900-01-01 00:00:001900-01-01 00:00:00
SEXOMNNNN
ESTADO_CIVIL20000
SITUACAO_CREDITOAprovadoAprovadoAprovadoAprovadoAprovado
CLIENTE_TIPONNNNN
TIPO_PESSOAFJJJJ
CLIENTE_DTCADASTRO1900-01-01 00:00:002015-02-24 00:00:002015-02-24 00:00:001900-01-01 00:00:002015-02-24 00:00:00
EMPRESA_ORIGEM11111
REVENDA_ORIGEM11111
DTPRIMEIRAFATURA2015-03-02 00:00:002015-04-01 00:00:002015-04-01 00:00:002015-03-25 00:00:002015-04-01 00:00:00
DTULTIMAFATURA2015-03-25 00:00:002016-09-30 00:00:002016-09-30 00:00:002019-03-07 00:00:002016-09-30 00:00:00
LIMITE_CREDITO01e+071e+0701e+07
CEP177777
CEP277777
CEP350080
DES_MODELOFRONTIERFIAT SIENAVOYAGE 1.6VW/FOX 1.6 PIME GIIPEUGEOT 207 PASSION XS A
FAMILIA111158
MARCAVWVWVWVWPEUG
CLASSIFICACAO31311
DTA_ENTRADA_SAIDA_Year20152015201520182015
..................
CLIENTE_DTCADASTRO_Is_year_endFalseFalseFalseFalseFalse
CLIENTE_DTCADASTRO_Is_year_startTrueFalseFalseTrueFalse
CLIENTE_DTCADASTRO_Elapsed-220898880014247360001424736000-22089888001424736000
DTPRIMEIRAFATURA_Year20152015201520152015
DTPRIMEIRAFATURA_Month34434
DTPRIMEIRAFATURA_Week1014141314
DTPRIMEIRAFATURA_Day211251
DTPRIMEIRAFATURA_Dayofweek02222
DTPRIMEIRAFATURA_Dayofyear6191918491
DTPRIMEIRAFATURA_Is_month_endFalseFalseFalseFalseFalse
DTPRIMEIRAFATURA_Is_month_startFalseTrueTrueFalseTrue
DTPRIMEIRAFATURA_Is_quarter_endFalseFalseFalseFalseFalse
DTPRIMEIRAFATURA_Is_quarter_startFalseTrueTrueFalseTrue
DTPRIMEIRAFATURA_Is_year_endFalseFalseFalseFalseFalse
DTPRIMEIRAFATURA_Is_year_startFalseFalseFalseFalseFalse
DTPRIMEIRAFATURA_Elapsed14252544001427846400142784640014272416001427846400
DTULTIMAFATURA_Year20152016201620192016
DTULTIMAFATURA_Month39939
DTULTIMAFATURA_Week1339391039
DTULTIMAFATURA_Day253030730
DTULTIMAFATURA_Dayofweek24434
DTULTIMAFATURA_Dayofyear8427427466274
DTULTIMAFATURA_Is_month_endFalseTrueTrueFalseTrue
DTULTIMAFATURA_Is_month_startFalseFalseFalseFalseFalse
DTULTIMAFATURA_Is_quarter_endFalseTrueTrueFalseTrue
DTULTIMAFATURA_Is_quarter_startFalseFalseFalseFalseFalse
DTULTIMAFATURA_Is_year_endFalseFalseFalseFalseFalse
DTULTIMAFATURA_Is_year_startFalseFalseFalseFalseFalse
DTULTIMAFATURA_Elapsed14272416001475193600147519360015519168001475193600
DTA_VENDA_CADASTRO_DaysElapsed4208635654335979
\n", "

95 rows × 5 columns

\n", "
" ], "text/plain": [ " 0 \\\n", "EMPRESA_VENDAS 1 \n", "REVENDA_VENDAS 1 \n", "DTA_ENTRADA_SAIDA 2015-03-25 00:00:00 \n", "CLIENTE 52302 \n", "VAL_TOTAL_REAL_ITEM 48800 \n", "VAL_TOTAL_NOTA_ITEM 48800 \n", "VAL_CUSTO_CONTABIL 47713.8 \n", "VENDEDOR 110004 \n", "VAL_BONUS 0 \n", "MODELO 5U4FE4 \n", "DATA_NASCIMENTO 1977-09-09 00:00:00 \n", "SEXO M \n", "ESTADO_CIVIL 2 \n", "SITUACAO_CREDITO Aprovado \n", "CLIENTE_TIPO N \n", "TIPO_PESSOA F \n", "CLIENTE_DTCADASTRO 1900-01-01 00:00:00 \n", "EMPRESA_ORIGEM 1 \n", "REVENDA_ORIGEM 1 \n", "DTPRIMEIRAFATURA 2015-03-02 00:00:00 \n", "DTULTIMAFATURA 2015-03-25 00:00:00 \n", "LIMITE_CREDITO 0 \n", "CEP1 7 \n", "CEP2 7 \n", "CEP3 5 \n", "DES_MODELO FRONTIER \n", "FAMILIA 1 \n", "MARCA VW \n", "CLASSIFICACAO 3 \n", "DTA_ENTRADA_SAIDA_Year 2015 \n", "... ... \n", "CLIENTE_DTCADASTRO_Is_year_end False \n", "CLIENTE_DTCADASTRO_Is_year_start True \n", "CLIENTE_DTCADASTRO_Elapsed -2208988800 \n", "DTPRIMEIRAFATURA_Year 2015 \n", "DTPRIMEIRAFATURA_Month 3 \n", "DTPRIMEIRAFATURA_Week 10 \n", "DTPRIMEIRAFATURA_Day 2 \n", "DTPRIMEIRAFATURA_Dayofweek 0 \n", "DTPRIMEIRAFATURA_Dayofyear 61 \n", "DTPRIMEIRAFATURA_Is_month_end False \n", "DTPRIMEIRAFATURA_Is_month_start False \n", "DTPRIMEIRAFATURA_Is_quarter_end False \n", "DTPRIMEIRAFATURA_Is_quarter_start False \n", "DTPRIMEIRAFATURA_Is_year_end False \n", "DTPRIMEIRAFATURA_Is_year_start False \n", "DTPRIMEIRAFATURA_Elapsed 1425254400 \n", "DTULTIMAFATURA_Year 2015 \n", "DTULTIMAFATURA_Month 3 \n", "DTULTIMAFATURA_Week 13 \n", "DTULTIMAFATURA_Day 25 \n", "DTULTIMAFATURA_Dayofweek 2 \n", "DTULTIMAFATURA_Dayofyear 84 \n", "DTULTIMAFATURA_Is_month_end False \n", "DTULTIMAFATURA_Is_month_start False \n", "DTULTIMAFATURA_Is_quarter_end False \n", "DTULTIMAFATURA_Is_quarter_start False \n", "DTULTIMAFATURA_Is_year_end False \n", "DTULTIMAFATURA_Is_year_start False \n", "DTULTIMAFATURA_Elapsed 1427241600 \n", "DTA_VENDA_CADASTRO_DaysElapsed 42086 \n", "\n", " 1 \\\n", "EMPRESA_VENDAS 1 \n", "REVENDA_VENDAS 1 \n", "DTA_ENTRADA_SAIDA 2015-03-31 00:00:00 \n", "CLIENTE 1 \n", "VAL_TOTAL_REAL_ITEM 37008.1 \n", "VAL_TOTAL_NOTA_ITEM 37008.1 \n", "VAL_CUSTO_CONTABIL 37008.1 \n", "VENDEDOR 110011 \n", "VAL_BONUS 0 \n", "MODELO 6A53K4 \n", "DATA_NASCIMENTO 1900-01-01 00:00:00 \n", "SEXO N \n", "ESTADO_CIVIL 0 \n", "SITUACAO_CREDITO Aprovado \n", "CLIENTE_TIPO N \n", "TIPO_PESSOA J \n", "CLIENTE_DTCADASTRO 2015-02-24 00:00:00 \n", "EMPRESA_ORIGEM 1 \n", "REVENDA_ORIGEM 1 \n", "DTPRIMEIRAFATURA 2015-04-01 00:00:00 \n", "DTULTIMAFATURA 2016-09-30 00:00:00 \n", "LIMITE_CREDITO 1e+07 \n", "CEP1 7 \n", "CEP2 7 \n", "CEP3 0 \n", "DES_MODELO FIAT SIENA \n", "FAMILIA 1 \n", "MARCA VW \n", "CLASSIFICACAO 1 \n", "DTA_ENTRADA_SAIDA_Year 2015 \n", "... ... \n", "CLIENTE_DTCADASTRO_Is_year_end False \n", "CLIENTE_DTCADASTRO_Is_year_start False \n", "CLIENTE_DTCADASTRO_Elapsed 1424736000 \n", "DTPRIMEIRAFATURA_Year 2015 \n", "DTPRIMEIRAFATURA_Month 4 \n", "DTPRIMEIRAFATURA_Week 14 \n", "DTPRIMEIRAFATURA_Day 1 \n", "DTPRIMEIRAFATURA_Dayofweek 2 \n", "DTPRIMEIRAFATURA_Dayofyear 91 \n", "DTPRIMEIRAFATURA_Is_month_end False \n", "DTPRIMEIRAFATURA_Is_month_start True \n", "DTPRIMEIRAFATURA_Is_quarter_end False \n", "DTPRIMEIRAFATURA_Is_quarter_start True \n", "DTPRIMEIRAFATURA_Is_year_end False \n", "DTPRIMEIRAFATURA_Is_year_start False \n", "DTPRIMEIRAFATURA_Elapsed 1427846400 \n", "DTULTIMAFATURA_Year 2016 \n", "DTULTIMAFATURA_Month 9 \n", "DTULTIMAFATURA_Week 39 \n", "DTULTIMAFATURA_Day 30 \n", "DTULTIMAFATURA_Dayofweek 4 \n", "DTULTIMAFATURA_Dayofyear 274 \n", "DTULTIMAFATURA_Is_month_end True \n", "DTULTIMAFATURA_Is_month_start False \n", "DTULTIMAFATURA_Is_quarter_end True \n", "DTULTIMAFATURA_Is_quarter_start False \n", "DTULTIMAFATURA_Is_year_end False \n", "DTULTIMAFATURA_Is_year_start False \n", "DTULTIMAFATURA_Elapsed 1475193600 \n", "DTA_VENDA_CADASTRO_DaysElapsed 35 \n", "\n", " 2 \\\n", "EMPRESA_VENDAS 1 \n", "REVENDA_VENDAS 1 \n", "DTA_ENTRADA_SAIDA 2015-04-30 00:00:00 \n", "CLIENTE 1 \n", "VAL_TOTAL_REAL_ITEM 37043.2 \n", "VAL_TOTAL_NOTA_ITEM 37043.2 \n", "VAL_CUSTO_CONTABIL 37043.2 \n", "VENDEDOR 110011 \n", "VAL_BONUS 0 \n", "MODELO 5U3PN4 \n", "DATA_NASCIMENTO 1900-01-01 00:00:00 \n", "SEXO N \n", "ESTADO_CIVIL 0 \n", "SITUACAO_CREDITO Aprovado \n", "CLIENTE_TIPO N \n", "TIPO_PESSOA J \n", "CLIENTE_DTCADASTRO 2015-02-24 00:00:00 \n", "EMPRESA_ORIGEM 1 \n", "REVENDA_ORIGEM 1 \n", "DTPRIMEIRAFATURA 2015-04-01 00:00:00 \n", "DTULTIMAFATURA 2016-09-30 00:00:00 \n", "LIMITE_CREDITO 1e+07 \n", "CEP1 7 \n", "CEP2 7 \n", "CEP3 0 \n", "DES_MODELO VOYAGE 1.6 \n", "FAMILIA 1 \n", "MARCA VW \n", "CLASSIFICACAO 3 \n", "DTA_ENTRADA_SAIDA_Year 2015 \n", "... ... \n", "CLIENTE_DTCADASTRO_Is_year_end False \n", "CLIENTE_DTCADASTRO_Is_year_start False \n", "CLIENTE_DTCADASTRO_Elapsed 1424736000 \n", "DTPRIMEIRAFATURA_Year 2015 \n", "DTPRIMEIRAFATURA_Month 4 \n", "DTPRIMEIRAFATURA_Week 14 \n", "DTPRIMEIRAFATURA_Day 1 \n", "DTPRIMEIRAFATURA_Dayofweek 2 \n", "DTPRIMEIRAFATURA_Dayofyear 91 \n", "DTPRIMEIRAFATURA_Is_month_end False \n", "DTPRIMEIRAFATURA_Is_month_start True \n", "DTPRIMEIRAFATURA_Is_quarter_end False \n", "DTPRIMEIRAFATURA_Is_quarter_start True \n", "DTPRIMEIRAFATURA_Is_year_end False \n", "DTPRIMEIRAFATURA_Is_year_start False \n", "DTPRIMEIRAFATURA_Elapsed 1427846400 \n", "DTULTIMAFATURA_Year 2016 \n", "DTULTIMAFATURA_Month 9 \n", "DTULTIMAFATURA_Week 39 \n", "DTULTIMAFATURA_Day 30 \n", "DTULTIMAFATURA_Dayofweek 4 \n", "DTULTIMAFATURA_Dayofyear 274 \n", "DTULTIMAFATURA_Is_month_end True \n", "DTULTIMAFATURA_Is_month_start False \n", "DTULTIMAFATURA_Is_quarter_end True \n", "DTULTIMAFATURA_Is_quarter_start False \n", "DTULTIMAFATURA_Is_year_end False \n", "DTULTIMAFATURA_Is_year_start False \n", "DTULTIMAFATURA_Elapsed 1475193600 \n", "DTA_VENDA_CADASTRO_DaysElapsed 65 \n", "\n", " 3 \\\n", "EMPRESA_VENDAS 5 \n", "REVENDA_VENDAS 1 \n", "DTA_ENTRADA_SAIDA 2018-09-18 00:00:00 \n", "CLIENTE 51804 \n", "VAL_TOTAL_REAL_ITEM 41869.3 \n", "VAL_TOTAL_NOTA_ITEM 41869.3 \n", "VAL_CUSTO_CONTABIL 41869.3 \n", "VENDEDOR 4000020 \n", "VAL_BONUS 0 \n", "MODELO 5U7TA4 \n", "DATA_NASCIMENTO 1900-01-01 00:00:00 \n", "SEXO N \n", "ESTADO_CIVIL 0 \n", "SITUACAO_CREDITO Aprovado \n", "CLIENTE_TIPO N \n", "TIPO_PESSOA J \n", "CLIENTE_DTCADASTRO 1900-01-01 00:00:00 \n", "EMPRESA_ORIGEM 1 \n", "REVENDA_ORIGEM 1 \n", "DTPRIMEIRAFATURA 2015-03-25 00:00:00 \n", "DTULTIMAFATURA 2019-03-07 00:00:00 \n", "LIMITE_CREDITO 0 \n", "CEP1 7 \n", "CEP2 7 \n", "CEP3 8 \n", "DES_MODELO VW/FOX 1.6 PIME GII \n", "FAMILIA 1 \n", "MARCA VW \n", "CLASSIFICACAO 1 \n", "DTA_ENTRADA_SAIDA_Year 2018 \n", "... ... \n", "CLIENTE_DTCADASTRO_Is_year_end False \n", "CLIENTE_DTCADASTRO_Is_year_start True \n", "CLIENTE_DTCADASTRO_Elapsed -2208988800 \n", "DTPRIMEIRAFATURA_Year 2015 \n", "DTPRIMEIRAFATURA_Month 3 \n", "DTPRIMEIRAFATURA_Week 13 \n", "DTPRIMEIRAFATURA_Day 25 \n", "DTPRIMEIRAFATURA_Dayofweek 2 \n", "DTPRIMEIRAFATURA_Dayofyear 84 \n", "DTPRIMEIRAFATURA_Is_month_end False \n", "DTPRIMEIRAFATURA_Is_month_start False \n", "DTPRIMEIRAFATURA_Is_quarter_end False \n", "DTPRIMEIRAFATURA_Is_quarter_start False \n", "DTPRIMEIRAFATURA_Is_year_end False \n", "DTPRIMEIRAFATURA_Is_year_start False \n", "DTPRIMEIRAFATURA_Elapsed 1427241600 \n", "DTULTIMAFATURA_Year 2019 \n", "DTULTIMAFATURA_Month 3 \n", "DTULTIMAFATURA_Week 10 \n", "DTULTIMAFATURA_Day 7 \n", "DTULTIMAFATURA_Dayofweek 3 \n", "DTULTIMAFATURA_Dayofyear 66 \n", "DTULTIMAFATURA_Is_month_end False \n", "DTULTIMAFATURA_Is_month_start False \n", "DTULTIMAFATURA_Is_quarter_end False \n", "DTULTIMAFATURA_Is_quarter_start False \n", "DTULTIMAFATURA_Is_year_end False \n", "DTULTIMAFATURA_Is_year_start False \n", "DTULTIMAFATURA_Elapsed 1551916800 \n", "DTA_VENDA_CADASTRO_DaysElapsed 43359 \n", "\n", " 4 \n", "EMPRESA_VENDAS 1 \n", "REVENDA_VENDAS 1 \n", "DTA_ENTRADA_SAIDA 2015-05-14 00:00:00 \n", "CLIENTE 1 \n", "VAL_TOTAL_REAL_ITEM 127944 \n", "VAL_TOTAL_NOTA_ITEM 127944 \n", "VAL_CUSTO_CONTABIL 127944 \n", "VENDEDOR 110011 \n", "VAL_BONUS 0 \n", "MODELO 2HBB3A \n", "DATA_NASCIMENTO 1900-01-01 00:00:00 \n", "SEXO N \n", "ESTADO_CIVIL 0 \n", "SITUACAO_CREDITO Aprovado \n", "CLIENTE_TIPO N \n", "TIPO_PESSOA J \n", "CLIENTE_DTCADASTRO 2015-02-24 00:00:00 \n", "EMPRESA_ORIGEM 1 \n", "REVENDA_ORIGEM 1 \n", "DTPRIMEIRAFATURA 2015-04-01 00:00:00 \n", "DTULTIMAFATURA 2016-09-30 00:00:00 \n", "LIMITE_CREDITO 1e+07 \n", "CEP1 7 \n", "CEP2 7 \n", "CEP3 0 \n", "DES_MODELO PEUGEOT 207 PASSION XS A \n", "FAMILIA 58 \n", "MARCA PEUG \n", "CLASSIFICACAO 1 \n", "DTA_ENTRADA_SAIDA_Year 2015 \n", "... ... \n", "CLIENTE_DTCADASTRO_Is_year_end False \n", "CLIENTE_DTCADASTRO_Is_year_start False \n", "CLIENTE_DTCADASTRO_Elapsed 1424736000 \n", "DTPRIMEIRAFATURA_Year 2015 \n", "DTPRIMEIRAFATURA_Month 4 \n", "DTPRIMEIRAFATURA_Week 14 \n", "DTPRIMEIRAFATURA_Day 1 \n", "DTPRIMEIRAFATURA_Dayofweek 2 \n", "DTPRIMEIRAFATURA_Dayofyear 91 \n", "DTPRIMEIRAFATURA_Is_month_end False \n", "DTPRIMEIRAFATURA_Is_month_start True \n", "DTPRIMEIRAFATURA_Is_quarter_end False \n", "DTPRIMEIRAFATURA_Is_quarter_start True \n", "DTPRIMEIRAFATURA_Is_year_end False \n", "DTPRIMEIRAFATURA_Is_year_start False \n", "DTPRIMEIRAFATURA_Elapsed 1427846400 \n", "DTULTIMAFATURA_Year 2016 \n", "DTULTIMAFATURA_Month 9 \n", "DTULTIMAFATURA_Week 39 \n", "DTULTIMAFATURA_Day 30 \n", "DTULTIMAFATURA_Dayofweek 4 \n", "DTULTIMAFATURA_Dayofyear 274 \n", "DTULTIMAFATURA_Is_month_end True \n", "DTULTIMAFATURA_Is_month_start False \n", "DTULTIMAFATURA_Is_quarter_end True \n", "DTULTIMAFATURA_Is_quarter_start False \n", "DTULTIMAFATURA_Is_year_end False \n", "DTULTIMAFATURA_Is_year_start False \n", "DTULTIMAFATURA_Elapsed 1475193600 \n", "DTA_VENDA_CADASTRO_DaysElapsed 79 \n", "\n", "[95 rows x 5 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_vendas.head().T" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "7284" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df_vendas)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preparing full data set" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Sort df by date (DTA_ENTRADA_SAIDA) in ascending order\n", "df_vendas.sort_values(by=['DTA_ENTRADA_SAIDA'], inplace=True, ascending=True)\n", "df_vendas_sorted = df_vendas.reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['EMPRESA_VENDAS',\n", " 'REVENDA_VENDAS',\n", " 'DTA_ENTRADA_SAIDA',\n", " 'CLIENTE',\n", " 'VAL_TOTAL_REAL_ITEM',\n", " 'VAL_TOTAL_NOTA_ITEM',\n", " 'VAL_CUSTO_CONTABIL',\n", " 'VENDEDOR',\n", " 'VAL_BONUS',\n", " 'MODELO',\n", " 'DATA_NASCIMENTO',\n", " 'SEXO',\n", " 'ESTADO_CIVIL',\n", " 'SITUACAO_CREDITO',\n", " 'CLIENTE_TIPO',\n", " 'TIPO_PESSOA',\n", " 'CLIENTE_DTCADASTRO',\n", " 'EMPRESA_ORIGEM',\n", " 'REVENDA_ORIGEM',\n", " 'DTPRIMEIRAFATURA',\n", " 'DTULTIMAFATURA',\n", " 'LIMITE_CREDITO',\n", " 'CEP1',\n", " 'CEP2',\n", " 'CEP3',\n", " 'DES_MODELO',\n", " 'FAMILIA',\n", " 'MARCA',\n", " 'CLASSIFICACAO',\n", " 'DTA_ENTRADA_SAIDA_Year',\n", " 'DTA_ENTRADA_SAIDA_Month',\n", " 'DTA_ENTRADA_SAIDA_Week',\n", " 'DTA_ENTRADA_SAIDA_Day',\n", " 'DTA_ENTRADA_SAIDA_Dayofweek',\n", " 'DTA_ENTRADA_SAIDA_Dayofyear',\n", " 'DTA_ENTRADA_SAIDA_Is_month_end',\n", " 'DTA_ENTRADA_SAIDA_Is_month_start',\n", " 'DTA_ENTRADA_SAIDA_Is_quarter_end',\n", " 'DTA_ENTRADA_SAIDA_Is_quarter_start',\n", " 'DTA_ENTRADA_SAIDA_Is_year_end',\n", " 'DTA_ENTRADA_SAIDA_Is_year_start',\n", " 'DTA_ENTRADA_SAIDA_Elapsed',\n", " 'DATA_NASCIMENTO_Year',\n", " 'DATA_NASCIMENTO_Month',\n", " 'DATA_NASCIMENTO_Week',\n", " 'DATA_NASCIMENTO_Day',\n", " 'DATA_NASCIMENTO_Dayofweek',\n", " 'DATA_NASCIMENTO_Dayofyear',\n", " 'DATA_NASCIMENTO_Is_month_end',\n", " 'DATA_NASCIMENTO_Is_month_start',\n", " 'DATA_NASCIMENTO_Is_quarter_end',\n", " 'DATA_NASCIMENTO_Is_quarter_start',\n", " 'DATA_NASCIMENTO_Is_year_end',\n", " 'DATA_NASCIMENTO_Is_year_start',\n", " 'DATA_NASCIMENTO_Elapsed',\n", " 'CLIENTE_DTCADASTRO_Year',\n", " 'CLIENTE_DTCADASTRO_Month',\n", " 'CLIENTE_DTCADASTRO_Week',\n", " 'CLIENTE_DTCADASTRO_Day',\n", " 'CLIENTE_DTCADASTRO_Dayofweek',\n", " 'CLIENTE_DTCADASTRO_Dayofyear',\n", " 'CLIENTE_DTCADASTRO_Is_month_end',\n", " 'CLIENTE_DTCADASTRO_Is_month_start',\n", " 'CLIENTE_DTCADASTRO_Is_quarter_end',\n", " 'CLIENTE_DTCADASTRO_Is_quarter_start',\n", " 'CLIENTE_DTCADASTRO_Is_year_end',\n", " 'CLIENTE_DTCADASTRO_Is_year_start',\n", " 'CLIENTE_DTCADASTRO_Elapsed',\n", " 'DTPRIMEIRAFATURA_Year',\n", " 'DTPRIMEIRAFATURA_Month',\n", " 'DTPRIMEIRAFATURA_Week',\n", " 'DTPRIMEIRAFATURA_Day',\n", " 'DTPRIMEIRAFATURA_Dayofweek',\n", " 'DTPRIMEIRAFATURA_Dayofyear',\n", " 'DTPRIMEIRAFATURA_Is_month_end',\n", " 'DTPRIMEIRAFATURA_Is_month_start',\n", " 'DTPRIMEIRAFATURA_Is_quarter_end',\n", " 'DTPRIMEIRAFATURA_Is_quarter_start',\n", " 'DTPRIMEIRAFATURA_Is_year_end',\n", " 'DTPRIMEIRAFATURA_Is_year_start',\n", " 'DTPRIMEIRAFATURA_Elapsed',\n", " 'DTULTIMAFATURA_Year',\n", " 'DTULTIMAFATURA_Month',\n", " 'DTULTIMAFATURA_Week',\n", " 'DTULTIMAFATURA_Day',\n", " 'DTULTIMAFATURA_Dayofweek',\n", " 'DTULTIMAFATURA_Dayofyear',\n", " 'DTULTIMAFATURA_Is_month_end',\n", " 'DTULTIMAFATURA_Is_month_start',\n", " 'DTULTIMAFATURA_Is_quarter_end',\n", " 'DTULTIMAFATURA_Is_quarter_start',\n", " 'DTULTIMAFATURA_Is_year_end',\n", " 'DTULTIMAFATURA_Is_year_start',\n", " 'DTULTIMAFATURA_Elapsed',\n", " 'DTA_VENDA_CADASTRO_DaysElapsed']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get list of colunms\n", "list_col = list(df_vendas_sorted.columns.values)\n", "list_col" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# Selection of variables continue\n", "cont_vars = ['LIMITE_CREDITO']\n", "\n", "# Selection of variables category\n", "cat_vars = [\n", " 'EMPRESA_VENDAS',\n", " 'REVENDA_VENDAS',\n", "# 'DTA_ENTRADA_SAIDA',\n", "# 'CLIENTE',\n", "# 'VAL_TOTAL_REAL_ITEM',\n", "# 'VAL_TOTAL_NOTA_ITEM',\n", "# 'VAL_CUSTO_CONTABIL',\n", "# 'VENDEDOR',\n", "# 'VAL_BONUS',\n", "# 'MODELO',\n", "# 'DATA_NASCIMENTO',\n", " 'SEXO',\n", " 'ESTADO_CIVIL',\n", " 'SITUACAO_CREDITO',\n", " 'CLIENTE_TIPO',\n", " 'TIPO_PESSOA',\n", "# 'CLIENTE_DTCADASTRO',\n", " 'EMPRESA_ORIGEM',\n", " 'REVENDA_ORIGEM',\n", "# 'DTPRIMEIRAFATURA',\n", "# 'DTULTIMAFATURA',\n", "# 'LIMITE_CREDITO',\n", " 'CEP1',\n", " 'CEP2',\n", " 'CEP3',\n", "# 'DES_MODELO',\n", "# 'FAMILIA',\n", "# 'MARCA',\n", "# 'CLASSIFICACAO',\n", " 'DTA_ENTRADA_SAIDA_Year', #13\n", " 'DTA_ENTRADA_SAIDA_Month',\n", "# 'DTA_ENTRADA_SAIDA_Week',\n", "# 'DTA_ENTRADA_SAIDA_Day',\n", " 'DTA_ENTRADA_SAIDA_Dayofweek', #17\n", "# 'DTA_ENTRADA_SAIDA_Dayofyear',\n", " 'DTA_ENTRADA_SAIDA_Is_month_end',\n", " 'DTA_ENTRADA_SAIDA_Is_month_start',\n", " 'DTA_ENTRADA_SAIDA_Is_quarter_end',\n", " 'DTA_ENTRADA_SAIDA_Is_quarter_start',\n", " 'DTA_ENTRADA_SAIDA_Is_year_end',\n", " 'DTA_ENTRADA_SAIDA_Is_year_start', #23\n", "# 'DTA_ENTRADA_SAIDA_Elapsed',\n", " 'DATA_NASCIMENTO_Year', #24\n", " 'DATA_NASCIMENTO_Month',\n", "# 'DATA_NASCIMENTO_Week',\n", "# 'DATA_NASCIMENTO_Day',\n", "# 'DATA_NASCIMENTO_Dayofweek',\n", "# 'DATA_NASCIMENTO_Dayofyear',\n", " 'DATA_NASCIMENTO_Is_month_end',\n", " 'DATA_NASCIMENTO_Is_month_start',\n", " 'DATA_NASCIMENTO_Is_quarter_end',\n", " 'DATA_NASCIMENTO_Is_quarter_start',\n", " 'DATA_NASCIMENTO_Is_year_end', #30\n", " 'DATA_NASCIMENTO_Is_year_start',\n", "# 'DATA_NASCIMENTO_Elapsed',\n", " 'CLIENTE_DTCADASTRO_Year',\n", " 'CLIENTE_DTCADASTRO_Month',\n", "# 'CLIENTE_DTCADASTRO_Week',\n", "# 'CLIENTE_DTCADASTRO_Day',\n", "# 'CLIENTE_DTCADASTRO_Dayofweek',\n", "# 'CLIENTE_DTCADASTRO_Dayofyear',\n", " 'CLIENTE_DTCADASTRO_Is_month_end',\n", " 'CLIENTE_DTCADASTRO_Is_month_start',\n", " 'CLIENTE_DTCADASTRO_Is_quarter_end',\n", " 'CLIENTE_DTCADASTRO_Is_quarter_start',\n", " 'CLIENTE_DTCADASTRO_Is_year_end',\n", " 'CLIENTE_DTCADASTRO_Is_year_start',\n", "# 'CLIENTE_DTCADASTRO_Elapsed',\n", "# 'DTPRIMEIRAFATURA_Year',\n", "# 'DTPRIMEIRAFATURA_Month',\n", "# 'DTPRIMEIRAFATURA_Week',\n", "# 'DTPRIMEIRAFATURA_Day',\n", "# 'DTPRIMEIRAFATURA_Dayofweek',\n", "# 'DTPRIMEIRAFATURA_Dayofyear',\n", "# 'DTPRIMEIRAFATURA_Is_month_end',\n", "# 'DTPRIMEIRAFATURA_Is_month_start',\n", "# 'DTPRIMEIRAFATURA_Is_quarter_end',\n", "# 'DTPRIMEIRAFATURA_Is_quarter_start',\n", "# 'DTPRIMEIRAFATURA_Is_year_end',\n", "# 'DTPRIMEIRAFATURA_Is_year_start',\n", "# 'DTPRIMEIRAFATURA_Elapsed',\n", "# 'DTULTIMAFATURA_Year',\n", "# 'DTULTIMAFATURA_Month',\n", "# 'DTULTIMAFATURA_Week',\n", "# 'DTULTIMAFATURA_Day',\n", "# 'DTULTIMAFATURA_Dayofweek',\n", "# 'DTULTIMAFATURA_Dayofyear',\n", "# 'DTULTIMAFATURA_Is_month_end',\n", "# 'DTULTIMAFATURA_Is_month_start',\n", "# 'DTULTIMAFATURA_Is_quarter_end',\n", "# 'DTULTIMAFATURA_Is_quarter_start',\n", "# 'DTULTIMAFATURA_Is_year_end',\n", "# 'DTULTIMAFATURA_Is_year_start',\n", "# 'DTULTIMAFATURA_Elapsed',\n", "# 'DTA_VENDA_CADASTRO_DaysElapsed'\n", "]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7284, dtype('float64'))" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# target (out of the neural network)\n", "dep_var = 'VAL_TOTAL_REAL_ITEM'\n", "(df_vendas_sorted[dep_var] > 0.).sum(), df_vendas_sorted[dep_var].dtype" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Histogram of sales prices\n", "df_vendas_sorted[dep_var].hist()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Get index of test set (5% of last sales of df_vendas)\n", "num_test = int(0.05*len(df_vendas_sorted))\n", "test_idx = range(len(df_vendas_sorted)-num_test, len(df_vendas_sorted))\n", "df_test = df_vendas_sorted.loc[test_idx].copy()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "train_valid_idx = range(len(df_vendas_sorted)-num_test)\n", "df_train_valid = df_vendas_sorted.loc[train_valid_idx].copy()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Get index of valid set (15% of last sales of df_train_valid)\n", "num_valid = int(0.15*len(df_train_valid))\n", "valid_idx = range(len(df_train_valid)-num_valid, len(df_train_valid))\n", "df_valid = df_train_valid.loc[valid_idx].copy()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "train_idx = range(len(df_train_valid)-num_valid)\n", "df_train = df_train_valid.loc[train_idx].copy()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "# save train_valid_idx\n", "with open(PATH/'train_valid_idx_r', 'wb') as f:\n", " pickle.dump(train_valid_idx, f)\n", " \n", "# save valid_idx\n", "with open(PATH/'valid_idx_r', 'wb') as f:\n", " pickle.dump(valid_idx, f)\n", " \n", "# save test_idx\n", "with open(PATH/'test_idx_r', 'wb') as f:\n", " pickle.dump(test_idx, f)\n", " \n", "# save tables\n", "df_tr_vd_test_vendas = [df_train, df_valid, df_test, df_train_valid, df_vendas_sorted]\n", "\n", "with open(PATH/'df_tr_vd_test_vendas_r', 'wb') as f:\n", " pickle.dump(df_tr_vd_test_vendas, f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Databunch" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# List of process to apply on df_vendas_sorted\n", "procs=[FillMissing, Categorify, Normalize]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# doc(TabularList.from_df)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# create the databunch (dataset and dataloader)\n", "data = (TabularList.from_df(df_vendas_sorted, path=PATH, cat_names=cat_vars, cont_names=cont_vars, procs=procs)\n", " .split_by_idx(valid_idx)\n", " .label_from_df(cols=dep_var, label_cls=FloatList, log=True)\n", " .add_test(TabularList.from_df(df_test, path=PATH, cat_names=cat_vars, cont_names=cont_vars))\n", " .databunch(bs=64,num_workers=0))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6246, 1038, 364)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(data.train_ds),len(data.valid_ds),len(data.test_ds)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# number of classes\n", "data.c" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EMPRESA_VENDASREVENDA_VENDASSEXOESTADO_CIVILSITUACAO_CREDITOCLIENTE_TIPOTIPO_PESSOAEMPRESA_ORIGEMREVENDA_ORIGEMCEP1CEP2CEP3DTA_ENTRADA_SAIDA_YearDTA_ENTRADA_SAIDA_MonthDTA_ENTRADA_SAIDA_DayofweekDTA_ENTRADA_SAIDA_Is_month_endDTA_ENTRADA_SAIDA_Is_month_startDTA_ENTRADA_SAIDA_Is_quarter_endDTA_ENTRADA_SAIDA_Is_quarter_startDTA_ENTRADA_SAIDA_Is_year_endDTA_ENTRADA_SAIDA_Is_year_startDATA_NASCIMENTO_YearDATA_NASCIMENTO_MonthDATA_NASCIMENTO_Is_month_endDATA_NASCIMENTO_Is_month_startDATA_NASCIMENTO_Is_quarter_endDATA_NASCIMENTO_Is_quarter_startDATA_NASCIMENTO_Is_year_endDATA_NASCIMENTO_Is_year_startCLIENTE_DTCADASTRO_YearCLIENTE_DTCADASTRO_MonthCLIENTE_DTCADASTRO_Is_month_endCLIENTE_DTCADASTRO_Is_month_startCLIENTE_DTCADASTRO_Is_quarter_endCLIENTE_DTCADASTRO_Is_quarter_startCLIENTE_DTCADASTRO_Is_year_endCLIENTE_DTCADASTRO_Is_year_startLIMITE_CREDITOtarget
52F1Não AprovadoNF52772201721FalseFalseFalseFalseFalseFalse19768FalseFalseFalseFalseFalseFalse20172FalseFalseFalseFalseFalseFalse-0.109510.896739
51F2AprovadoNF11778201760FalseFalseFalseFalseFalseFalse19732FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue-0.109511.082143
52M1AprovadoNF11770201871TrueFalseFalseFalseFalseFalse196310FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue-0.109510.816413
11M1Não AprovadoNF117732015113FalseFalseFalseFalseFalseFalse198711FalseFalseFalseFalseFalseFalse201511FalseFalseFalseFalseFalseFalse-0.109510.460242
53N0Não AprovadoNJ53383201744FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue20174FalseFalseFalseFalseFalseFalse-0.109510.704216
53N0AprovadoNJ53756201782FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue20066FalseFalseFalseFalseFalseFalse-0.109510.818493
51M2Não AprovadoNF51777201861FalseFalseFalseFalseFalseFalse194012FalseFalseFalseFalseFalseFalse20186FalseFalseFalseFalseFalseFalse-0.109510.910277
51M1AprovadoNF117782017112FalseFalseFalseFalseFalseFalse194312FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue-0.109510.668956
52N0AprovadoNJ117702016110FalseFalseFalseFalseFalseFalse19001FalseTrueFalseTrueFalseTrue20162FalseFalseFalseFalseFalseFalse-0.109510.534975
53M0Não AprovadoNF53755201870FalseFalseFalseFalseFalseFalse19695FalseFalseFalseFalseFalseFalse20171FalseFalseFalseFalseFalseFalse-0.109510.799576
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data.show_batch(rows=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "max_log_y = np.log(np.max(df_train[dep_var])*1.2)\n", "y_range = torch.tensor([0, max_log_y], device=defaults.device)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "learn = tabular_learner(data, layers=[1000,500], ps=[0.001,0.01], emb_drop=0.04, \n", " y_range=y_range, metrics=exp_rmspe)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TabularModel(\n", " (embeds): ModuleList(\n", " (0): Embedding(3, 3)\n", " (1): Embedding(4, 3)\n", " (2): Embedding(4, 3)\n", " (3): Embedding(11, 6)\n", " (4): Embedding(3, 3)\n", " (5): Embedding(5, 4)\n", " (6): Embedding(4, 3)\n", " (7): Embedding(3, 3)\n", " (8): Embedding(4, 3)\n", " (9): Embedding(10, 6)\n", " (10): Embedding(10, 6)\n", " (11): Embedding(11, 6)\n", " (12): Embedding(8, 5)\n", " (13): Embedding(13, 7)\n", " (14): Embedding(8, 5)\n", " (15): Embedding(3, 3)\n", " (16): Embedding(3, 3)\n", " (17): Embedding(3, 3)\n", " (18): Embedding(3, 3)\n", " (19): Embedding(3, 3)\n", " (20): Embedding(2, 2)\n", " (21): Embedding(87, 20)\n", " (22): Embedding(13, 7)\n", " (23): Embedding(3, 3)\n", " (24): Embedding(3, 3)\n", " (25): Embedding(3, 3)\n", " (26): Embedding(3, 3)\n", " (27): Embedding(3, 3)\n", " (28): Embedding(3, 3)\n", " (29): Embedding(35, 12)\n", " (30): Embedding(13, 7)\n", " (31): Embedding(3, 3)\n", " (32): Embedding(3, 3)\n", " (33): Embedding(3, 3)\n", " (34): Embedding(3, 3)\n", " (35): Embedding(2, 2)\n", " (36): Embedding(3, 3)\n", " )\n", " (emb_drop): Dropout(p=0.04)\n", " (bn_cont): BatchNorm1d(1, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (layers): Sequential(\n", " (0): Linear(in_features=165, out_features=1000, bias=True)\n", " (1): ReLU(inplace)\n", " (2): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): Dropout(p=0.001)\n", " (4): Linear(in_features=1000, out_features=500, bias=True)\n", " (5): ReLU(inplace)\n", " (6): BatchNorm1d(500, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (7): Dropout(p=0.01)\n", " (8): Linear(in_features=500, out_features=1, bias=True)\n", " )\n", ")" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.model" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "======================================================================\n", "Layer (type) Output Shape Param # Trainable \n", "======================================================================\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 12 True \n", "______________________________________________________________________\n", "Embedding [3] 12 True \n", "______________________________________________________________________\n", "Embedding [6] 66 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [4] 20 True \n", "______________________________________________________________________\n", "Embedding [3] 12 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 12 True \n", "______________________________________________________________________\n", "Embedding [6] 60 True \n", "______________________________________________________________________\n", "Embedding [6] 60 True \n", "______________________________________________________________________\n", "Embedding [6] 66 True \n", "______________________________________________________________________\n", "Embedding [5] 40 True \n", "______________________________________________________________________\n", "Embedding [7] 91 True \n", "______________________________________________________________________\n", "Embedding [5] 40 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [2] 4 True \n", "______________________________________________________________________\n", "Embedding [20] 1,740 True \n", "______________________________________________________________________\n", "Embedding [7] 91 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [12] 420 True \n", "______________________________________________________________________\n", "Embedding [7] 91 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Embedding [2] 4 True \n", "______________________________________________________________________\n", "Embedding [3] 9 True \n", "______________________________________________________________________\n", "Dropout [164] 0 False \n", "______________________________________________________________________\n", "BatchNorm1d [1] 2 True \n", "______________________________________________________________________\n", "Linear [1000] 166,000 True \n", "______________________________________________________________________\n", "ReLU [1000] 0 False \n", "______________________________________________________________________\n", "BatchNorm1d [1000] 2,000 True \n", "______________________________________________________________________\n", "Dropout [1000] 0 False \n", "______________________________________________________________________\n", "Linear [500] 500,500 True \n", "______________________________________________________________________\n", "ReLU [500] 0 False \n", "______________________________________________________________________\n", "BatchNorm1d [500] 1,000 True \n", "______________________________________________________________________\n", "Dropout [500] 0 False \n", "______________________________________________________________________\n", "Linear [1] 501 True \n", "______________________________________________________________________\n", "\n", "Total params: 673,015\n", "Total trainable params: 673,015\n", "Total non-trainable params: 0" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.summary()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] } ], "source": [ "learn.lr_find()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learn.recorder.plot(skip_end=0)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 00:27

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_lossexp_rmspetime
03.2302042.5808945.81449400:05
13.0121212.5844305.82457000:05
22.9949522.5839975.82388900:05
32.6280011.9681343.25953500:05
40.5941210.2591500.74325500:05
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "

" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Better model found at epoch 0 with exp_rmspe value: 5.814493656158447.\n", "Better model found at epoch 3 with exp_rmspe value: 3.2595345973968506.\n", "Better model found at epoch 4 with exp_rmspe value: 0.7432551383972168.\n" ] } ], "source": [ "learn.fit_one_cycle(5, 1e-1, wd=0.2,\n", " callbacks=[ShowGraph(learn),SaveModelCallback(learn,monitor='exp_rmspe',mode='min')])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "learn.save('model_vendas_brasal_regressao')" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "learn.load('model_vendas_brasal_regressao');" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# Export the learner\n", "learn.export('model_vendas_brasal_regressao.pkl')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Predictions on train, valid and test" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "learn.load('model_vendas_brasal_regressao');" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# Get predictions on 'VAL_TOTAL_REAL_ITEM'\n", "train_preds=learn.get_preds(DatasetType.Train)\n", "val_preds=learn.get_preds(DatasetType.Valid)\n", "test_preds=learn.get_preds(DatasetType.Test)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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ePvttznyyCO57rp0Heakk05iiy22YOTIkXzta18D4LTTTuPcc88FYPLkyYwZM4aRI0fy0Y9+lDlz0vWXXXbZhRNPPJHRo0ezySab8I9//AOAqVOnMnr0aLbeemtGjhzJE0880dWHzcy6IeczM2sWzme1U9dnJCX1kTSZ9CXdEyLi3jzrrNx99TxJK+eySsNIVzW8tKRxkiZKmjhr1qya74tZZzz22GOMGzeOKVOmMGDAAH72s58B0K9fP+666y4OOeQQxo0bx49//GMmTZrEueeey7HHHssaa6zB+9//fv7+978D8Mc//pE999yTFVdcccm6Z8+ezQ033MDUqVOZMmUKp5xyyru2f8QRR3DOOecwZcoU3ve+93H66acvmbdo0SLuu+8+zj///CXlF154ISeccAKTJ09m4sSJDB06tJ6Hx8x6EOczM2sWzme1UdeGZEQsjoitSSN5jZa0FXAysBlpCOk1gRNz9UrDSFc1vLRHBLPuaNiwYey4444AHH744dx1110AHHzwwQAsWLCAf/3rXxx00EFsvfXWHHPMMcycOXNJnWuuuQaAq6++eskyrQYMGEC/fv04+uijuf7661lllVWWmT9v3jzmzp3LzjvvDMDYsWO58847l8z/2Mc+BsC2227LjBkzANhhhx347ne/yznnnMPTTz9N//79a3k4zKwHcz4zs2bhfFYbXTJqa0TMBe4A9oqImbn76pvAr4HRuVqlYaSrHl7arLuRVHZ61VVXBeCdd95h4MCBTJ48eclr2rRpAOy///78+c9/Zvbs2UyaNIldd911mXX17duX++67j49//OP84Q9/YK+9Otbje+WVU2eAPn36sGjRIgAOO+wwxo8fT//+/dlzzz3529/+1vGdNrOm5HxmZs3C+aw26jlq62BJA/P7/sBHgEfzc48o/cYOBB7Oi4wHjsijt44B5kXETOAWYA9JgyQNAvbIZWbd3jPPPMPdd98NwFVXXcVOO+20zPwBAwYwYsQIfve73wEQETz44IMArLbaaowePZoTTjiBfffd910PfS9YsIB58+axzz77cP755zN58uRl5q+xxhoMGjRoSf/6K664YsnVr0qefPJJNthgA44//nj2339/pkyZ0vmdN7Om4nxmZs3C+aw26nlHcl3gdklTgPtJz0jeBFwp6SHgIdIX2p6Z698MPAlMB34JHAsQEbOB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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Set up a figure with set of axes\n", "fig, ax = plt.subplots(1, 3, figsize=(15,5))\n", "ax0, ax1, ax2 = ax.flatten()\n", "fig.subplots_adjust(hspace=0.4, wspace=0.4)\n", "\n", "# Add axis labels\n", "ax0.set_xlabel('sales prices (reais)')\n", "ax0.set_ylabel('number of sales')\n", "ax1.set_xlabel('sales prices (reais)')\n", "ax1.set_ylabel('number of sales')\n", "ax2.set_xlabel('sales prices (reais)')\n", "ax2.set_ylabel('number of sales')\n", "\n", "# Generate the histogram for training\n", "ax0.hist(np.exp(train_preds[0].data).numpy().T[0], alpha=0.5)\n", "ax0.hist(df_train['VAL_TOTAL_REAL_ITEM'], alpha=0.5)\n", "n = len(df_train['VAL_TOTAL_REAL_ITEM'])\n", "ax0.set_title(f'Train dataset ({n} sales)\\nHistogram of cars sales prices')\n", "\n", "# Generate the histogram for validation\n", "ax1.hist(np.exp(val_preds[0].data).numpy().T[0], alpha=0.5)\n", "ax1.hist(df_valid['VAL_TOTAL_REAL_ITEM'], alpha=0.5)\n", "n = len(df_valid['VAL_TOTAL_REAL_ITEM'])\n", "ax1.set_title(f'Valid dataset ({n} sales)\\nHistogram of cars sales prices')\n", "\n", "# Generate the histogram for test\n", "ax2.hist(np.exp(test_preds[0].data).numpy().T[0], alpha=0.5)\n", "ax2.hist(df_test['VAL_TOTAL_REAL_ITEM'], alpha=0.5)\n", "n = len(df_test['VAL_TOTAL_REAL_ITEM'])\n", "ax2.set_title(f'Test dataset ({n} sales)\\nHistogram of cars sales prices')\n", "\n", "# Add a legend\n", "ax0.legend(('real','previsions'), loc='upper right')\n", "ax1.legend(('real','previsions'), loc='upper right')\n", "ax2.legend(('real','previsions'), loc='upper right')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prediction on one client" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# add_datepart2 will be used for predictions on new client\n", "def add_datepart2(df, fldname, drop=True, time=False):\n", " \"Helper function that adds columns relevant to a date.\"\n", " fld = df[fldname]\n", " fld_dtype = fld.dtype\n", " if isinstance(fld_dtype, pd.core.dtypes.dtypes.DatetimeTZDtype):\n", " fld_dtype = np.datetime64\n", "\n", " if not np.issubdtype(fld_dtype, np.datetime64):\n", " df[fldname] = fld = pd.to_datetime(fld, infer_datetime_format=True)\n", " targ_pre = re.sub('[Dd]ate$', '', fldname)\n", " if fldname == 'DTA_ENTRADA_SAIDA':\n", " attr = ['Year', 'Month', 'Dayofweek',\n", " 'Is_month_end', 'Is_month_start', 'Is_quarter_end', 'Is_quarter_start', 'Is_year_end', 'Is_year_start']\n", " elif fldname == 'CLIENTE_DTCADASTRO':\n", " attr = ['Year', 'Month', \n", " 'Is_month_end', 'Is_month_start', 'Is_quarter_end', 'Is_quarter_start', 'Is_year_end', 'Is_year_start']\n", " if fldname == 'DATA_NASCIMENTO':\n", " attr = ['Year', 'Month', \n", " 'Is_month_end', 'Is_month_start', 'Is_quarter_end', 'Is_quarter_start', 'Is_year_end', 'Is_year_start']\n", " if time: attr = attr + ['Hour', 'Minute', 'Second']\n", " for n in attr: df[targ_pre + '_' + n] = getattr(fld.dt, n.lower())\n", "# df[targ_pre + '_' + 'Elapsed'] = fld.astype(np.int64) // 10 ** 9\n", " if drop: df.drop(fldname, axis=1, inplace=True)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "# load clientes file\n", "file = open(PATH/'df_tables','rb')\n", "df_tables = pickle.load(file)\n", "file.close()\n", "\n", "df_clientes, _, _, _ = df_tables\n", "df2_clientes = df_clientes.copy()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2019-5-15 00:00:00\n" ] } ], "source": [ "# Get date of the day\n", "from datetime import datetime\n", "now = datetime.now()\n", "date_now = str(now.year)+'-'+str(now.month)+'-'+str(now.day)+str(' 00:00:00')\n", "print(date_now)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# By default, we supose that a client goes to the car dealer (EMPRESA, REVENDA) where he/she registered\n", "df2_clientes['EMPRESA_VENDAS'] = df2_clientes['EMPRESA_ORIGEM'].copy()\n", "df2_clientes['REVENDA_VENDAS'] = df2_clientes['REVENDA_ORIGEM'].copy()\n", "\n", "# By default, the sale date is now\n", "df2_clientes.loc[:,'DTA_ENTRADA_SAIDA'] = date_now\n", "df2_clientes['DTA_ENTRADA_SAIDA'] = pd.to_datetime(df2_clientes['DTA_ENTRADA_SAIDA'], infer_datetime_format=True)\n", "\n", "# Creation of the date fields needed in the entrance of the model\n", "add_datepart2(df2_clientes, \"DTA_ENTRADA_SAIDA\", drop=False)\n", "add_datepart2(df2_clientes, \"CLIENTE_DTCADASTRO\", drop=False)\n", "add_datepart2(df2_clientes, \"DATA_NASCIMENTO\", drop=False)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# Get the dataframe client ready to be read by the model\n", "df3_clientes = df2_clientes[cat_vars+cont_vars].copy()\n", "\n", "# List of client_id\n", "client_id_list = df2_clientes['CLIENTE_COD'].unique()" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Previsão do preço do carro que o cliente seguinte está disposto a comprar hoje (2019-5-15)\n", "\n", "client_id ? 70\n", "\n", "45333 reais\n" ] } ], "source": [ "hoje = str(now.year)+'-'+str(now.month)+'-'+str(now.day)\n", "print(f'Previsão do preço do carro que o cliente seguinte está disposto a comprar hoje ({hoje})\\n')\n", "\n", "# Get the client_id\n", "client_id = input('client_id ? ')\n", "client_id = int(client_id)\n", "\n", "# Get the prevision for the client_id\n", "if client_id in client_id_list:\n", " index = df2_clientes.index[df2_clientes['CLIENTE_COD'] == client_id].tolist()[0]\n", " _, _ , pred = learn.predict(df3_clientes.iloc[index])\n", " print(f'\\n{int(np.exp(pred[0].item()))} reais')\n", "else:\n", " print(f'\\nO id {client_id} não faz parte da nossa lista de clientes.')\n" ] } ], "metadata": { "kernelspec": { "display_name": "fastai test v1", "language": "python", "name": "fastai_test_v1" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }