Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
'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')
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
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'>
In [5]:
USAhousing.describe()
Out[5]:
In [260]:
USAhousing.columns
Out[260]:
Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Room
s',
dtype='object')
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ê?
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>
In [9]:
sns.heatmap(USAhousing.corr())
Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0xc478da0>
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".
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]:
In [12]:
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
In [13]:
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]:
Avaliação modelo
Vamos avaliar o modelo ao verificar os coeficientes e como podemos interpretá-los.
In [ ]:
# Printando a intercepção
print(lm.intercept_)
In [17]:
coeff_df = pd.DataFrame(lm.coef_,X.columns,columns=['Coefficient'])
coeff_df
Out[17]:
Coefficient
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):
boston = load_boston()
print(boston.DESCR)
boston_df = boston.data
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
*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:
In [21]:
In [22]:
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 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.
** 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)? **
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). **
Treinando o modelo
Agora é hora de treinar nosso modelo em nossos dados de treinamento!
** 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 **
** Você acha que a empresa deve se concentrar mais em seu aplicativo móvel ou em seu site? **
In [ ]: