#!/usr/bin/env python # coding: utf-8 # # Ciência de Dados para Previsão de Vendas com Campanhas Publicitárias # ## Entendendo a Situação # O desafio consiste em prever as vendas de uma empresa fictícia chamada Hashtag com base nos investimentos que ela pretende realizar com publicidade na TV, no jornal e no rádio. # ## Base de Dados # # A base de dados deste projeto está disponível neste link do Google Drive: # # - https://drive.google.com/drive/folders/1o2lpxoi9heyQV1hIlsHXWSfDkBPtze-V?usp=sharing # ## Bibliotecas Usadas # # Estas são as bibliotecas usadas neste projeto: # # - pandas # - numpy # - openpyxl # - jupyter # - matplotlib # - seaborn # - scikit-learn # ## Divisão do Problema # 1. Entender o desafio # 2. Entender a área/empresa # 3. Extrair os dados # 4. Tratar os dados (limpeza) # 5. Fazer uma Análise Exploratória dos dados # 6. Modelar e criar algoritmos # 7. Interpretar os resultados # ## Importações # In[1]: # Importa o pandas com o apelido pd import pandas as pd # Bibliotecas para visualização de dados import matplotlib.pyplot as plt import seaborn as sns # ### Importar os Dados # In[2]: # Importa a base de dados df_vendas = pd.read_csv('advertising.csv') # Exibe o dataframe df_vendas # Observações: # # - Os valores investidos em anúncios foram registrados como milhares de reais # - Os valores de vendas foram registrados como milhões de reais # ### Tratar os Dados # In[3]: # Exibe um resumo do dataframe df_vendas.info() # De acordo com o resumo obtido com `df_vendas.info()`, nossa base de dados está limpa. # ### Fazer Análise Exploratória # - Nesta etapa, vamos visualizar como as informações estão distribuídas e a correlação entre elas # # - Desejamos descobrir se o total de vendas aumenta toda vez que investimos num determinado tipo de anúncio # # - Além disso, queremos descobrir qual é o tipo de anúncio que tem maior potencial para alavancar as vendas # In[4]: # Exibe a correlação entre as colunas da tabela display(df_vendas.corr()) # In[5]: # Cria o gráfico (mapa de calor) para visualizarmos a correlação entre as colunas sns.heatmap(df_vendas.corr(), cmap='Wistia', annot=True) # Exibe o gráfico plt.show() # ## Criação de Modelo com Machine Learning # ### Separando Dados de Treino e Dados de Teste # - `x`: valores investidos em anúncios # - `df_vendas[['TV', 'Radio', 'Jornal']]` # # - `y`: total de vendas # - `df_vendas['Vendas']` # In[6]: # Importa um submódulo do scikit-learn from sklearn.model_selection import train_test_split # Valores a serem previstos y = df_vendas['Vendas'] # Valores usados como base para previsão x = df_vendas[['TV', 'Radio', 'Jornal']] # Divisão de dados de treino e de teste x_treino, x_teste, y_treino, y_teste = train_test_split(x, y) # ### Escolha do Modelo # Temos em mãos um problema de regressão; vamos usar os seguintes modelos: # # - regressão linear # - RandomForest (Árvore de Decisão) # In[7]: # Importa o modelo de IA from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor # Cria a IA modelo_regressao_linear = LinearRegression() modelo_arvore_decisao = RandomForestRegressor() # Treina a IA modelo_regressao_linear.fit(x_treino, y_treino) modelo_arvore_decisao.fit(x_treino, y_treino) # ### Teste da IA e Avaliação do Melhor Modelo # Vamos usar o R² para avaliar a qualidade de nosso modelo. # In[9]: from sklearn.metrics import r2_score # Faz previsões previsao_regressao_linear = modelo_regressao_linear.predict(x_teste) previsao_arvore_decisao = modelo_arvore_decisao.predict(x_teste) # Compara as previsões com os valores de y_teste print(f'Pontuação do modelo de regressão linear: {r2_score(y_teste, previsao_regressao_linear)}') print(f'Pontuação do modelo de árvore de decisão: {r2_score(y_teste, previsao_arvore_decisao)}') # Com base nos nas pontuações dos dois modelos, concluímos que o **modelo de árvore de decisão** é o melhor. # ## Visualização Gráfica das Previsões # In[10]: # Cria um dataframe vazio tabela_aux = pd.DataFrame() # Cria uma coluna com os valores de teste tabela_aux['y_teste'] = y_teste # Cria uma coluna com os valores de previsão de venda dados pelo modelo de regressão linear tabela_aux['Previsão Regressão Linear'] = previsao_regressao_linear # Cria uma coluna com os valores de previsão de venda dados pelo modelo de árvore de decisão tabela_aux['Previsão Árvore Decisão'] = previsao_arvore_decisao # Cra uma figura com 15 inches por 5 inches plt.figure(figsize=(15,5)) # Cria um gráfico de linha a partir do dataframe sns.lineplot(data=tabela_aux) # Exibe o gráfico plt.show() # ## Fazendo Previsões # In[11]: # Importa a base com três opções de investimento df_opcoes_investimentos = pd.read_csv('novos.csv') df_opcoes_investimentos # In[13]: # Faz uma nova previsão a partir da tabela de opções de investimentos previsao = modelo_arvore_decisao.predict(df_opcoes_investimentos) print(previsao)