Você está na página 1de 13

19/07/2021 Regressão linear com Python - Jupyter Notebook

Regressão linear com Python


Olá Pessoal, segue o primeiro material pra darmos entrada em machine learning. Aqui tem conteúdos
utilizados nas aulas anteriores também. Lembrando que serão 2 materiais e 2 atividades para entregar,
qualquer duvida chama no zipzop!!

Imagine que vc mora nos EUA...

Sua vizinha é uma agente imobiliário e quer alguma ajuda a prever os preços das casas para as regiões nos
EUA. Seria ótimo se você pudesse de alguma forma criar um modelo para ela que lhe permita colocar algumas
características de uma casa e retornar uma estimativa de quanto a casa venderia.

Ela perguntou se você poderia ajudá-la com suas novas habilidades de ciência de dados. Você diz sim e
decide que a Regressão linear pode ser um bom caminho para resolver esse problema.

Sua vizinha, em seguida, dá-lhe algumas informações sobre um monte de casas em regiões dos Estados
Unidos. tudo está contido no arquivo que mandei no grupo: USA_Housing.csv.

Os dados contém as seguintes colunas:

'Avg. Area Income': Média da renda dos residentes de onde a casa está localizada.
'Avg. Area House Age': Média de idade das casas da mesma cidade.
'Avg. Area Number of Rooms': Número médio de quartos para casas na mesma cidade.
'Avg. Area Number of Bedrooms': Número médio de quartos para casas na mesma cidade
'Area Population': A população da cidade onde a casa está localizada.
'Price': Preço de venda da casa.
'Address': Endereço da casa;

**Vamos começar!**
## Confira os dados
Nós conseguimos obter alguns dados de sua vizinha para os preços da habitação como um
conjunto de csv, vamos preparar nosso ambiente com as bibliotecas que precisaremos e
depois importar os dados!
### Importar bibliotecas

In [7]:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Confira os dados

In [2]:

USAhousing = pd.read_csv('USA_Housing.csv')

Vamos visualizar as 5 primeiras linhas e todas as colunas:

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 1/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [3]:

USAhousing.head()

Out[3]:

Avg.
Avg.
Area Avg. Area
Avg. Area Area Area
Number Number of Price Addr
Income House Population
of Bedrooms
Age
Rooms

208 Michael Ferry


0 79545.458574 5.682861 7.009188 4.09 23086.800503 1.059034e+06 674\nLaurabury,
370

188 Johnson Vi
1 79248.642455 6.002900 6.730821 3.09 40173.072174 1.505891e+06 Suite 079\nL
Kathleen, C

9127 Elizab
2 61287.067179 5.865890 8.512727 5.13 36882.159400 1.058988e+06 Stravenue\nDanielto
WI 0648

USS Barnett\nFPO
3 63345.240046 7.188236 5.586729 3.26 34310.242831 1.260617e+06
44

USNS Raymond\nF
4 59982.197226 5.040555 7.839388 4.23 26354.109472 6.309435e+05
AE 09

Observamos então que temos características neste dataset que serão variáveis para prevermos o preço das
casas!

In [4]:

USAhousing.info()

<class 'pandas.core.frame.DataFrame'>

RangeIndex: 5000 entries, 0 to 4999

Data columns (total 7 columns):

Avg. Area Income 5000 non-null float64

Avg. Area House Age 5000 non-null float64

Avg. Area Number of Rooms 5000 non-null float64

Avg. Area Number of Bedrooms 5000 non-null float64

Area Population 5000 non-null float64

Price 5000 non-null float64

Address 5000 non-null object

dtypes: float64(6), object(1)

memory usage: 273.5+ KB

Alguns parametros estatisticos:

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 2/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [5]:

USAhousing.describe()

Out[5]:

Avg. Area Avg. Area


Avg. Area Avg. Area Area
Number of Number of Price
Income House Age Population
Rooms Bedrooms

count 5000.000000 5000.000000 5000.000000 5000.000000 5000.000000 5.000000e+03

mean 68583.108984 5.977222 6.987792 3.981330 36163.516039 1.232073e+06

std 10657.991214 0.991456 1.005833 1.234137 9925.650114 3.531176e+05

min 17796.631190 2.644304 3.236194 2.000000 172.610686 1.593866e+04

25% 61480.562388 5.322283 6.299250 3.140000 29403.928702 9.975771e+05

50% 68804.286404 5.970429 7.002902 4.050000 36199.406689 1.232669e+06

75% 75783.338666 6.650808 7.665871 4.490000 42861.290769 1.471210e+06

max 107701.748378 9.519088 10.759588 6.500000 69621.713378 2.469066e+06

Nome das colunas do dataset:

In [260]:

USAhousing.columns

Out[260]:

Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Room
s',

'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Addres


s'],

dtype='object')

EDA (Exploratory Data Analysis)


ou Analise exploratória de dados, muitos artigos fazem isto em seus dados, inclusive o que estou trabalhando
agora, então é bom saber sobre isso, e é conteúdo passado nas ultimas aulas

Vamos criar alguns plots simples para verificar os dados.

Utilizando a biblioteca do Seaborn

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 3/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [6]:

sns.pairplot(USAhousing)

Out[6]:

<seaborn.axisgrid.PairGrid at 0xa671f28>

Na coluna de preço com outras variáveis, podemos ver algumas correlações lineares com outras colunas, vc
vê?

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 4/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [8]:

sns.distplot(USAhousing['Price'])

C:\Program Files\Anaconda3\lib\site-packages\statsmodels\nonparametric\kdeto
ols.py:20: VisibleDeprecationWarning: using a non-integer number instead of
an integer will result in an error in the future

y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

Out[8]:

<matplotlib.axes._subplots.AxesSubplot at 0xd1fdd30>

Correlação entre as colunas com um mapa de calor:

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 5/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [9]:

sns.heatmap(USAhousing.corr())

Out[9]:

<matplotlib.axes._subplots.AxesSubplot at 0xc478da0>

Treinando um modelo de regressão linear


Vamos agora começar a treinar o modelo de regressão. Precisamos primeiro dividir nossos dados em uma
matriz X que contém os recursos para treinar, e uma matriz y com a variável alvo, neste caso, a coluna Preço.
Vamos descartar a coluna "Adress" porque só tem informações de texto que o modelo de regressão linear não
pode usar.

Arrays X e y
X serão as variáveis preditoras e y a variável que queremos prever. Assim, tiramos além do "Adress" o "Price".

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 6/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

In [10]:

X = USAhousing[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
'Avg. Area Number of Bedrooms', 'Area Population']]
y = USAhousing['Price']

Split de treino
Agora vamos dividir os dados em um conjunto de treinamento e um conjunto de testes. Vamos criar o modelo
usando o conjunto de treinamento e depois usar o conjunto de testes para avaliar o modelo.
Precisamos
importar o método que é capaz de fazer a divisão dos dados em treino e teste:

Basicamente o método realiza previsões com o conjunto de treino, aprende, e testa sua eficiencia no conjunto
de teste.

In [11]:

from sklearn.model_selection import train_test_split

train_test_split(X, y, test_size=0.4, random_state=101), retorna 4 saídas, por isso denominamos os 4 itens a


seguir como os vetores dessas saídas, necessariamente, em ordem.

In [12]:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101)

test_size é o tamanho do teste, 0.4 quer dizer que 40% dos dados serão para teste do modelo. O
random_state é um padronizador, caso queira repetir o processo de divisão em outro local e obter o mesmo
resultado é só utilizar o mesmo valor

Criando e treinando o modelo


Importamos o método de regressão:

In [13]:

from sklearn.linear_model import LinearRegression

In [14]:

lm = LinearRegression()

Atribuimos a função para lm, e em seguida utilizamos o método fit que é o mesmo que treino, então neles
passamos os parametros de treino:

In [15]:

lm.fit(X_train,y_train)

Out[15]:

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 7/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

Pronto! tems um modelo de Machine Learning

Avaliação modelo
Vamos avaliar o modelo ao verificar os coeficientes e como podemos interpretá-los.

In [ ]:

# Printando a intercepção
print(lm.intercept_)

Vamos retirar os coeficientes da nossa previsão e colcoar em um DataFrame

In [17]:

coeff_df = pd.DataFrame(lm.coef_,X.columns,columns=['Coefficient'])
coeff_df

Out[17]:

Coefficient

Avg. Area Income 21.528276

Avg. Area House Age 164883.282027

Avg. Area Number of Rooms 122368.678027

Avg. Area Number of Bedrooms 2233.801864

Area Population 15.150420

Interpretando os coeficientes:

Mantendo todas as outras variáveis constantes, um aumento de 1 unidade em ** Avg. Area Income ** está
associado a um aumento de $ 21,52.
Mantendo todas as outras variáveis constantes, um aumento de 1 unidade em ** Avg. Area House Age **
está associada a um ** aumento de $ 164883.28 **.
Mantendo todas as outras variáveis constantes, um aumento de 1 unidade em ** Avg. Area Number of
Bedrooms ** está associada a um ** aumento de $ 122368.67 **.
Mantendo todas as outras variáveis constantes, um aumento de 1 unidade em ** Avg. Area Number of
Bedrooms ** está associada a um ** aumento de $ 2233.80 **.
Mantendo todas as outras variáveis constantes, um aumento de 1 unidade em ** Area Population ** está
associado a um ** aumento de $ 15.15 **.

Isso faz sentido? Provavelmente não porque esses dados não são reais. Vamos repetir este tipo de análise
com dados reais, confira o conjunto de dados de Boston (http://scikit-
learn.org/stable/modules/generated/sklearn.datasets.load_boston.html):

from sklearn.datasets import load_boston

boston = load_boston()

print(boston.DESCR)

boston_df = boston.data

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 8/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

Predições do nosso modelo


Vamos pegar as previsões em nosso conjunto de testes e ver o quão bem!

In [18]:

predictions = lm.predict(X_test)

In [19]:

plt.scatter(y_test,predictions)

Out[19]:

<matplotlib.collections.PathCollection at 0xe3e3b70>

Histograma residual

In [20]:

sns.distplot((y_test-predictions),bins=50);

C:\Program Files\Anaconda3\lib\site-packages\statsmodels\nonparametric\kdeto
ols.py:20: VisibleDeprecationWarning: using a non-integer number instead of
an integer will result in an error in the future

y = X[:m/2+1] + np.r_[0,X[m/2+1:],0]*1j

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 9/13


19/07/2021 Regressão linear com Python - Jupyter Notebook

Métricas de avaliação de regressão


Aqui estão três métricas de avaliação comuns para problemas de regressão:

*Mean absolute error * (erro absoluto médio) (MAE) é a média do valor absoluto dos erros:

1 𝑛 |𝑦𝑖 − 𝑦𝑖̂ |
𝑛∑𝑖=1
** Mean Squared Error ** (erro médio quadrático) (MSE) é a média dos erros quadrados:

1 𝑛 (𝑦𝑖 − 𝑦𝑖̂ )2
𝑛∑𝑖=1
** Root Mean Square Error ** (raiz do erro quadrático médio) (RMSE) é a raiz quadrada da média dos erros
quadrados:


⎯1⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
𝑛 ⎯
 𝑛 ∑(𝑦𝑖 − 𝑦𝑖̂ ) 2
 𝑖=1
Comparando estas métricas:

MAE é o mais fácil de entender, porque é o erro médio.


MSE é mais popular que o MAE, porque a MSE "puniria" erros maiores, o que tende a ser útil no mundo
real.
RMSE é ainda mais popular do que MSE, porque o RMSE é interpretável nas unidades "y".

Todas estas são ** funções de perda **, porque queremos minimizá-las.

In [21]:

from sklearn import metrics

In [22]:

print('MAE:', metrics.mean_absolute_error(y_test, predictions))


print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))

MAE: 82288.2225191

MSE: 10460958907.2

RMSE: 102278.829223

Este foi um projeto de Machine Learning real! Parabéns em ajudar o seu vizinho! Vamos deixar isso terminar
aqui por enquanto, mas vá em frente e explore o Dataset de Boston mencionado anteriormente se este
conjunto de dados específico for interessante para você!

A seguir, a Projeto de Machine Learning!

Regressão Linear - Projeto


Parabéns! Você obteve algum contrato de trabalho com uma empresa de comércio eletrônico com sede na
cidade de Nova York que 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
localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 10/13
19/07/2021 Regressão linear com Python - Jupyter Notebook

e encomendarem em um aplicativo móvel ou site para a roupa que desejam.

A empresa está tentando decidir se deve concentrar seus esforços em sua experiência em aplicativos móveis
ou em seu site. Eles contrataram você no contrato para ajudá-los a descobrir isso! Vamos começar!

Basta seguir as etapas abaixo para analisar os dados do cliente (é falso, não se preocupe, eu não lhe dei
números reais de cartões de crédito ou e-mails).

Imports
** Importe pandas, numpy, matplotlib,e seaborn. Em seguida, configure% matplotlib inline
(Você importará
sklearn conforme você precisar). **

Obter dados
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:.

Avg. Session Length: Tempo médio das sessões de consultoria de estilo na loja.
Time on App: tempo médio gasto no app em minutos.
Time on Website: tempo médio gasto no site em minutos.
Lenght of Membership: Há quantos anos o cliente é membro.

** Leia no arquivo csv do Ecommerce Customers como um DataFrame chamado clientes. **

** Verifique o cabeçalho dos clientes e confira os seus métodos info () e describe(). **

Análise de dados exploratória


** Vamos explorar os dados! **

Pelo resto do exercício, só estaremos usando os dados numéricos do arquivo csv.

** Use seaborn para criar um jointplot para comparar as colunas Time On Website e Volume anual. A
correlação faz sentido? **

** Faça o mesmo, mas com a coluna tempo no aplicativo (Time on App), em vez de Time On Website. **

** Vamos explorar esses tipos de relações em todo o conjunto de dados. Use [pairplot]
(https://stanford.edu/~mwaskom/software/seaborn/tutorial/axis_grids.html#plotting-pairwise-relationships-with-
pairgrid-and-pairplot (https://stanford.edu/~mwaskom/software/seaborn/tutorial/axis_grids.html#plotting-
pairwise-relationships-with-pairgrid-and-pairplot))

** Baseado neste plot o que parece ser a característica mais correlacionada com o valor anual gasto (Yearly
Amount Spent)? **

Treinando e testando os dados


localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 11/13
19/07/2021 Regressão linear com Python - Jupyter Notebook

Agora que exploramos um pouco os dados, vamos avançar e dividir os dados em conjuntos de treinamento e
teste.
** Defina uma variável X igual a todas as características numéricas dos clientes e uma variável y igual à
coluna Valor anual gasto (Yearly Amount Spent). **

** Use model_selection.train_test_split da sklearn para dividir os dados em conjuntos de treinamento e teste.


Defina test_size = 0.3 e random_state = 101 **

Treinando o modelo
Agora é hora de treinar nosso modelo em nossos dados de treinamento!

** Importe LinearRegression do sklearn.linear_model **

** Crie uma instância de um modelo LinearRegression () chamado lm. **

** Treine lm nos dados de treinamento. **

Print os coeficientes do modelo

Previsão de dados de teste


Agora que nos ajustamos ao nosso modelo, vamos avaliar o seu desempenho ao prever os valores de teste!

** Use lm.predict () para prever o conjunto X_test dos dados. **

** Crie um diagrama de dispersão (scatterplot) dos valores reais de teste em relação aos valores preditos. **

Avaliando o 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. **

Conclusão ¶
Ainda desejamos descobrir a resposta à pergunta original, concentramos-nos no desenvolvimento de
aplicativos móveis ou de sites? Ou talvez isso realmente não importe, e o tempo como membro é o que é
realmente importante? Vamos ver se podemos interpretar os coeficientes para ter uma idéia.
** Recrie o
dataframe dos coeficientes de dados **

** Como você pode interpretar esses coeficientes? **

** Você acha que a empresa deve se concentrar mais em seu aplicativo móvel ou em seu site? **

Pessoal, qualquer duvida ou dificuldade, podem chamar no whats. Bons


estudos!
localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 12/13
19/07/2021 Regressão linear com Python - Jupyter Notebook

In [ ]:

localhost:8888/notebooks/estagio planejamento/5. Machine Learning/Regressões Lineares/Regressão linear com Python.ipynb 13/13

Você também pode gostar