from IPython.display import Image
Image(filename='e-commerce.jpg',width=500, height=200)
Uma empresa de comércio eletrônico com sede na cidade de Nova York vende roupas online, mas também tem sessões de consultoria em estilo e vestuário na loja. Os clientes entram na loja, têm sessões / reuniões com um estilista pessoal, então podem ir para casa e encomendarem em um aplicativo móvel ou site a roupa que desejam.
A empresa precisa decidir se deve concentrar seus esforços e investimentos em aplicativos móveis ou em seu site a fim de aumentar a quantia gasta pelos clientes.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Trabalharemos com o arquivo csv do Ecommerce Customers da empresa. Possui informações do cliente, como Email, Endereço e sua cor Avatar. Em seguida, ele também possui colunas de valores numéricos:.
Lendo o dataset dos com informações dos clientes:
clientes = pd.read_csv("Ecommerce_Customers")
Visão geral do dataset:
clientes.head()
clientes.describe()
clientes.info()
O dataset a ser trabalhado possui 500 registros e 8 campos com informações de cada cliente!
Usando o seaborn para criar um jointplot para comparar as colunas Time On Website e Quantia gasta anualmente para ver se há alguma correlação entre os dados.
sns.jointplot(x='Time on Website', y='Yearly Amount Spent', data=clientes)
Agora usando os dados de tempo no app (Time on App)
sns.jointplot(x='Time on App', y='Yearly Amount Spent', data=clientes)
O tempo gasto em app parece ter uma tendência maior do que o tempo em website.
Explorando os tipos de relações em todo o conjunto de dados.
sns.pairplot(clientes)
Baseado neste plot a que parece ser a característica mais correlacionada com o valor anual gasto (Yearly Amount Spent) é o tempo de membro de cada cliente (Length of Membership). Mas o tempo médio de sessão, tempo em app tbm parecem ter uma certa relação. Então utilizaremos essas 4 informações para ver quem estaria mais relacionada com gasto de cada cliente e onde deve-se ter mais investimento.
Criando um plot de um modelo linear da quantia anual gasta (Yearly Amount Spent) vs. tempo de associação (Length of Membership).
sns.lmplot(x='Length of Membership', y='Yearly Amount Spent', data=clientes)
Com esse resultado já podemos ver que o tempo de associação está correlacionado como a quantia gasta pelos clientes.
O primeiro passo é dividir os dados em conjuntos de treinamento e teste.
Definindo as uma variáveis: X = todas as características numéricas dos clientes e Y = Valor anual gasto (Yearly Amount Spent).
y = clientes['Yearly Amount Spent']
X= clientes[['Avg. Session Length', 'Time on App','Time on Website', 'Length of Membership']]
# Importando scikit-learn para dividir os dados em conjunto de treinamento e conjunto de teste.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test =train_test_split(X, y, test_size=0.3,random_state=101)
Agora é hora de treinar nosso modelo em nossos dados de treinamento!
# Importando o LinearRegression do sklearn.linear_model
from sklearn.linear_model import LinearRegression
Criando uma instância de um modelo LinearRegression () chamado lm.
lm = LinearRegression()
Treinando lm nos dados de treinamento.
lm.fit(X_train, y_train)
Resultado dos coeficientes do modelo
lm.coef_
Agora que nos ajustamos ao nosso modelo, vamos avaliar o seu desempenho ao prever os valores de teste!
# Usando o lm.predict() para prever o conjunto X_test dos dados.
prediction = lm.predict(X_test)
# Agora criamos um diagrama de dispersão (scatterplot) dos valores reais de teste em relação aos valores preditos
# para ver se o modelo está fazendo uma boa predição.
plt.scatter(y_test, prediction)
plt.xlabel('Y test')
plt.ylabel('Predicted Y')
Como podemos ver os valores preditos e os de teste estão bem relacionados, mostrando que estamos no caminho certo com nosso modelo.
Vamos avaliar o desempenho do nosso modelo calculando a soma residual dos quadrados e o escore de variância explicado (R ^ 2).
Calcule o erro absoluto médio, o erro quadrado médio e o erro quadrado médio da raiz. Consulte a palestra ou a Wikipédia para as fórmulas
from sklearn import metrics
print('MAE:', metrics.mean_absolute_error(y_test, prediction))
print('MSE:', metrics.mean_squared_error(y_test, prediction))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, prediction)))
Pelos resultados podemos ver que obtivemos um modelo muito bom com um bom ajuste. Vamos explorar rapidamente os resíduos para garantir que tudo esteja bem com os dados.
# Criando um histograma dos resíduos e certificando-se de que ele parece normalmente distribuído.
sns.distplot((y_test-prediction), bins=50)
coef = pd.DataFrame(lm.coef_, X.columns, columns=['Coefs'])
coef
Interpretando os coeficientes:
Mantendo todos as outras variáveis constantes, um aumento de 1 unidade na média de tempo de uso está associado a um aumento de 25,98 dólares totais gastos.
Mantendo todos as outras variáveis constantes, um aumento de 1 unidade no tempo gasto no App está associado a um aumento de 38,59 dólares totais gastos.
Mantendo todos as outras variáveis constantes, um aumento de 1 unidade no tempo no site está associado a um aumento de 0,19 dólares totais gastos.
Mantendo todos as outras variáveis constantes, um aumento de 1 unidade no tempo de Associação está associado a um aumento de 61,27 dólares totais gastos.
Diante dos resultados obtidos, podemos ver que a empresa, primeiramente, deveria arranjar outras formas de fidelizar seu cliente, já que essa é a variável que mais ifluenciam nos gastos dos seus usuários. Entre site e aplicativo, a empresa deve investir em aplicavo, dado que o mesmo apresenta um coeficiente significativamente maior do que o site.