Aplicando y utilizando la Distribución Normal para Ciencia de Datos
'Utilizando la Distribución Normal en Ciencia de Datos'
Pasos de la Ciencia de Datos
Revisión de las diversas aplicaciones de la distribución normal para la Ciencia de Datos

Introducción
Una de las cosas que puede ser extremadamente difícil al comenzar con la Ciencia de Datos es averiguar exactamente dónde comienza y termina ese viaje. En cuanto al final de tu viaje en la Ciencia de Datos, es importante recordar que se están haciendo avances en el campo todos los días y seguramente habrá nuevos avances — prepárate para aprender mucho. La Ciencia de Datos no solo consiste en Ciencia, estadísticas y programación, sino también en varias otras disciplinas.
Para minimizar la naturaleza abrumadora de la Ciencia de Datos, es importante tomar la información en pequeñas porciones. Ciertamente puede ser divertido adentrarse en investigaciones y aprender más sobre áreas específicas del dominio — ya sea datos, programación, aprendizaje automático, análisis o Ciencia. Si bien esto me emociona, a veces también es genial enfocarse en eso y aprender todo lo posible sobre un tema específico. Para los principiantes, tiene sentido que estos dominios entrelazados dejen un lugar cuestionable para comenzar. Una cosa de la que puedo dar fe es que las estadísticas y la distribución normal son un excelente punto de partida cuando se trata de la Ciencia de Datos. Escribí un artículo donde expliqué por qué es así y entré en detalles sobre cómo funciona la distribución normal. Haremos un breve resumen de este artículo aquí, pero se omitirán muchos detalles.
Lo Primero que Debes Aprender para Estadísticas en Ciencia de Datos — La Distribución Normal
Una descripción general y programación de una distribución normal simple.
chifi.dev
La distribución normal, tal como se describe anteriormente, es una simple Función de Densidad de Probabilidad (PDF) que podemos aplicar a nuestros datos. Esta función, a la que llamaremos f, calcula el número de desviaciones estándar x en la media para f(x)
. Piensa. Necesitamos desviaciones estándar de la media, ¿cómo verificaríamos cuántas desviaciones estándar hay entre un valor y la media? Bueno, primero necesitamos ver qué tan lejos está de la media, ¿verdad? Luego necesitamos ver cuántas desviaciones estándar hay en esa diferencia. Entonces eso es exactamente lo que hacemos en la fórmula. Para cada x restamos la media y luego dividimos la diferencia por las desviaciones estándar. En estadística, la sigma minúscula (σ) representa la desviación estándar y la mu minúscula (µ) representa la media. En la fórmula a continuación, x barra (x̄) representa la observación (la x en f(x) anteriormente mencionada.)

En el lenguaje de programación
Al final del último artículo, llevamos esto a un lenguaje de programación — Julia. La elección del lenguaje depende completamente del Científico de Datos, pero también hay compensaciones que considerar y también es importante considerar lo que la industria está haciendo. Por ejemplo, R es un lenguaje relativamente lento pero tiene paquetes de análisis que han sido refinados y mantenidos durante años por excelentes desarrolladores y también excelentes herramientas de panel de control. La elección más popular hoy en día es probablemente Python por su rápida conexión con bibliotecas en C y facilidad de uso. Julia es un lenguaje un poco nuevo, pero es mi lenguaje de programación favorito y creo que la mayoría de los Científicos de Datos deberían conocerlo. Si bien Julia ha estado aumentando en popularidad, siempre hay acceso a más empleos si conoces ambos, también. Afortunadamente, la mayoría de los lenguajes populares comúnmente utilizados para la Ciencia de Datos tienden a tener mucho en común y terminan siendo bastante fáciles de referenciar entre sí. Aquí está nuestra distribución normal escrita en Python y en REPLs de Julia, respectivamente.
- Storybird permite a cualquier persona crear historias visuales en s...
- Transformadores Codificador | El meollo de los problemas de PLN
- Conoce a Pixis AI Una startup emergente que ofrece soluciones de in...
python
>>> from numpy import mean, std>>> x = [5, 10, 15]>>> normed = [(mean(x) - i) / std(x) for i in x]>>> print(normed)[1.224744871391589, 0.0, -1.224744871391589]
julia
julia> using Statistics: std, meanjulia> x = [5, 10, 15]Vector de 3 elementos{Int64}: 5 10 15julia> normed = [(mean(x) - i) / std(x) for i in x]Vector de 3 elementos{Float64}: 1.0 0.0 -1.0
Aquí también están los cuadernos para cada lenguaje de programación. Haré cuadernos en los tres lenguajes para que este tutorial sea accesible para todos y también promover la idea de interactuar con varios lenguajes. Estos lenguajes son bastante similares y bastante fáciles de leer, por lo que es bastante fácil comparar y contrastar las diferencias, ver qué lenguajes te gustan y explorar más a fondo las compensaciones de cada lenguaje.
cuadernos
python
Emmetts-DS-NoteBooks/Python3/Aplicando la distribución normal (py).ipynb en master ·…
Cuadernos aleatorios para varios proyectos. Contribuye al desarrollo de los cuadernos de Emmetts-DS-NoteBooks creando una cuenta…
github.com
julia
Emmetts-DS-NoteBooks/Julia/Aplicando la distribución normal.ipynb en master ·…
Cuadernos aleatorios para varios proyectos. Contribuye al desarrollo de los cuadernos de Emmetts-DS-NoteBooks creando una cuenta…
github.com
Configurando nuestras funciones
Lo primero que vamos a necesitar es una función que nos dé la normal de un Vector
de números. Esto es tan simple como obtener la media y la desviación estándar antes de insertar la media y nuestra xbars en nuestra fórmula. Esta función tomará un argumento, nuestro Vector
, y luego devolverá nuestro Vector
normalizado. Para esto, por supuesto también necesitamos la media y la desviación estándar – podríamos usar dependencias para esto. En Python, usaríamos las funciones mean
y std
de Numpy. En Julia, usaríamos Statistics.mean
y Statistics.std
. En cambio, hoy haremos todo desde cero, así que aquí están mis funciones simples de media y desviación estándar dentro de Python y Julia:
# pythonimport math as mtdef mean(x : int): return(sum(x) / len(x))def std(arr : list): m = mean(arr) arr2 = [(i-m) ** 2 for i in arr] m = mean(arr2) m = mt.sqrt(m) return(m)
# juliamean(x::Vector{<:Number}) = sum(x) / length(x)function std(array3::Vector{<:Number}) m = mean(array3) [i = (i-m) ^ 2 for i in array3] m = mean(array3) try m = sqrt(m) catch m = sqrt(Complex(m)) end return(m)end
Ahora que tenemos algunas funciones para obtener los valores que necesitamos para nuestra función, necesitamos envolver todo esto en una función. Esto es bastante simple, simplemente obtendré nuestra media de población y desviación estándar usando nuestros métodos anteriores y luego usando una comprensión para restar la media de cada observación y luego dividir la diferencia por las desviaciones estándar.
# pythondef norm(x : list): mu = mean(x) sigma = std(x) return([(xbar - mu) / sigma for xbar in x])
# juliafunction norm(x::Vector{<:Number}) mu::Number = mean(x) sigma::Number = std(x) [(xbar - mu) / sigma for xbar in x]::Vector{<:Number}end
Ahora probemos nuestra función de normalización. Esta es una prueba fácil de realizar, simplemente proporcionamos un vector del cual conocemos la media. Esto se debe a que la media de nuestro vector debería ser cero. Entonces, en el caso de [5, 10, 15]
, 0 sería 10, que es la media de [5, 10, 15]
. 5 sería aproximadamente -1.5, una desviación estándar de la media (nuestras desviaciones estándar son iguales a numérico 2.5 en estas circunstancias).
norm([5, 10, 15])[-1.224744871391589, 0.0, 1.224744871391589]
Los valores estadísticamente significativos en una distribución normal generalmente comienzan a notarse cuando están cerca de 2 desviaciones estándar de la media. En otras palabras, si la mayoría de las personas midieran aproximadamente 10 pulgadas y alguien midiera 20 pulgadas, esto sería 3 desviaciones estándar de la media y bastante estadísticamente significativo.
mu = mean([5, 10, 15])sigma = std([5, 10, 15])(15 - mu) / sigma1.5811388300841895(20 - mu) / sigma3.162277660168379
Normal para análisis
La distribución Z, o distribución normal, también tiene muchas aplicaciones en el análisis de datos. Esta distribución se puede utilizar para pruebas, pero no se utiliza tan comúnmente como algo como una prueba T. La razón de esto es que la distribución normal tiene colas bastante cortas. Como resultado, a menudo se reserva para pruebas que se realizan en muestras grandes donde las varianzas son conocidas. Al comparar la distribución normal con algo como la distribución T, por ejemplo, vemos que las colas de la distribución T son mucho más largas. Esto significa que hay una mayor área de significancia estadística, por lo que es más fácil de detectar.

Este tipo de prueba, una prueba Z, verificará si las medias de la población son lo suficientemente diferentes como para ser estadísticamente significativas. La fórmula también es muy similar a las fórmulas que hemos visto previamente desde la PDF, por lo que no hay mucho de nuevo aquí. En lugar de usar cada observación, simplemente cambiamos xbar para representar la media de nuestra población que queremos probar. Esta prueba devolverá algo llamado estadístico Z. Al igual que un estadístico T, esto se pasa a través de otra función para darnos un valor de probabilidad. Creemos un conjunto rápido de observaciones unidimensionales y veamos cómo realizaríamos tal prueba.
pop = [5, 10, 15, 20, 25, 30]mu = mean(pop)sigma = std(pop)
Tomaremos una muestra aleatoria del medio y calcularemos un estadístico Z:
xbar = mean(pop[3:5])
Ahora simplemente introducimos esto en nuestra fórmula…
(xbar - mu) / sigma0.5976143046671968
Este nuevo número es nuestro estadístico Z. La matemática para convertir estos valores estadísticos en valores de probabilidad es bastante complicada. Hay bibliotecas en ambos lenguajes que ayudarán con estas cosas. Para Julia, recomiendo HypothesisTests
y para Python recomiendo el módulo scipy
. Para este artículo, vamos a utilizar una calculadora de valor de probabilidad de estadístico Z en línea disponible aquí. Introduzcamos nuestro estadístico Z en ella:

Como podríamos haber esperado, parte de nuestra población que reside muy cerca del resto de las muestras y la media no es estadísticamente significativa en absoluto. Dicho esto, por supuesto podemos experimentar con algo mucho más estadísticamente significativo y rechazar nuestra hipótesis nula.
xbar = media([50, 25, 38])(xbar - mu) / sigma4.820755390982054

La distribución normal funciona muy bien para las pruebas. La clave está en entender que esta forma de prueba necesita un tamaño de muestra grande y no se aplica a todos los datos. En la mayoría de los casos, para principiantes, recomendaría comenzar con una distribución que sea más fácil de probar, como la distribución T. Los datos van a tener mucho más peso en las pruebas Z, y puede ser difícil encontrar grandes fuentes de datos para principiantes, además de que puede ser más difícil obtener un resultado estadísticamente significativo, incluso cuando las cosas son estadísticamente significativas.
La distribución normal también se puede utilizar de alguna manera para análisis rápidos durante proyectos de Ciencia de Datos. Ser capaz de convertir los datos en su relación con la población puede ser increíblemente útil para todo, desde la visualización de datos hasta determinar qué tan variada es una población determinada. Podemos aprender mucho sobre una población investigando la relación de nuestras observaciones con la media. Si desea obtener más información sobre este proceso, tengo una descripción general para principiantes que puede ser útil en dicho contexto y que puede leer aquí:
Una introducción amigable para principiantes a la ciencia aplicada
Aprenda los conceptos básicos de las características y el análisis estadístico
towardsdatascience.com
Normal para la normalización de datos
Otra gran aplicación para la distribución normal es utilizarla para normalizar datos. Hay algunas cosas diferentes que pueden afectar negativamente una característica continua, una de las más significativas de ellas pueden ser los valores atípicos. Necesitamos eliminar los valores atípicos de nuestros datos para que nuestros datos sean una generalización. Recuerde, la clave para construir buenos datos es construir una gran población. Lo que quiero decir con eso es que queremos que la totalidad de los datos, como la media, sean representativos de cómo serían normalmente los datos con cierto nivel de variación. De esta manera, cuando algo sea diferente, será muy obvio.
Dado que la distribución normal nos dice cuántas desviaciones hay de un valor a la media, podría ser fácil ver cómo podríamos usar esto para la normalización de datos. Como se mencionó anteriormente, 2.0 es aproximadamente donde las cosas comienzan a ser significativas. Dicho esto, podemos crear una máscara y usar esto para filtrar los valores incorrectos.
# juliafunction eliminar_valores_extremos(vec::Vector{<:Number}) normalizado = norm(vec) mascara = [~(x <= -2 || x >= 2) for x in normalizado] normalizado[mascara]end
Con este simple filtrado de máscara, hemos añadido la capacidad de discernir si los valores se encuentran muy lejos de la media y eliminarlos en base a eso. En la mayoría de los casos, es posible que también deseemos reemplazar estos valores atípicos por la media para no perder la observación de otras características o nuestro objetivo.
# pythondef eliminar_valores_extremos(vec : list): mu = media(vec) normalizado = norm(vec) mascara = [x <= -2 or x >= 2 for x in normalizado] ret = [] for e in range(1, len(mascara)): if mascara[e] == False: ret.append(vec[e]) else: ret.append(mu) return(ret)
Normal para escalar
La última aplicación de la distribución normal que es común en Ciencia de Datos es el escalador estándar. El escalador estándar es simplemente la distribución normal aplicada a sus datos. Este escalador puede ser increíblemente útil porque ayuda a traducir sus datos en datos que están más relacionados con la característica de la que forman parte. Esto es muy útil para el aprendizaje automático y facilita aumentar la precisión de un modelo dado que se tiene una característica continua. Usar el escalador estándar es muy sencillo; simplemente use nuestra función de densidad de probabilidad como antes y obtenga la característica normalizada.
miX = [1, 2, 3, 4, 5]
normedx = norm(x)
Esto se utiliza para los datos proporcionados a un aprendizaje automático. La distribución normal se utiliza a menudo para procesar características continuas en muchos modelos de aprendizaje automático que se implementan a diario.
En conclusión
En conclusión, la distribución normal es un pilar básico de la estadística y la ciencia de datos que tiene un uso expansivo en una multitud de aplicaciones diferentes en la ciencia de datos. Hay muchos temas diferentes en este campo que tienden a desplegarse de esta manera; comenzando relativamente simple y eventualmente evolucionando para volverse bastante complicados. Sin duda, puede ser excelente sumergirse en un tema, y la distribución normal no es una excepción, ya que es fascinante ver cuánto puede hacer esta distribución esencial y simple. ¡Gracias a todos por leer, y espero que esta visión general haya sido informativa!