Funciones de probabilidad
Introducción a la Ciencia de Datos
1. Funciones de probabilidad
Existen dos conceptos fundamentales para iniciar la ciencia de datos, cuando se habla de una variable aleatoria el conteo de cuántas veces esa variable aleatoria ocurre para un valor concreto se llama Función de distribución de probabilidades, esta función ocurre con valor concreto de la variable aleatoria, los histogramas son la herramienta que mejor representa este valor.
Imagen 1. Función de distribución de probabilidad
Este valor suele decirnos poco cuando se refiere a variables aleatorias cuando son continuas, como podría ser las uniformes o las de campana Gauss, el hecho de que tome un valor concreto es muy difícil, entonces en lugar de catalogar una distribución de probabilidad, de cómo se distribuyen los números, es en base a un valor, una variable aleatoria se puede definir con una función de distribución acumulada. Está la parte azul de la Imagen 1, y se trata de la probabilidad de que una variable aleatoria sea menor o igual a un valor concreto. El área debajo de estas distribuciones siempre debe valer uno.
Hablando en términos estadísticos para llevar a cabo un buen análisis de datos, hay dos distribuciones que se deben aprender que son: la distribución uniforme, que se genera cuando los números aleatorios; y la distribución normal, que viene a ser la campana de Gauss.
2. La distribución Uniforme
Esta función se suele definir muy bien en base, ya que tiene un punto de inicio y un punto final en sus extraños, cada uno de estos puntos subyacen en un extraño que indican que todos los puntos que están alrededor pueden ser probables.
Imagen 2. Distribución uniforme
La probabilidad de escoger un número comprendido entre a y b tiene exactamente la misma, a estos los llamaremos los x probables. Lo que implica que ha mayor número de datos, la función se parecerá más a una función de distribución uniforme. Para esto lo comprobaremos de forma práctica:
● Código
Para comprobar si está correctamente hecho se debe parecer a la Imagen 2, pero con todos los puntos marcados, es decir que se forme el rectángulo que se puede observar
● Resultado
(array([ 99980., 99473., 100393., 99635., 99883., 100426., 99892.,
100361., 100205., 99752.]),
array([ 1.00000169, 10.89996316, 20.79992462, 30.69988609, 40.59984756,
50.49980903, 60.39977049, 70.29973196, 80.19969343, 90.0996549 ,
99.99961636]),
<a list of 10 Patch objects>)
3. Campana de Gauss
La segunda distribución más conocida se trata de la campana de Gauss o también conocida como la distribución normal, esta es la distribución que más se encuentra en casos reales.
Este comportamiento es muy interesante en el mundo de las probabilidades, nos dice que la mayoría de los ejemplos que analizamos tienden a alinearse como una curva normal, entonces, a mayor número de datos estos se comenzarán a tomar la forma de una curva normal. Los parámetros que definen una distribución normal son la media, situada en la mitad de la gráfica y la desviación típica que es el valor central respecto a lo que le rodea a la media; esta desviación típica se la representa con la letra sigma “σ”. El modelo presentado en la Imagen 3, la llamaremos la normal estándar debido a que tiene el valor de la media centrada en el valor de cero y el valor de la desviación típica se encuentra en el valor de uno. Para esto lo comprobaremos de forma práctica.
● Código
● Resultado
[<matplotlib.lines.Line2D at 0x11815d4e0>]
Estos datos están visualizados en el orden en que Python ejecutó, y para comprobar si estos datos tienen una distribución hacemos lo siguiente:
● Código
%matplotlib inline
plt.hist(data) #sale normal?
● Resultado
(array([7.00000e+00, 1.76000e+02, 6.10100e+03, 6.69350e+04, 2.65940e+05,
3.94335e+05, 2.17925e+05, 4.51050e+04, 3.39500e+03, 8.10000e+01]),
array([-5.60316173, -4.56527912, -3.52739651, -2.4895139 , -1.45163129,
-0.41374868, 0.62413394, 1.66201655, 2.69989916, 3.73778177,
4.77566438]),
<a list of 10 Patch objects>)
Visto como un símil:
● Código
#plot del numero de muestras pero con los datos ordenadas. Funcion de distribucion acumulada
# al iicio crece poco, crece mas y luego vuelve a decaer.
plt.plot(x,sorted(data))
● Resultado
[<matplotlib.lines.Line2D at 0x116e85eb8>]
Para poder ver la distribución normal usamos lo siguiente:
● Código
# normal que no sea media 0 y desviacion 1
# ejemplos notas
mu = 5.5 #media
sd = 2.5 #desviacion
Z_10000 = np.random.randn(10000) #genero la distribucion normal
data = mu + sd * Z_10000 # Z = (X — mu) / sd -> N(0,1), X = mu + sd * Z
plt.hist(data)
● Resultado
(array([ 6., 32., 281., 1180., 2576., 3118., 1960., 711., 123.,
13.]),
array([-5.12280629, -3.11658208, -1.11035788, 0.89586633, 2.90209053,
4.90831474, 6.91453894, 8.92076315, 10.92698735, 12.93321156,
14.93943576]),
<a list of 10 Patch objects>)
4. Muestreo aleatorio y TCL
El muestreo aleatorio y el papel que tiene Teorema Central del Límite, son dos conceptos muy importantes que se debe aprender y sobre todo entender el problema de la estadística.
Debido a que recopilar la información de toda la población es muy complicado, la solución del estadístico frente a esto es tomar una muestra aleatoria de los individuos de la población, y lo que se estudia no son resultados poblacionales sino resultados muestrales. Otra cosa para tomar en cuenta es cómo se llevará a cabo esta recolección de datos debido a que dependiendo que tan bien lo hagamos los resultados pueden salir acorde a lo que buscamos o bien se pueden generar resultados sesgados.
● Teorema Central del Límite
Como lo que se busca es inferir el resultado de una población a partir de varias muestras, esto cumple una cosa y es que de todos los datos tomados si lo hacemos mucho más grandes comenzará a tender a una distribución normal.
Si nos fijamos en la campana de Gauss, mientras el número de n vaya creciendo el valor de la desviación típica se irá acercando el valor central. Y para comprobar esto nos ayudaremos de lo siguiente.
● Contraste de hipótesis
Estos son muy importantes para realizar las técnicas estadísticas que se llaman los test de hipótesis, donde relacionamos un valor que es un estimador y lo intentamos evaluar si es exacto, menos o igual a un valor que sea ha establecido, típicamente esta suposición que hace el estadístico se la llama hipótesis nula y lo que se intenta es verificar si esta es verdadera o no siguiendo una serie de reglas que tienen que ver con la distribución a una hipótesis contraria. Para decidir entre las dos hipótesis, se debe tener en cuenta que la hipótesis nula es la premisa inicial y lo que se quiere defender.
Imagen 6. Contraste de hipótesis
Usualmente usaremos algún dato histórico o de un estudio previo como la hipótesis nula y el nuevo estudio que queramos realizar será la hipótesis alternativa.
Para contrastar estas dos se recurre al Teorema Central del Límite y a utilizar dos técnicas estadísticas las cuales serán: la función Z y la función T-student. De modo que al momento de validar la hipótesis se tendrá que utilizar un estadístico de contraste dependiendo de las características que se tengan de la muestra.
Estos estadísticos son los parámetros que nos van a ayudar a afirmar o a rechazar los contrastes de hipótesis, entonces tenemos lo siguiente:
Y los niveles de confianza tenemos de la siguiente forma:
Si un intervalo de confianza cae en el rango de mi estimador, si cae en este rango será correcto mantener, es decir:
Para definir el intervalo de confianza, hay que decir cuál es la probabilidad que estamos dispuestos a aceptar, esta usualmente la decide el estadístico que lleva a cabo el estudio antes de hacer la prueba.
Debido a la simetría de las distribuciones normales tenemos tres tipos de prueba posibles, que son: test de izquierda, test de derecha, test bilateral.
En resumen, podemos definir estos procesos de la siguiente manera:
Todo este proceso lo ejemplificamos para un mayor entendimiento.
5. Correlación
La correlación es encontrar el factor o la función que me permite predecir la salida del modelo, una buena correlación entre dos variables es que existe una relación de dependencia de una con respecto a la otra. Por lo tanto podemos decir que es la relación entre dos variables debido a su propia naturaleza matemática. Entre las correlaciones más conocidas están las correlaciones lineales y las correlaciones exponenciales o logísticas.
Estos conceptos dan lugar a algunos de los fundamentos básicos de la creación de modelos predictivos, sin embargo como analizamos el grado de correlación, y para ello se usa la correlación de Pearson.
Y el resultado de esta correlación se interpreta a que si el valor es positivo la relación entre las variables será directa y en el caso de ser negativa, la relación entre las variables será inversa. Lo que también se debe tomar muy en cuenta es que la existencia de la correlación no implica causalidad.
Y podemos hacer esto de forma práctica.
● Código
import pandas as pd
data_ads = pd.read_csv(“Advertising.csv”)
#gastos
data_ads.head()
● Resultado
Y para ver la correlación hacemos lo siguiente
● Código
#correlacion gasto en television vs las ventas.
# en que medio es mejor. Da frutos la publicidad?
len(data_ads)
Resultado
200
import numpy as np
# añadir la columna adicional de la correlacion
#aplicar la formula de coef correlaicon de pearson
#tele vs ventas
# coef correlacion como nos alejamos de los extremos, si estamos cerca
# de 1,-1 o 0
data_ads[“corrn”] = (data_ads[“TV”] — np.mean(data_ads[“TV”]))* (data_ads[“Sales”] — np.mean(data_ads[“Sales”]))
data_ads.head()
● Resultado
● Código
#correlacion frente solo la tele
data_ads[“corr1”] = (data_ads[“TV”] — np.mean(data_ads[“TV”]))**2
data_ads.head()
● Resultado
● Código
#variacion con respecto a la meda de Sales
# diferencia con respecto a al media
data_ads[“corr2”] = (data_ads[“Sales”] — np.mean(data_ads[“Sales”]))**2
data_ads.head()
● Resultado
● Código
#Correlacion de Pearson
corrn = sum(data_ads[“corrn”])/np.sqrt(sum(data_ads[“corr1”]) * sum(data_ads[“corr2”]))
#es positivo, cuanto mas se gasta en television tambien aumentan las ventas
# recomendado usar television
corrn
Resultado
0.782224424861606
# convertir todos los calculos en una funcion
# para calcular los pares de la correlacion
def corr_coeff(df, var1, var2):
df[“corrn”] = (df[var1] — np.mean(df[var1]))* (df[var2] — np.mean(df[var2]))
df[“corr1”] = (df[var1] — np.mean(df[var1]))**2
df[“corr2”] = (df[var2] — np.mean(df[var2]))**2
corr_p = sum(df[“corrn”])/np.sqrt(sum(df[“corr1”]) * sum(df[“corr2”]))
return corr_p
corr_coeff(data_ads, “TV”, “Sales”)
Resultado
0.782224424861606
cols = data_ads.columns.values
cols
array([‘TV’, ‘Radio’, ‘Newspaper’, ‘Sales’], dtype=object)
#periodico y radio malos
for x in cols:
for y in cols:
print(x + “, “+ y + “ : “ + str(corr_coeff(data_ads, x, y)))
● Resultado
● Código
import matplotlib.pyplot as plt
plt.plot(data_ads[“TV”], data_ads[“Sales”], “ro”)
plt.title(“Gasto en TV vs Ventas del Producto”)
● Resultado
● Código
plt.plot(data_ads[“Radio”], data_ads[“Sales”], “go”)
plt.title(“Gasto en Radio vs Ventas del Producto”)
● Resultado
● Código
plt.plot(data_ads[“Newspaper”], data_ads[“Sales”], “bo”)
plt.title(“Gasto en Periódico vs Ventas del Producto”)
● Resultado
● Código
# ya hay un comando
data_ads = pd.read_csv(“Advertising.csv”)
data_ads.corr()
● Resultado
● Código
#mas apagadas correlacion baja
# saber de colores
plt.matshow(data_ads.corr())
● Resultado
Autores:
- Jean Pierre Von Lippke
- Juan Valdez
- Stefano Hurtado
- Bryan Loarte
Código — Andrea Escobar