Funciones de probabilidad

Bootcamp AI
10 min readSep 1, 2020

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.

Imagen 3. Campana de Gauss

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.

Imagen 4. 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.

Imagen 5. Teorema Central del Límite

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

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.

Imagen 7. Técnicas estadísticas

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:

Imagen 8. Probabilidad de X

Y los niveles de confianza tenemos de la siguiente forma:

Imagen 9. Intervalos de confianza

Si un intervalo de confianza cae en el rango de mi estimador, si cae en este rango será correcto mantener, es decir:

Imagen 10. Aceptación de la hipótesis

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.

Imagen 11. Tipos de prueba

En resumen, podemos definir estos procesos de la siguiente manera:

Imagen 12. Resumen de contraste de hipótesis

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.

Imagen 13. Tipos de correlación

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.

Imagen 14. Correlación de Person

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

Conoce más:

Registrate en el programa de Python for Data Science.

--

--