Coletânea Python do ZERO às Redes Neurais Artificiais
Previsão Quantitativa – Publi Dataset
Uma das aplicações de ciência de dados bastante recorrente é a de identificar algum retorno (em valores monetários) com base no investimento feito. Em outras palavras é possível identificar via processamento de aprendizado de máquina, se o investimento em um determinado nicho surtiu de fato algum resultado. Aqui estaremos usando uma database que com base no investimento em algumas categorias de publicidade de um determinado produto, possamos ver onde esse investimento surtiu melhor efeito, levando em consideração qual foi o retorno de acordo com cada unidade monetária investida.
A base de dados que usaremos dessa vez não está nem no UCI nem no Kaggle, porém você pode ter acesso a essa base de dados por meio do site acima. Clicando sobre Adversiting.csv você fará o download do referente arquivo.
Como sempre, inicialmente criamos um arquivo Python 3 para nosso código e realizamos as devidas importações iniciais.
Em seguida criamos nossa variável de nome base que irá receber todo o conteúdo de Adversising.csv por meio da função .read_csv( ) do pandas. A partir desse momento se o processo de importação ocorreu sem erros, a variável base será devidamente criada. Uma das maneiras de visualizar rapidamente o seu conteúdo (principalmente se você estiver usando outra IDE diferente do Spyder) é executar o comando print( ) parametrizado com base.head( ), dessa forma será exibida em console as 5 primeiras linhas desse dataframe.
Note que existem 6 colunas, sendo duas delas indexadores, um da própria planilha Excel e outro gerado pelo pandas durante a importação. Essas colunas simplesmente não serão utilizadas como referência nesse modelo. Também temos 3 colunas com atributos previsores (TV, radio e newspaper) e uma coluna com dados de saída (sales).
O que iremos fazer nesse modelo é executar algumas funções interessantes fora de uma rede neural densa, apenas para também visualizar estas possibilidades, uma vez que dependendo muito da complexidade do problema o mesmo não precisa ser processado por uma rede neural.
Dando sequência realizamos a importação da biblioteca Seaborn, muito utilizada em alternativa a MatPlotLib, de finalidade parecida, ou seja, exibir os dados de forma visual em forma de gráficos.
Em seguida criamos nossa variável sns, que por sua vez recebe como atributo a função sns.pairplot( ), onde passamos como parâmetros todo conteúdo de base, x_vars recebe os atributos previsores (os que serão plotados no eixo X), y_vars que recebe os dados de saída de sales, size = 5 simplesmente para visualização mais clara dos gráficos e por fim kind = ‘reg’, que define que o tipo de apresentação dos dados no gráfico é o tipo de dados de regressão.
Analisando rapidamente os gráficos podemos encontrar a relação entre cada atributo previsoes e o valor de vendas, importante salientar que aqui por hora, o que existe de mais relevante nesses gráficos é a angulação da linha gerada, uma linha ascendente confirma que houve retorno positivo de acordo com o investimento, pode acontecer de existir linhas descendentes em um ou mais gráficos de amostras, representando prejuízo em relação ao investimento. Nesse exemplo, ambos os 3 previsores (veículos de mídia) retornaram estimativas positivas, de lucro com base em seus dados.
Tendo as primeiras estimativas de resultado, hora de aplicarmos alguns testes para avaliar a performance de nosso modelo. Como de costume, o processo se inicia importando o que for necessário, aqui, usaremos inicialmente a ferramenta train_test_split. Logo após criamos as variáveis dedicadas a treino e teste do modelo, bem como a definição de que 30% das amostras serão reservadas para teste, sobrando 70% para treino.
Dando uma conferida no nosso explorador de variáveis podemos ver que de fato foram criadas tais variáveis.
Em seguida realizamos a importação da ferramenta LinearRegression, do módulo linear_model, da biblioteca sklearn.
A seguir criamos nossa variável de nome reglinear que inicialmente apenas inicializa a ferramenta LinearRegression, sem parâmetros mesmo. Depois aplicamos sobre reglinear a função .fit( ) passando como parâmetro os dados de etreino e streino.
Uma vez executado o modelo de regressão linear podemos agora aplicar alguns testes. Primeiramente instanciamos o conteúdo de nossos atributos previsores, seguido do argumento reglinear.coef_ que em outras palavras, retornará o valor de coeficiente (de investimento nesse caso).
Selecionando e executando o bloco de código anterior teremos um retorno padrão via console, onde podemos ver que existem coeficientes para cada um de nossos atributos previsores, estes coeficientes para entendimento mais fácil podem ser interpretados como valores de unidade monetária.
Por exemplo em ‘TV’ temos 0.04, o que significa que para cada 1 dólar investido, houve um aumento nas vendas de 4%, seguindo o mesmo raciocínio lógico, em ‘radio’ para cada dólar investido houve um aumento nas vendas de 18% e por fim em ‘newspaper’ para cada dólar investido houve um valor nulo, você até poderia em outras situações considerar 0.002 centavos de dólar de prejuízo, aqui nosso parâmetro é de apenas duas casas decimais mesmo, sendo que para cada 1 dólar investido não houve nem lucro nem prejuízo nas vendas.
Por meio da função .predict( ) podemos passar em forma de lista uma das linhas de nossa base de dados, contendo os três atributos previsores e realizar teste sobre essa amostra.
Usando esses parâmetros como exemplo, numa campanha onde foi investido 230.1 dólares em publicidade via TV, 37.8 dólares em publicidade via rádio e 69.2 dólares em publicidade via jornal, houve um aumento nas vendas em geral de 20.6%. Repare que o interessante desse teste em particular é justamente equiparar quanto foi investido para cada mídia e qual foi o retorno, para justamente realizar ajustes e focar nas próximas campanhas na mídia que deu maior retorno.
Como já fizemos algumas vezes em outros modelos, podemos criar nossa variável de nome previsor que aplica a função .predict( ) sobre toda a nossa base separada em eteste.
Selecionado e executado o bloco de código anterior, os resultados são exibidos em console, assim como atribuídos a nossa variável previsor.
Abrindo as devidas variáveis via explorador de variáveis podemos fazer uma fácil relação, onde dentro de um período, os valores investidos em campanhas publicitárias surtiram um certo percentual de aumento nas vendas em geral.
Podemos ainda realizar alguns testes para confirmar a integridade de nossos dados. Aqui usaremos da ferramenta metrics da biblioteca sklearn para tal fim.
Primeiro teste será realizado por meio da função .mean_absolute_error( ) que com base nos dados de steste e dos obtidos em previsor, gerará um valor atribuído a nossa variável mae.
Se não houve nenhum erro de sintaxe até o momento será criada a variável mae, note que ela possui o valor 1.41, que em outras palavras significa que para cada 1 dólar investido, houve um retorno de $1.41.
Em seguida nos mesmos moldes aplicamos a função .mean_squared_error( ) que por sua vez fará o processamento dos dados sobre steste e previsor, porém com a particularidade que aqui os valores de erro encontrados durante o processamento são elevados ao quadrado, dando mais peso aos erros.
Raciocine que por exemplo um erro 2 elevado ao quadrado é apenas 4, enquanto um erro 5 ao quadrado é 25, o que gera grande impacto sobre as funções aplicadas.
Importante salientar que esse valor obtido inicialmente para mse não pode ser convertido diretamente para valor monetário. É necessário aplicar uma segunda função para este fim.
Para isso importamos a biblioteca numpy, na sequência criamos uma variável de nome rmse que aplica a raiz quadrada sobre mse, gerando agora um valor que pode ser levado em conta como unidade monetária.
Note que agora podemos fazer as devidas comparações. Inicialmente havíamos descoberto que para cada 1 dólar investido, o retorno teria sido de $1.41, agora, dando mais peso aos erros de processamento, chegamos ao dado de que para cada 1 dólar investido, o retorno foi de $1.81, o que condiz perfeitamente com os dados plotados lá no início em nossos gráficos.
Código Completo: