
Uma abordagem simplificada

Isso é um gráfico de dispersão com uma regressão linear simples:
O que tudo isso significa? Você provavelmente já viu um gráfico assim.
Conseguimos ver que existem dois eixos, um horizontal (x) e um vertical (y). Em x temos o tempo que alguém é cliente de… seja lá o que for (não faz diferença) provavelmente em anos (também não faz muita diferença agora), indo de 0 a 7. Em y temos o gasto desses clientes. Os pontos dispersos no gráfico são os clientes.
Agora considere o primeiro pontinho azul mais à esquerda do gráfico. Jogando um “batalha naval” rápido aqui, podemos concluir que essa pessoa é cliente há alguns meses somente (próximo de 0 no eixo x) e que gastou um pouco mais de 300,00 (dólares, reais, balinhas…) de acordo com o eixo y.
E essa linha? É a nossa reta de regressão. Dá pra presumir o que ela significa? Repare que ela passa bem no meio dos pontos. Alguns ficam acima, outros abaixo. Olhando assim instintivamente percebemos que é algum tipo de média dos pontos. É mais ou menos isso mesmo. Porém, para manter tudo bem simples, do que se trata essa média não está no escopo deste post.
Suponha que eu remova todos os pontos e queira jogar novos pontos no gráfico. Imagine também que:
- Que nenhum grande evento alterasse muito o comportamento dos clientes para bem ou para mal (como uma pandemia 😷)
- Que meus novos dados se distribuam mais ou menos da mesma maneira, com a mesma “cara”.
Ou seja, não houve grandes mudanças no perfil da loja. Não há tanta incerteza quanto ao comportamento dos dados num futuro próximo. Então essa reta aí serve para que?
Digamos que antes de obter os dados, você queira ter uma estimativa de gasto para pessoas com 8, 9, ou 10 anos como clientes (o gráfico vai até 7). Eu tenho como determinar isso usando a mesmíssima reta, já que ela continua com a mesma inclinação ad eternum. Repare, eu estarei estimando, prevendo um valor. Nem todos os pontos estão sob a reta. Portanto é claro que existirá algum erro, e isso é esperado. Mas a ideia é que a reta obtenha o menor erro possível.
Com essa definição podemos dar alguns nomes aos elementos que compõe a nossa regressão linear quando quisermos prever algum valor:
- Nosso eixo y contém a nossa variável prevista ou de resposta. Também chamamos de variável dependente, pois a sua variação depende do comportamento de outra.
- Nosso eixo x contém a nossa variável preditora (pois será usada para prever o valor de y), ou variável independente. Ela é usada para explicar a variação da variável dependente (y).
Ou seja, na minha previsão eu só terei a variável independente (digamos que de valor 10). E eu vou querer ter a estimativa de gasto geral pra alguém que é cliente há 10 anos.
No exemplo acima temos apenas uma variável independendente (x). Portanto trata-se um regressão linear simples. Mas poderíamos acrescentar mais variáveis independentes para prever o valor de y. Para o nosso exemplo podemos dizer que não é só o “Tempo como cliente” que determina o “Gasto” do cliente. Outras variáveis atuam em conjunto. Quando queremos saber como a nossa variável dependente (“Gasto”) se comporta em função de duas ou mais variáveis independentes, temos uma regressão múltipla.
Isso é uma regressão linear múltipla:
Para fins de praticidade, não incluí uma descrição do dataset utilizado para este post, mas o leitor pode perceber que se trata de dados de uma empresa que comercializa algum produto ou serviço on-line, inclusive em um app.
Repare a inclusão da variável independente “Tempo médio gasto no App”. Agora temos duas variáveis (x e y) correlacionadas com comportamento de uma terceira e o nossa variável dependente, a nossa resposta passa a ser referenciada como “z”.
Vejamos mais de perto em dois angulos que destacam as variáveis independentes e sua relação com o “Gasto”:
O que podemos constatar:
- A nossa reta de regressão agora é um plano. Ela continua representando a já dita “média entre os pontos”.
- Pelos angulos em que as imagens 3D estão, e pela disposição dos pontos no gráfico, parece que “Gasto” está mais correlacionado com “Tempo como cliente” do que com “Tempo médio no App”.
Voltemos a trabalhar com regressões simples colocando tudo em planos 2D:
Aqui podemos ver melhor como “Gasto” se relaciona com cada uma das outras variáveis e que a distribuição é igual a do gráfico 3D anterior.
Você consegue responder qual variável está mais mais correlacionada com “Gasto”?
O gráfico mostra o que já percebemos por instinto: ambas parecem ter um comportamento linear, sendo que o “tempo como cliente” apresenta uma correlação positiva com “Gasto” maior do que o “tempo no app”.
A tabela de correlação abaixo deixa isso mais claro:
Isso melhora a nossa capacidade de explicar o comportamento da nossa variável dependente até certo ponto. O nosso “Gasto” pode ser influenciado por diversos outros fatores, equanto outros podem ser irrelevantes.
Porém, com várias dimensões fica inviável a visualização.
Não fuja! Pretendo explicar porque isso é relevante para o nosso entendimento geral.
A fórmula da regressão linear pode ser apresentada como:
Y = a. X + b (simples)
Y = a¹.X¹ + a².X² + … an. Xn + b (múltipla)
Na regressão múltipla basta multiplicar os dados aos seus respectivos coeficientes, somar tudo e somar a constante (coeficiente linear).
- Y é o cara que queremos estimar(“Gasto”).
- Em a.X, pegamos os valores de X e multiplicamos por um “a”. Agora volte no ultimo gráfico e pense: O que acontece em Y se eu multiplico os valores de X? O valor de Y cresce, claro. Quanto maior o valor de X (indo para a direita), maior será o valor de Y. E o valor de “a” é que diz o quão maior Y será. Observe as duas retas de regressão em vermelho. Elas possuem ângulos diferentes. E quem determina esse angulo é justamente “a”. Por isso chamamos “a” de coeficiente angular.
- E esse “b”? Essa constante indica a altura da reta de regressão em relação ao eixo Y. É também onde a reta corta o eixo Y. Por acaso aqui os valores estão começando em torno de 300, mas poderiam começar lá em cima ou mais abaixo. Essa linha de altura da reta, faz com que chamemos “b” de coeficiente linear ou intercepto.
Podemos obter os coeficientes lineares do nosso gráfico 3D da seguinte forma:
### Existe uma tabela 'clientes'from sklearn.linear_model import LinearRegression
xy = clientes[['Tempo como cliente', 'Tempo no App']]
z = clientes['Gasto']lm = LinearRegression()
lm.fit(xy, z)### lm.coef_ armazena os coeficientes angulares
pd.DataFrame({'Coeficientes Angulares': lm.coef_, 'Features': ['Tempo como cliente', 'Tempo no App']})
E o nosso coeficiente linear pode ser apresentado com lm.intercept_
resultando em -181.53, que é onde a nossa reta corta o eixo y (ou z). Mesmo que o valor do coeficiente linear às vezes não faça sentido na prática, ele é indispensável na equação.
Essa tabela dos coeficientes significa o seguinte: No aumento de uma unidade em cada Feature, temos o aumento em “Gasto” equivalente ao coeficiente correspondente.
Confuso? De novo. Para cada ano (unidade da Feature) que a pessoa permanece como cliente da nossa loja, prevemos um acréscimo de gasto daquele cliente em 63.11 (reais, dólares…) no ano (o meu dataset me informa que a unidade é em anos).
Da mesma forma, quando o tempo médio no app aumenta em uma unidade (minutos), temos um acréscimo de 37.98 anuais.
Primeiro quero dizer que correlação não implica causalidade.
Segundo que estamos falando de previsões, que contém um erro. Agora, qual o tamanho desse erro? E como eu calculo isso? Existem valores discrepantes que estão influenciando nesse erro? Sei lá, tem um cara que com 2 anos como cliente comprou mais do que outro que está há 5. E o que eu faço com isso? A inclinação da minha reta é a melhor possível? Como eu testo? E como eu prevejo valores.
São muitas perguntas. E exitem outras.
É um assunto fascinante. A idéia aqui foi arranhar a superfície do assunto e deixar o resto para os próximos capítulos.
Quem tiver curiosidade, existe um projetinho mais completo no aqui meu Github com esse dataset.