•
•
Correlação
A vice-presidente de Crescimento na DataSciencester
tem uma teoria que a
quantidade de tempo gasto pelas pessoas no site é relacionada ao número de
amigos que elas possuem (ela não é uma vice-presidente à toa), e ela pediu para
você verificar isso.
Após examinar os registros do tráfego, você desenvolve uma lista
daily_minutes
que
mostra quantos minutos por dia cada usuário passa na DataSciencester e você
havia ordenado essa lista para que seus elementos correspondessem aos
elementos
da lista anterior
num_ friends
. Gostaríamos de investigar a relação entre
essas duas métricas.
Primeiro, investigaremos a
covariância, o equivalente pareado da variância.
Enquanto a variância mede como uma única variável desvia de sua média, a
covariância mede como duas variáveis variam em conjunto de suas médias:
def covariance(x, y):
n = len(x)
return dot(de_mean(x), de_mean(y)) / (n - 1)
covariance(num_friends, daily_minutes)
# 22.43
Lembre-se que o
dot
resume os produtos dos
pares correspondentes dos
elementos. Quando os elementos correspondentes de
x
e
y
estão acima ou abai
x
o
de suas médias, um número positivo entra na soma. Quando um está acima de
sua média e o outro está abaixo, um número negativo entra na soma.
Na mesma
proporção, uma covariância positiva “grande” significa que x tende a ser grande
quando
y
é grande e pequeno quando
y
é pequeno. Uma covariância negativa
“grande” significa o oposto — que
x
tende
a ser pequeno quando
y
é grande e
vice-versa. Uma covariância perto de zero significa que tal relação não existe.
Mesmo assim, esse número pode ser difícil de ser interpretado por dois motivos:
Suas unidades são o produto das unidades de entrada (por exemplo,
minutosamigo-por-dia), o que pode ser difícil de entender. (O que é um
“minutosamigo-por-dia”?)
Se cada usuário tiver duas vezes mais amigos (mas o mesmo número de
minutos), a covariância seria duas vezes maior. Mas, por algum motivo, as
variáveis seriam apenas inter-relacionadas. Visto de outra maneira, é
arriscado dizer o que conta como uma covariância “grande”.
Por
tais motivos, é mais comum considerar a
correlação, que divide os desvios
padrões das duas variáveis:
def correlation(x, y):
stdev_x = standard_deviation(x)
stdev_y = standard_deviation(y)
if stdev_x > 0 and stdev_y > 0:
return covariance(x, y) / stdev_x / stdev_y
else:
return 0
# se não houver amplitude, a correlação é zero
correlation(num_friends, daily_minutes)
# 0.25
A
correlation
não possui unidade e sempre permanece entre –1 (anticorrelação
perfeita) e 1 (correlação perfeita). Um número como 0,25
representa uma
correlação positiva relativamente fraca.
No entanto, algo que esquecemos de fazer foi examinar nossos dados. Dê uma
olhada na Figura 5-2.
Figura 5-2. Correlação com um valor discrepante
A pessoa com 100 amigos (que passa apenas um minuto por dia no site) é um
grande valor discrepante e a correlação pode ser muito sensível para valores
discrepantes. O que acontece se o ignorarmos?
outlier = num_friends.index(100)
# índice do valor discrepante
num_friends_good = [x
Compartilhe com seus amigos: